diff --git a/games/satisfactory-vanilla-stable/game.yaml b/games/satisfactory-vanilla-stable/game.yaml index ebbd6a0..82a70ce 100644 --- a/games/satisfactory-vanilla-stable/game.yaml +++ b/games/satisfactory-vanilla-stable/game.yaml @@ -1,165 +1,62 @@ # yaml-language-server: $schema=../../schema/game.schema.json +# The official dedicated server (Steam app 1690800), installed by the node with anonymous SteamCMD. +# Satisfactory keeps its saves under $HOME/.config/Epic/FactoryGame, so HOME is pointed at the server +# volume; otherwise they would land in /home/steam and be lost on the next start. id: satisfactory-vanilla-stable -name: Satisfactory (Vanilla Stable) -defaultDockerImage: wolveix/satisfactory-server:latest +name: Satisfactory +defaultDockerImage: cm2network/steamcmd +defaultStartupCommand: >- + export HOME=/server; + mkdir -p "$HOME/.steam/sdk64"; + cp -f /home/steam/steamcmd/linux64/steamclient.so "$HOME/.steam/sdk64/" 2>/dev/null; + exec ./FactoryServer.sh -Port=7777 -ReliablePort=8888 -ExternalReliablePort="${EXTERNAL_RELIABLE_PORT:-8888}" -log -unattended requiredMemoryMb: 8192 -requiredDiskMb: 16384 +requiredDiskMb: 20480 defaultPorts: - - 7777/tcp - 7777/udp + - 7777/tcp - 8888/tcp -installMethod: NONE +installMethod: STEAMCMD +installConfig: + appId: "1690800" defaultConfig: - AUTOSAVENUM: 5 - DEBUG: false - DISABLESEASONALEVENTS: false - LOG: false - MAXOBJECTS: 2162688 - MAXPLAYERS: 4 - MAXTICKRATE: 30 - MULTIHOME: '::' - PGID: 1000 - PUID: 1000 - SERVERGAMEPORT: 7777 - SERVERMESSAGINGPORT: 8888 - SERVERSTREAMING: true - SKIPUPDATE: false - STEAMBETA: false - STEAMBETAID: "" - STEAMBETAKEY: "" - TIMEOUT: 30 - VMOVERRIDE: false + MaxPlayers: 4 + ExternalReliablePort: '{PUBLIC_PORT_8888}' configSchema: $schema: http://json-schema.org/draft-07/schema# - properties: - AUTOSAVENUM: - category: World & Environment - default: 5 - description: The number of rotating autosave files to keep in the save folder. - title: Autosave Rotation Count - type: integer - DEBUG: - category: System & General - default: false - description: Prints diagnostic environment and system details on startup, then stops. - title: Debug Mode - type: boolean - DISABLESEASONALEVENTS: - category: Gameplay & Rules - default: false - description: Disables seasonal in-game events such as FICSMAS holiday events. - title: Disable Seasonal Events - type: boolean - LOG: - category: System & General - default: false - description: Disables automatic pruning of previous Satisfactory server log files on container startup. - title: Retain Old Logs - type: boolean - MAXOBJECTS: - category: World & Environment - default: 2162688 - description: Unreal Engine garbage collector UObject limit to support large late-game factories. - title: Max Objects Limit - type: integer - MAXPLAYERS: - category: System & General - default: 4 - description: Sets the maximum number of concurrent players allowed on the server. - title: Max Players - type: integer - MAXTICKRATE: - category: System & General - default: 30 - description: Sets the maximum simulation tick rate for the server in Hz. - title: Max Tick Rate - type: integer - MULTIHOME: - category: System & General - default: '::' - description: 'Network interface binding IP address (defaults to :: for dual-stack IPv4/IPv6).' - title: Multihome Address - type: string - PGID: - category: System & General - default: 1000 - description: Sets the Linux group ID under which the dedicated server process runs. - title: Process Group ID - type: integer - PUID: - category: System & General - default: 1000 - description: Sets the Linux user ID under which the dedicated server process runs. - title: Process User ID - type: integer - SERVERGAMEPORT: - category: System & General - default: 7777 - description: Primary game port for UDP and TCP network communication. - title: Server Game Port - type: integer - SERVERMESSAGINGPORT: - category: System & General - default: 8888 - description: Port used for reliable server messaging and beacon network traffic. - title: Server Messaging Port - type: integer - SERVERSTREAMING: - category: System & General - default: true - description: Toggles whether the game server utilizes Unreal Engine World Partition asset streaming. - title: Server Streaming - type: boolean - SKIPUPDATE: - category: System & General - default: false - description: Skips automatic SteamCMD game file update checks on container startup. - title: Skip Update - type: boolean - STEAMBETA: - category: System & General - default: false - description: When enabled, updates and runs the Experimental branch instead of the stable release. - title: Steam Beta Branch - type: boolean - STEAMBETAID: - category: System & General - default: "" - description: Specific beta branch identifier to download via SteamCMD. - title: Steam Beta Branch Name - type: string - STEAMBETAKEY: - category: Security & Access - default: "" - description: Password required to access a private Steam beta branch. - title: Steam Beta Password - type: string - TIMEOUT: - category: System & General - default: 30 - description: Client network connection timeout threshold in seconds. - title: Connection Timeout - type: integer - VMOVERRIDE: - category: System & General - default: false - description: Skips CPU model checking on hypervisors to prevent crash warnings on KVM/QEMU hosts. - title: VM CPU Check Override - type: boolean - required: [] type: object -configFileFormat: INI + properties: + MaxPlayers: + title: Max Players + description: How many players can be on the server at once. Set by your plan. + type: integer + category: Gameplay & Rules + default: 4 + ExternalReliablePort: + title: Reliable Messaging Port (public) + description: The port players' games use for reliable messaging. Filled in for you; only change it if you know you need to. + type: string + category: System & General + default: '{PUBLIC_PORT_8888}' + required: [] +configFilePath: FactoryGame/Saved/Config/LinuxServer/Game.ini +configFileFormat: STANDARD configFormatOptions: - assignment: = - falseValue: "false" - footer: "" - header: "" - quoteStrings: false + header: | + [/Script/Engine.GameSession] + footer: "\n" separator: "\n" - trueValue: "true" - unquotedKeys: [] + assignment: '=' + quoteStrings: false + trueValue: "True" + falseValue: "False" uppercaseKeys: false +maxPlayersConfigKey: MaxPlayers +logFilePath: FactoryGame/Saved/Logs/FactoryGame.log agnosticCommandConfig: + queryType: LOG_ONLY + playerJoinRegex: 'LogNet: Join succeeded: ([^\r\n]+)' + playerLeaveRegex: 'UNetConnection::Close:.*?\[PlayerName:\s*([^\]]+)\]' actions: Ban: type: UNSUPPORTED @@ -169,22 +66,7 @@ agnosticCommandConfig: type: UNSUPPORTED Save: type: UNSUPPORTED - pingPort: null - pingPortKey: null - playerJoinRegex: '.*Join succeeded: (\S+).*' - playerLeaveRegex: .*UNetConnection::Close:.*?\[PlayerName:\s*([^\]]+)\].* - playersCommand: null - playersFormat: null - playersRegex: null - queryPortKey: null - queryType: LOG_ONLY - rconPasswordKey: null - rconPortKey: null - restEndpoint: null - restPasswordKey: null - restPortKey: null - restUser: null backupPaths: - - saved -maxBackupSizeMb: 1024 -maxPlayersConfigKey: MAXPLAYERS + - .config/Epic/FactoryGame/Saved/SaveGames + - FactoryGame/Saved/Config +maxBackupSizeMb: 2048