diff --git a/README.md b/README.md index 50e04b83..a7d1d00d 100644 --- a/README.md +++ b/README.md @@ -195,6 +195,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Rust](game_eggs/steamcmd_servers/rust) * [Autowipe](game_eggs/steamcmd_servers/rust/rust_autowipe) * [Staging](game_eggs/steamcmd_servers/rust/rust_staging) +* [Satisfactory](game_eggs/steamcmd_servers/satisfactory) * [SCP: Secret Laboratory](game_eggs/steamcmd_servers/scpsl) * [dedicated](game_eggs/steamcmd_servers/scpsl/dedicated) * [multiadmin](game_eggs/steamcmd_servers/scpsl/multiadmin) diff --git a/game_eggs/README.md b/game_eggs/README.md index f70084ee..d059f869 100644 --- a/game_eggs/README.md +++ b/game_eggs/README.md @@ -124,6 +124,7 @@ * [Rust](steamcmd_servers/rust) * [Autowipe](steamcmd_servers/rust/rust_autowipe) * [Staging](steamcmd_servers/rust/rust_staging) +* [Satisfactory](steamcmd_servers/satisfactory) * [SCP: Secret Laboratory](steamcmd_servers/scpsl) * [dedicated](steamcmd_servers/scpsl/dedicated) * [multiadmin](steamcmd_servers/scpsl/multiadmin) diff --git a/game_eggs/steamcmd_servers/README.md b/game_eggs/steamcmd_servers/README.md index c7098796..04694fa2 100644 --- a/game_eggs/steamcmd_servers/README.md +++ b/game_eggs/steamcmd_servers/README.md @@ -82,6 +82,9 @@ This is a collection of servers that use SteamCMD to install. * [Autowipe](rust/rust_autowipe) * [Staging](rust/rust_staging) +## Satisfactory +[Satisfactory](satisfactory) + ## SCP: Secret Laboratory * [SCP: Secret Laboratory](scpsl) * [dedicated](scpsl/dedicated) diff --git a/game_eggs/steamcmd_servers/satisfactory/README.md b/game_eggs/steamcmd_servers/satisfactory/README.md new file mode 100644 index 00000000..e8c1782a --- /dev/null +++ b/game_eggs/steamcmd_servers/satisfactory/README.md @@ -0,0 +1,135 @@ +# Satisfactory +***Server version currently marked as experimental by the Satisfactory developers! Egg loads fine, but your mileage may vary in-game.*** +___ +### Authors / Contributors + + + + + + + + + + +
+ +
Red-Thirten +
+
+ 💻 + 🔨 +
+ +
Kubi +
+
+ 💻 + 💡 +
+ +
matthewpi +
+
+ 💻 + 💡 +
+ +
Software-Noob +
+
+ 💻 + 💡 +
+ +
Zarklord +
+
+ 💻 + 💡 +
+ + + +___ +### Game Description +From Coffee Stain's [Website](https://www.satisfactorygame.com/): +> Satisfactory is a first-person open-world factory building game with a dash of exploration and combat. Play alone or with friends, explore an alien planet, create multi-story factories, and enter conveyor belt heaven! +___ +### Egg Capabilities +- Configuration of the Server Query, Beacon, and Game ports. +- Configurable to automatically check for server updates on start via SteamCMD. Forcing validation is also configurable. +- *[Experimental]* Max player configuration. +- Misc. settings listed below can be configured by an admin client via the game's UI, and are currently **not** set via the Egg: + - Server Password + - Admin Password + - Auto-Save on Player Disconnect + - Pause When No Players Online + - ...and possibly more as the client's UI is developed further for more configuration options. +___ +### Server Ports +- Default server ports are listed below, but all three ports can be changed freely. +- **Note:** The Primary/Default/Game Port for your server in Pterodactyl will be Satisfactory's `-Port=????` game port, even though clients will **connect with the Query port**. +- It is recommended to distance ports of other running Satisfactory servers in Pterodactyl by **increments of 100** (it is currently unknown what the minimum increment is, but an increment of +1 caused cross-server talk in testing). Also, your internal ports **must match** your external ports on your network (ie. you can't have an external port of 7778 forwarded to your 7777 internal port; they must match). +- ***All three ports are required to be open for normal server behavior!*** + +| Port | Default (UDP) | +|---------|---------| +| **Game (Primary Port in Pterodactyl)** | 7777 | +| Beacon | 15000 | +| Server Query | 15777 | + +___ +### Installation Requirements/Instructions +- No major requirements, other than RAM and Disk space noted below. +- You *do not* need to own the base game to host this server. +- However, to fully "initialize" your server, a client who owns the game must log into the server to "claim" it and create a new session. The generated session will not be written to disk until the first save occurs. +- Currently, there is no way to save the session on server stop. Therefore, ensure the session is saved or the last player has disconnected (causing an auto-save) before stopping the server. +___ +### Minimum RAM Requirement +This server requires a minimum of 4096 MiB of RAM to boot, but the developers recommend 6144 to 8192 MiB of RAM for 4 players or large save files. +___ +### Minimum Disk Requirement +This server requires just under 5 GB of disk space to safely run properly. However, save files could easily surpass this amount, so 7-10 GB is recommended. +___ +### Save File Location +[According to the developer](https://www.youtube.com/watch?v=Nn-1s87JJxc), save files will be able to be uploaded and downloaded by clients via their game client in the future. Until then, below is the save file location in case you would like to upload or download a save file manually: + +`/home/container/.config/Epic/FactoryGame/Saved/SaveGames/server` + +Single-player save files can be uploaded here and are playable if desired. +___ +### Console Commands +As of v5.0.4, the console tab in the client server manager is the only way to execute commands. Entering commands via Pterodactyl do nothing. + +[List of known commands can be found via the Wiki](https://satisfactory.fandom.com/wiki/Dedicated_servers#Commands) +___ +### Errors/Warnings +The following errors or warnings you see in the console can safely be ignored: + +```log +steamclient.so: cannot open shared object file: No such file or directory +[S_API] SteamAPI_Init(): Loaded '/home/container/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so') +LogSteamShared: Warning: Steam Dedicated Server API failed to initialize. +``` +The local file of 'steamclient.so' was attempted to be loaded, but could not because it is not present, causing the warning message. However, the backup `/home/container/.steam/sdk64/steamclient.so` is loaded successfully (this is the correct behavior according to the [Wiki](https://satisfactory.fandom.com/wiki/Dedicated_servers#No_Such_File_or_Directory)). + +```log +Warning: failed to init SDL thread priority manager: SDL not found +``` + +This is a common error with Steam related software on Linux, but can safely be ignored. + +```log +...Error: Couldn't find file for package... +``` +```log +...Error: Navmesh bounds are too large!... +``` +```log +...Warning: NiagaraSystem... +``` +```log +LogStreaming: Warning: Failed to read file '../../../FactoryGame/Saved/SaveGames/GameAnalytics.sav' error. +``` +These seem to be common error messages with the current experimental version of the game. diff --git a/game_eggs/steamcmd_servers/satisfactory/egg-satisfactory.json b/game_eggs/steamcmd_servers/satisfactory/egg-satisfactory.json new file mode 100644 index 00000000..0e4a7f55 --- /dev/null +++ b/game_eggs/steamcmd_servers/satisfactory/egg-satisfactory.json @@ -0,0 +1,85 @@ +{ + "_comment": "Pterodactyl Satisfactory Egg ~ Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord ~ 2021-10-28", + "meta": { + "version": "PTDL_v1", + "update_url": null + }, + "name": "Satisfactory", + "author": "rehlmgaming@gmail.com", + "description": "Satisfactory is a first-person open-world factory building game with a dash of exploration and combat. Play alone or with friends, explore an alien planet, create multi-story factories, and enter conveyor belt heaven!", + "features": null, + "images": [ + "ghcr.io\/pterodactyl\/games:source" + ], + "file_denylist": [], + "startup": ".\/Engine\/Binaries\/Linux\/UE4Server-Linux-Shipping FactoryGame -Port={{SERVER_PORT}} -ServerQueryPort={{QUERY_PORT}} -BeaconPort={{BEACON_PORT}}", + "config": { + "files": "{\r\n \"FactoryGame\/Saved\/Config\/LinuxServer\/Game.ini\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"MaxPlayers\": \"MaxPlayers={{server.build.env.MAX_PLAYERS}}\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \"Engine Initialization\"\r\n}", + "logs": "{}", + "stop": "^CC" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n\r\n# File: Pterodactyl Satisfactory Egg - egg-satisfactory.json\r\n# Authors: Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord\r\n# Date: 2021\/10\/28\r\n# License: MIT License\r\n\r\n## Download and install SteamCMD\r\ncd \/tmp\r\ncurl -sSL -o steamcmd.tar.gz http:\/\/media.steampowered.com\/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 +login anonymous +force_install_dir \/mnt\/server +app_update ${SRCDS_APPID} 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## Satisfactory setup\r\n# Check for successful installation and make the core binary executable.\r\ncd \/mnt\/server\/Engine\/Binaries\/Linux\r\nif [[ ! -f UE4Server-Linux-Shipping ]]; then\r\n echo -e \"\\n\\nSteamCMD failed to install the Satisfactory Dedicated Server!\"\r\n echo -e \"\\tTry reinstalling the server again.\\n\"\r\n exit 1\r\nelse\r\n chmod +x UE4Server-Linux-Shipping\r\nfi\r\n\r\n# Make Config directory and default Game.ini file (since it is not created automatically by the server)\r\nmkdir -p \/mnt\/server\/FactoryGame\/Saved\/Config\/LinuxServer\/ && cd \"$_\"\r\nif [ ! -f Game.ini ]; then\r\n echo -e \"\\nGame.ini config file missing. Creating default.\"\r\n cat > Game.ini << EOF\r\n[\/Script\/Engine.GameSession]\r\nMaxPlayers=${MAX_PLAYERS}\r\nEOF\r\nfi\r\n\r\necho -e \"\\n\\nSatisfactory Dedicated Server successfully installed!\\n\"", + "container": "ghcr.io\/pterodactyl\/installers:debian", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "[REQUIRED] Server Query Port", + "description": "This is the port that your clients will type in and use to connect to the lobby (not the game world). Ensure this port matches your externally forwarded port, and is distanced from other running Satisfactory servers in Pterodactyl (increments of 100 are recommended). This is also true for the Primary\/Game Port!", + "env_variable": "QUERY_PORT", + "default_value": "15777", + "user_viewable": false, + "user_editable": false, + "rules": "required|integer|between:1024,65536" + }, + { + "name": "[REQUIRED] Beacon Port", + "description": "This port provides a lightweight way for clients to contact a server and interact with it without committing to a normal game connection (likely used for client administration). Ensure this port matches your externally forwarded port, and is distanced from other running Satisfactory servers in Pterodactyl (increments of 100 are recommended).", + "env_variable": "BEACON_PORT", + "default_value": "15000", + "user_viewable": false, + "user_editable": false, + "rules": "required|integer|between:1024,65536" + }, + { + "name": "Automatic Updates", + "description": "Quickly checks for any server updates on startup, and updates if necessary. (1 Enable | 0 Disable)", + "env_variable": "AUTO_UPDATE", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "[Repair] Validate Server Files", + "description": "Leave empty (no value) for OFF or type \"true\" or \"1\" for ON. Validates all server files when Automatic Updates is enabled. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed.", + "env_variable": "VALIDATE", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "string|nullable" + }, + { + "name": "[Experimental] Max Players", + "description": "The server and client are currently not optimized to support more than 4 players. However, you can override this value here at your own risk of poor performance.", + "env_variable": "MAX_PLAYERS", + "default_value": "4", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|min:1" + }, + { + "name": "[Advanced] Satisfactory Dedicated Server App ID", + "description": "Steam App ID used for installation and updates. Rarely needs to be changed.", + "env_variable": "SRCDS_APPID", + "default_value": "1690800", + "user_viewable": false, + "user_editable": false, + "rules": "required|integer|min:1" + } + ] +} \ No newline at end of file