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

Last change on this file since 344 was 344, checked in by alloc, 9 months 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.