source: scripts/usr/local/lib/7dtd/serverconfig.sh@ 260

Last change on this file since 260 was 258, checked in by alloc, 9 years ago

Scripts: License

File size: 20.4 KB
Line 
1#!/bin/bash
2
3# Copyright 2016 Christian 'Alloc' Illy
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17
18# Provides functions to query and validate values for serverconfig.xml
19
20#################################
21## Definition of options
22
23serverconfig_ServerPort_QueryName() {
24 echo "Base Port"
25}
26serverconfig_ServerPort_Type() {
27 echo "number"
28}
29serverconfig_ServerPort_Default() {
30 echo "25000"
31}
32serverconfig_ServerPort_Range() {
33 echo "1024-65533"
34}
35serverconfig_ServerPort_Validate() {
36 local I=${INSTANCE:-!}
37 if [ $(checkGamePortUsed "$1" "$I") -eq 0 ]; then
38 echo "1"
39 else
40 echo "0"
41 fi
42}
43serverconfig_ServerPort_ErrorMessage() {
44 echo "Illegal port number or port already in use by another instance."
45}
46
47
48
49serverconfig_ServerIsPublic_QueryName() {
50 echo "Public server"
51}
52serverconfig_ServerIsPublic_Type() {
53 echo "boolean"
54}
55serverconfig_ServerIsPublic_Default() {
56 echo "true"
57}
58serverconfig_ServerIsPublic_ErrorMessage() {
59 echo "Not a valid boolean given (true/false or yes/no or y/n)."
60}
61
62
63
64serverconfig_ServerName_QueryName() {
65 echo "Server name"
66}
67serverconfig_ServerName_Type() {
68 echo "string"
69}
70serverconfig_ServerName_Validate() {
71 if [ ! -z "$1" ]; then
72 echo "1"
73 else
74 echo "0"
75 fi
76}
77serverconfig_ServerName_ErrorMessage() {
78 echo "Server name cannot be empty."
79}
80
81
82
83serverconfig_ServerDescription_QueryName() {
84 echo "Server description"
85}
86serverconfig_ServerDescription_Type() {
87 echo "string"
88}
89
90
91
92serverconfig_ServerWebsiteURL_QueryName() {
93 echo "Server website URL"
94}
95serverconfig_ServerWebsiteURL_Type() {
96 echo "string"
97}
98
99
100
101serverconfig_ServerPassword_QueryName() {
102 echo "Server password"
103}
104serverconfig_ServerPassword_Type() {
105 echo "string"
106}
107
108
109
110serverconfig_ServerMaxPlayerCount_QueryName() {
111 echo "Max players"
112}
113serverconfig_ServerMaxPlayerCount_Type() {
114 echo "number"
115}
116serverconfig_ServerMaxPlayerCount_Default() {
117 echo "4"
118}
119serverconfig_ServerMaxPlayerCount_Range() {
120 echo "1-64"
121}
122
123
124
125serverconfig_GameWorld_QueryName() {
126 echo "World name"
127}
128serverconfig_GameWorld_Type() {
129 echo "enum"
130}
131serverconfig_GameWorld_Default() {
132 echo "1"
133}
134serverconfig_GameWorld_Values() {
135 config_allowed_values=("Random Gen" "Navezgane" "MP Wasteland Horde" "MP Wasteland Skirmish" "MP Wasteland War")
136}
137
138
139
140serverconfig_GameName_QueryName() {
141 echo "Random gen seed"
142}
143serverconfig_GameName_Type() {
144 echo "string"
145}
146serverconfig_GameName_Validate() {
147 if [ ! -z "$1" ]; then
148 echo "1"
149 else
150 echo "0"
151 fi
152}
153serverconfig_GameName_ErrorMessage() {
154 echo "Seed cannot be empty."
155}
156
157
158
159serverconfig_GameDifficulty_QueryName() {
160 echo "Difficulty (+ damage given / received)"
161}
162serverconfig_GameDifficulty_Type() {
163 echo "number"
164}
165serverconfig_GameDifficulty_Default() {
166 echo "2"
167}
168serverconfig_GameDifficulty_Range() {
169 echo "0-5"
170}
171serverconfig_GameDifficulty_Values() {
172 config_allowed_values=("Scavenger (200% / 50%)" "Adventurer (150% / 75%)" "Nomad (100% / 100%)" "Warrior (75% / 150%)" "Survivalist (50% / 200%)" "Insane (25% / 250%)")
173}
174
175
176
177serverconfig_GameMode_QueryName() {
178 echo "Game mode"
179}
180serverconfig_GameMode_Type() {
181 echo "enum"
182}
183serverconfig_GameMode_Default() {
184 echo "1"
185}
186serverconfig_GameMode_Values() {
187 config_allowed_values=("GameModeSurvivalMP" "GameModeSurvivalSP")
188}
189
190
191
192serverconfig_ZombiesRun_QueryName() {
193 echo "Zombies run"
194}
195serverconfig_ZombiesRun_Type() {
196 echo "number"
197}
198serverconfig_ZombiesRun_Default() {
199 echo "0"
200}
201serverconfig_ZombiesRun_Range() {
202 echo "0-2"
203}
204serverconfig_ZombiesRun_Values() {
205 config_allowed_values=("Default day/night walk/run" "Never run" "Always run")
206}
207
208
209
210serverconfig_BuildCreate_QueryName() {
211 echo "Item spawn menu"
212}
213serverconfig_BuildCreate_Type() {
214 echo "boolean"
215}
216serverconfig_BuildCreate_Default() {
217 echo "false"
218}
219serverconfig_BuildCreate_ErrorMessage() {
220 echo "Not a valid boolean given (true/false or yes/no or y/n)."
221}
222
223
224
225serverconfig_DayNightLength_QueryName() {
226 echo "Length of one day"
227}
228serverconfig_DayNightLength_Type() {
229 echo "number"
230}
231serverconfig_DayNightLength_Default() {
232 echo "40"
233}
234
235
236
237serverconfig_FriendlyFire_QueryName() {
238 echo "Friendly fire"
239}
240serverconfig_FriendlyFire_Type() {
241 echo "boolean"
242}
243serverconfig_FriendlyFire_Default() {
244 echo "false"
245}
246serverconfig_FriendlyFire_ErrorMessage() {
247 echo "Not a valid boolean given (true/false or yes/no or y/n)."
248}
249
250
251
252serverconfig_ControlPanelEnabled_QueryName() {
253 echo "Enable control panel"
254}
255serverconfig_ControlPanelEnabled_Type() {
256 echo "boolean"
257}
258serverconfig_ControlPanelEnabled_Default() {
259 echo "false"
260}
261serverconfig_ControlPanelEnabled_ErrorMessage() {
262 echo "Not a valid boolean given (true/false or yes/no or y/n)."
263}
264
265
266
267serverconfig_ControlPanelPort_QueryName() {
268 echo "Control panel port"
269}
270serverconfig_ControlPanelPort_Type() {
271 echo "number"
272}
273serverconfig_ControlPanelPort_Default() {
274 echo "8080"
275}
276serverconfig_ControlPanelPort_Range() {
277 echo "1024-65535"
278}
279serverconfig_ControlPanelPort_Validate() {
280 local I=${INSTANCE:-!}
281 if [ $(checkTCPPortUsed "$1" "$I") -eq 0 ]; then
282 echo "1"
283 else
284 echo "0"
285 fi
286}
287serverconfig_ControlPanelPort_ErrorMessage() {
288 echo "Illegal port number or port already in use by another instance."
289}
290
291
292
293serverconfig_ControlPanelPassword_QueryName() {
294 echo "Control panel password"
295}
296serverconfig_ControlPanelPassword_Type() {
297 echo "string"
298}
299
300
301
302serverconfig_TelnetPort_QueryName() {
303 echo "Telnet port"
304}
305serverconfig_TelnetPort_Type() {
306 echo "number"
307}
308serverconfig_TelnetPort_Default() {
309 echo "8081"
310}
311serverconfig_TelnetPort_Range() {
312 echo "1024-65535"
313}
314serverconfig_TelnetPort_Validate() {
315 local I=${INSTANCE:-!}
316 if [ $(checkTCPPortUsed "$1" "$I") -eq 0 ]; then
317 echo "1"
318 else
319 echo "0"
320 fi
321}
322serverconfig_TelnetPort_ErrorMessage() {
323 echo "Illegal port number or port already in use by another instance."
324}
325
326
327
328serverconfig_TelnetPassword_QueryName() {
329 echo "Telnet password"
330}
331serverconfig_TelnetPassword_Type() {
332 echo "string"
333}
334
335
336
337serverconfig_DropOnDeath_QueryName() {
338 echo "Drop on Death"
339}
340serverconfig_DropOnDeath_Type() {
341 echo "number"
342}
343serverconfig_DropOnDeath_Default() {
344 echo "0"
345}
346serverconfig_DropOnDeath_Range() {
347 echo "0-3"
348}
349serverconfig_DropOnDeath_Values() {
350 config_allowed_values=("Everything" "Toolbelt only" "Backpack only" "Delete all")
351}
352
353
354serverconfig_DropOnQuit_QueryName() {
355 echo "Drop on Quit"
356}
357serverconfig_DropOnQuit_Type() {
358 echo "number"
359}
360serverconfig_DropOnQuit_Default() {
361 echo "1"
362}
363serverconfig_DropOnQuit_Range() {
364 echo "0-3"
365}
366serverconfig_DropOnQuit_Values() {
367 config_allowed_values=("Nothing" "Everything" "Toolbelt only" "Backpack only")
368}
369
370
371
372
373serverconfig_CraftTimer_QueryName() {
374 echo "Craft speed"
375}
376serverconfig_CraftTimer_Type() {
377 echo "number"
378}
379serverconfig_CraftTimer_Default() {
380 echo "1"
381}
382serverconfig_CraftTimer_Range() {
383 echo "0-2"
384}
385serverconfig_CraftTimer_Values() {
386 config_allowed_values=("Instant" "Normal" "Double")
387}
388
389
390serverconfig_LootTimer_QueryName() {
391 echo "Loot open speed"
392}
393serverconfig_LootTimer_Type() {
394 echo "number"
395}
396serverconfig_LootTimer_Default() {
397 echo "1"
398}
399serverconfig_LootTimer_Range() {
400 echo "0-2"
401}
402serverconfig_LootTimer_Values() {
403 config_allowed_values=("Instant" "Normal" "Double")
404}
405
406
407
408
409serverconfig_EnemySenseMemory_QueryName() {
410 echo "Sense memory (seconds)"
411}
412serverconfig_EnemySenseMemory_Type() {
413 echo "number"
414}
415serverconfig_EnemySenseMemory_Default() {
416 echo "60"
417}
418
419
420serverconfig_EnemySpawnMode_QueryName() {
421 echo "Spawn mode"
422}
423serverconfig_EnemySpawnMode_Type() {
424 echo "number"
425}
426serverconfig_EnemySpawnMode_Default() {
427 echo "3"
428}
429serverconfig_EnemySpawnMode_Range() {
430 echo "0-5"
431}
432serverconfig_EnemySpawnMode_Values() {
433 config_allowed_values=("Disabled" "50%" "75%" "100%" "125%" "150%")
434}
435
436
437serverconfig_EnemyDifficulty_QueryName() {
438 echo "Enemy difficulty"
439}
440serverconfig_EnemyDifficulty_Type() {
441 echo "number"
442}
443serverconfig_EnemyDifficulty_Default() {
444 echo "0"
445}
446serverconfig_EnemyDifficulty_Range() {
447 echo "0-1"
448}
449serverconfig_EnemyDifficulty_Values() {
450 config_allowed_values=("Normal" "Feral")
451}
452
453
454
455
456serverconfig_DayLightLength_QueryName() {
457 echo "Day length"
458}
459serverconfig_DayLightLength_Type() {
460 echo "number"
461}
462serverconfig_DayLightLength_Default() {
463 echo "18"
464}
465serverconfig_DayLightLength_Range() {
466 echo "0-24"
467}
468
469
470
471serverconfig_BlockDurabilityModifier_QueryName() {
472 echo "Block durability (%)"
473}
474serverconfig_BlockDurabilityModifier_Type() {
475 echo "number"
476}
477serverconfig_BlockDurabilityModifier_Default() {
478 echo "100"
479}
480
481
482
483
484serverconfig_LootAbundance_QueryName() {
485 echo "Loot abundance (%)"
486}
487serverconfig_LootAbundance_Type() {
488 echo "number"
489}
490serverconfig_LootAbundance_Default() {
491 echo "100"
492}
493
494
495serverconfig_LootRespawnDays_QueryName() {
496 echo "Loot respawn delay (days)"
497}
498serverconfig_LootRespawnDays_Type() {
499 echo "number"
500}
501serverconfig_LootRespawnDays_Default() {
502 echo "7"
503}
504
505
506
507
508serverconfig_LandClaimSize_QueryName() {
509 echo "Land claim size"
510}
511serverconfig_LandClaimSize_Type() {
512 echo "number"
513}
514serverconfig_LandClaimSize_Default() {
515 echo "7"
516}
517
518
519serverconfig_LandClaimDeadZone_QueryName() {
520 echo "Minimum keystone distance"
521}
522serverconfig_LandClaimDeadZone_Type() {
523 echo "number"
524}
525serverconfig_LandClaimDeadZone_Default() {
526 echo "30"
527}
528
529
530serverconfig_LandClaimExpiryTime_QueryName() {
531 echo "Claim expiry time (days)"
532}
533serverconfig_LandClaimExpiryTime_Type() {
534 echo "number"
535}
536serverconfig_LandClaimExpiryTime_Default() {
537 echo "3"
538}
539
540
541serverconfig_LandClaimDecayMode_QueryName() {
542 echo "Claim decay mode"
543}
544serverconfig_LandClaimDecayMode_Type() {
545 echo "number"
546}
547serverconfig_LandClaimDecayMode_Default() {
548 echo "0"
549}
550serverconfig_LandClaimDecayMode_Range() {
551 echo "0-2"
552}
553serverconfig_LandClaimDecayMode_Values() {
554 config_allowed_values=("Linear" "Exponential" "Full protection")
555}
556
557
558serverconfig_LandClaimOnlineDurabilityModifier_QueryName() {
559 echo "Claim durability modifier - online"
560}
561serverconfig_LandClaimOnlineDurabilityModifier_Type() {
562 echo "number"
563}
564serverconfig_LandClaimOnlineDurabilityModifier_Default() {
565 echo "4"
566}
567
568
569serverconfig_LandClaimOfflineDurabilityModifier_QueryName() {
570 echo "Claim durability modifier - offline"
571}
572serverconfig_LandClaimOfflineDurabilityModifier_Type() {
573 echo "number"
574}
575serverconfig_LandClaimOfflineDurabilityModifier_Default() {
576 echo "4"
577}
578
579
580
581
582serverconfig_AirDropFrequency_QueryName() {
583 echo "Airdrop delay (hours)"
584}
585serverconfig_AirDropFrequency_Type() {
586 echo "number"
587}
588serverconfig_AirDropFrequency_Default() {
589 echo "72"
590}
591
592
593serverconfig_MaxSpawnedZombies_QueryName() {
594 echo "Maximum number of concurrent zombies"
595}
596serverconfig_MaxSpawnedZombies_Type() {
597 echo "number"
598}
599serverconfig_MaxSpawnedZombies_Default() {
600 echo "60"
601}
602
603
604serverconfig_EACEnabled_QueryName() {
605 echo "Enable EasyAntiCheat"
606}
607serverconfig_EACEnabled_Type() {
608 echo "boolean"
609}
610serverconfig_EACEnabled_Default() {
611 echo "true"
612}
613serverconfig_EACEnabled_ErrorMessage() {
614 echo "Not a valid boolean given (true/false or yes/no or y/n)."
615}
616
617
618
619
620#################################
621## Edit option functions
622
623configEditServer() {
624 local CV
625
626 echo "Server"
627 echo "--------------------------------"
628 for CV in \
629 ServerName ServerPassword ServerIsPublic ServerPort ServerMaxPlayerCount ServerDescription ServerWebsiteURL \
630 EACEnabled MaxSpawnedZombies \
631 ; do
632 $1 $CV
633 done
634 echo
635}
636
637configEditRemoteControl() {
638 local CV
639
640 echo "Remote control"
641 echo "--------------------------------"
642 for CV in \
643 ControlPanelEnabled ControlPanelPort ControlPanelPassword \
644 TelnetPort TelnetPassword \
645 ; do
646 if [ "$CV" = "TelnetPort" ]; then
647 echo
648 echo "NOTE: Telnet will always be enabled for management purposes!"
649 echo "Make sure you block external access to this port or set no password"
650 echo "so the server will only listen on the loopback interface!"
651 echo
652 fi
653 $1 $CV
654 done
655 echo
656}
657
658configEditGameType() {
659 local CV
660
661 echo "Game type"
662 echo "--------------------------------"
663 for CV in \
664 GameName GameWorld GameMode \
665 ; do
666 $1 $CV
667 done
668 echo
669}
670
671configEditGeneric() {
672 local CV
673
674 echo "Generic options"
675 echo "--------------------------------"
676 for CV in \
677 FriendlyFire BuildCreate \
678 BlockDurabilityModifier \
679 ; do
680 $1 $CV
681 done
682 echo
683}
684
685configEditDropLoot() {
686 local CV
687
688 echo "Drop and Loot"
689 echo "--------------------------------"
690 for CV in \
691 DropOnDeath DropOnQuit \
692 LootAbundance LootRespawnDays AirDropFrequency \
693 ; do
694 $1 $CV
695 done
696 echo
697}
698
699configEditTimes() {
700 local CV
701
702 echo "Times / Durations"
703 echo "--------------------------------"
704 for CV in \
705 CraftTimer LootTimer \
706 DayNightLength DayLightLength \
707 ; do
708 $1 $CV
709 done
710 echo
711}
712
713configEditDifficulty() {
714 local CV
715
716 echo "Difficulty"
717 echo "--------------------------------"
718 for CV in \
719 GameDifficulty ZombiesRun \
720 EnemySenseMemory EnemySpawnMode EnemyDifficulty \
721 ; do
722 $1 $CV
723 done
724 echo
725}
726
727configEditLandClaim() {
728 local CV
729
730 echo "Land claim options"
731 echo "--------------------------------"
732 for CV in \
733 LandClaimSize LandClaimDeadZone LandClaimExpiryTime LandClaimDecayMode \
734 LandClaimOnlineDurabilityModifier LandClaimOfflineDurabilityModifier \
735 ; do
736 $1 $CV
737 done
738 echo
739}
740
741configEditAll() {
742 configEditServer "$1"
743 configEditRemoteControl "$1"
744 configEditGameType "$1"
745 configEditGeneric "$1"
746 configEditDropLoot "$1"
747 configEditTimes "$1"
748 configEditDifficulty "$1"
749 configEditLandClaim "$1"
750}
751
752
753
754
755
756#################################
757## Generic worker functions
758
759
760# List all defined config editing parts
761# Returns:
762# List of config funcs
763listConfigEditFuncs() {
764 local CV
765 for CV in $(declare -F | cut -d\ -f3 | grep "^configEdit.*$"); do
766 CV=${CV#configEdit}
767 printf "%s " "$CV"
768 done
769}
770
771
772# List all defined config options
773# Returns:
774# List of defined config options
775listConfigValues() {
776 local CV
777 for CV in $(declare -F | cut -d\ -f3 | grep "^serverconfig_.*_Type$"); do
778 CV=${CV#serverconfig_}
779 CV=${CV%_Type}
780 printf "%s " "$CV"
781 done
782}
783
784
785# Validate the given value for the given option
786# Params:
787# 1: Option name
788# 2: Value
789# Returns:
790# 0/1: invalid/valid
791isValidOptionValue() {
792 local TYPE=$(serverconfig_$1_Type)
793 local RANGE=""
794
795 if [ "$TYPE" = "enum" ]; then
796 TYPE="number"
797 serverconfig_$1_Values
798 RANGE=1-${#config_allowed_values[@]}
799 else
800 if [ "$(type -t serverconfig_$1_Range)" = "function" ]; then
801 RANGE=$(serverconfig_$1_Range)
802 fi
803 fi
804
805 case "$TYPE" in
806 number)
807 if [ $(isANumber "$2") -eq 0 ]; then
808 echo "0"
809 return
810 fi
811 if [ ! -z "$RANGE" ]; then
812 local MIN=$(cut -d- -f1 <<< "$RANGE")
813 local MAX=$(cut -d- -f2 <<< "$RANGE")
814 if [ $2 -lt $MIN -o $2 -gt $MAX ]; then
815 echo "0"
816 return
817 fi
818 fi
819 ;;
820 boolean)
821 if [ $(isABool "$2") -eq 0 ]; then
822 echo "0"
823 return
824 fi
825 ;;
826 string)
827 ;;
828 esac
829
830
831 if [ "$(type -t serverconfig_$1_Validate)" = "function" ]; then
832 if [ $(serverconfig_$1_Validate "$2") -eq 0 ]; then
833 echo "0"
834 return
835 fi
836 fi
837
838 echo "1"
839}
840
841# Query for the value of a single config option
842# Will be stored in $configCurrent_$1
843# Params:
844# 1: Option name
845configQueryValue() {
846 local TYPE=$(serverconfig_$1_Type)
847 local NAME=""
848 local RANGE=""
849 local DEFAULT=""
850 local currentValName=configCurrent_$1
851
852 if [ "$(type -t serverconfig_$1_Values)" = "function" ]; then
853 echo "$(serverconfig_$1_QueryName), options:"
854 serverconfig_$1_Values
855 NAME="Select option"
856 if [ "$TYPE" = "enum" ]; then
857 local OPTOFFSET=1
858 else
859 local OPTOFFSET=0
860 fi
861 for (( i=$OPTOFFSET; i < ${#config_allowed_values[@]}+$OPTOFFSET; i++ )); do
862 printf " %2d: %s\n" $i "${config_allowed_values[$i-$OPTOFFSET]}"
863 done
864 else
865 NAME=$(serverconfig_$1_QueryName)
866 fi
867
868 if [ "$TYPE" = "enum" ]; then
869 RANGE=1-${#config_allowed_values[@]}
870 if [ ! -z "${!currentValName}" ]; then
871 for (( i=1; i < ${#config_allowed_values[@]}+1; i++ )); do
872 if [ "${!currentValName}" = "${config_allowed_values[$i-1]}" ]; then
873 DEFAULT=$i
874 fi
875 done
876 export $currentValName=
877 fi
878 else
879 if [ "$(type -t serverconfig_$1_Range)" = "function" ]; then
880 RANGE=$(serverconfig_$1_Range)
881 fi
882 fi
883
884 if [ -z "$DEFAULT" ]; then
885 if [ ! -z "${!currentValName}" ]; then
886 DEFAULT=${!currentValName}
887 else
888 if [ "$(type -t serverconfig_$1_Default)" = "function" ]; then
889 DEFAULT=$(serverconfig_$1_Default)
890 fi
891 fi
892 fi
893
894 local prompt=$(printf "%s" "$NAME")
895 if [ ! -z "$RANGE" ]; then
896 prompt=$(printf "%s (%s)" "$prompt" "$RANGE")
897 fi
898 if [ ! -z "$DEFAULT" ]; then
899 prompt=$(printf "%s [%s]" "$prompt" "$DEFAULT")
900 fi
901 prompt=$(printf "%s:" "$prompt")
902 prompt=$(printf "%-*s " 40 "$prompt")
903
904 while : ; do
905 read -p "$prompt" $currentValName
906 export $currentValName="${!currentValName:-$DEFAULT}"
907 if [ $(isValidOptionValue "$1" "${!currentValName}") -eq 0 ]; then
908 if [ "$(type -t serverconfig_$1_ErrorMessage)" = "function" ]; then
909 serverconfig_$1_ErrorMessage "${!currentValName}"
910 fi
911 fi
912 [ $(isValidOptionValue "$1" "${!currentValName}") -eq 1 ] && break
913 done
914
915 if [ "$TYPE" = "boolean" ]; then
916 if [ $(getBool ${!currentValName}) -eq 1 ]; then
917 export $currentValName="true"
918 else
919 export $currentValName="false"
920 fi
921 fi
922 if [ "$TYPE" = "enum" ]; then
923 export $currentValName="${config_allowed_values[$currentValName-1]}"
924 fi
925 echo
926}
927
928# Set parameters for current instance that have forced values:
929# - TelnetEnabled must be set so that management scripts can work
930# - AdminFileName is made to point to the local instance admins.xml
931# - SaveGameFolder is made to point to the instance folder
932# Params:
933# 1: Instance name
934configSetAutoParameters() {
935 configCurrent_TelnetEnabled=true
936 configCurrent_AdminFileName=admins.xml
937 configCurrent_SaveGameFolder="$(getInstancePath "$1")"
938}
939
940
941# Print defined config value
942# Params:
943# 1: Config option
944printConfigValue() {
945 local currentValName=configCurrent_$1
946 printf "%-25s = %s\n" "$(serverconfig_$1_QueryName)" "${!currentValName}"
947}
948
949# Query for an instance name (will be saved in $INSTANCE)
950readInstanceName() {
951 until [ $(isValidInstanceName "$INSTANCE") -eq 1 ]; do
952 read -p "Instance name: " INSTANCE
953 if [ $(isValidInstanceName "$INSTANCE") -eq 0 ]; then
954 echo "Invalid instance name, may only contain:"
955 echo " - letters (A-Z / a-z)"
956 echo " - digits (0-9)"
957 echo " - underscores (_)"
958 echo " - hyphens (-)"
959 fi
960 done
961}
962
963# Undefine the current config values
964unsetAllConfigValues() {
965 local CV
966 for CV in $(listConfigValues); do
967 local currentValName=configCurrent_$CV
968 export $currentValName=
969 done
970}
971
972# Load all config values from the config.xml of the given instance
973# Params:
974# 1: Instance name
975loadCurrentConfigValues() {
976 local CV
977 for CV in $(listConfigValues); do
978 local currentValName=configCurrent_$CV
979 local cfile=$(getInstancePath "$1")/config.xml
980 local XPATH="/ServerSettings/property[@name='$CV']/@value"
981 local VAL=$($XMLSTARLET sel -t -v "$XPATH" $cfile)
982 if [ ! -z "$VAL" ]; then
983 export $currentValName="$VAL"
984 fi
985 done
986}
987
988# Save all config values to the config.xml of the given instance
989# Params:
990# 1: Instance name
991saveCurrentConfigValues() {
992 local CV
993 for CV in $(listConfigValues) TelnetEnabled AdminFileName SaveGameFolder; do
994 local currentValName=configCurrent_$CV
995 local val="${!currentValName}"
996 local cfile=$(getInstancePath "$1")/config.xml
997
998 XPATHBASE="/ServerSettings/property[@name='$CV']"
999
1000 if [ -z $($XMLSTARLET sel -t -v "$XPATHBASE/@name" $cfile) ]; then
1001 $XMLSTARLET ed -L \
1002 -s "/ServerSettings" -t elem -n "property" -v "" \
1003 -i "/ServerSettings/property[not(@name)]" -t attr -n "name" -v "$CV" \
1004 -i "$XPATHBASE" -t attr -n "value" -v "$val" \
1005 $cfile
1006 else
1007 $XMLSTARLET ed -L \
1008 -u "$XPATHBASE/@value" -v "$val" \
1009 $cfile
1010 fi
1011 done
1012}
1013
1014# Check if the config template exists
1015# Returns:
1016# 0/1: no/yes
1017configTemplateExists() {
1018 if [ -f $SDTD_BASE/templates/config.xml ]; then
1019 echo 1
1020 else
1021 echo 0
1022 fi
1023}
1024
1025# Get a single value from a serverconfig
1026# Params:
1027# 1: Instance name
1028# 2: Property name
1029# Returns:
1030# Property value
1031getConfigValue() {
1032 local CONF=$(getInstancePath $1)/config.xml
1033 $XMLSTARLET sel -t -v "/ServerSettings/property[@name='$2']/@value" $CONF
1034}
1035
1036# Update a single value in a serverconfig
1037# Params:
1038# 1: Instance name
1039# 2: Property name
1040# 3: New value
1041setConfigValue() {
1042 local CONF=$(getInstancePath $1)/config.xml
1043 $XMLSTARLET ed -L -u "/ServerSettings/property[@name='$2']/@value" -v "$3" $CONF
1044}
1045
Note: See TracBrowser for help on using the repository browser.