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

Last change on this file since 234 was 204, checked in by alloc, 10 years ago

Scripts 63

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