4.3 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
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.