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

Last change on this file since 352 was 344, checked in by alloc, 6 years ago

Linux scripts 111

File size: 26.5 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 "26900"
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
48serverconfig_ServerDisabledNetworkProtocols_QueryName() {
49 echo "Disabled network protocols"
50}
51serverconfig_ServerDisabledNetworkProtocols_Type() {
52 echo "enum"
53}
54serverconfig_ServerDisabledNetworkProtocols_Default() {
55 echo "1"
56}
57serverconfig_ServerDisabledNetworkProtocols_Values() {
58 config_allowed_values=("None" "SteamNetworking" "SteamNetworking,LiteNetLib" "LiteNetLib")
59}
60
61
62serverconfig_ServerVisibility_QueryName() {
63 echo "Public server"
64}
65serverconfig_ServerVisibility_Type() {
66 echo "number"
67}
68serverconfig_ServerVisibility_Default() {
69 echo "2"
70}
71serverconfig_ServerVisibility_Range() {
72 echo "0-2"
73}
74serverconfig_ServerVisibility_Values() {
75 config_allowed_values=("Not listed" "Friends only (only works while at least one player is connected manually. Dedi servers do not have friends!)" "Public")
76}
77
78
79serverconfig_ServerName_QueryName() {
80 echo "Server name"
81}
82serverconfig_ServerName_Type() {
83 echo "string"
84}
85serverconfig_ServerName_Validate() {
86 if [ ! -z "$1" ]; then
87 echo "1"
88 else
89 echo "0"
90 fi
91}
92serverconfig_ServerName_ErrorMessage() {
93 echo "Server name cannot be empty."
94}
95
96
97
98serverconfig_ServerDescription_QueryName() {
99 echo "Server description"
100}
101serverconfig_ServerDescription_Type() {
102 echo "string"
103}
104
105
106
107serverconfig_ServerWebsiteURL_QueryName() {
108 echo "Server website URL"
109}
110serverconfig_ServerWebsiteURL_Type() {
111 echo "string"
112}
113
114
115
116serverconfig_ServerPassword_QueryName() {
117 echo "Server password"
118}
119serverconfig_ServerPassword_Type() {
120 echo "string"
121}
122
123
124
125serverconfig_MaxUncoveredMapChunksPerPlayer_QueryName() {
126 echo "Max uncovered chunks per player"
127}
128serverconfig_MaxUncoveredMapChunksPerPlayer_Type() {
129 echo "number"
130}
131serverconfig_MaxUncoveredMapChunksPerPlayer_Default() {
132 echo "131072"
133}
134
135
136serverconfig_HideCommandExecutionLog_QueryName() {
137 echo "Hide command execution in log"
138}
139serverconfig_HideCommandExecutionLog_Type() {
140 echo "number"
141}
142serverconfig_HideCommandExecutionLog_Default() {
143 echo "0"
144}
145serverconfig_HideCommandExecutionLog_Range() {
146 echo "0-3"
147}
148serverconfig_HideCommandExecutionLog_Values() {
149 config_allowed_values=("Log all" "Log all but commands from Telnet/ControlPanel" "Also hide commands executed by clients" "Do not log any commands at all")
150}
151
152
153
154
155serverconfig_ServerMaxPlayerCount_QueryName() {
156 echo "Max players"
157}
158serverconfig_ServerMaxPlayerCount_Type() {
159 echo "number"
160}
161serverconfig_ServerMaxPlayerCount_Default() {
162 echo "4"
163}
164serverconfig_ServerMaxPlayerCount_Range() {
165 echo "1-64"
166}
167
168
169serverconfig_ServerReservedSlots_QueryName() {
170 echo "Reserved VIP slots"
171}
172serverconfig_ServerReservedSlots_Type() {
173 echo "number"
174}
175serverconfig_ServerReservedSlots_Default() {
176 echo "0"
177}
178serverconfig_ServerReservedSlots_Range() {
179 echo "0-64"
180}
181
182
183serverconfig_ServerReservedSlotsPermission_QueryName() {
184 echo "Permission level required for VIP slots"
185}
186serverconfig_ServerReservedSlotsPermission_Type() {
187 echo "number"
188}
189serverconfig_ServerReservedSlotsPermission_Default() {
190 echo "100"
191}
192serverconfig_ServerReservedSlotsPermission_Range() {
193 echo "0-2000"
194}
195
196
197serverconfig_ServerAdminSlots_QueryName() {
198 echo "Admin slots"
199}
200serverconfig_ServerAdminSlots_Type() {
201 echo "number"
202}
203serverconfig_ServerAdminSlots_Default() {
204 echo "0"
205}
206serverconfig_ServerAdminSlots_Range() {
207 echo "0-64"
208}
209
210
211serverconfig_ServerAdminSlotsPermission_QueryName() {
212 echo "Permission level required for admin slots"
213}
214serverconfig_ServerAdminSlotsPermission_Type() {
215 echo "number"
216}
217serverconfig_ServerAdminSlotsPermission_Default() {
218 echo "0"
219}
220serverconfig_ServerAdminSlotsPermission_Range() {
221 echo "0-2000"
222}
223
224
225
226
227serverconfig_GameWorld_QueryName() {
228 echo "World name"
229}
230serverconfig_GameWorld_Type() {
231 echo "enum"
232}
233serverconfig_GameWorld_Default() {
234 echo "1"
235}
236serverconfig_GameWorld_Values() {
237 config_allowed_values=("RWG" "Navezgane") # "MP Wasteland Horde" "MP Wasteland Skirmish" "MP Wasteland War"
238}
239
240
241
242serverconfig_WorldGenSeed_QueryName() {
243 echo "Random generation seed (if world RWG)"
244}
245serverconfig_WorldGenSeed_Type() {
246 echo "string"
247}
248serverconfig_WorldGenSeed_Validate() {
249 if [ ! -z "$1" ]; then
250 echo "1"
251 else
252 echo "0"
253 fi
254}
255serverconfig_WorldGenSeed_ErrorMessage() {
256 echo "Seed cannot be empty."
257}
258
259
260
261serverconfig_WorldGenSize_QueryName() {
262 echo "Random generation map size (if world RWG)"
263}
264serverconfig_WorldGenSize_Type() {
265 echo "number"
266}
267serverconfig_WorldGenSize_Default() {
268 echo "6144"
269}
270serverconfig_WorldGenSize_Range() {
271 echo "2048-16384"
272}
273
274
275
276serverconfig_GameName_QueryName() {
277 echo "World decoration seed"
278}
279serverconfig_GameName_Type() {
280 echo "string"
281}
282serverconfig_GameName_Validate() {
283 if [ ! -z "$1" ]; then
284 echo "1"
285 else
286 echo "0"
287 fi
288}
289serverconfig_GameName_ErrorMessage() {
290 echo "Seed cannot be empty."
291}
292
293
294
295serverconfig_GameDifficulty_QueryName() {
296 echo "Difficulty (+ damage given / received)"
297}
298serverconfig_GameDifficulty_Type() {
299 echo "number"
300}
301serverconfig_GameDifficulty_Default() {
302 echo "2"
303}
304serverconfig_GameDifficulty_Range() {
305 echo "0-5"
306}
307serverconfig_GameDifficulty_Values() {
308 config_allowed_values=("Scavenger (200% / 50%)" "Adventurer (150% / 75%)" "Nomad (100% / 100%)" "Warrior (75% / 150%)" "Survivalist (50% / 200%)" "Insane (25% / 250%)")
309}
310
311
312
313serverconfig_GameMode_QueryName() {
314 echo "Game mode"
315}
316serverconfig_GameMode_Type() {
317 echo "enum"
318}
319serverconfig_GameMode_Default() {
320 echo "1"
321}
322serverconfig_GameMode_Values() {
323 config_allowed_values=("GameModeSurvival")
324}
325
326
327
328serverconfig_ZombieMove_QueryName() {
329 echo "Zombie speed, regular"
330}
331serverconfig_ZombieMove_Type() {
332 echo "number"
333}
334serverconfig_ZombieMove_Default() {
335 echo "0"
336}
337serverconfig_ZombieMove_Range() {
338 echo "0-4"
339}
340serverconfig_ZombieMove_Values() {
341 config_allowed_values=("Walk" "Jog" "Run" "Sprint" "Nightmare")
342}
343
344
345
346serverconfig_ZombieMoveNight_QueryName() {
347 echo "Zombie speed, night"
348}
349serverconfig_ZombieMoveNight_Type() {
350 echo "number"
351}
352serverconfig_ZombieMoveNight_Default() {
353 echo "3"
354}
355serverconfig_ZombieMoveNight_Range() {
356 echo "0-4"
357}
358serverconfig_ZombieMoveNight_Values() {
359 config_allowed_values=("Walk" "Jog" "Run" "Sprint" "Nightmare")
360}
361
362
363
364serverconfig_ZombieFeralMove_QueryName() {
365 echo "Zombie speed, ferals"
366}
367serverconfig_ZombieFeralMove_Type() {
368 echo "number"
369}
370serverconfig_ZombieFeralMove_Default() {
371 echo "3"
372}
373serverconfig_ZombieFeralMove_Range() {
374 echo "0-4"
375}
376serverconfig_ZombieFeralMove_Values() {
377 config_allowed_values=("Walk" "Jog" "Run" "Sprint" "Nightmare")
378}
379
380
381
382serverconfig_ZombieBMMove_QueryName() {
383 echo "Zombie speed, bloodmoons"
384}
385serverconfig_ZombieBMMove_Type() {
386 echo "number"
387}
388serverconfig_ZombieBMMove_Default() {
389 echo "3"
390}
391serverconfig_ZombieBMMove_Range() {
392 echo "0-4"
393}
394serverconfig_ZombieBMMove_Values() {
395 config_allowed_values=("Walk" "Jog" "Run" "Sprint" "Nightmare")
396}
397
398
399
400
401serverconfig_BuildCreate_QueryName() {
402 echo "Item spawn menu"
403}
404serverconfig_BuildCreate_Type() {
405 echo "boolean"
406}
407serverconfig_BuildCreate_Default() {
408 echo "false"
409}
410serverconfig_BuildCreate_ErrorMessage() {
411 echo "Not a valid boolean given (true/false or yes/no or y/n)."
412}
413
414
415
416serverconfig_DayNightLength_QueryName() {
417 echo "Length of one day"
418}
419serverconfig_DayNightLength_Type() {
420 echo "number"
421}
422serverconfig_DayNightLength_Default() {
423 echo "60"
424}
425
426
427
428serverconfig_DayLightLength_QueryName() {
429 echo "Duration of daylight (in ingame hours)"
430}
431serverconfig_DayLightLength_Type() {
432 echo "number"
433}
434serverconfig_DayLightLength_Default() {
435 echo "18"
436}
437serverconfig_DayLightLength_Range() {
438 echo "0-24"
439}
440
441
442
443serverconfig_PartySharedKillRange_QueryName() {
444 echo "Party range to share kill / quest XP rewards"
445}
446serverconfig_PartySharedKillRange_Type() {
447 echo "number"
448}
449serverconfig_PartySharedKillRange_Default() {
450 echo "100"
451}
452
453
454
455serverconfig_PlayerKillingMode_QueryName() {
456 echo "Player killing"
457}
458serverconfig_PlayerKillingMode_Type() {
459 echo "number"
460}
461serverconfig_PlayerKillingMode_Default() {
462 echo "3"
463}
464serverconfig_PlayerKillingMode_Range() {
465 echo "0-3"
466}
467serverconfig_PlayerKillingMode_Values() {
468 config_allowed_values=("No player killing" "Kill allies only" "Kill strangers only" "Kill everyone")
469}
470
471
472
473serverconfig_PersistentPlayerProfiles_QueryName() {
474 echo "Persistent player profiles"
475}
476serverconfig_PersistentPlayerProfiles_Type() {
477 echo "boolean"
478}
479serverconfig_PersistentPlayerProfiles_Default() {
480 echo "false"
481}
482serverconfig_PersistentPlayerProfiles_ErrorMessage() {
483 echo "Not a valid boolean given (true/false or yes/no or y/n)."
484}
485
486
487
488serverconfig_PlayerSafeZoneLevel_QueryName() {
489 echo "Safe zone up to player level"
490}
491serverconfig_PlayerSafeZoneLevel_Type() {
492 echo "number"
493}
494serverconfig_PlayerSafeZoneLevel_Default() {
495 echo "5"
496}
497
498
499serverconfig_PlayerSafeZoneHours_QueryName() {
500 echo "Safe zone up to played hours"
501}
502serverconfig_PlayerSafeZoneHours_Type() {
503 echo "number"
504}
505serverconfig_PlayerSafeZoneHours_Default() {
506 echo "5"
507}
508
509
510serverconfig_ControlPanelEnabled_QueryName() {
511 echo "Enable control panel"
512}
513serverconfig_ControlPanelEnabled_Type() {
514 echo "boolean"
515}
516serverconfig_ControlPanelEnabled_Default() {
517 echo "false"
518}
519serverconfig_ControlPanelEnabled_ErrorMessage() {
520 echo "Not a valid boolean given (true/false or yes/no or y/n)."
521}
522
523
524
525serverconfig_ControlPanelPort_QueryName() {
526 echo "Control panel port"
527}
528serverconfig_ControlPanelPort_Type() {
529 echo "number"
530}
531serverconfig_ControlPanelPort_Default() {
532 echo "8080"
533}
534serverconfig_ControlPanelPort_Range() {
535 echo "1024-65535"
536}
537serverconfig_ControlPanelPort_Validate() {
538 local I=${INSTANCE:-!}
539 if [ $(checkTCPPortUsed "$1" "$I") -eq 0 ]; then
540 echo "1"
541 else
542 echo "0"
543 fi
544}
545serverconfig_ControlPanelPort_ErrorMessage() {
546 echo "Illegal port number or port already in use by another instance."
547}
548
549
550
551serverconfig_ControlPanelPassword_QueryName() {
552 echo "Control panel password"
553}
554serverconfig_ControlPanelPassword_Type() {
555 echo "string"
556}
557
558
559
560serverconfig_TelnetPort_QueryName() {
561 echo "Telnet port"
562}
563serverconfig_TelnetPort_Type() {
564 echo "number"
565}
566serverconfig_TelnetPort_Default() {
567 echo "8081"
568}
569serverconfig_TelnetPort_Range() {
570 echo "1024-65535"
571}
572serverconfig_TelnetPort_Validate() {
573 local I=${INSTANCE:-!}
574 if [ $(checkTCPPortUsed "$1" "$I") -eq 0 ]; then
575 echo "1"
576 else
577 echo "0"
578 fi
579}
580serverconfig_TelnetPort_ErrorMessage() {
581 echo "Illegal port number or port already in use by another instance."
582}
583
584
585
586serverconfig_TelnetPassword_QueryName() {
587 echo "Telnet password"
588}
589serverconfig_TelnetPassword_Type() {
590 echo "string"
591}
592
593
594
595serverconfig_TelnetFailedLoginLimit_QueryName() {
596 echo "Max failed login attempts (0 to disable)"
597}
598serverconfig_TelnetFailedLoginLimit_Type() {
599 echo "number"
600}
601serverconfig_TelnetFailedLoginLimit_Default() {
602 echo "10"
603}
604
605
606
607serverconfig_TelnetFailedLoginsBlocktime_QueryName() {
608 echo "Telnet login blocktime after failed logins (seconds)"
609}
610serverconfig_TelnetFailedLoginsBlocktime_Type() {
611 echo "number"
612}
613serverconfig_TelnetFailedLoginsBlocktime_Default() {
614 echo "10"
615}
616
617
618
619serverconfig_DropOnDeath_QueryName() {
620 echo "Drop on Death"
621}
622serverconfig_DropOnDeath_Type() {
623 echo "number"
624}
625serverconfig_DropOnDeath_Default() {
626 echo "0"
627}
628serverconfig_DropOnDeath_Range() {
629 echo "0-3"
630}
631serverconfig_DropOnDeath_Values() {
632 config_allowed_values=("Everything" "Toolbelt only" "Backpack only" "Delete all")
633}
634
635
636serverconfig_DropOnQuit_QueryName() {
637 echo "Drop on Quit"
638}
639serverconfig_DropOnQuit_Type() {
640 echo "number"
641}
642serverconfig_DropOnQuit_Default() {
643 echo "1"
644}
645serverconfig_DropOnQuit_Range() {
646 echo "0-3"
647}
648serverconfig_DropOnQuit_Values() {
649 config_allowed_values=("Nothing" "Everything" "Toolbelt only" "Backpack only")
650}
651
652
653
654
655serverconfig_EnemySpawnMode_QueryName() {
656 echo "Spawn mode"
657}
658serverconfig_EnemySpawnMode_Type() {
659 echo "boolean"
660}
661serverconfig_EnemySpawnMode_Default() {
662 echo "true"
663}
664serverconfig_EnemySpawnMode_ErrorMessage() {
665 echo "Not a valid boolean given (true/false or yes/no or y/n)."
666}
667
668
669serverconfig_EnemyDifficulty_QueryName() {
670 echo "Enemy difficulty"
671}
672serverconfig_EnemyDifficulty_Type() {
673 echo "number"
674}
675serverconfig_EnemyDifficulty_Default() {
676 echo "0"
677}
678serverconfig_EnemyDifficulty_Range() {
679 echo "0-1"
680}
681serverconfig_EnemyDifficulty_Values() {
682 config_allowed_values=("Normal" "Feral")
683}
684
685
686serverconfig_BloodMoonEnemyCount_QueryName() {
687 echo "Enemies per Player on Blood moons"
688}
689serverconfig_BloodMoonEnemyCount_Type() {
690 echo "number"
691}
692serverconfig_BloodMoonEnemyCount_Default() {
693 echo "8"
694}
695serverconfig_BloodMoonEnemyCount_Range() {
696 echo "0-64"
697}
698
699
700
701
702serverconfig_BlockDurabilityModifier_QueryName() {
703 echo "Block durability (%)"
704}
705serverconfig_BlockDurabilityModifier_Type() {
706 echo "number"
707}
708serverconfig_BlockDurabilityModifier_Default() {
709 echo "100"
710}
711
712
713
714
715serverconfig_LootAbundance_QueryName() {
716 echo "Loot abundance (%)"
717}
718serverconfig_LootAbundance_Type() {
719 echo "number"
720}
721serverconfig_LootAbundance_Default() {
722 echo "100"
723}
724
725
726serverconfig_LootRespawnDays_QueryName() {
727 echo "Loot respawn delay (days)"
728}
729serverconfig_LootRespawnDays_Type() {
730 echo "number"
731}
732serverconfig_LootRespawnDays_Default() {
733 echo "7"
734}
735
736serverconfig_BedrollDeadZoneSize_QueryName() {
737 echo "Bedroll deadzone size"
738}
739serverconfig_BedrollDeadZoneSize_Type() {
740 echo "number"
741}
742serverconfig_BedrollDeadZoneSize_Default() {
743 echo "15"
744}
745
746
747
748
749serverconfig_LandClaimSize_QueryName() {
750 echo "Land claim size"
751}
752serverconfig_LandClaimSize_Type() {
753 echo "number"
754}
755serverconfig_LandClaimSize_Default() {
756 echo "7"
757}
758
759
760serverconfig_LandClaimDeadZone_QueryName() {
761 echo "Minimum keystone distance"
762}
763serverconfig_LandClaimDeadZone_Type() {
764 echo "number"
765}
766serverconfig_LandClaimDeadZone_Default() {
767 echo "30"
768}
769
770
771serverconfig_LandClaimExpiryTime_QueryName() {
772 echo "Claim expiry time (days)"
773}
774serverconfig_LandClaimExpiryTime_Type() {
775 echo "number"
776}
777serverconfig_LandClaimExpiryTime_Default() {
778 echo "3"
779}
780
781
782serverconfig_LandClaimDecayMode_QueryName() {
783 echo "Claim decay mode"
784}
785serverconfig_LandClaimDecayMode_Type() {
786 echo "number"
787}
788serverconfig_LandClaimDecayMode_Default() {
789 echo "0"
790}
791serverconfig_LandClaimDecayMode_Range() {
792 echo "0-2"
793}
794serverconfig_LandClaimDecayMode_Values() {
795 config_allowed_values=("Linear" "Exponential" "Full protection")
796}
797
798
799serverconfig_LandClaimOnlineDurabilityModifier_QueryName() {
800 echo "Claim durability modifier - online"
801}
802serverconfig_LandClaimOnlineDurabilityModifier_Type() {
803 echo "number"
804}
805serverconfig_LandClaimOnlineDurabilityModifier_Default() {
806 echo "4"
807}
808
809
810serverconfig_LandClaimOfflineDurabilityModifier_QueryName() {
811 echo "Claim durability modifier - offline"
812}
813serverconfig_LandClaimOfflineDurabilityModifier_Type() {
814 echo "number"
815}
816serverconfig_LandClaimOfflineDurabilityModifier_Default() {
817 echo "4"
818}
819
820
821
822
823serverconfig_AirDropFrequency_QueryName() {
824 echo "Airdrop delay (hours)"
825}
826serverconfig_AirDropFrequency_Type() {
827 echo "number"
828}
829serverconfig_AirDropFrequency_Default() {
830 echo "72"
831}
832
833
834serverconfig_AirDropMarker_QueryName() {
835 echo "Enable AirDrop markers"
836}
837serverconfig_AirDropMarker_Type() {
838 echo "boolean"
839}
840serverconfig_AirDropMarker_Default() {
841 echo "false"
842}
843serverconfig_AirDropMarker_ErrorMessage() {
844 echo "Not a valid boolean given (true/false or yes/no or y/n)."
845}
846
847
848
849serverconfig_MaxSpawnedZombies_QueryName() {
850 echo "Maximum number of concurrent zombies"
851}
852serverconfig_MaxSpawnedZombies_Type() {
853 echo "number"
854}
855serverconfig_MaxSpawnedZombies_Default() {
856 echo "60"
857}
858
859
860serverconfig_MaxSpawnedAnimals_QueryName() {
861 echo "Maximum number of concurrent animals"
862}
863serverconfig_MaxSpawnedAnimals_Type() {
864 echo "number"
865}
866serverconfig_MaxSpawnedAnimals_Default() {
867 echo "50"
868}
869
870
871serverconfig_EACEnabled_QueryName() {
872 echo "Enable EasyAntiCheat"
873}
874serverconfig_EACEnabled_Type() {
875 echo "boolean"
876}
877serverconfig_EACEnabled_Default() {
878 echo "true"
879}
880serverconfig_EACEnabled_ErrorMessage() {
881 echo "Not a valid boolean given (true/false or yes/no or y/n)."
882}
883
884
885
886
887#################################
888## Edit option functions
889
890configEditServer() {
891 local CV
892
893 echo "Server"
894 echo "--------------------------------"
895 for CV in \
896 ServerName ServerPassword ServerVisibility ServerPort ServerDisabledNetworkProtocols ServerDescription ServerWebsiteURL \
897 HideCommandExecutionLog MaxUncoveredMapChunksPerPlayer EACEnabled MaxSpawnedZombies MaxSpawnedAnimals \
898 ; do
899 $1 $CV
900 done
901 echo
902}
903
904configEditSlots() {
905 local CV
906
907 echo "Slots"
908 echo "--------------------------------"
909 for CV in \
910 ServerMaxPlayerCount ServerReservedSlots ServerReservedSlotsPermission ServerAdminSlots ServerAdminSlotsPermission \
911 ; do
912 $1 $CV
913 done
914 echo
915}
916
917configEditRemoteControl() {
918 local CV
919
920 echo "Remote control"
921 echo "--------------------------------"
922 for CV in \
923 ControlPanelEnabled ControlPanelPort ControlPanelPassword \
924 TelnetPort TelnetPassword TelnetFailedLoginLimit TelnetFailedLoginsBlocktime \
925 ; do
926 if [ "$CV" = "TelnetPort" ]; then
927 echo
928 echo "NOTE: Telnet will always be enabled for management purposes!"
929 echo "Make sure you block external access to this port or set no password"
930 echo "so the server will only listen on the loopback interface!"
931 echo
932 fi
933 $1 $CV
934 done
935 echo
936}
937
938configEditGameType() {
939 local CV
940
941 echo "Game type"
942 echo "--------------------------------"
943 for CV in \
944 GameName GameWorld WorldGenSeed WorldGenSize GameMode \
945 ; do
946 $1 $CV
947 done
948 echo
949}
950
951configEditGeneric() {
952 local CV
953
954 echo "Generic options"
955 echo "--------------------------------"
956 for CV in \
957 PartySharedKillRange PlayerKillingMode PersistentPlayerProfiles \
958 PlayerSafeZoneLevel PlayerSafeZoneHours \
959 BuildCreate \
960 BlockDurabilityModifier \
961 ; do
962 $1 $CV
963 done
964 echo
965}
966
967configEditDropLoot() {
968 local CV
969
970 echo "Drop and Loot"
971 echo "--------------------------------"
972 for CV in \
973 DropOnDeath DropOnQuit \
974 LootAbundance LootRespawnDays \
975 AirDropFrequency AirDropMarker \
976 ; do
977 $1 $CV
978 done
979 echo
980}
981
982configEditTimes() {
983 local CV
984
985 echo "Times / Durations"
986 echo "--------------------------------"
987 for CV in \
988 DayNightLength DayLightLength \
989 ; do
990 $1 $CV
991 done
992 echo
993}
994
995configEditDifficulty() {
996 local CV
997
998 echo "Difficulty"
999 echo "--------------------------------"
1000 for CV in \
1001 GameDifficulty ZombieMove ZombieMoveNight ZombieFeralMove ZombieBMMove \
1002 EnemySpawnMode EnemyDifficulty \
1003 BloodMoonEnemyCount BedrollDeadZoneSize \
1004 ; do
1005 $1 $CV
1006 done
1007 echo
1008}
1009
1010configEditLandClaim() {
1011 local CV
1012
1013 echo "Land claim options"
1014 echo "--------------------------------"
1015 for CV in \
1016 LandClaimSize LandClaimDeadZone LandClaimExpiryTime LandClaimDecayMode \
1017 LandClaimOnlineDurabilityModifier LandClaimOfflineDurabilityModifier \
1018 ; do
1019 $1 $CV
1020 done
1021 echo
1022}
1023
1024configEditAll() {
1025 configEditServer "$1"
1026 configEditSlots "$1"
1027 configEditRemoteControl "$1"
1028 configEditGameType "$1"
1029 configEditGeneric "$1"
1030 configEditDropLoot "$1"
1031 configEditTimes "$1"
1032 configEditDifficulty "$1"
1033 configEditLandClaim "$1"
1034}
1035
1036
1037
1038
1039
1040#################################
1041## Generic worker functions
1042
1043
1044# List all defined config editing parts
1045# Returns:
1046# List of config funcs
1047listConfigEditFuncs() {
1048 local CV
1049 for CV in $(declare -F | cut -d\ -f3 | grep "^configEdit.*$"); do
1050 CV=${CV#configEdit}
1051 printf "%s " "$CV"
1052 done
1053}
1054
1055
1056# List all defined config options
1057# Returns:
1058# List of defined config options
1059listConfigValues() {
1060 local CV
1061 for CV in $(declare -F | cut -d\ -f3 | grep "^serverconfig_.*_Type$"); do
1062 CV=${CV#serverconfig_}
1063 CV=${CV%_Type}
1064 printf "%s " "$CV"
1065 done
1066}
1067
1068
1069# Validate the given value for the given option
1070# Params:
1071# 1: Option name
1072# 2: Value
1073# Returns:
1074# 0/1: invalid/valid
1075isValidOptionValue() {
1076 local TYPE=$(serverconfig_$1_Type)
1077 local RANGE=""
1078
1079 if [ "$TYPE" = "enum" ]; then
1080 TYPE="number"
1081 serverconfig_$1_Values
1082 RANGE=1-${#config_allowed_values[@]}
1083 else
1084 if [ "$(type -t serverconfig_$1_Range)" = "function" ]; then
1085 RANGE=$(serverconfig_$1_Range)
1086 fi
1087 fi
1088
1089 case "$TYPE" in
1090 number)
1091 if [ $(isANumber "$2") -eq 0 ]; then
1092 echo "0"
1093 return
1094 fi
1095 if [ ! -z "$RANGE" ]; then
1096 local MIN=$(cut -d- -f1 <<< "$RANGE")
1097 local MAX=$(cut -d- -f2 <<< "$RANGE")
1098 if [ $2 -lt $MIN -o $2 -gt $MAX ]; then
1099 echo "0"
1100 return
1101 fi
1102 fi
1103 ;;
1104 boolean)
1105 if [ $(isABool "$2") -eq 0 ]; then
1106 echo "0"
1107 return
1108 fi
1109 ;;
1110 string)
1111 ;;
1112 esac
1113
1114
1115 if [ "$(type -t serverconfig_$1_Validate)" = "function" ]; then
1116 if [ $(serverconfig_$1_Validate "$2") -eq 0 ]; then
1117 echo "0"
1118 return
1119 fi
1120 fi
1121
1122 echo "1"
1123}
1124
1125# Query for the value of a single config option
1126# Will be stored in $configCurrent_$1
1127# Params:
1128# 1: Option name
1129configQueryValue() {
1130 local TYPE=$(serverconfig_$1_Type)
1131 local NAME=""
1132 local RANGE=""
1133 local DEFAULT=""
1134 local currentValName=configCurrent_$1
1135
1136 if [ "$(type -t serverconfig_$1_Values)" = "function" ]; then
1137 echo "$(serverconfig_$1_QueryName), options:"
1138 serverconfig_$1_Values
1139 NAME="Select option"
1140 if [ "$TYPE" = "enum" ]; then
1141 local OPTOFFSET=1
1142 else
1143 local OPTOFFSET=0
1144 fi
1145 for (( i=$OPTOFFSET; i < ${#config_allowed_values[@]}+$OPTOFFSET; i++ )); do
1146 printf " %2d: %s\n" $i "${config_allowed_values[$i-$OPTOFFSET]}"
1147 done
1148 else
1149 NAME=$(serverconfig_$1_QueryName)
1150 fi
1151
1152 if [ "$TYPE" = "enum" ]; then
1153 RANGE=1-${#config_allowed_values[@]}
1154 if [ ! -z "${!currentValName}" ]; then
1155 for (( i=1; i < ${#config_allowed_values[@]}+1; i++ )); do
1156 if [ "${!currentValName}" = "${config_allowed_values[$i-1]}" ]; then
1157 DEFAULT=$i
1158 fi
1159 done
1160 export $currentValName=
1161 fi
1162 else
1163 if [ "$(type -t serverconfig_$1_Range)" = "function" ]; then
1164 RANGE=$(serverconfig_$1_Range)
1165 fi
1166 fi
1167
1168 if [ -z "$DEFAULT" ]; then
1169 if [ ! -z "${!currentValName}" ]; then
1170 DEFAULT=${!currentValName}
1171 else
1172 if [ "$(type -t serverconfig_$1_Default)" = "function" ]; then
1173 DEFAULT=$(serverconfig_$1_Default)
1174 fi
1175 fi
1176 fi
1177
1178 local prompt=$(printf "%s" "$NAME")
1179 if [ ! -z "$RANGE" ]; then
1180 prompt=$(printf "%s (%s)" "$prompt" "$RANGE")
1181 fi
1182 if [ ! -z "$DEFAULT" ]; then
1183 prompt=$(printf "%s [%s]" "$prompt" "$DEFAULT")
1184 fi
1185 prompt=$(printf "%s:" "$prompt")
1186 prompt=$(printf "%-*s " 40 "$prompt")
1187
1188 while : ; do
1189 read -p "$prompt" $currentValName
1190 export $currentValName="${!currentValName:-$DEFAULT}"
1191 if [ $(isValidOptionValue "$1" "${!currentValName}") -eq 0 ]; then
1192 if [ "$(type -t serverconfig_$1_ErrorMessage)" = "function" ]; then
1193 serverconfig_$1_ErrorMessage "${!currentValName}"
1194 fi
1195 fi
1196 [ $(isValidOptionValue "$1" "${!currentValName}") -eq 1 ] && break
1197 done
1198
1199 if [ "$TYPE" = "boolean" ]; then
1200 if [ $(getBool ${!currentValName}) -eq 1 ]; then
1201 export $currentValName="true"
1202 else
1203 export $currentValName="false"
1204 fi
1205 fi
1206 if [ "$TYPE" = "enum" ]; then
1207 export $currentValName="${config_allowed_values[$currentValName-1]}"
1208 fi
1209 echo
1210}
1211
1212# Set parameters for current instance that have forced values:
1213# - TelnetEnabled must be set so that management scripts can work
1214# - AdminFileName is made to point to the local instance admins.xml
1215# - SaveGameFolder is made to point to the instance folder
1216# Params:
1217# 1: Instance name
1218configSetAutoParameters() {
1219 configCurrent_TelnetEnabled=true
1220 configCurrent_AdminFileName=admins.xml
1221 configCurrent_SaveGameFolder="$(getInstancePath "$1")"
1222}
1223
1224
1225# Print defined config value
1226# Params:
1227# 1: Config option
1228printConfigValue() {
1229 local currentValName=configCurrent_$1
1230 printf "%-25s = %s\n" "$(serverconfig_$1_QueryName)" "${!currentValName}"
1231}
1232
1233# Query for an instance name (will be saved in $INSTANCE)
1234readInstanceName() {
1235 until [ $(isValidInstanceName "$INSTANCE") -eq 1 ]; do
1236 read -p "Instance name: " INSTANCE
1237 if [ $(isValidInstanceName "$INSTANCE") -eq 0 ]; then
1238 echo "Invalid instance name, may only contain:"
1239 echo " - letters (A-Z / a-z)"
1240 echo " - digits (0-9)"
1241 echo " - underscores (_)"
1242 echo " - hyphens (-)"
1243 fi
1244 done
1245}
1246
1247# Undefine the current config values
1248unsetAllConfigValues() {
1249 local CV
1250 for CV in $(listConfigValues); do
1251 local currentValName=configCurrent_$CV
1252 export $currentValName=
1253 done
1254}
1255
1256# Load all config values from the config.xml of the given instance
1257# Params:
1258# 1: Instance name
1259loadCurrentConfigValues() {
1260 local CV
1261 for CV in $(listConfigValues); do
1262 local currentValName=configCurrent_$CV
1263 local cfile=$(getInstancePath "$1")/config.xml
1264 local XPATH="/ServerSettings/property[@name='$CV']/@value"
1265 local VAL=$($XMLSTARLET sel -t -v "$XPATH" $cfile)
1266 if [ ! -z "$VAL" ]; then
1267 export $currentValName="$VAL"
1268 fi
1269 done
1270}
1271
1272# Save all config values to the config.xml of the given instance
1273# Params:
1274# 1: Instance name
1275saveCurrentConfigValues() {
1276 local CV
1277 for CV in $(listConfigValues) TelnetEnabled AdminFileName SaveGameFolder; do
1278 local currentValName=configCurrent_$CV
1279 local val="${!currentValName}"
1280 local cfile=$(getInstancePath "$1")/config.xml
1281
1282 XPATHBASE="/ServerSettings/property[@name='$CV']"
1283
1284 if [ -z $($XMLSTARLET sel -t -v "$XPATHBASE/@name" $cfile) ]; then
1285 $XMLSTARLET ed -L \
1286 -s "/ServerSettings" -t elem -n "property" -v "" \
1287 -i "/ServerSettings/property[not(@name)]" -t attr -n "name" -v "$CV" \
1288 -i "$XPATHBASE" -t attr -n "value" -v "$val" \
1289 $cfile
1290 else
1291 $XMLSTARLET ed -L \
1292 -u "$XPATHBASE/@value" -v "$val" \
1293 $cfile
1294 fi
1295 done
1296}
1297
1298# Check if the config template exists
1299# Returns:
1300# 0/1: no/yes
1301configTemplateExists() {
1302 if [ -f $SDTD_BASE/templates/config.xml ]; then
1303 echo 1
1304 else
1305 echo 0
1306 fi
1307}
1308
1309# Get a single value from a serverconfig
1310# Params:
1311# 1: Instance name
1312# 2: Property name
1313# Returns:
1314# Property value
1315getConfigValue() {
1316 local CONF=$(getInstancePath $1)/config.xml
1317 $XMLSTARLET sel -t -v "/ServerSettings/property[@name='$2']/@value" $CONF
1318}
1319
1320# Update a single value in a serverconfig
1321# Params:
1322# 1: Instance name
1323# 2: Property name
1324# 3: New value
1325setConfigValue() {
1326 local CONF=$(getInstancePath $1)/config.xml
1327 $XMLSTARLET ed -L -u "/ServerSettings/property[@name='$2']/@value" -v "$3" $CONF
1328}
1329
Note: See TracBrowser for help on using the repository browser.