feat: Add Runescape Dragonwilds dedicated server egg#507
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}}", |
|
I hade some issues with Unrelated but also requires AVX instruction support on the CPU, took me way longer then id like to admit to pin that down :) |
Good points, Added a note regarding AVX support. |
|
Pretty green to doing anything but downloading things from git repos. Let me know if i am doing it wrong. :D My DedicatedServer.ini file does not seem to be populating my settings from startup tab. As a result the .sav file (a friend's local.sav) is not being started with my Owner ID GUID or any of the other startup settings outside of the ones above. The server actually runs relatively fine, but I think the owner mismatch is causing some minor wonkiness; in the console it lists my friends username(not his actual GUID) when saving the world. EDIT: Think i tracked this down to a Redis/Laravel issue, caused by a time change. After clearing the panel cache and restarting wings, it seems to be properly pulling from the database now. |
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