From 3b7e84f04597227ec2228d75a31af7a0367bbd5d Mon Sep 17 00:00:00 2001 From: Brad Sainty Date: Fri, 3 Apr 2026 00:00:08 +0100 Subject: [PATCH 1/5] feat: Add Runescape Dragonwilds dedicated server egg --- README.md | 2 + runescape_dragonwilds/README.md | 33 +++++ .../egg-runescape-dragonwilds.json | 134 ++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 runescape_dragonwilds/README.md create mode 100644 runescape_dragonwilds/egg-runescape-dragonwilds.json diff --git a/README.md b/README.md index bc9127f1..626f4477 100644 --- a/README.md +++ b/README.md @@ -256,6 +256,8 @@ Below is a categorized list of games with links to their respective server confi #### [Renown](./renown) +#### [RuneScape: Dragonwilds](./runescape_dragonwilds) + #### [SCUM](./scum) #### [Plains of Pain](./plains_of_pain) diff --git a/runescape_dragonwilds/README.md b/runescape_dragonwilds/README.md new file mode 100644 index 00000000..bb14ce11 --- /dev/null +++ b/runescape_dragonwilds/README.md @@ -0,0 +1,33 @@ +# RuneScape: Dragonwilds Pterodactyl Egg + +A Pterodactyl egg for the RuneScape: Dragonwilds dedicated server. + +## Resources +RAM required is 2Gb + 1Gb per player. + +The server can support up to 6 players. + + +## Mandatory configuration values +**Owner ID**: This is your RuneScape: Dragonwilds Player ID. It can be found in game at the bottom of the Settings Menu. + +**Server Name**: The name of your server, no matter what world it may run. + +**Default World Name**: Upon startup, your Dedicated Server will create a default world. This configuration value allows you to decide how you want it to be named. + +**Admin password**: Anyone who knows this password can enter the Server Management tab in the Pause Menu > Settings menu. + +**World Password**: (Optional) The password required to join the world. Leave empty for public access. + +## Find your world +To find your dedicated server, go to the Public tab of the Worlds screen, then in the search tab, enter your exact World name, case sensitive. + +## Network & Ports +By default, the server uses the following ports. If you are using Pterodactyl, ensure you have allocated these to your server instance. +| Port | Default | Protocol | Purpose | +|------|---------|----------|---------| +| Game | 7777 | UDP | Main game traffic | +| Query | 27015 | UDP | Steam Server Browser traffic | + +**Note on Allocations:** +The **Game** Port will automatically use the port assigned to your server's primary allocation if you configure it in the Pterodactyl panel. If you do not, it will default to 7777. \ No newline at end of file diff --git a/runescape_dragonwilds/egg-runescape-dragonwilds.json b/runescape_dragonwilds/egg-runescape-dragonwilds.json new file mode 100644 index 00000000..cf9a09dc --- /dev/null +++ b/runescape_dragonwilds/egg-runescape-dragonwilds.json @@ -0,0 +1,134 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": "" + }, + "exported_at": "2026-04-02T23:08:00+01:00", + "name": "RuneScape: Dragonwilds", + "author": "brad@saintyfx.com", + "description": "On RuneScape\u2019s forgotten continent of Ashenfall, dragons have awoken. Gather, build, skill and craft to survive in this co-operative survival crafting game.", + "features": [ + "steam_disk_space" + ], + "docker_images": { + "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}}", + "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}", + "logs": "{}", + "stop": "^C" + }, + "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 \"-----------------------------------------\"", + "container": "ghcr.io\/ptero-eggs\/installers:debian", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Owner ID", + "description": "Your RuneScape: Dragonwilds Player ID (Required for server startup)", + "env_variable": "DV_OWNER_ID", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "Server Name", + "description": "The name of your server", + "env_variable": "DV_SERVER_NAME", + "default_value": "A Dragonwilds Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "Admin Password", + "description": "The password used to access server management in-game", + "env_variable": "DV_ADMIN_PASSWORD", + "default_value": "ChangeMe", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "Default World Name", + "description": "The name of the world to create\/load", + "env_variable": "DV_WORLD_NAME", + "default_value": "MyWorld", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "World Password", + "description": "Optional world password. Leave empty for public access.", + "env_variable": "DV_WORLD_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Query Port", + "description": "Steam query port (UDP)", + "env_variable": "DV_QUERY_PORT", + "default_value": "27015", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Max Players", + "description": "Maximum number of players allowed on the server", + "env_variable": "DV_MAX_PLAYERS", + "default_value": "6", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Auto Update", + "description": "Enable automatic updates on server startup", + "env_variable": "AUTO_UPDATE", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Extra Arguments", + "description": "Additional server startup arguments", + "env_variable": "EXTRA_ARGS", + "default_value": "-log -unattended -NoCrashDialog", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Steam App ID", + "description": "Steam App ID for Dragonwilds server", + "env_variable": "SRCDS_APPID", + "default_value": "4019830", + "user_viewable": false, + "user_editable": false, + "rules": "required|string", + "field_type": "text" + } + ] +} \ No newline at end of file From 1d899049d7bd81f29e3dcc35aa2c6b652c59beb3 Mon Sep 17 00:00:00 2001 From: Brad Sainty Date: Mon, 6 Apr 2026 00:50:11 +0100 Subject: [PATCH 2/5] fix: update startup trigger and remove unreliable ini parser --- .../egg-runescape-dragonwilds.json | 256 +++++++++--------- 1 file changed, 128 insertions(+), 128 deletions(-) diff --git a/runescape_dragonwilds/egg-runescape-dragonwilds.json b/runescape_dragonwilds/egg-runescape-dragonwilds.json index cf9a09dc..8923a2c1 100644 --- a/runescape_dragonwilds/egg-runescape-dragonwilds.json +++ b/runescape_dragonwilds/egg-runescape-dragonwilds.json @@ -1,134 +1,134 @@ { - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", - "meta": { - "version": "PTDL_v2", - "update_url": "" - }, - "exported_at": "2026-04-02T23:08:00+01:00", - "name": "RuneScape: Dragonwilds", - "author": "brad@saintyfx.com", - "description": "On RuneScape\u2019s forgotten continent of Ashenfall, dragons have awoken. Gather, build, skill and craft to survive in this co-operative survival crafting game.", - "features": [ - "steam_disk_space" - ], - "docker_images": { - "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}}", - "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}", - "logs": "{}", - "stop": "^C" - }, - "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 \"-----------------------------------------\"", - "container": "ghcr.io\/ptero-eggs\/installers:debian", - "entrypoint": "bash" - } - }, - "variables": [ - { - "name": "Owner ID", - "description": "Your RuneScape: Dragonwilds Player ID (Required for server startup)", - "env_variable": "DV_OWNER_ID", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": "" }, - { - "name": "Server Name", - "description": "The name of your server", - "env_variable": "DV_SERVER_NAME", - "default_value": "A Dragonwilds Server", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" + "exported_at": "2026-04-06T00:41:13+01:00", + "name": "RuneScape: Dragonwilds", + "author": "brad@saintyfx.com", + "description": "On RuneScape\u2019s forgotten continent of Ashenfall, dragons have awoken. Gather, build, skill and craft to survive in this co-operative survival crafting game.", + "features": [ + "steam_disk_space" + ], + "docker_images": { + "ghcr.io\/ptero-eggs\/steamcmd:debian": "ghcr.io\/ptero-eggs\/steamcmd:debian" }, - { - "name": "Admin Password", - "description": "The password used to access server management in-game", - "env_variable": "DV_ADMIN_PASSWORD", - "default_value": "ChangeMe", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" + "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": "{}", + "startup": "{\n \"done\": \"START SESSION - Success\"\n}", + "logs": "{}", + "stop": "^C" }, - { - "name": "Default World Name", - "description": "The name of the world to create\/load", - "env_variable": "DV_WORLD_NAME", - "default_value": "MyWorld", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" + "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\nmkdir -p \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\ncat <<'EOF' > \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\/DedicatedServer.ini\n[SectionsToSave]\nbCanSaveAllSections=true\n\n[\/Script\/Dominion.DedicatedServerSettings]\nAdminPassword=\nOwnerId=\nWorldPassword=\nServerName=\nDefaultWorldName=\nServerGuid=\nEOF\n\necho \"-----------------------------------------\"\necho \"Installation completed\"\necho \"-----------------------------------------\"", + "container": "ghcr.io\/ptero-eggs\/installers:debian", + "entrypoint": "bash" + } }, - { - "name": "World Password", - "description": "Optional world password. Leave empty for public access.", - "env_variable": "DV_WORLD_PASSWORD", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Query Port", - "description": "Steam query port (UDP)", - "env_variable": "DV_QUERY_PORT", - "default_value": "27015", - "user_viewable": true, - "user_editable": true, - "rules": "required|numeric", - "field_type": "text" - }, - { - "name": "Max Players", - "description": "Maximum number of players allowed on the server", - "env_variable": "DV_MAX_PLAYERS", - "default_value": "6", - "user_viewable": true, - "user_editable": true, - "rules": "required|numeric", - "field_type": "text" - }, - { - "name": "Auto Update", - "description": "Enable automatic updates on server startup", - "env_variable": "AUTO_UPDATE", - "default_value": "1", - "user_viewable": true, - "user_editable": true, - "rules": "required|numeric", - "field_type": "text" - }, - { - "name": "Extra Arguments", - "description": "Additional server startup arguments", - "env_variable": "EXTRA_ARGS", - "default_value": "-log -unattended -NoCrashDialog", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Steam App ID", - "description": "Steam App ID for Dragonwilds server", - "env_variable": "SRCDS_APPID", - "default_value": "4019830", - "user_viewable": false, - "user_editable": false, - "rules": "required|string", - "field_type": "text" - } - ] + "variables": [ + { + "name": "Owner ID", + "description": "Your RuneScape: Dragonwilds Player ID (Required for server startup)", + "env_variable": "DV_OWNER_ID", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "Server Name", + "description": "The name of your server", + "env_variable": "DV_SERVER_NAME", + "default_value": "A Dragonwilds Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "Admin Password", + "description": "The password used to access server management in-game", + "env_variable": "DV_ADMIN_PASSWORD", + "default_value": "ChangeMe", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "Default World Name", + "description": "The name of the world to create\/load", + "env_variable": "DV_WORLD_NAME", + "default_value": "MyWorld", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "World Password", + "description": "Optional world password. Leave empty for public access.", + "env_variable": "DV_WORLD_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Query Port", + "description": "Steam query port (UDP)", + "env_variable": "DV_QUERY_PORT", + "default_value": "27015", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Max Players", + "description": "Maximum number of players allowed on the server", + "env_variable": "DV_MAX_PLAYERS", + "default_value": "6", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Auto Update", + "description": "Enable automatic updates on server startup", + "env_variable": "AUTO_UPDATE", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Extra Arguments", + "description": "Additional server startup arguments", + "env_variable": "EXTRA_ARGS", + "default_value": "-log -unattended -NoCrashDialog", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Steam App ID", + "description": "Steam App ID for Dragonwilds server", + "env_variable": "SRCDS_APPID", + "default_value": "4019830", + "user_viewable": false, + "user_editable": false, + "rules": "required|string", + "field_type": "text" + } + ] } \ No newline at end of file From 08f65c2d0fd69c1287fa1b25545ff43d9b010fb3 Mon Sep 17 00:00:00 2001 From: Brad Sainty Date: Mon, 6 Apr 2026 00:56:09 +0100 Subject: [PATCH 3/5] chore: make egg readme clearer regarding allocations --- runescape_dragonwilds/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/runescape_dragonwilds/README.md b/runescape_dragonwilds/README.md index bb14ce11..72b344a2 100644 --- a/runescape_dragonwilds/README.md +++ b/runescape_dragonwilds/README.md @@ -23,11 +23,11 @@ The server can support up to 6 players. To find your dedicated server, go to the Public tab of the Worlds screen, then in the search tab, enter your exact World name, case sensitive. ## Network & Ports -By default, the server uses the following ports. If you are using Pterodactyl, ensure you have allocated these to your server instance. +By default, the server uses the following ports. + +However, Pterodactyl ensures that the **Game** Port will automatically use the port assigned by your server's primary allocation. + | Port | Default | Protocol | Purpose | |------|---------|----------|---------| | Game | 7777 | UDP | Main game traffic | -| Query | 27015 | UDP | Steam Server Browser traffic | - -**Note on Allocations:** -The **Game** Port will automatically use the port assigned to your server's primary allocation if you configure it in the Pterodactyl panel. If you do not, it will default to 7777. \ No newline at end of file +| Query | 27015 | UDP | Steam Server Browser traffic | \ No newline at end of file From de7b6dd1956896118c496657e33604457d648639 Mon Sep 17 00:00:00 2001 From: Brad Sainty Date: Mon, 13 Apr 2026 22:00:11 +0100 Subject: [PATCH 4/5] fix: remove multihome to prevent binding errors --- .../egg-runescape-dragonwilds.json | 256 +++++++++--------- 1 file changed, 128 insertions(+), 128 deletions(-) diff --git a/runescape_dragonwilds/egg-runescape-dragonwilds.json b/runescape_dragonwilds/egg-runescape-dragonwilds.json index 8923a2c1..8bdb5eba 100644 --- a/runescape_dragonwilds/egg-runescape-dragonwilds.json +++ b/runescape_dragonwilds/egg-runescape-dragonwilds.json @@ -1,134 +1,134 @@ { - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", - "meta": { - "version": "PTDL_v2", - "update_url": "" + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": "" + }, + "exported_at": "2026-04-13T21:57:12+01:00", + "name": "RuneScape: Dragonwilds", + "author": "brad@saintyfx.com", + "description": "On RuneScape\u2019s forgotten continent of Ashenfall, dragons have awoken. Gather, build, skill and craft to survive in this co-operative survival crafting game.", + "features": [ + "steam_disk_space" + ], + "docker_images": { + "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}} -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": "{}", + "startup": "{\r\n \"done\": \"START SESSION - Success\"\r\n}", + "logs": "{}", + "stop": "^C" + }, + "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\nmkdir -p \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\ncat <<'EOF' > \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\/DedicatedServer.ini\n[SectionsToSave]\nbCanSaveAllSections=true\n\n[\/Script\/Dominion.DedicatedServerSettings]\nAdminPassword=\nOwnerId=\nWorldPassword=\nServerName=\nDefaultWorldName=\nServerGuid=\nEOF\n\necho \"-----------------------------------------\"\necho \"Installation completed\"\necho \"-----------------------------------------\"", + "container": "ghcr.io\/ptero-eggs\/installers:debian", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Owner ID", + "description": "Your RuneScape: Dragonwilds Player ID (Required for server startup)", + "env_variable": "DV_OWNER_ID", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" }, - "exported_at": "2026-04-06T00:41:13+01:00", - "name": "RuneScape: Dragonwilds", - "author": "brad@saintyfx.com", - "description": "On RuneScape\u2019s forgotten continent of Ashenfall, dragons have awoken. Gather, build, skill and craft to survive in this co-operative survival crafting game.", - "features": [ - "steam_disk_space" - ], - "docker_images": { - "ghcr.io\/ptero-eggs\/steamcmd:debian": "ghcr.io\/ptero-eggs\/steamcmd:debian" + { + "name": "Server Name", + "description": "The name of your server", + "env_variable": "DV_SERVER_NAME", + "default_value": "A Dragonwilds Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" }, - "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": "{}", - "startup": "{\n \"done\": \"START SESSION - Success\"\n}", - "logs": "{}", - "stop": "^C" + { + "name": "Admin Password", + "description": "The password used to access server management in-game", + "env_variable": "DV_ADMIN_PASSWORD", + "default_value": "ChangeMe", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" }, - "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\nmkdir -p \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\ncat <<'EOF' > \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\/DedicatedServer.ini\n[SectionsToSave]\nbCanSaveAllSections=true\n\n[\/Script\/Dominion.DedicatedServerSettings]\nAdminPassword=\nOwnerId=\nWorldPassword=\nServerName=\nDefaultWorldName=\nServerGuid=\nEOF\n\necho \"-----------------------------------------\"\necho \"Installation completed\"\necho \"-----------------------------------------\"", - "container": "ghcr.io\/ptero-eggs\/installers:debian", - "entrypoint": "bash" - } + { + "name": "Default World Name", + "description": "The name of the world to create\/load", + "env_variable": "DV_WORLD_NAME", + "default_value": "MyWorld", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" }, - "variables": [ - { - "name": "Owner ID", - "description": "Your RuneScape: Dragonwilds Player ID (Required for server startup)", - "env_variable": "DV_OWNER_ID", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Server Name", - "description": "The name of your server", - "env_variable": "DV_SERVER_NAME", - "default_value": "A Dragonwilds Server", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Admin Password", - "description": "The password used to access server management in-game", - "env_variable": "DV_ADMIN_PASSWORD", - "default_value": "ChangeMe", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Default World Name", - "description": "The name of the world to create\/load", - "env_variable": "DV_WORLD_NAME", - "default_value": "MyWorld", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "World Password", - "description": "Optional world password. Leave empty for public access.", - "env_variable": "DV_WORLD_PASSWORD", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Query Port", - "description": "Steam query port (UDP)", - "env_variable": "DV_QUERY_PORT", - "default_value": "27015", - "user_viewable": true, - "user_editable": true, - "rules": "required|numeric", - "field_type": "text" - }, - { - "name": "Max Players", - "description": "Maximum number of players allowed on the server", - "env_variable": "DV_MAX_PLAYERS", - "default_value": "6", - "user_viewable": true, - "user_editable": true, - "rules": "required|numeric", - "field_type": "text" - }, - { - "name": "Auto Update", - "description": "Enable automatic updates on server startup", - "env_variable": "AUTO_UPDATE", - "default_value": "1", - "user_viewable": true, - "user_editable": true, - "rules": "required|numeric", - "field_type": "text" - }, - { - "name": "Extra Arguments", - "description": "Additional server startup arguments", - "env_variable": "EXTRA_ARGS", - "default_value": "-log -unattended -NoCrashDialog", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Steam App ID", - "description": "Steam App ID for Dragonwilds server", - "env_variable": "SRCDS_APPID", - "default_value": "4019830", - "user_viewable": false, - "user_editable": false, - "rules": "required|string", - "field_type": "text" - } - ] + { + "name": "World Password", + "description": "Optional world password. Leave empty for public access.", + "env_variable": "DV_WORLD_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Query Port", + "description": "Steam query port (UDP)", + "env_variable": "DV_QUERY_PORT", + "default_value": "27015", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Max Players", + "description": "Maximum number of players allowed on the server", + "env_variable": "DV_MAX_PLAYERS", + "default_value": "6", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Auto Update", + "description": "Enable automatic updates on server startup", + "env_variable": "AUTO_UPDATE", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Extra Arguments", + "description": "Additional server startup arguments", + "env_variable": "EXTRA_ARGS", + "default_value": "-log -unattended -NoCrashDialog", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Steam App ID", + "description": "Steam App ID for Dragonwilds server", + "env_variable": "SRCDS_APPID", + "default_value": "4019830", + "user_viewable": false, + "user_editable": false, + "rules": "required|string", + "field_type": "text" + } + ] } \ No newline at end of file From 3e35bafab63d0011002235689d48e3ca6fd3a003 Mon Sep 17 00:00:00 2001 From: Brad Sainty Date: Mon, 13 Apr 2026 22:01:43 +0100 Subject: [PATCH 5/5] docs: update requirements and guidance for extra arguments --- runescape_dragonwilds/README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/runescape_dragonwilds/README.md b/runescape_dragonwilds/README.md index 72b344a2..5e8e8d37 100644 --- a/runescape_dragonwilds/README.md +++ b/runescape_dragonwilds/README.md @@ -2,10 +2,10 @@ A Pterodactyl egg for the RuneScape: Dragonwilds dedicated server. -## Resources -RAM required is 2Gb + 1Gb per player. - -The server can support up to 6 players. +## Resources & Requirements +- **RAM**: 2GB base + 1GB per player. +- **CPU**: Requires **AVX instruction support**. +- **Players**: The server can support up to 6 players. ## Mandatory configuration values @@ -19,6 +19,10 @@ The server can support up to 6 players. **World Password**: (Optional) The password required to join the world. Leave empty for public access. +**Extra Arguments**: If you need to pass additional startup flags (such as `-multihome`), you can add them here. + +Only use `-multihome` if you specifically need to bind to a specific IP and your networking environment supports it. + ## Find your world To find your dedicated server, go to the Public tab of the Worlds screen, then in the search tab, enter your exact World name, case sensitive.