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

Last change on this file since 423 was 357, checked in by alloc, 5 years ago

Scripts v114

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