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

Last change on this file since 23 was 23, checked in by alloc, 12 years ago

Version 6: Instance editing more userfriendly

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