You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Multifaction on dedicated server: time control unresponsive / simulation won't advance (latest continuous) #991
On a dedicated/standalone server with multifaction = true, time control is unresponsive and the simulation does not advance for connected players. The exact same world + mods works perfectly when hosted directly from the RimWorld client.
Environment
RimWorld 1.6.4871
Multiplayer [Continuous] build ea633b8 — the server and the clients run a bit-identicalMultiplayerCommon.dll (verified by SHA-256)
Standalone Linux server (Docker, mcr.microsoft.com/dotnet/runtime:8.0), using Server-beta.zip from the continuous release
Mods: Prepatcher + Core + Royalty/Ideology/Biotech/Anomaly/Odyssey + Multiplayer (no other mods)
settings.toml: multifaction=true, asyncTime=true, timeControl="EveryoneControls", direct=true, steam=false (tested with pauseOnJoin both true and false)
Behavior
A fresh multifaction world uploaded via the bootstrap flow loads fine (Loaded state from Saved/ directory (1 maps)).
With a second player, the server loops Simulation paused because some players are too far behind: <player> indefinitely — including for a LAN client with ~0 latency, so it is not a network/performance problem.
Time control / the in-game UI is unresponsive; players cannot start time and eventually leave (ClientLeft).
The client Player.log shows this every tick:
Exception ticking the server: System.NullReferenceException: Object reference not set to an instance of an object
at Multiplayer.Common.ServerPlayer.get_IsHost () [0x00000] in MultiplayerCommon/ServerPlayer.cs:43
at Multiplayer.Common.FreezeManager+<>c.<Tick>b__9_0 (Multiplayer.Common.ServerPlayer p) [0x00000] in MultiplayerCommon/FreezeManager.cs:32
at Multiplayer.Common.FreezeManager.Tick () [0x00000] in MultiplayerCommon/FreezeManager.cs:32
at Multiplayer.Common.MultiplayerServer.Run () [0x00045] in MultiplayerCommon/MultiplayerServer.cs:114
Ruled out
Version mismatch — server and client MultiplayerCommon.dll are byte-identical (same SHA-256)
Network / firewall — inbound UDP to the game port verified with tcpdump (packets arrive), world data transfers both ways, players connect and load
Mod conflicts — vanilla + DLCs only, no third-party content mods
Corrupt save — a brand-new world behaves the same way
Works
Hosting the identical world + mods directly from a RimWorld client (in-game "Host") — time runs and is controllable normally. The problem is specific to the dedicated/standalone server.
Note
Release notes mention "Server: Allow game to continue without host in FreezeManager" and "Server: Fallback time control to allow all players when host is absent", but on dedicated + multifaction + asyncTime the FreezeManager still throws the NRE above / time control stays unresponsive on the latest continuous build.
Hi @stefan307, a candidate fix for this is up in PR #993 (the shutdown-race fix reworked per #993 (comment)...). To make it easy to verify against your exact repro, here are two bundles built from commit 0ae8304 (branch fix/991-freeze-host-nullref, based on dev e760d30) — same layout as the continuous release zips:
Server-pr993-test.zip — dedicated server (Server/Linux, Server/Windows). Linux: ./Server.sh or dotnet Server.dll in the mcr.microsoft.com/dotnet/runtime:8.0 container. If the executable bit was lost when unpacking: chmod +x Server.sh, chmod +x Server.
Multiplayer-pr993-test.zip — the mod for the client(s); replace the Assemblies/AssembliesCustom folders of your existing Multiplayer mod.
Both zips come from a single dotnet publish, so the MultiplayerCommon.dll inside is byte-identical between the server and the mod (you had flagged that as a precondition). The in-game version shows 0.11.5+0ae8304 so you can confirm you're running the same build. SHA-256:
What to test: your repro (dedicated server, multifaction=true, asyncTime=true, timeControl="EveryoneControls") with two players joining, then time control. No more Exception ticking the server ... NullReferenceException ... FreezeManager.Tick should appear. If anything misbehaves, debugMode = true in settings.toml and attaching both the server log and the client Player.log would help.
Activity
Fix rwmt#991 via TryStop loop join, superseding the null-safe workaround
MhaWay commentedon Oct 5, 2026
Hi @stefan307, a candidate fix for this is up in PR #993 (the shutdown-race fix reworked per #993 (comment)...). To make it easy to verify against your exact repro, here are two bundles built from commit
0ae8304(branchfix/991-freeze-host-nullref, based on deve760d30) — same layout as thecontinuousrelease zips:Server-pr993-test.zip— dedicated server (Server/Linux,Server/Windows). Linux:./Server.shordotnet Server.dllin themcr.microsoft.com/dotnet/runtime:8.0container. If the executable bit was lost when unpacking:chmod +x Server.sh,chmod +x Server.Multiplayer-pr993-test.zip— the mod for the client(s); replace theAssemblies/AssembliesCustomfolders of your existing Multiplayer mod.Both zips come from a single
dotnet publish, so theMultiplayerCommon.dllinside is byte-identical between the server and the mod (you had flagged that as a precondition). The in-game version shows0.11.5+0ae8304so you can confirm you're running the same build. SHA-256:What to test: your repro (dedicated server,
multifaction=true,asyncTime=true,timeControl="EveryoneControls") with two players joining, then time control. No moreException ticking the server ... NullReferenceException ... FreezeManager.Tickshould appear. If anything misbehaves,debugMode = trueinsettings.tomland attaching both the server log and the clientPlayer.logwould help.Thanks for the detailed bug report!
Multiplayer-pr993-test.zip
Server-pr993-test.zip