Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 192 additions & 0 deletions runescape_dragonwilds/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
# Runescape: Dragonwilds

> [!IMPORTANT]
> ***Migrating from your private game?***
> - Ensure you have set Owner ID! See below for instructions.
> - You can import your world from `C:\Users\<your_username>\AppData\Local\RSDragonwilds\Saved\SaveGames\<your_world_name>.sav`
> - See below for location to store your save file.
___

### Authors / Contributors

<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center">
<a href="https://github.com/euno-sbs">
<img src="https://avatars.githubusercontent.com/u/272661925" width="50px;" alt=""/><br /><sub><b>euno-sbs</b></sub>
</a>
<br />
<a href="https://github.com/pterodactyl/game-eggs/commits?author=euno-sbs" title="Codes">💻</a>
</td>
<td align="center">
<a href="https://github.com/lilkingjr1">
<img src="https://avatars.githubusercontent.com/u/4533989" width="50px;" alt=""/><br /><sub><b>Red-Thirten</b></sub>
</a>
<br />
<a href="https://github.com/parkervcp/eggs/commits?author=lilkingjr1" title="Codes">💻</a>
</td>
<td align="center">
<a href="https://github.com/iamkubi">
<img src="https://avatars.githubusercontent.com/u/6176191" width="50px;" alt=""/><br /><sub><b>Kubi</b></sub>
</a>
<br />
<a href="https://github.com/parkervcp/eggs/commits?author=iamkubi" title="Codes">💻</a>
<a href="https://github.com/parkervcp/eggs/commits?author=iamkubi" title="Contributor">💡</a>
</td>
<td align="center">
<a href="https://github.com/matthewpi">
<img src="https://avatars.githubusercontent.com/u/26559841" width="50px;" alt=""/><br /><sub><b>matthewpi</b></sub>
</a>
<br />
<a href="https://github.com/parkervcp/eggs/commits?author=matthewpi" title="Codes">💻</a>
<a href="https://github.com/parkervcp/eggs/commits?author=matthewpi" title="Contributor">💡</a>
</td>
<td align="center">
<a href="https://github.com/Software-Noob">
<img src="https://avatars.githubusercontent.com/u/10975908" width="50px;" alt=""/><br /><sub><b>Software-Noob</b></sub>
</a>
<br />
<a href="https://github.com/parkervcp/eggs/commits?author=Software-Noob" title="Codes">💻</a>
<a href="https://github.com/parkervcp/eggs/commits?author=Software-Noob" title="Contributor">💡</a>
</td>
<td align="center">
<a href="https://github.com/Zarklord">
<img src="https://avatars.githubusercontent.com/u/1622280" width="50px;" alt=""/><br /><sub><b>Zarklord</b></sub>
</a>
<br />
<a href="https://github.com/parkervcp/eggs/commits?author=Zarklord" title="Codes">💻</a>
<a href="https://github.com/parkervcp/eggs/commits?author=Zarklord" title="Contributor">💡</a>
</td>
<td align="center">
<a href="https://github.com/AlienXAXS">
<img src="https://avatars.githubusercontent.com/u/1773445" width="50px;" alt=""/><br /><sub><b>AlienXAXS</b></sub>
</a>
<br />
<a href="https://github.com/parkervcp/eggs/commits?author=AlienXAXS" title="Contributor">💡</a>
</td>
<td align="center">
<a href="https://github.com/gOOvER">
<img src="https://avatars.githubusercontent.com/u/116325?v=4" width="50px;" alt=""/><br /><sub><b>gOOvER</b></sub>
</a>
<br />
<a href="https://github.com/parkervcp/eggs/commits?author=gOOvER" title="Codes">💻</a>
<a href="https://github.com/parkervcp/eggs/commits?author=gOOvER" title="Contributor">💡</a>
</td>
</tr>
</table>
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->

___

### Game Description

From Jagex's [Website](https://dragonwilds.runescape.com/):
> On RuneScape’s forgotten continent of Ashenfall, dragons have awoken. Gather, build, skill and craft to survive in this co-operative (1-6) survival crafting game. Only by mastering survival and uncovering ancient secrets can they hope to slay the Dragon Queen—alone or with allies.

___

### Egg Capabilities

- Configurable to automatically check for server updates on start via SteamCMD. Forcing validation is also configurable.
- [*Experimental*] Configurable server branch settings.

___

### Server Ports

| Port | Default | Protocol | Required | Notes |
|---------------|---------|-----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Primary** | 7777 | UDP & TCP | **Yes** | Clients connect using this port. UDP is un-encrypted game traffic. |
___

### Installation/System Requirements

| | Bare Minimum | Recommended |
|---------|---------|---------|
| Processor | Recent x86/64 (AMD/Intel) processor that supports modern instructions (ie. AVX, AES, etc.). No 32 bit or ARM support. | Favours higher single-core performance over multiple cores. If you are running Wings via Proxmox, you may need to set the VM's CPU Type to "host" to avoid session save/load crashes. |
| RAM | 3072 MiB | 4096-8192 MiB 2GB + 1GB per additonal player. |
| Storage | 5120 MiB | 7168-10240 MiB (or more, depending on save size or frequency). |
| Host OS | Most stable Linux OS branches should work. | Using the latest kernel version for your installed OS can prevent some edge-case installation/boot issues. |
| Game Ownership | Owner ID required to start. | Required to fully "initialize" (see [Server Initialization](#server-initialization) below). |

___

### Server Initialization

> [!WARNING]
> Owner ID: this is your RuneScape: Dragonwilds Player ID. It can be found in game at the bottom of the Settings Menu. Don't hesitate to use the copy button to add it to your clipboard. The server will not start without your owner ID.

The below settings can be modified in the egg.

- Server Name
- Admin Password
- Server Password
- World Name
- Owner ID

> [!NOTE]
> The admin password seems to reset on each start of the server. You can find the password here: `home/container/RSDragonwilds/Saved/Config/LinuxServer/DedicatedServer.ini`
___

### Save Files

Save files are located in the following directory, an existing save file (including single-player saves) can be uploaded to the server but the world name must match.

```md
home/container/RSDragonwilds/Saved/SaveGames/<your_world_name>.sav
```

___

### Known Errors/Warnings

The following errors or warnings you see in the console can safely be ignored:

```log
Exiting abnormally (error code: 130)
```
↑ This misleading message occurs when stopping the server. It is printed by the Unreal Engine because it doesn't know why it was interrupted (even though it was expected by us). This can be safely ignored if you notice normal engine shutdown logs above.

```log
[ 5]DominionLog: Error: TryToFindPlayerCharacter() : Local Player Character not found because World does not exist.
```
```log
[ 30]LogNetworkMatchmaker: Warning: Entitlement query failed
```
```log
[120]LogOnline: Warning: LoadSubsystemModule attempting to load module "OnlineSubsystemJpp"
```
```log
[120]LogRedpointEOS: Warning: EOS_SessionModification_AddAttribute called for string attribute '', but the string value has a length of 0 - this will probably fail!
```
```log
[120]LogNetworkMatchmaker: Warning: Entitlement query failed
```
```log
[120]LogDomMatcherSession: Warning: CREATE SESSION - Previous request still underway
```
```log
[134]LogRedpointEOS: Warning: EOS_SessionModification_AddAttribute called for string attribute '', but the string value has a length of 0 - this will probably fail!
```
```log
[361]LogRedpointEOSNetworkAuth: Warning: The dedicated server had no public/private signing keypair set, so the connection will not be automatically encrypted.
```
```log
[362]LogRedpointEOSNetworkAuth: Warning: Skipping verification of connecting user...
```
```log
[662]LogAISpawnVolume: Warning: [DedicatedServer] UpdateSpawnRowToChildVolumesMap() : Child spawn volume doesn't reference row from parent volume: Parent[AISpawnVolume_UAID_AC1A3DB43E39568202_1350897394], Child[AISpawnVolumeChildVolume], Row[Zogre_Single]
```
```log
[724]DominionLog: Warning: [DedicatedServer] FillDataArrayFromJson() : Unknown id in SpellsNew entry, skipping:
```
```log
[724]DominionLog: Warning: [DedicatedServer] LoadStateFromJson() : Unknown Actor Class in ActorsInteractedWith entry, skipping:
```
```log
[729]LogNetPackageMap: Warning: FNetGUIDCache::SupportsObject: SkillPerk...
```
↑ These seem to be common error messages with the current experimental version of the game.
104 changes: 104 additions & 0 deletions runescape_dragonwilds/egg-runescape--dragonwilds.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
{
"_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO",
"meta": {
"version": "PTDL_v2",
"update_url": null
},
"exported_at": "2026-04-02T21:34:54-04:00",
"name": "Runescape: Dragonwilds",
"author": "euno@spacebarservers.com",
"description": "A Runescape: Dragonwilds Server",
"features": [
"steam_disk_space"
],
"docker_images": {
"ghcr.io\/ptero-eggs\/steamcmd:debian": "ghcr.io\/ptero-eggs\/steamcmd:debian"
},
"file_denylist": [],
"startup": ".\/RSDragonwilds\/Binaries\/Linux\/*-Linux-Shipping RSDragonwilds -Port={{SERVER_PORT}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:OwnerId={{OWNER_ID}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:WorldPassword={{WORLD_PASSWORD}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:AdminPassword={{ADMIN_PASSWORD}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:ServerName={{SERVER_NAME}} -ini:DedicatedServer:[\/Script\/Dominion.DedicatedServerSettings]:DefaultWorldName={{WORLD_NAME}}",
"config": {
"files": "{\r\n \"RSDragonwilds\/Saved\/Config\/LinuxServer\/DedicatedServer.ini\": {\r\n \"parser\": \"ini\",\r\n \"find\": {\r\n \"[\/Script\/Dominion.DedicatedServerSettings].OwnerId\": \"{{server.build.env.OWNER_ID}}\",\r\n \"[\/Script\/Dominion.DedicatedServerSettings].WorldPassword\": \"{{server.build.env.WORLD_PASSWORD}}\",\r\n \"[\/Script\/Dominion.DedicatedServerSettings].AdminPassword\": \"{{server.build.env.ADMIN_PASSWORD}}\",\r\n \"[\/Script\/Dominion.DedicatedServerSettings].ServerName\": \"{{server.build.env.SERVER_NAME}}\",\r\n \"[\/Script\/Dominion.DedicatedServerSettings].DefaultWorldName\": \"{{server.build.env.WORLD_NAME}}\"\r\n }\r\n }\r\n}",
"startup": "{\r\n \"done\": \"Engine Initialization\"\r\n}",
"logs": "{}",
"stop": "^C"
},
"scripts": {
"installation": {
"script": "#!\/bin\/bash\r\n\r\n# File: Pterodactyl Runescape: Dragonwilds Egg - egg-rsdragonwilds.json\r\n# Authors: Euno, Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord\r\n# Date: 2026\/03\/31\r\n# License: MIT License\r\n\r\n## Download and install SteamCMD\r\ncd \/tmp\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\nmkdir -p \/mnt\/server\/steamcmd\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server +login anonymous +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s \"-beta ${SRCDS_BETAID}\" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s \"-betapassword ${SRCDS_BETAPASS}\" ) validate +exit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so \/mnt\/server\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so \/mnt\/server\/.steam\/sdk64\/steamclient.so\r\n\r\n## Runescape: Dragonwilds setup\r\n# Check for successful installation and make the server binary executable.\r\n# Use `find` to see if a valid server binary exists using a wildcard, because\r\n# the binary name may change in the future.\r\n# (eg. it changed when the engine was updated from UE4 to UE5)\r\ncd \/mnt\/server\/RSDragonwilds\/Binaries\/Linux\r\ncount=$(find . -maxdepth 1 -name '*-Linux-Shipping' -type f -executable | wc -l)\r\nif [[ $count -eq 0 ]]; then\r\n echo -e \"\\n\\nSteamCMD failed to install the Runescape: Dragonwilds Dedicated Server!\"\r\n echo -e \"\\tTry reinstalling the server again.\\n\"\r\n exit 1\r\nelse\r\n chmod +x *-Linux-Shipping\r\nfi\r\n\r\nmkdir -p \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\r\ntouch \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\/DedicatedServer.ini\r\ncat > \/mnt\/server\/RSDragonwilds\/Saved\/Config\/LinuxServer\/DedicatedServer.ini << 'EOF'\r\n;METADATA=(Diff=true, UseCommands=true)\r\n[SectionsToSave]\r\nbCanSaveAllSections=true\r\n\r\n[\/Script\/Dominion.DedicatedServerSettings]\r\nAdminPassword=\r\nOwnerId=\r\nWorldPassword=\r\nServerName=\r\nDefaultWorldName=\r\nServerGuid=\r\nEOF\r\n\r\necho -e \"\\nRunescape: Dragonwilds Dedicated Server successfully installed!\\n\"",
"container": "ghcr.io\/ptero-eggs\/installers:debian",
"entrypoint": "bash"
}
},
"variables": [
{
"name": "Runescape: Dragonwilds Dedicated Server App ID",
"description": "Steam App ID used for installation and updates.",
"env_variable": "SRCDS_APPID",
"default_value": "4019830",
"user_viewable": false,
"user_editable": false,
"rules": "required|integer|in:4019830",
"field_type": "text"
},
{
"name": "Branch Name",
"description": "[Accepted Values: \"public\", \"experimental\", or leave empty to use the primary branch of the server] Used to download or switch to a non-primary branch of the game server. \"Automatic Updates\" and \"Validate Server Files\" must be set to \"1\" to switch branches if the server is already installed. NOTE: Any non-primary branches may not be fully compatible\/stable!",
"env_variable": "SRCDS_BETAID",
"default_value": "",
"user_viewable": true,
"user_editable": true,
"rules": "string|nullable|in:public,experimental",
"field_type": "text"
},
{
"name": "Owner ID",
"description": "this is your RuneScape: Dragonwilds Player ID. It can be found in game at the bottom of the Settings Menu. Don't hesitate to use the copy button to add it to your clipboard. The server will not start without your owner ID.",
"env_variable": "OWNER_ID",
"default_value": "",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:32",
"field_type": "text"
},
{
"name": "Server Password",
"description": "this is the password for players to connect to the game",
"env_variable": "WORLD_PASSWORD",
"default_value": "",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:64",
"field_type": "text"
},
{
"name": "Admin Password",
"description": "this is the password that allows you to connect to the admin management tab of the server",
"env_variable": "ADMIN_PASSWORD",
"default_value": "",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:64",
"field_type": "text"
},
{
"name": "Server Name",
"description": "name that shows up for your listed server",
"env_variable": "SERVER_NAME",
"default_value": "pterodactyl server",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:32",
"field_type": "text"
},
{
"name": "World Name",
"description": "upon startup, your Dedicated Server will create a default world. This configuration value allows you to decide how you want it to be named.",
"env_variable": "WORLD_NAME",
"default_value": "world",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:20",
"field_type": "text"
}
]
}