# XML Game Configuration System ## Purpose The XML game configuration system describes how a game server should be started, queried, and customized. Primary files: - `Panel/modules/config_games/schema_server_config.xml` - `Panel/modules/config_games/server_config_parser.php` - `Panel/modules/config_games/xml_config_creator.php` - `Panel/modules/config_games/config_servers.php` - `Panel/modules/config_games/cli-params.php` - `Panel/modules/config_games/set_params.php` ## What XML Controls The schema supports: - game and installer names - startup command templates - CLI parameter substitution - reserved ports - query port calculation - control protocol selection - mod definitions - Workshop / Server Content capability declarations - custom fields - server parameter groups - text replacement helpers ## Important Variables The schema and startup builder can work with variables such as: - `GAME_TYPE` - `HOSTNAME` - `IP` - `MAP` - `PID_FILE` - `PLAYERS` - `PORT` - `QUERY_PORT` - `BASE_PATH` - `HOME_PATH` - `SAVE_PATH` - `OUTPUT_PATH` - `USER_PATH` - `CONTROL_PASSWORD` ## Startup Parameters The Panel builds startup parameters from the XML template and the stored server configuration. Key concepts: - `cli_template` - `cli_params` - `reserve_ports` - `server_params` - `custom_fields` - `clean_server_param_value` The XML file defines: - which parameters exist - how they are quoted or spaced - whether the parameter is editable by the customer - what defaults should be used ## Query Definitions The XML schema supports query-related concepts such as: - `gameq` - `lgsl` - `teamspeak3` - query port offset calculations - control protocol selection These values are used by `gamemanager` and the agent status logic to calculate query metadata, not to decide online/offline by themselves. ## Installation and File Editing XML definitions also feed: - config file shortcuts - install-time behavior - docs links - reserved ports - mod or content behavior ## Workshop / Server Content Capability Workshop-enabled games must use the canonical `workshop_support` block. Loose top-level tags such as `workshop_app_id` are compatibility parser fallbacks only and should not be used in new game XML because schema validation is intentionally strict. Example: ```xml 1 steam 107410 107410 steamcmd arma_mod_folder {SERVER_ROOT}/{MOD_FOLDER} -mod={MOD_LIST} ; @ {MOD_PATH}/keys/*.bikey {SERVER_ROOT}/keys ``` Supported `install_strategy` values: - `game_managed_workshop` - `steamcmd_download_only` - `copy_to_game_root` - `copy_to_mod_folder` - `dayz_mod_folder` - `arma_mod_folder` - `config_only` - `custom_scripted_install` `workshop_app_id` is the Steam Workshop app ID used by `steamcmd +workshop_download_item`. It is not automatically the same as a dedicated server installer app ID. For Arma 3, Workshop content uses `107410` while the dedicated server installer remains defined on the normal mod installer entry. The current XML schema is validated by: ```bash php Panel/modules/config_games/tests/validate_server_configs.php ``` ## Recommended Mental Model Think of the XML system as the capability definition layer: ```text game XML -> startup template -> parameter rules -> query rules -> content/mod hooks -> docs links -> scheduler and status hints ```