Files
gbr-games/games/satisfactory-vanilla-stable/game.yaml
T
git_pipelineandClaude Opus 5.5 a918704ec6
Validate game templates / validate (push) Successful in 19s
Validate game templates / boot-test (push) Successful in 4m2s
Validate game templates / publish (push) Skipped
fix(satisfactory): restore server settings, written to Game.ini/Engine.ini each start
The official server reads no env vars, so the startup command writes Max Players, autosave count, tick rate, timeout, object limit and server streaming into its ini files, and passes seasonal events and multihome as launch options.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MZxvxViV6QwAtVWT3saGvs
2026-11-07 01:54:26 +00:00

125 lines
4.8 KiB
YAML

# 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.
# The server reads no environment variables, so the startup command writes the settings into its
# Game.ini and Engine.ini before every start, and passes the rest as launch options.
id: satisfactory-vanilla-stable
name: Satisfactory
defaultDockerImage: cm2network/steamcmd
defaultStartupCommand: >-
export HOME=/server;
cfg=FactoryGame/Saved/Config/LinuxServer;
mkdir -p "$HOME/.steam/sdk64" "$cfg";
cp -f /home/steam/steamcmd/linux64/steamclient.so "$HOME/.steam/sdk64/" 2>/dev/null;
case "${SERVER_STREAMING:-true}" in true|True|1) ss=1;; *) ss=0;; esac;
printf '[/Script/Engine.GameSession]\nMaxPlayers=%s\n' "${MAX_PLAYERS:-4}" > "$cfg/Game.ini";
printf '[/Script/FactoryGame.FGSaveSession]\nmNumRotatingAutosaves=%s\n\n[/Script/OnlineSubsystemUtils.IpNetDriver]\nNetServerMaxTickRate=%s\nConnectionTimeout=%s\nInitialConnectTimeout=%s\n\n[/Script/Engine.GarbageCollectionSettings]\ngc.MaxObjectsInEditor=%s\ngc.MaxObjectsInGame=%s\n\n[ConsoleVariables]\nwp.Runtime.EnableServerStreaming=%s\n'
"${AUTOSAVE_NUM:-5}" "${MAX_TICK_RATE:-30}" "${CONNECTION_TIMEOUT:-30}" "${CONNECTION_TIMEOUT:-30}"
"${MAX_OBJECTS:-2162688}" "${MAX_OBJECTS:-2162688}" "$ss" > "$cfg/Engine.ini";
args=(-Port=7777 -ReliablePort=8888 -ExternalReliablePort="${EXTERNAL_RELIABLE_PORT:-8888}" -log -unattended);
case "${DISABLE_SEASONAL_EVENTS:-false}" in true|True|1) args+=(-DisableSeasonalEvents);; esac;
[ -n "${MULTIHOME:-}" ] && args+=(-multihome="$MULTIHOME");
exec ./FactoryServer.sh "${args[@]}"
requiredMemoryMb: 8192
requiredDiskMb: 20480
defaultPorts:
- 7777/udp
- 7777/tcp
- 8888/tcp
installMethod: STEAMCMD
installConfig:
appId: "1690800"
defaultConfig:
MaxPlayers: 4
AutosaveNum: 5
MaxTickRate: 30
ConnectionTimeout: 30
MaxObjects: 2162688
ServerStreaming: true
DisableSeasonalEvents: false
Multihome: ""
ExternalReliablePort: '{PUBLIC_PORT_8888}'
configSchema:
$schema: http://json-schema.org/draft-07/schema#
type: object
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
AutosaveNum:
title: Autosave Rotation Count
description: How many rotating autosave files to keep in the save folder.
type: integer
minimum: 1
category: World & Environment
default: 5
MaxTickRate:
title: Max Tick Rate
description: The highest simulation tick rate the server runs at, in Hz.
type: integer
minimum: 10
maximum: 120
category: System & General
default: 30
ConnectionTimeout:
title: Connection Timeout
description: Seconds before a player who stops responding is disconnected.
type: integer
minimum: 5
category: System & General
default: 30
MaxObjects:
title: Max Objects Limit
description: Unreal Engine object limit. Raise it for very large late-game factories.
type: integer
category: World & Environment
default: 2162688
ServerStreaming:
title: Server Streaming
description: Lets the server stream world data in and out instead of keeping it all loaded.
type: boolean
category: System & General
default: true
DisableSeasonalEvents:
title: Disable Seasonal Events
description: Turns off seasonal events such as FICSMAS.
type: boolean
category: Gameplay & Rules
default: false
Multihome:
title: Multihome Address
description: Bind the server to one IP address instead of all of them. Leave empty unless you know you need it.
type: string
category: System & General
default: ""
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: []
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
Broadcast:
type: UNSUPPORTED
Kick:
type: UNSUPPORTED
Save:
type: UNSUPPORTED
backupPaths:
- .config/Epic/FactoryGame/Saved/SaveGames
- FactoryGame/Saved/Config
maxBackupSizeMb: 2048