diff --git a/runescape-dragonwilds/README.md b/runescape-dragonwilds/README.md new file mode 100644 index 0000000..8ef155a --- /dev/null +++ b/runescape-dragonwilds/README.md @@ -0,0 +1,81 @@ +# runescape-dragonwilds + +## Overview + +Dedicated server for RuneScape: DragonWilds, run via SteamCMD. Server files are downloaded/updated on start and saves persist to a host volume. + +## Project Details + +- **Project Repository:** [indifferentbroccoli/runescape-dragonwilds-server-docker](https://github.com/indifferentbroccoli/runescape-dragonwilds-server-docker) +- **Container Image:** [Docker Hub](https://hub.docker.com/r/indifferentbroccoli/runescape-dragonwilds-server-docker) +- **Compose Example:** [Compose](https://github.com/indifferentbroccoli/runescape-dragonwilds-server-docker#docker-compose) +- **Reverse Proxy Port:** none — game traffic is UDP `7777` (game) and `8888` (beacon), not proxied through NPM + +## Getting Started + +1. Copy `sample.env` to `.env` and set `RSDW_OWNER_ID` (your Player ID, found in the game's Settings) and `RSDW_ADMIN_PASSWORD` +2. Forward UDP `7777` and `8888` on your router/firewall to the Docker host +3. Start the container: `docker compose up -d` +4. Watch the first start (it downloads the server files): `docker compose logs -f` +5. In game, find the server by `RSDW_SERVER_NAME` and use `RSDW_ADMIN_PASSWORD` for Server Management + +## Environment Variable Notes + + RSDW_OWNER_ID – REQUIRED. Your RuneScape: DragonWilds Player ID (in-game Settings) + RSDW_ADMIN_PASSWORD – REQUIRED. Server Management password, default: ChangeThisPassword + RSDW_WORLD_PASSWORD – optional join password; empty = public + RSDW_SERVER_NAME – server display name, default: DragonWildsServer + RSDW_WORLD_NAME – world created on first start, default: MyWorld + RSDW_MAX_PLAYERS – default: 6 + RSDW_PORT – game UDP port, default: 7777 (also sets DEFAULT_PORT in the container) + RSDW_BEACON_PORT – world settings beacon UDP port, default: 8888 (also sets BEACON_PORT) + RSDW_UPDATE_ON_START – set false to skip SteamCMD download/validation on start + RSDW_PUID / RSDW_PGID – owner of the server files, default: 1000 + +## Volume Notes + + /home/steam/server-files – host path /data/runescape-dragonwilds/server-files (server binaries, saves, config) + +Back up the saves inside this directory; the server binaries can be re-downloaded. + +## Network Notes + +Requires proxy network (declared for convention only — players connect directly over UDP, not through NPM). + +## Docker Run + +```bash +docker run -d \ + --name runescape-dragonwilds \ + --restart unless-stopped \ + --stop-timeout 30 \ + -p 7777:7777/udp \ + -p 8888:8888/udp \ + -e OWNER_ID=YourPlayerId \ + -e ADMIN_PASSWORD=ChangeThisPassword \ + -v /data/runescape-dragonwilds/server-files:/home/steam/server-files \ + indifferentbroccoli/runescape-dragonwilds-server-docker:latest +``` + +See compose.yaml for the full set of environment variables. + +## Additional Notes / Gotchas + +- Host and container ports **must match** — mismatched ports cause join failures. The compose file uses the same var for both sides; don't remap one without the other. +- The beacon port (8888) is required for creating/editing worlds. +- The server won't show up without working port forwarding and a valid `OWNER_ID`/`ADMIN_PASSWORD`. +- RAM: about 2 GB + 1 GB per player (8 GB for a full 6-player server). +- `stop_grace_period: 30s` gives the server time to save on shutdown. +- Crossplay (PC, PS5, Xbox Series X|S, Switch 2) is supported since 1.0. The image doesn't set `PlatformPolicy` in `DedicatedServer.ini`, so the game default (`Crossplay`) applies. It rewrites that file on every start, so a manual `PlatformPolicy=` edit to lock the server to one platform won't survive a restart. +- Clients must be on the same game version as the server — keep `RSDW_UPDATE_ON_START=true` and restart after game patches. There is no cross-save: character progress doesn't carry between platforms. + +## Dockhand Stack, Deploy from Git + +Cookbooks Repository +stackname: runescape-dragonwilds +Compose file path: runescape-dragonwilds/compose.yaml +Additional env file (optional): runescape-dragonwilds/sample.env + +Then "Load" runescape-dragonwilds/sample.env into the Environmental variables in dockhand + +Create the Stack diff --git a/runescape-dragonwilds/compose.yaml b/runescape-dragonwilds/compose.yaml new file mode 100644 index 0000000..789efa7 --- /dev/null +++ b/runescape-dragonwilds/compose.yaml @@ -0,0 +1,28 @@ +services: + runescape-dragonwilds: + image: ${RSDW_IMAGE:-indifferentbroccoli/runescape-dragonwilds-server-docker:latest} + restart: ${RSDW_RESTART:-unless-stopped} + stop_grace_period: 30s + volumes: + - ${VOL_PATH:-/data}/runescape-dragonwilds/server-files:/home/steam/server-files + environment: + - PUID=${RSDW_PUID:-1000} + - PGID=${RSDW_PGID:-1000} + - UPDATE_ON_START=${RSDW_UPDATE_ON_START:-true} + - OWNER_ID=${RSDW_OWNER_ID:-} + - SERVER_NAME=${RSDW_SERVER_NAME:-DragonWildsServer} + - DEFAULT_WORLD_NAME=${RSDW_WORLD_NAME:-MyWorld} + - ADMIN_PASSWORD=${RSDW_ADMIN_PASSWORD:-ChangeThisPassword} + - WORLD_PASSWORD=${RSDW_WORLD_PASSWORD:-} + - DEFAULT_PORT=${RSDW_PORT:-7777} + - BEACON_PORT=${RSDW_BEACON_PORT:-8888} + - MAX_PLAYERS=${RSDW_MAX_PLAYERS:-6} + ports: # host and container ports must match + - "${RSDW_PORT:-7777}:${RSDW_PORT:-7777}/udp" + - "${RSDW_BEACON_PORT:-8888}:${RSDW_BEACON_PORT:-8888}/udp" + networks: + - proxy + +networks: + proxy: + external: true diff --git a/runescape-dragonwilds/sample.env b/runescape-dragonwilds/sample.env new file mode 100644 index 0000000..f4b11f6 --- /dev/null +++ b/runescape-dragonwilds/sample.env @@ -0,0 +1,17 @@ +# Compose +VOL_PATH=/data +RSDW_IMAGE=indifferentbroccoli/runescape-dragonwilds-server-docker:latest +RSDW_RESTART=unless-stopped +RSDW_PORT=7777 +RSDW_BEACON_PORT=8888 + +# Server +RSDW_PUID=1000 +RSDW_PGID=1000 +RSDW_UPDATE_ON_START=true +RSDW_OWNER_ID= +RSDW_SERVER_NAME=DragonWildsServer +RSDW_WORLD_NAME=MyWorld +RSDW_ADMIN_PASSWORD=ChangeThisPassword +RSDW_WORLD_PASSWORD= +RSDW_MAX_PLAYERS=6