Skip to content

Multifaction on dedicated server: time control unresponsive / simulation won't advance (latest continuous) #991

Open

Description

@stefan307

Summary

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-identical MultiplayerCommon.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.

Activity

  1. added a commit that references this issue on Oct 1, 2026
    0ae8304
  2. MhaWay commented on Oct 5, 2026

    @MhaWay
    Contributor

    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:

    Multiplayer-pr993-test.zip  1B43B01A7BC07FA68FC1938C97D774A5E8729D5BBCFF639B14892F0A37DD3B23  (4.93 MB)
    Server-pr993-test.zip       1ED3F61D4D0A1FE51B791E9522C57FE6CF1F4E5AEA5681C95FD8C7AB23C3421B  (2.20 MB)
    

    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.

    Thanks for the detailed bug report!

    Multiplayer-pr993-test.zip
    Server-pr993-test.zip

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions