44
55use App \Contracts \DetectsServerState ;
66use App \Contracts \GameHandler ;
7+ use App \Contracts \HasQueryPort ;
78use App \Contracts \ManagesModAssets ;
89use App \Contracts \SteamGameHandler ;
910use App \Contracts \SupportsBackups ;
1617use Illuminate \Support \Facades \Log ;
1718use Illuminate \Validation \Rule ;
1819
19- final class Arma3Handler implements DetectsServerState, GameHandler, ManagesModAssets, SteamGameHandler, SupportsBackups, SupportsHeadlessClients, SupportsMissions
20+ final class Arma3Handler implements DetectsServerState, GameHandler, HasQueryPort, ManagesModAssets, SteamGameHandler, SupportsBackups, SupportsHeadlessClients, SupportsMissions
2021{
2122 public function __construct (
2223 protected TwigConfigRenderer $ configRenderer ,
@@ -310,18 +311,17 @@ public function settingsSchema(): array
310311 'title ' => 'Server Rules ' ,
311312 'showOnCreate ' => true ,
312313 'createLabel ' => 'Arma 3 Options ' ,
313- 'source ' => 'server ' ,
314+ 'source ' => 'arma3_settings ' ,
314315 'fields ' => [
315- ['key ' => 'query_port ' , 'label ' => 'Steam Query Port ' , 'type ' => 'number ' , 'default ' => $ this ->defaultQueryPort (), 'min ' => 1 , 'max ' => 65535 , 'description ' => 'Steam server browser query port. Typically game port + 1. ' ],
316- ['key ' => 'password ' , 'label ' => 'Server Password ' , 'type ' => 'text ' , 'default ' => '' , 'placeholder ' => 'Leave empty for no password ' ],
316+ ['key ' => 'query_port ' , 'label ' => 'Steam Query Port ' , 'type ' => 'number ' , 'default ' => $ this ->defaultQueryPort (), 'min ' => 1 , 'max ' => 65535 , 'description ' => 'Steam server browser query port. Typically game port + 1. ' , ' source ' => ' server ' ],
317+ ['key ' => 'password ' , 'label ' => 'Server Password ' , 'type ' => 'text ' , 'default ' => '' , 'placeholder ' => 'Leave empty for no password ' , ' source ' => ' server ' ],
317318 ['key ' => 'admin_password ' , 'label ' => 'Admin Password ' , 'type ' => 'text ' , 'default ' => '' , 'placeholder ' => 'In-game admin password ' ],
318319 ['type ' => 'separator ' ],
319320 ['key ' => 'verify_signatures ' , 'label ' => 'Verify Signatures ' , 'type ' => 'toggle ' , 'default ' => true ],
320321 ['key ' => 'allowed_file_patching ' , 'label ' => 'Allow File Patching ' , 'type ' => 'toggle ' , 'default ' => false ],
321322 ['key ' => 'battle_eye ' , 'label ' => 'BattlEye Anti-Cheat ' , 'type ' => 'toggle ' , 'default ' => true ],
322323 ['key ' => 'von_enabled ' , 'label ' => 'Voice Over Network ' , 'type ' => 'toggle ' , 'default ' => true ],
323324 ['key ' => 'persistent ' , 'label ' => 'Persistent Server ' , 'type ' => 'toggle ' , 'default ' => false ],
324- ['key ' => 'auto_restart ' , 'label ' => 'Auto-Restart on Crash ' , 'type ' => 'toggle ' , 'default ' => false ],
325325 ],
326326 ],
327327
@@ -478,7 +478,7 @@ public function settingsSchema(): array
478478 'advanced ' => true ,
479479 'fields ' => [
480480 ['key ' => 'additional_params ' , 'label ' => 'Additional Launch Parameters ' , 'type ' => 'textarea ' , 'default ' => '' , 'rows ' => 2 , 'placeholder ' => '-loadMissionToMemory -enableHT ' , 'source ' => 'server ' ],
481- ['key ' => 'additional_server_options ' , 'label ' => 'Additional server.cfg Options ' , 'type ' => 'textarea ' , 'default ' => '' , 'rows ' => 3 , 'placeholder ' => 'Raw config directives appended to server.cfg ' ],
481+ ['key ' => 'additional_server_options ' , 'label ' => 'Additional server.cfg Options ' , 'type ' => 'textarea ' , 'default ' => '' , 'rows ' => 3 , 'placeholder ' => 'Raw config directives appended to server.cfg ' , ' source ' => ' arma3_settings ' ],
482482 ],
483483 ],
484484 ];
@@ -502,21 +502,22 @@ public function serverValidationRules(?Server $server = null): array
502502 Rule::unique ('servers ' , 'port ' )->when ($ server , fn ($ rule ) => $ rule ->ignore ($ server ->id )),
503503 ],
504504 'password ' => ['nullable ' , 'string ' , 'max:255 ' ],
505+ 'additional_params ' => ['nullable ' , 'string ' , 'max:1000 ' ],
506+ ];
507+ }
508+
509+ public function settingsValidationRules (): array
510+ {
511+ return [
512+ // Server options (on arma3_settings)
505513 'admin_password ' => ['nullable ' , 'string ' , 'max:255 ' ],
506- 'auto_restart ' => ['boolean ' ],
507514 'verify_signatures ' => ['boolean ' ],
508515 'allowed_file_patching ' => ['boolean ' ],
509516 'battle_eye ' => ['boolean ' ],
510517 'persistent ' => ['boolean ' ],
511518 'von_enabled ' => ['boolean ' ],
512- 'additional_params ' => ['nullable ' , 'string ' , 'max:1000 ' ],
513519 'additional_server_options ' => ['nullable ' , 'string ' ],
514- ];
515- }
516520
517- public function settingsValidationRules (): array
518- {
519- return [
520521 // Difficulty settings
521522 'reduced_damage ' => ['boolean ' ],
522523 'group_indicators ' => ['integer ' , 'between:0,2 ' ],
@@ -636,21 +637,22 @@ protected function getModNames(Server $server): array
636637 protected function generateServerConfig (Server $ server ): void
637638 {
638639 $ renderer = $ this ->configRenderer ;
640+ $ settings = $ server ->arma3Settings ?? $ this ->getDefaultSettings ();
639641
640642 $ content = $ renderer ->render ('arma3/server.cfg.twig ' , [
641643 'hostname ' => addslashes ($ server ->name ),
642644 'password ' => addslashes ((string ) $ server ->password ),
643- 'admin_password ' => addslashes ((string ) $ server ->admin_password ),
645+ 'admin_password ' => addslashes ((string ) $ settings ->admin_password ),
644646 'max_players ' => (int ) $ server ->max_players ,
645- 'verify_signatures ' => $ server ->verify_signatures ? 2 : 0 ,
646- 'allowed_file_patching ' => $ server ->allowed_file_patching ? 2 : 0 ,
647- 'disable_von ' => $ server ->von_enabled ? 0 : 1 ,
648- 'persistent ' => $ server ->persistent ? 1 : 0 ,
649- 'battle_eye ' => $ server ->battle_eye ? 1 : 0 ,
647+ 'verify_signatures ' => $ settings ->verify_signatures ? 2 : 0 ,
648+ 'allowed_file_patching ' => $ settings ->allowed_file_patching ? 2 : 0 ,
649+ 'disable_von ' => $ settings ->von_enabled ? 0 : 1 ,
650+ 'persistent ' => $ settings ->persistent ? 1 : 0 ,
651+ 'battle_eye ' => $ settings ->battle_eye ? 1 : 0 ,
650652 'motd_lines ' => $ server ->description
651653 ? array_map (fn (string $ line ) => addslashes (trim ($ line )), explode ("\n" , $ server ->description ))
652654 : null ,
653- 'additional_server_options ' => $ server ->additional_server_options ?: null ,
655+ 'additional_server_options ' => $ settings ->additional_server_options ?: null ,
654656 ]);
655657
656658 file_put_contents (
@@ -739,6 +741,14 @@ protected function generateProfileConfig(Server $server): void
739741 protected function getDefaultSettings (): Arma3Settings
740742 {
741743 $ settings = new Arma3Settings ;
744+ // Server option defaults
745+ $ settings ->admin_password = null ;
746+ $ settings ->verify_signatures = true ;
747+ $ settings ->allowed_file_patching = false ;
748+ $ settings ->battle_eye = true ;
749+ $ settings ->persistent = false ;
750+ $ settings ->von_enabled = true ;
751+ $ settings ->additional_server_options = null ;
742752 // Difficulty defaults
743753 $ settings ->reduced_damage = false ;
744754 $ settings ->group_indicators = 2 ;
0 commit comments