diff --git a/README.md b/README.md index 14a98a8c..dbd8c1cd 100644 --- a/README.md +++ b/README.md @@ -264,6 +264,8 @@ Below is a categorized list of games with links to their respective server confi #### [Soldat 2](./soldat_2) +#### [StarRupture](./starrupture) + #### [Sunkenland](./sunkenland) ### [Voyager of Nera](./voyagers_of_nera) diff --git a/starrupture/README.md b/starrupture/README.md new file mode 100644 index 00000000..807f6303 --- /dev/null +++ b/starrupture/README.md @@ -0,0 +1,137 @@ +# StarRupture + +StarRupture is a first-person open-world base-building game with advanced combat and tons of exploration. Play alone or in a group on this sublime and ever-changing planet, extract and manage resources, create your complex industrial system, and fight off hordes of alien monsters. + +> ⚠️ **Note:** Server software is still in an experimental phase. Expect some issues in future updates! +## Contributors + +| Name | GitHub Profile | +|------------|-----------------------------------------| +| brainshead | https://github.com/brainshead | +| SavageCore | https://github.com/SavageCore | + +## Server Ports + +StarRupture requires 1 port: + +| Port | Default | +|------|---------| +| Game | 7777 | + +This can be changed to any port. + +## System Requirements + +| Type | Memory | Storage | +|-------------|--------|---------| +| Bare Minimal| 6 GB | 25 GB | +| Recommended | 12~16+ GB | 40 GB+ | + +## Configuration Files + +| File | Purpose | Path | +|---------------------|------------------------------|--------------------------------------------| +| DSSettings.txt | Server configuration for save management | /home/container/DSSettings.txt | +| Password.json | Admin password configuration | /home/container/Password.json | +| PlayerPassword.json | Server join password configuration | /home/container/PlayerPassword.json | +| .pteroignore | Files/folders to ignore during backups | /home/container/.pteroignore | + +Unofficial documentation: https://wiki.starrupture-utilities.com/en/dedicated-server/configuration + +--- + +## Configuration + +# Setup Methods + +There are two ways to configure your server: via the **Panel** (recommended) or **In-Game**. Choose one method and follow it consistently. + +--- + +## Method 1: Panel Configuration (Recommended) + +This method uses the Pterodactyl Panel and DSSettings.txt for all configuration. It is the recommended approach because settings persist across server restarts, and the in-game management system has known vulnerabilities, such as wiping saves and changing admin passwords. Read more: https://wiki.starrupture-utilities.com/en/dedicated-server/Vulnerability-Announcement + +> ⚠️ **Important:** Always stop the server before making configuration changes. + +### Password Setup + +> ⚠️ **Warning:** Anyone who knows your IP and port can join your server if no password is set! + +#### Automatic Setup (Recommended) + +If you set the `[SERVER] Admin Password` and `[SERVER] Player Password` variables in the **Startup** tab before installing the server, the password files will be created automatically during installation. + +#### Manual Setup + +If you didn't set passwords during installation, you can create them manually: + +1. Visit https://starrupture-utilities.com/passwords +2. Generate both an Admin password and a Player password +3. Create `Password.json` in the root of the container (`/home/container/`) and paste the generated content +4. Create `PlayerPassword.json` in the root of the container (`/home/container/`) and paste the generated content +5. Start the server + +### Save Game Settings + +The egg manages `DSSettings.txt` automatically via the Panel's **Startup** tab. + +| Panel Option | DSSettings.txt Key | Description | +|----------------------------|--------------------|----------------------------------------------------------------| +| `[SERVER] Session Name` | `SessionName` | Name of the save game session (max 20 characters) | +| `[SERVER] Save Interval` | `SaveGameInterval` | Time between automatic saves in seconds (e.g., `300` = 5 mins) | +| `[SERVER] Start new Savegame` | `StartNewGame` | `true` to create a new world (use only once!) | +| `[SERVER] Load saved Game` | `LoadSavedGame` | `true` to load an existing save on startup | +| `[SERVER] Savegame Name` | `SaveGameName` | Filename of the save to load (e.g., `AutoSave0.sav`) | + +### Creating a New World + +> ⚠️ **Important:** Only enable `Start new Savegame` for initial world creation - disable it immediately after! + +1. Stop the server +2. Go to the **Startup** tab in the Panel +3. Set `[SERVER] Load saved Game` to `false` +4. Set `[SERVER] Start new Savegame` to `true` +5. Start the server and wait for it to finish loading + 1. Join using the server's WAN IP and port + 2. Press ESC to open the menu and then select Save. This will instruct the server to save the file to `StarRupture\Saved\SaveGames\SessionName` + 3. Disconnect from the server +6. Stop the server +7. Set `[SERVER] Load saved Game` to `true` +8. Set `[SERVER] Start new Savegame` to `false` +9. Start the server - your world will now load automatically on every startup + +### Loading an Existing Save + +1. Stop the server +2. Go to the **Startup** tab in the Panel +3. Set `[SERVER] Load saved Game` to `true` +4. Set `[SERVER] Start new Savegame` to `false` +5. Set `[SERVER] Savegame Name` to match your save file (e.g., `AutoSave0.sav`) +6. Set `[SERVER] Session Name` to match your session folder name (e.g., `StarRuptureServer`) +7. Start the server + +--- + +## Method 2: In-Game Configuration + +This method uses the game's built-in **Manage Server** feature. Only use this method if you have issues with DSSettings.txt and are aware of the vulnerabilities mentioned above. + +> ⚠️ **Important:** For this method to work, `DSSettings.txt` must **not** exist. Shutdown the server and delete it if present. You'll be stuck on a loading spinner when trying to connect if it exists. You must also remove `-RCWebControlDisable` and `-RCWebInterfaceDisable` from the startup parameters in the **Startup** tab. + +### Password Setup + +1. Start your server +2. Open the StarRupture game client +3. From the main menu, select **Manage Server** and connect to your server +4. When prompted, configure an **Admin Password** +5. Click **Change Password** to set the player join password + +### Save Game Management + +1. Start your server +2. Open the StarRupture game client +3. From the main menu, select **Manage Server** and connect to your server +4. Use the in-game interface to create a new world or load an existing save + +> ⚠️ **Note:** With this method, you will need to load your save via the in-game interface each time the server restarts. diff --git a/starrupture/egg-star-rupture-wine.json b/starrupture/egg-star-rupture-wine.json new file mode 100644 index 00000000..2027b3cc --- /dev/null +++ b/starrupture/egg-star-rupture-wine.json @@ -0,0 +1,212 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2026-01-31T16:28:24+01:00", + "name": "StarRupture Wine", + "author": "brainshead@gmail.com", + "description": "StarRupture is a first-person open world base-building game with advanced combat and tons of exploration. Play alone or in a group on this sublime and ever-changing planet, extract and manage resources, create your complex industrial system and fight off hordes of alien monsters.", + "features": [], + "docker_images": { + "Wine Latest": "ghcr.io\/ptero-eggs\/yolks:wine_latest" + }, + "file_denylist": [], + "startup": "wine \/home\/container\/StarRupture\/Binaries\/Win64\/StarRuptureServerEOS-Win64-Shipping.exe -Log -Port=${SERVER_PORT} -RCWebControlDisable -RCWebInterfaceDisable & SR_PID=$!; tail -c0 -F \/home\/container\/StarRupture\/Saved\/Logs\/StarRupture.log --pid=$SR_PID | grep -v -E \"LogCore: Warning|LogUObjectBase: Error\"", + "config": { + "files": "{\r\n \"DSSettings.txt\": {\r\n \"parser\": \"json\",\r\n \"find\": {\r\n \"SessionName\": \"{{server.build.env.SESSION_NAME}}\",\r\n \"SaveGameInterval\": \"{{server.build.env.SAVE_INTERVAL}}\",\r\n \"StartNewGame\": \"{{server.build.env.START_NEW}}\",\r\n \"LoadSavedGame\": \"{{server.build.env.LOAD_SAVE}}\",\r\n \"SaveGameName\": \"{{server.build.env.SAVEGAME_NAME}}\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \"OnUpdateSessionComplete\"\r\n}", + "logs": "{}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n# steamcmd Base Installation Script\r\n\r\n\r\n## just in case someone removed the defaults.\r\nif [ \"${STEAM_USER}\" == \"\" ]; then\r\n echo -e \"steam user is not set.\\n\"\r\n echo -e \"Using anonymous user.\\n\"\r\n STEAM_USER=anonymous\r\n STEAM_PASS=\"\"\r\n STEAM_AUTH=\"\"\r\nelse\r\n echo -e \"user set to ${STEAM_USER}\"\r\nfi\r\n\r\n## download and install steamcmd\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\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\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n## install game using steamcmd\r\n\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s \"-beta ${SRCDS_BETAID}\" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s \"-betapassword ${SRCDS_BETAPASS}\" ) ${INSTALL_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6\r\n\r\n## set up 32 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v linux32\/steamclient.so ..\/.steam\/sdk32\/steamclient.so\r\n\r\n## set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so\r\n\r\n#Custom Commands\r\n\r\n## create DSSettings.txt\r\nif [ ! -f \/mnt\/server\/DSSettings.txt ]; then\r\n echo \"Creating default DSSettings.txt\"\r\n cat << EOF > \/mnt\/server\/DSSettings.txt\r\n {\r\n \"SessionName\": \"StarRuptureServer\",\r\n \"SaveGameInterval\": \"300\",\r\n \"StartNewGame\": \"false\",\r\n \"LoadSavedGame\": \"true\",\r\n \"SaveGameName\": \"AutoSave0.sav\"\r\n }\r\nEOF\r\nfi\r\n\r\n## create .pteroignore to only back up necessary files\r\nif [ ! -f \/mnt\/server\/.pteroignore ]; then\r\n echo \"Creating default .pteroignore\"\r\n cat << EOF > \/mnt\/server\/.pteroignore\r\n *\r\n !Password.json\r\n !PlayerPassword.json\r\n !DSSettings.txt\r\n !StarRupture\/Saved\/SaveGames\/*\/AutoSave0.met\r\n !StarRupture\/Saved\/SaveGames\/*\/AutoSave0.sav\r\n !StarRupture\/Saved\/SaveGames\/SaveData.dat\r\nEOF\r\nfi\r\n\r\n## Generate password files if passwords are set\r\nif [[ -n \"${ADMIN_PASSWORD}\" ]] || [[ -n \"${PLAYER_PASSWORD}\" ]]; then\r\n # Only generate if at least one password file is missing\r\n if [[ ! -f \/mnt\/server\/Password.json ]] || [[ ! -f \/mnt\/server\/PlayerPassword.json ]]; then\r\n echo \"Generating password files...\"\r\n\r\n RESPONSE=$(curl -s --request POST \\\r\n --url https:\/\/starrupture-utilities.com\/passwords\/ \\\r\n --header 'Content-Type: multipart\/form-data' \\\r\n --form \"adminpassword=${ADMIN_PASSWORD}\" \\\r\n --form \"playerpassword=${PLAYER_PASSWORD}\")\r\n\r\n if [[ -n \"${RESPONSE}\" ]]; then\r\n # Extract and save admin password if set and file doesn't exist\r\n if [[ -n \"${ADMIN_PASSWORD}\" ]] && [[ ! -f \/mnt\/server\/Password.json ]]; then\r\n echo \"${RESPONSE}\" | jq '{password: .adminpassword}' > \/mnt\/server\/Password.json\r\n echo \"Password.json created successfully\"\r\n fi\r\n\r\n # Extract and save player password if set and file doesn't exist\r\n if [[ -n \"${PLAYER_PASSWORD}\" ]] && [[ ! -f \/mnt\/server\/PlayerPassword.json ]]; then\r\n echo \"${RESPONSE}\" | jq '{password: .playerpassword}' > \/mnt\/server\/PlayerPassword.json\r\n echo \"PlayerPassword.json created successfully\"\r\n fi\r\n else\r\n echo \"Warning: Failed to generate password files\"\r\n fi\r\n fi\r\nfi\r\n\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", + "container": "ghcr.io\/ptero-eggs\/installers:debian", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "[STEAM] Steam User", + "description": "Steam User Account", + "env_variable": "STEAM_USER", + "default_value": "", + "user_viewable": false, + "user_editable": false, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "[STEAM] Steam Password", + "description": "Steam User Password", + "env_variable": "STEAM_PASS", + "default_value": "", + "user_viewable": false, + "user_editable": false, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "[STEAM] Game ID", + "description": "The ID corresponding to the game to download and run using SRCDS", + "env_variable": "SRCDS_APPID", + "default_value": "3809400", + "user_viewable": false, + "user_editable": false, + "rules": "string", + "field_type": "text" + }, + { + "name": "[STEAM] Steam Auth", + "description": "Steam account auth code. Required if you have 2fa enabled", + "env_variable": "STEAM_AUTH", + "default_value": "", + "user_viewable": false, + "user_editable": false, + "rules": "nullable|string|max:5", + "field_type": "text" + }, + { + "name": "[STEAM] Auto Update Server", + "description": "This is to auto-update the game server", + "env_variable": "AUTO_UPDATE", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "required|boolean", + "field_type": "text" + }, + { + "name": "[SYSTEM] Winetricks", + "description": "", + "env_variable": "WINETRICKS_RUN", + "default_value": "vcrun2022", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "[SYSTEM] Wine Debug", + "description": "", + "env_variable": "WINEDEBUG", + "default_value": "-all", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "[SYSTEM] WINEARCH", + "description": "", + "env_variable": "WINEARCH", + "default_value": "win64", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "[SYSTEM] WINEPREFIX", + "description": "Wine root directory for the container", + "env_variable": "WINEPREFIX", + "default_value": "\/home\/container\/.wine", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:100", + "field_type": "text" + }, + { + "name": "[STEAM] WINDOWS_INSTALL", + "description": "", + "env_variable": "WINDOWS_INSTALL", + "default_value": "1", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|in:1", + "field_type": "text" + }, + { + "name": "[SYSTEM] WINEDLLOVERRIDES", + "description": "", + "env_variable": "WINEDLLOVERRIDES", + "default_value": "mscoree,mshtml=", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "[SERVER] Start new Savegame", + "description": "Setting this to `true` forces the creation of a new world. Be careful!", + "env_variable": "START_NEW", + "default_value": "false", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false", + "field_type": "text" + }, + { + "name": "[SERVER] Load saved Game", + "description": "true -> Loads an existing save; false -> Skips loading saved data", + "env_variable": "LOAD_SAVE", + "default_value": "true", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false", + "field_type": "text" + }, + { + "name": "[SERVER] Save Interval", + "description": "Time between automatic saves (in seconds)\r\n\r\n300 = 5 minutes", + "env_variable": "SAVE_INTERVAL", + "default_value": "300", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "[SERVER] Savegame Name", + "description": "Filename of the save to load; Must exist in the server save directory under `\/StarRupture\/Saved\/SaveGames\/{SESSION_NAME}`", + "env_variable": "SAVEGAME_NAME", + "default_value": "AutoSave0.sav", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "[SERVER] Session Name", + "description": "Name of the save game sessionName of the save game session", + "env_variable": "SESSION_NAME", + "default_value": "StarRuptureServer", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "[SERVER] Admin Password", + "description": "The admin password used for \"Manage Server\" In-Game", + "env_variable": "ADMIN_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "string|nullable", + "field_type": "text" + }, + { + "name": "[SERVER] Player Password", + "description": "The password used to join the server", + "env_variable": "PLAYER_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "string|nullable", + "field_type": "text" + } + ] +}