5.4 KiB
Server Content Manager
Current State
Panel/modules/addonsmanager is the current home of GSP's Server Content / Add-ons / Workshop work.
The module title has already been moved toward Server Content Manager, but the schema and some folder names remain backward-compatible.
Important files:
Panel/modules/addonsmanager/module.phpPanel/modules/addonsmanager/addons_manager.phpPanel/modules/addonsmanager/user_addons.phpPanel/modules/addonsmanager/workshop_content.phpPanel/modules/addonsmanager/workshop_action.phpPanel/modules/addonsmanager/server_content_helpers.phpPanel/modules/addonsmanager/server_content_categories.php
Database Tables
Known tables used by the module:
addonsserver_content_workshopserver_content_manifestserver_content_install_history
What It Already Does
The module can already represent several content types, including:
- downloads/extracted packages
- post-script driven installs
- workshop-oriented items
- config packs
- future profile-type content
For Workshop items, the current flow lets users enter Workshop IDs or full Steam Workshop URLs and routes the install through module pages and agent-side scripts.
Workshop Phase 1 Flow
- Admin creates a Server Content template with install method
steam_workshop. - Admin configures the Workshop App ID on the template or relies on the game XML/profile fallback.
- User opens
Server Contentfrom the game monitor. - User selects the Steam Workshop Mods category.
- User enters one or more Workshop URLs or numeric IDs.
- Panel parses IDs, rejects invalid entries, and records rows in
server_content_workshop. - Panel writes a manifest to
{SERVER_HOME}/gsp_server_content/workshop_manifest.json. - Panel syncs the bundled Linux or Cygwin script into
{SERVER_HOME}/gsp_server_content/scripts/workshop/. - Agent executes the script with the manifest path.
- Script runs SteamCMD, copies Workshop content into the configured target path, copies DayZ/Arma
.bikeyfiles when applicable, and writes a log undergsp_server_content.
Current script fallback behavior:
- Admin-defined custom scripts are supported when they exist on the agent.
- Missing custom scripts fall back to the bundled generic handler and are logged.
- Default script names such as
generic_steam_workshop_windows_cygwin.share copied from the Panel module source and must not be checked as bare files on the agent.
Current default install paths:
- Generic Steam Workshop content:
{SERVER_ROOT}/workshop/{MOD_FOLDER} - DayZ / Arma strategy content:
{SERVER_ROOT}/{MOD_FOLDER}for root@<workshop_id>folder compatibility
Game XML fallback should use the canonical workshop_support block:
<workshop_support>
<enabled>1</enabled>
<provider>steam</provider>
<steam_app_id>107410</steam_app_id>
<workshop_app_id>107410</workshop_app_id>
<download_method>steamcmd</download_method>
<install_strategy>arma_mod_folder</install_strategy>
<install_path>{SERVER_ROOT}/{MOD_FOLDER}</install_path>
<startup_param_format>-mod={MOD_LIST}</startup_param_format>
<mod_separator>;</mod_separator>
<mod_prefix>@</mod_prefix>
<copy_keys enabled="1">
<source_pattern>{MOD_PATH}/keys/*.bikey</source_pattern>
<target_path>{SERVER_ROOT}/keys</target_path>
</copy_keys>
</workshop_support>
The Panel helper parser reads this block first and only tolerates old direct tags as an internal compatibility fallback.
SteamCMD requirements:
- Linux agents need SteamCMD available at the configured profile/template path,
STEAMCMD_PATH,/home/gameserver/steamcmd/steamcmd.sh, or inPATH. - Windows agents currently use the existing Cygwin agent model and run the bundled Cygwin-compatible shell handler. SteamCMD may be provided as
steamcmd.exe,steamcmd.sh, an explicit configured path, or viaSTEAMCMD_PATH. - Missing SteamCMD should return a clear error, not a generic script failure.
The legacy steam_workshop monitor button is intentionally suppressed so users are not sent to the deprecated standalone module.
Current Limitations
- Workshop and content metadata is still partial.
- Load order and enable/disable are tracked but not wired into startup-parameter generation yet.
- Async install job progress should be more visible.
- Install strategies are still being broadened and need consistent game-specific rules.
- DayZ/Arma style key-copy is implemented for Phase 1; startup-param behavior still needs a stronger canonical implementation.
- Cache and cleanup policy need a clearer product design.
Where To Start Reading
Panel/modules/addonsmanager/module.phpPanel/modules/addonsmanager/addons_manager.phpPanel/modules/addonsmanager/user_addons.phpPanel/modules/addonsmanager/workshop_content.phpPanel/modules/addonsmanager/workshop_action.php
Important Concept
This module is the right place for:
- mods
- add-ons
- Workshop content
- config packs
- script-driven installs
- server content manifests
- install history
The old steam_workshop module should be treated as a deprecated compatibility layer, not the main future path.
Validation
Relevant smoke tests:
php Panel/modules/addonsmanager/tests/workshop_helpers_test.php
php Panel/modules/config_games/tests/validate_server_configs.php
validate_server_configs.php validates every XML file under Panel/modules/config_games/server_configs/ against schema_server_config.xml.