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
125 lines
4.8 KiB
YAML
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
|