feat: Add Runescape Dragonwilds dedicated server egg#507
feat: Add Runescape Dragonwilds dedicated server egg#507BradSainty wants to merge 3 commits intopterodactyl:mainfrom
Conversation
| "file_denylist": [], | ||
| "startup": ".\/RSDragonwilds\/Binaries\/Linux\/RSDragonwildsServer-Linux-Shipping RSDragonwilds -Port={{SERVER_PORT}} -QueryPort={{DV_QUERY_PORT}} -MultiHome={{SERVER_IP}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:OwnerId={{DV_OWNER_ID}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:AdminPassword={{DV_ADMIN_PASSWORD}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:ServerName=\"{{DV_SERVER_NAME}}\" -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:DefaultWorldName=\"{{DV_WORLD_NAME}}\" -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:WorldPassword=\"{{DV_WORLD_PASSWORD}}\" -ini:Game:[\/Script\/Engine.GameSession]:MaxPlayers={{DV_MAX_PLAYERS}} {{EXTRA_ARGS}}", | ||
| "config": { | ||
| "files": "{\n \"RSDragonwilds\/Saved\/Config\/LinuxServer\/DedicatedServer.ini\": {\n \"parser\": \"file\",\n \"find\": {\n \"AdminPassword\\\\s*=\\\\s*.*\": \"AdminPassword={{server.build.env.DV_ADMIN_PASSWORD}}\",\n \"OwnerId\\\\s*=\\\\s*.*\": \"OwnerId={{server.build.env.DV_OWNER_ID}}\",\n \"WorldPassword\\\\s*=\\\\s*.*\": \"WorldPassword={{server.build.env.DV_WORLD_PASSWORD}}\",\n \"ServerName\\\\s*=\\\\s*.*\": \"ServerName={{server.build.env.DV_SERVER_NAME}}\",\n \"DefaultWorldName\\\\s*=\\\\s*.*\": \"DefaultWorldName={{server.build.env.DV_WORLD_NAME}}\"\n }\n }\n}", |
There was a problem hiding this comment.
The file parser is known to be unreliable (pterodactyl/panel#2393) and the regex patterns can fail on this INI because the file starts with a comment line.
There was a problem hiding this comment.
This certainly caused issues during testing and was left over prior to moving to -ini flags at startup. Will clean this up.
| "startup": ".\/RSDragonwilds\/Binaries\/Linux\/RSDragonwildsServer-Linux-Shipping RSDragonwilds -Port={{SERVER_PORT}} -QueryPort={{DV_QUERY_PORT}} -MultiHome={{SERVER_IP}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:OwnerId={{DV_OWNER_ID}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:AdminPassword={{DV_ADMIN_PASSWORD}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:ServerName=\"{{DV_SERVER_NAME}}\" -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:DefaultWorldName=\"{{DV_WORLD_NAME}}\" -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:WorldPassword=\"{{DV_WORLD_PASSWORD}}\" -ini:Game:[\/Script\/Engine.GameSession]:MaxPlayers={{DV_MAX_PLAYERS}} {{EXTRA_ARGS}}", | ||
| "config": { | ||
| "files": "{\n \"RSDragonwilds\/Saved\/Config\/LinuxServer\/DedicatedServer.ini\": {\n \"parser\": \"file\",\n \"find\": {\n \"AdminPassword\\\\s*=\\\\s*.*\": \"AdminPassword={{server.build.env.DV_ADMIN_PASSWORD}}\",\n \"OwnerId\\\\s*=\\\\s*.*\": \"OwnerId={{server.build.env.DV_OWNER_ID}}\",\n \"WorldPassword\\\\s*=\\\\s*.*\": \"WorldPassword={{server.build.env.DV_WORLD_PASSWORD}}\",\n \"ServerName\\\\s*=\\\\s*.*\": \"ServerName={{server.build.env.DV_SERVER_NAME}}\",\n \"DefaultWorldName\\\\s*=\\\\s*.*\": \"DefaultWorldName={{server.build.env.DV_WORLD_NAME}}\"\n }\n }\n}", | ||
| "startup": "{\n \"done\": \"Game Engine Initialized\"\n}", |
There was a problem hiding this comment.
Game Engine Initialized fires too early, this is not indicative of the server being in a 'ready to accept connection' state. A better match would be START SESSION - Success which fires at the exact time the server is actually ready to accept connections
| }, | ||
| "scripts": { | ||
| "installation": { | ||
| "script": "#!\/bin\/bash\n# SteamCMD Base Installation Script\n\napt -y update\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\n\n# Variables\nif [[ \"${STEAM_USER}\" == \"\" ]] || [[ \"${STEAM_PASS}\" == \"\" ]]; then\n echo -e \"Using anonymous Steam login\"\n STEAM_USER=anonymous\n STEAM_PASS=\"\"\n STEAM_AUTH=\"\"\nfi\n\ncd \/tmp\nmkdir -p \/mnt\/server\/steamcmd\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\n\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\nmkdir -p \/mnt\/server\/steamapps\ncd \/mnt\/server\/steamcmd\n\nexport HOME=\/mnt\/server\n\n# Install server\n.\/steamcmd.sh +force_install_dir \/mnt\/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +app_update ${SRCDS_APPID} validate +quit\n\n# Fix steam libraries\nmkdir -p \/mnt\/server\/.steam\/sdk32\ncp -v linux32\/steamclient.so \/mnt\/server\/.steam\/sdk32\/steamclient.so\n\nmkdir -p \/mnt\/server\/.steam\/sdk64\ncp -v linux64\/steamclient.so \/mnt\/server\/.steam\/sdk64\/steamclient.so\n\n# Permissions for Sentry Crash Handler\nchmod +x \/mnt\/server\/RSDragonwilds\/Plugins\/Developer\/Sentry\/Binaries\/Linux\/crashpad_handler 2>\/dev\/null || true\n\n# Seed DedicatedServer.ini with correct headers to ensure regex find works\nmkdir -p \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\ncat <<'EOF' > \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\/DedicatedServer.ini\n;METADATA=(Diff=true, UseCommands=true)\n[SectionsToSave]\nbCanSaveAllSections=true\n\n[\/Script\/Dominion.DedicatedServerSettings]\nAdminPassword=\nOwnerId=\nWorldPassword=\nServerName=\nDefaultWorldName=\nServerGuid=\nEOF\n\necho \"-----------------------------------------\"\necho \"Installation completed\"\necho \"-----------------------------------------\"", |
There was a problem hiding this comment.
ServerGuid=. While I am not sure if a persistent guid is required or helpful, this will regenerate the server guid every time the server is rebooted
There was a problem hiding this comment.
The install script should only run once at creation time, the ServerGuid is generated once by the server and stored in the .ini file.
| "ghcr.io\/ptero-eggs\/steamcmd:debian": "ghcr.io\/ptero-eggs\/steamcmd:debian" | ||
| }, | ||
| "file_denylist": [], | ||
| "startup": ".\/RSDragonwilds\/Binaries\/Linux\/RSDragonwildsServer-Linux-Shipping RSDragonwilds -Port={{SERVER_PORT}} -QueryPort={{DV_QUERY_PORT}} -MultiHome={{SERVER_IP}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:OwnerId={{DV_OWNER_ID}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:AdminPassword={{DV_ADMIN_PASSWORD}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:ServerName=\"{{DV_SERVER_NAME}}\" -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:DefaultWorldName=\"{{DV_WORLD_NAME}}\" -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:WorldPassword=\"{{DV_WORLD_PASSWORD}}\" -ini:Game:[\/Script\/Engine.GameSession]:MaxPlayers={{DV_MAX_PLAYERS}} {{EXTRA_ARGS}}", |
Description
This PR adds a fully working implementation aligned with current repository standards for Runescape: Dragonwilds.
Addressing issue #495
Checklist for all submissions
New egg Submissions