5.3 KiB
Workshop System
Current State
The current Workshop/content work is split across two module lines:
Panel/modules/steam_workshop- deprecated compatibility layerPanel/modules/addonsmanager- the active Server Content Manager path
Important files:
Panel/modules/addonsmanager/module.phpPanel/modules/addonsmanager/user_addons.phpPanel/modules/addonsmanager/addons_manager.phpPanel/modules/addonsmanager/workshop_content.phpPanel/modules/addonsmanager/workshop_action.phpPanel/modules/addonsmanager/scripts/workshop/generic_steam_workshop_linux.shPanel/modules/addonsmanager/scripts/workshop/generic_steam_workshop_windows_cygwin.shPanel/modules/steam_workshop/module.phpPanel/modules/steam_workshop/agent_update_workshop.php
Phase 1 Implemented Behavior
The active user workflow is now addonsmanager -> workshop_content.
Users can enter either:
- a numeric Workshop item ID
- a full Steam Workshop URL containing
id=<number>
The Panel extracts and stores only numeric Workshop IDs. Invalid text is rejected before any manifest or shell command is built.
The Panel writes a manifest under the server home:
{SERVER_HOME}/gsp_server_content/workshop_manifest.json
The Panel syncs the bundled install script to:
{SERVER_HOME}/gsp_server_content/scripts/workshop/generic_steam_workshop_linux.sh{SERVER_HOME}/gsp_server_content/scripts/workshop/generic_steam_workshop_windows_cygwin.sh
The agent executes the synced script with the manifest path. Customers do not need to place scripts manually on the agent.
Script selection rules:
- If game XML defines a custom
workshop_script_linuxorworkshop_script_windowsand that script exists on the agent, use it. - If the custom script is missing, log a fallback warning and stage the bundled generic handler.
- If no custom script is defined, stage the bundled generic handler for the server OS.
- The default script filename must never be treated as a pre-existing agent path. The Panel must copy the bundled script first.
The manifest includes:
home_id- server/game path
workshop_app_id- Workshop item IDs
- per-item target paths
- install strategy
- key-copy settings
- content template metadata
Default install paths:
- Generic Workshop installs default to
{SERVER_ROOT}/workshop/{MOD_FOLDER}. - DayZ/Arma-style installs default to
dayz_mod_folderorarma_mod_folderbased on the game key/name/config file. Those strategies install to{SERVER_ROOT}/{MOD_FOLDER}so@<workshop_id>folders remain compatible with existing-mod=workflows. - DayZ/Arma key-copy behavior copies
.bikeyfiles into the serverkeysfolder when found. Missing key files are logged but do not fail the install.
App ID rules:
workshop_app_idmust come from a Server Content template, Steam Workshop profile, or game XML.- Do not silently use the dedicated server Steam app ID as the Workshop app ID unless a legacy profile explicitly does so.
- Arma 3 XML declares Workshop app ID
107410; its dedicated server Steam app ID remains233780.
Database State
server_content_workshop tracks:
content_idhome_idworkshop_app_idworkshop_item_idtitleinstall_pathinstall_strategyenabledload_orderinstall_statelast_installed_atlast_updated_atlast_error
Current install states used by Phase 1:
queuedinstallinginstalledfailedremoved
What Exists Today
The current direction already supports:
- content records in the Panel database
- Workshop item IDs
- installation metadata
- install history tables
- game compatibility fields
- launch parameter additions
- post-install behavior fields
Main Limitations
- Workshop metadata is still incomplete.
- load order is tracked but not yet a full drag-and-drop or startup-param UX concept.
- enable/disable is stored but does not yet regenerate startup parameters.
- update/remove are synchronous and should become background jobs.
- caching and cleanup policy need product-level design, not just ad hoc scripts.
-mod=/-serverMod=generation still needs a safe structured implementation.
Troubleshooting
| Symptom | Meaning | Fix |
|---|---|---|
Configured workshop script not found on agent host: generic_steam_workshop_windows_cygwin.sh |
Old Panel logic treated the default script filename as an agent path. | Update the Panel. Current logic stages the bundled handler under gsp_server_content/scripts/workshop/. |
SteamCMD is missing on the agent host. |
The handler could not find SteamCMD at the configured path, STEAMCMD_PATH, or common locations. |
Install SteamCMD on the agent and/or set the SteamCMD path in the Workshop profile/template. |
Workshop App ID is missing |
No template/profile/XML provided an app ID. | Add workshop_app_id to the Server Content template or game XML. |
| Download succeeds but mod does not load | Startup parameters are not yet regenerated from installed Workshop rows. | Manually add the installed @... folders to the game startup params until Phase 2 startup integration is complete. |
Recommended Mental Model
Use addonsmanager as the main future home for:
- mods
- add-ons
- Workshop items
- scripts
- config packs
- server content manifests
- install history
Treat steam_workshop as a legacy bridge for migration only.