From 4007afe017d8aa0fb5a937b436b4ffe119121bf6 Mon Sep 17 00:00:00 2001 From: Kuinox Date: Sat, 30 May 2026 01:12:55 +0200 Subject: [PATCH 1/2] Fix join point stuck state on dedicated server On a dedicated server no player is ever IsHost (hostUsername is never set), so AbortJoinPointCreation was never called on disconnect. When a client drops mid-join-point creation the server was left stuck in CreatingJoinPoint forever, blocking all subsequent connections at WaitJoinPoint(). Fix: also abort when no joined players remain after a disconnect. Co-Authored-By: Claude Sonnet 4.6 --- Source/Common/PlayerManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Common/PlayerManager.cs b/Source/Common/PlayerManager.cs index cc3da928..9f6cc429 100644 --- a/Source/Common/PlayerManager.cs +++ b/Source/Common/PlayerManager.cs @@ -71,10 +71,10 @@ public void SetDisconnected(ConnectionBase conn, MpDisconnectReason reason) ServerPlayer player = conn.serverPlayer; Players.Remove(player); - if (player.IsHost && server.worldData.CreatingJoinPoint) + if (server.worldData.CreatingJoinPoint && (player.IsHost || !Players.Any(p => p.hasJoined))) { server.worldData.AbortJoinPointCreation(); - ServerLog.Log("Aborted join point creation because the host disconnected."); + ServerLog.Log("Aborted join point creation because no joined players remain."); } if (player.hasJoined) From f0b4beb07e0cc94386654887cd8e38431de3d477 Mon Sep 17 00:00:00 2001 From: Meru Date: Fri, 29 May 2026 20:45:45 -0500 Subject: [PATCH 2/2] Update log message --- Source/Common/PlayerManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Common/PlayerManager.cs b/Source/Common/PlayerManager.cs index 9f6cc429..f274a758 100644 --- a/Source/Common/PlayerManager.cs +++ b/Source/Common/PlayerManager.cs @@ -74,7 +74,7 @@ public void SetDisconnected(ConnectionBase conn, MpDisconnectReason reason) if (server.worldData.CreatingJoinPoint && (player.IsHost || !Players.Any(p => p.hasJoined))) { server.worldData.AbortJoinPointCreation(); - ServerLog.Log("Aborted join point creation because no joined players remain."); + ServerLog.Log("Aborted join point creation because no players remain."); } if (player.hasJoined)