Egg Repository

Pterodactyl Community Egg Repository

Satisfactory

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!

Read Me

Satisfactory

[!IMPORTANT] Updating for v1.0?

  • Ensure any existing servers have the updated Startup Command applied!
  • TCP is now required! (See Server Ports for details)
  • While not required, it's recommended existing servers delete the LinuxServer directory under ~/FactoryGame/Saved/Config/ to remove depreciated settings, and reconfigure the settings via the in-game Server Manager.

Authors / Contributors


Game Description

From Coffee Stain's Website:

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

  • Configurable to automatically check for server updates on start via SteamCMD. Forcing validation is also configurable.
  • Configurable number of rotating autosaves.
  • [Experimental] Configurable maximum number of players.
  • [Advanced] Configurable networking and server branch settings.

[!NOTE] As of Satisfactory v1.0, most server settings have moved from being configured in the Egg to being configured via the in-game Server Manager.
Please see Server Initialization for what settings can be configured in-game.


Server Ports

Port Default Protocol Required Notes
Primary 7777 UDP & TCP Yes Clients connect using this port. UDP is un-encrypted game traffic. TCP is also required for the in-game Server Manager & API, and it is TLS encrypted.

[!TIP] *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). (*Testing needed after v1.0 release)


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 4608 MiB 8192-12288 MiB (especially for 4 players or large save files)
Storage 5120 MiB 7168-10240 MiB (or more, depending on save size or frequency)
Network 1 Mbit/s 1-5 Mbit/s (may require server and client config tweaks)
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 Not required to start. Required to fully "initialize" (see Server Initialization below)

Server Initialization

[!WARNING] The server cannot be joined for the first time via "Join Game -> Join game directly..." on the main menu due to the TLS certificate not being trusted yet. Instead, join via "Server Manager -> Add Server" and you will be prompted to trust the certificate and initialize the server.

For a server to be fully "initialized", a client who owns the game must log into the server to "claim" it and create an administrator password. Then, a new session can be created via the "Create Game" tab in-game, or an existing save file can be uploaded (see Save Files below).

Misc. settings listed below can be configured by an admin client via the Server Manager's "Server Settings" tab, and are currently not set via the Egg:

  • Server Name
  • Admin Password
  • Player Password Protection
  • Auto-Load Session Name
  • Auto Pause (when no players are online)
  • Auto-Save on Player Disconnect
  • Disable Seasonal Events
  • Autosave Interval
  • Server Restart Interval
  • Send Gameplay Data (Crash Reports)
  • Network Quality

[!NOTE] Currently, Tier 0 (Onboarding) is not possible to play on a dedicated server and it will be automatically unlocked, even if you upload a save in Tier 0. If you would like to play the beginning of the game with Onboarding, it is recommended you play local multiplayer first, and then upload your save after completing Tier 0.


Save Files

[!CAUTION] Stopping the server does not currently save your game! Ensure it is saved before stopping the server!

Save files are located in the following directory, but can be more easily downloaded to your local computer in-game via the Server Manager under the "Manage Saves" tab (admins only).

/home/container/.config/Epic/FactoryGame/Saved/SaveGames/server

An existing save file (including single-player saves) can be uploaded to the server via the Server Manager as well and loaded under the same tab.

If you have forgotten your administrator password or would generally like to reset your server as if it were new, you can delete the following file:

/home/container/.config/Epic/FactoryGame/Saved/SaveGames/ServerSettings.<your_server_query_port>.sav

Console Commands

The "Console" tab in the in-game Server Manager is the only way to execute commands. Entering commands via the Panel do nothing.

List of known commands can be found via the Wiki.


Known Errors/Warnings

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

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).

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.

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.

...Error: Couldn't find file for package...
...Error: Navmesh bounds are too large!...
...Warning: NiagaraSystem...
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.

Yolks
NameTag
ghcr.io/ptero-eggs/steamcmd:debianghcr.io/ptero-eggs/steamcmd:debian
Variables
NameDescriptionEnvironment VariableDefault ValueUser ViewableUser Editable
Automatic UpdatesQuickly checks for any server updates on startup, and updates if necessary. (1 Enable | 0 Disable)AUTO_UPDATE1YesYes
[Repair] Validate Server FilesLeave 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.VALIDATEYesYes
Number of Rotating AutosavesNumber of session auto-saves for the server to keep before the oldest save is deleted and the others are moved down the list.NUM_AUTOSAVES3YesYes
[Experimental] Max PlayersThe 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.MAX_PLAYERS4YesYes
[Advanced] Client Initial Connection TimeoutTime in seconds to wait for a new client connection to be established before destroying the connection.INIT_CONNECT_TIMEOUT30YesYes
[Advanced] Client Established Connection TimeoutTime in seconds to wait before considering an established client connection timed out. Typically shorter than the time to wait on an initial connection because this connection should already have been setup and any interruption should be trapped quicker.CONNECT_TIMEOUT20YesYes
[Advanced] Branch Name[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!SRCDS_BETAIDYesYes
[Advanced] Satisfactory Dedicated Server App IDSteam App ID used for installation and updates.SRCDS_APPID1690800NoNo
Install Script
#!/bin/bash

# File: Pterodactyl Satisfactory Egg - egg-satisfactory.json
# Authors: Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord
# Date: 2024/09/10
# License: MIT License

## Download and install SteamCMD
cd /tmp
curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
mkdir -p /mnt/server/steamcmd
tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
cd /mnt/server/steamcmd

# SteamCMD fails otherwise for some reason, even running as root.
chown -R root:root /mnt
export HOME=/mnt/server

# Install game server using SteamCMD
./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

# Set up 32 and 64 bit libraries
mkdir -p /mnt/server/.steam/sdk{32,64}
cp -v linux32/steamclient.so /mnt/server/.steam/sdk32/steamclient.so
cp -v linux64/steamclient.so /mnt/server/.steam/sdk64/steamclient.so

## Satisfactory setup
# Check for successful installation and make the server binary executable.
# Use `find` to see if a valid server binary exists using a wildcard, because
# the binary name may change in the future.
# (eg. it changed when the engine was updated from UE4 to UE5)
cd /mnt/server/Engine/Binaries/Linux
count=$(find . -maxdepth 1 -name '*-Linux-Shipping' -type f -executable | wc -l)
if [[ $count -eq 0 ]]; then
    echo -e "\n\nSteamCMD failed to install the Satisfactory Dedicated Server!"
    echo -e "\tTry reinstalling the server again.\n"
    exit 1
else
    chmod +x *-Linux-Shipping
fi

echo -e "\nSatisfactory Dedicated Server successfully installed!\n"