"; // #xml-editor-section
}
}
}
diff --git a/modules/config_games/xml_tag_descriptions.php b/modules/config_games/xml_tag_descriptions.php
new file mode 100644
index 00000000..944c9dba
--- /dev/null
+++ b/modules/config_games/xml_tag_descriptions.php
@@ -0,0 +1,155 @@
+, example?: string}>
+ */
+function config_games_tag_descriptions(): array
+{
+ return [
+ 'game_key' => [
+ 'desc' => 'Unique lowercase identifier for this game configuration. Used internally to link homes, mods, and Workshop profiles.',
+ 'example' => 'arma3_linux64',
+ ],
+ 'protocol' => [
+ 'desc' => 'Query protocol used to monitor server status.',
+ 'options' => [
+ 'lgsl' => 'LGSL – Lightweight Game Server Library',
+ 'gameq' => 'GameQ – PHP-based multi-protocol server query',
+ '' => 'None (server is not queryable)',
+ ],
+ ],
+ 'lgsl_query_name' => [
+ 'desc' => 'LGSL type string identifying the game in the LGSL library (only used when protocol is "lgsl").',
+ 'example' => 'arma3',
+ ],
+ 'gameq_query_name' => [
+ 'desc' => 'GameQ protocol name identifying the game (only used when protocol is "gameq").',
+ 'example' => 'arma3',
+ ],
+ 'installer' => [
+ 'desc' => 'Installer/updater helper used to download and update game server files.',
+ 'options' => [
+ 'steam' => 'SteamCMD / HLDSUpdateTool',
+ 'steamcmd' => 'SteamCMD (explicit)',
+ '' => 'None (manual installation)',
+ ],
+ ],
+ 'game_name' => [
+ 'desc' => 'Display name shown in the panel UI for this game.',
+ 'example' => 'Arma 3',
+ ],
+ 'server_exec_name' => [
+ 'desc' => 'Filename of the server executable (without path). The panel uses this to detect whether the server process is running.',
+ 'example' => 'arma3server_x64',
+ ],
+ 'query_port' => [
+ 'desc' => 'Port offset added to the main port to obtain the query port used for status monitoring.',
+ 'example' => '1',
+ ],
+ 'cli_template' => [
+ 'desc' => 'Command-line template used to launch the server. Supports placeholder tokens such as %ip%, %port%, %slots%.',
+ 'example' => '-ip=%ip% -port=%port% -maxPlayers=%slots%',
+ ],
+ 'cli_params' => [
+ 'desc' => 'Container for individual child elements that define configurable launch parameters shown in the panel UI.',
+ ],
+ 'reserve_ports' => [
+ 'desc' => 'Additional sequential ports (beyond the main port) that must be reserved for this server instance.',
+ 'example' => '3',
+ ],
+ 'cli_allow_chars' => [
+ 'desc' => 'Extra characters that are safe to include in command-line parameter values (extends the default whitelist).',
+ 'example' => '@_-.',
+ ],
+ 'maps_location' => [
+ 'desc' => 'Path inside the server directory where map files are stored. The panel uses this to populate map-selection dropdowns.',
+ 'example' => 'Maps',
+ ],
+ 'map_list' => [
+ 'desc' => 'Hardcoded comma-separated list of map names when maps cannot be read from disk.',
+ ],
+ 'console_log' => [
+ 'desc' => 'Relative path to the server log file that the panel displays in the console viewer.',
+ 'example' => 'logs/console.log',
+ ],
+ 'exe_location' => [
+ 'desc' => 'Subdirectory within the server installation where the executable resides. Leave empty if the executable is at the root.',
+ 'example' => 'Binaries/Win64',
+ ],
+ 'max_user_amount' => [
+ 'desc' => 'Maximum player slots the panel will allow for this game type. Enforced in the panel UI when creating or editing a server.',
+ 'example' => '64',
+ ],
+ 'control_protocol' => [
+ 'desc' => 'Protocol used to send RCON/admin commands to the running server.',
+ 'options' => [
+ 'rcon' => 'RCON (remote console)',
+ 'rconhl' => 'Half-Life RCON',
+ '' => 'None',
+ ],
+ ],
+ 'control_protocol_type' => [
+ 'desc' => 'Sub-type or variant that further qualifies the control protocol.',
+ 'example' => 'rcon_password',
+ ],
+ 'mods' => [
+ 'desc' => 'Container element for mod definitions. Child elements describe each variant of the server configuration.',
+ ],
+ 'replace_texts' => [
+ 'desc' => 'Container for text-replacement rules applied to config files on the server.',
+ ],
+ 'server_params' => [
+ 'desc' => 'Additional fixed parameters appended verbatim to the server launch command.',
+ ],
+ 'custom_fields' => [
+ 'desc' => 'Container for admin-defined extra fields displayed in the server control panel.',
+ ],
+ 'list_players_command' => [
+ 'desc' => 'RCON command sent to the server to retrieve the current player list.',
+ 'example' => 'players',
+ ],
+ 'player_info_regex' => [
+ 'desc' => 'Regular expression used to parse each line of the player-list response into name and other fields.',
+ ],
+ 'player_info' => [
+ 'desc' => 'Defines which capture groups from player_info_regex map to player attributes (name, score, ping, etc.).',
+ ],
+ 'player_commands' => [
+ 'desc' => 'Container for RCON commands that can be executed on individual players (kick, ban, etc.).',
+ ],
+ 'pre_install' => [
+ 'desc' => 'Shell/batch script executed on the agent BEFORE the game server files are installed or updated.',
+ ],
+ 'post_install' => [
+ 'desc' => 'Shell/batch script executed on the agent AFTER the game server files are installed or updated.',
+ ],
+ 'pre_start' => [
+ 'desc' => 'Shell/batch script executed on the agent BEFORE the game server process is started.',
+ ],
+ 'post_start' => [
+ 'desc' => 'Shell/batch script executed on the agent AFTER the game server process has started.',
+ ],
+ 'environment_variables' => [
+ 'desc' => 'Container for environment variables that are set in the server process environment at startup.',
+ ],
+ 'lock_files' => [
+ 'desc' => 'Files that should not be overwritten when updating the server. Paths are relative to the server installation directory.',
+ ],
+ 'configuration_files' => [
+ 'desc' => 'Container listing server configuration files that the panel can display and edit via the config-file editor.',
+ ],
+ ];
+}
diff --git a/modules/steam_workshop/lang/en_US.php b/modules/steam_workshop/lang/en_US.php
index 3e5e28e5..718ff282 100644
--- a/modules/steam_workshop/lang/en_US.php
+++ b/modules/steam_workshop/lang/en_US.php
@@ -7,7 +7,7 @@ return [
'button_save' => 'Save settings',
'button_cancel' => 'Back to list',
'label_feature_flag' => 'Enable scheduled Workshop updates for this server',
- 'label_adapter' => 'Game adapter',
+ 'label_adapter' => 'Game type',
'label_interval' => 'Update interval (minutes)',
'label_interval_hint' => 'Runs on the agent scheduler. Allowed range: 15–360 minutes.',
'label_staging_dir' => 'Staging directory (optional)',
@@ -17,24 +17,24 @@ return [
'label_mod_import' => 'Workshop IDs list (one "id,@ModName" per line)',
'hint_mod_import' => 'Paste from Modlist.txt or import from a collection. IDs are sanitized automatically.',
'hint_admin_only' => 'Managed by your administrator.',
- 'adapter_locked_note' => 'This adapter is enforced for the current game type by your administrator.',
- 'admin_heading_game_mapping' => 'Adapter mapping by game type',
- 'admin_subheading_game_mapping' => 'Pick which adapter becomes the default whenever a server of that game opens the Workshop UI.',
+ 'adapter_locked_note' => 'The game type for this server is managed by your administrator.',
+ 'admin_heading_game_mapping' => 'Game type mapping',
+ 'admin_subheading_game_mapping' => 'Pick which game configuration becomes the default whenever a server of that game opens the Workshop UI.',
'admin_col_game_key' => 'Game key',
- 'admin_col_adapter' => 'Adapter',
+ 'admin_col_adapter' => 'Game configuration',
'admin_no_game_keys' => 'No server configuration XML files were detected.',
- 'admin_heading_adapters' => 'Available adapters',
+ 'admin_heading_adapters' => 'Available game configurations',
'admin_col_key' => 'Key',
'admin_col_mods_dir' => 'Mods directory',
'admin_col_notes' => 'Notes',
- 'admin_heading_per_game' => 'Per-game adapters',
- 'admin_subheading_per_game' => 'Each game should have its own adapter XML for Steam Workshop automation.',
+ 'admin_heading_per_game' => 'Per-game Workshop configurations',
+ 'admin_subheading_per_game' => 'Each game should have its own Workshop configuration to control how mods are installed.',
'admin_col_status' => 'Status',
'admin_col_updated' => 'Last updated',
'admin_col_actions' => 'Actions',
- 'admin_heading_edit_adapter' => 'Editing adapter for %s',
- 'admin_hint_select_game' => 'Select a game in the table above to edit or create its adapter.',
- 'status_no_adapter' => 'No adapter defined',
+ 'admin_heading_edit_adapter' => 'Editing Workshop configuration for %s',
+ 'admin_hint_select_game' => 'Select a game in the table above to edit or create its Workshop configuration.',
+ 'status_no_adapter' => 'Not configured',
'status_enabled' => 'Enabled',
'status_disabled' => 'Disabled',
'status_hot_reload' => 'Hot reload ready',
@@ -55,15 +55,15 @@ return [
'install_staging' => 'Download to staging only (manual apply)',
'action_queue_for_restart' => 'Queue for restart',
'action_hot_reload_if_supported' => 'Hot reload if the adapter allows it',
- 'summary_adapter' => 'Adapter',
+ 'summary_adapter' => 'Game',
'summary_interval' => 'Interval',
'summary_mods' => 'Mods',
'summary_last_saved' => 'Last saved',
'summary_hot_reload' => 'Hot reload',
'raw_definition_label' => 'Raw Workshop list',
- 'message_mappings_saved' => 'Adapter mappings saved.',
- 'message_adapter_saved' => 'Adapter saved.',
- 'message_adapter_deleted' => 'Adapter deleted.',
+ 'message_mappings_saved' => 'Game type mappings saved.',
+ 'message_adapter_saved' => 'Game configuration saved.',
+ 'message_adapter_deleted' => 'Game configuration deleted.',
'error_admin_only' => 'Administrator access required.',
'mod_picker_heading' => 'Workshop library',
'mod_picker_hint' => 'Search Steam Workshop and add mods to keep them synced automatically.',
@@ -87,15 +87,15 @@ return [
'mod_picker_request_label' => 'Submitting request',
'mod_picker_request_hint' => 'Exact Steam URL preview. The input shows the text that will be submitted.',
'mod_picker_request_input_label' => 'Workshop query preview',
- 'error_game_key_required' => 'Select a valid game key before editing the adapter.',
- 'error_adapter_delete_failed' => 'Adapter could not be deleted.',
+ 'error_game_key_required' => 'Select a valid game key before editing the Workshop configuration.',
+ 'error_adapter_delete_failed' => 'Game configuration could not be deleted.',
'button_edit_adapter' => 'Edit',
'button_create_adapter' => 'Create',
'button_delete_adapter' => 'Delete',
- 'button_save_adapter' => 'Save adapter',
- 'confirm_delete_adapter' => 'Delete this adapter? Servers mapped to it will fall back to defaults.',
+ 'button_save_adapter' => 'Save game configuration',
+ 'confirm_delete_adapter' => 'Delete this game configuration? Servers mapped to it will fall back to defaults.',
'label_game_key' => 'Game key',
- 'label_adapter_name' => 'Adapter display name',
+ 'label_adapter_name' => 'Game display name',
'label_adapter_app_id' => 'Steam App ID',
'label_adapter_mods_dir' => 'Mods directory',
'label_adapter_keys_dir' => 'Keys directory (optional)',
diff --git a/modules/steam_workshop/views/admin/index.php b/modules/steam_workshop/views/admin/index.php
index 40238269..c1e94a83 100644
--- a/modules/steam_workshop/views/admin/index.php
+++ b/modules/steam_workshop/views/admin/index.php
@@ -52,7 +52,7 @@ declare(strict_types=1);
App ID
-
+