From 1119333dfb7010294431dcc2184d6979b97ea132 Mon Sep 17 00:00:00 2001 From: devbeni Date: Sun, 14 Dec 2025 01:22:07 +0100 Subject: [PATCH] bruh --- LoadSaveOverrides/MultiplayerSaveContainer.cs | 13 ----- Main.cs | 48 +++++++++---------- StateManagement/Sync/SyncManager.cs | 16 +++---- 3 files changed, 30 insertions(+), 47 deletions(-) diff --git a/LoadSaveOverrides/MultiplayerSaveContainer.cs b/LoadSaveOverrides/MultiplayerSaveContainer.cs index 8de3ee8..8e3a963 100644 --- a/LoadSaveOverrides/MultiplayerSaveContainer.cs +++ b/LoadSaveOverrides/MultiplayerSaveContainer.cs @@ -332,19 +332,6 @@ namespace KCM.LoadSaveOverrides Main.helper.Log($"Setting kingdom name to: {kingdomNames[Main.PlayerSteamID]}"); TownNameUI.inst.SetTownName(kingdomNames[Main.PlayerSteamID]); - // Force transition to PlayingMode to enable villager movement - try - { - Main.helper.Log("MultiplayerSaveContainer.Unpack: Setting PlayingMode"); - GameState.inst.SetNewMode(GameState.inst.playingMode); - Main.helper.Log("MultiplayerSaveContainer.Unpack: PlayingMode set successfully"); - } - catch (Exception e) - { - Main.helper.Log("MultiplayerSaveContainer.Unpack: Failed to set PlayingMode"); - Main.helper.Log(e.ToString()); - } - return obj; } } diff --git a/Main.cs b/Main.cs index 2a681fb..19930d3 100644 --- a/Main.cs +++ b/Main.cs @@ -290,26 +290,6 @@ namespace KCM { helper?.Log("VillagerSystem.enabled = " + VillagerSystem.inst.enabled); } - - // Force transition to PlayingMode to enable villager movement - try - { - if (GameState.inst != null) - { - helper?.Log("RunPostLoadRebuild: Current GameState mode: " + TryGetGameModeName()); - if (GameState.inst.playingMode != null) - { - helper?.Log("RunPostLoadRebuild: Setting PlayingMode"); - GameState.inst.SetNewMode(GameState.inst.playingMode); - helper?.Log("RunPostLoadRebuild: PlayingMode set successfully"); - } - } - } - catch (Exception ex) - { - helper?.Log("RunPostLoadRebuild: Failed to set PlayingMode"); - helper?.Log(ex.ToString()); - } } catch (Exception e) { @@ -499,6 +479,22 @@ namespace KCM { lastVillagerProbeMs = now; + // Proactively check and fix loadTickDelay every 2 seconds + int villagerDelay = GetLoadTickDelayOrMinusOne(VillagerSystem.inst); + int unitDelay = GetLoadTickDelayOrMinusOne(UnitSystem.inst); + int jobDelay = GetLoadTickDelayOrMinusOne(JobSystem.inst); + int playerDelay = GetLoadTickDelayOrMinusOne(Player.inst); + + if (villagerDelay <= 0 || unitDelay <= 0 || jobDelay <= 0 || playerDelay <= 0) + { + Main.helper.Log("LoadTickDelay refresh: delays were " + + playerDelay + "/" + unitDelay + "/" + jobDelay + "/" + villagerDelay + ", resetting to 1"); + SetLoadTickDelay(Player.inst, 1); + SetLoadTickDelay(UnitSystem.inst, 1); + SetLoadTickDelay(JobSystem.inst, 1); + SetLoadTickDelay(VillagerSystem.inst, 1); + } + Villager v = null; try { @@ -548,11 +544,15 @@ namespace KCM GetLoadTickDelayOrMinusOne(VillagerSystem.inst)); // Try to fix stalled systems by resetting loadTickDelay - if (GetLoadTickDelayOrMinusOne(VillagerSystem.inst) == -1 || - GetLoadTickDelayOrMinusOne(UnitSystem.inst) == -1 || - GetLoadTickDelayOrMinusOne(JobSystem.inst) == -1) + int villagerDelay = GetLoadTickDelayOrMinusOne(VillagerSystem.inst); + int unitDelay = GetLoadTickDelayOrMinusOne(UnitSystem.inst); + int jobDelay = GetLoadTickDelayOrMinusOne(JobSystem.inst); + int playerDelay = GetLoadTickDelayOrMinusOne(Player.inst); + + if (villagerDelay <= 0 || unitDelay <= 0 || jobDelay <= 0 || playerDelay <= 0) { - Main.helper.Log("VillagerStallDetect: Attempting to fix stalled systems"); + Main.helper.Log("VillagerStallDetect: Attempting to fix stalled systems (delays: " + + playerDelay + "/" + unitDelay + "/" + jobDelay + "/" + villagerDelay + ")"); SetLoadTickDelay(Player.inst, 1); SetLoadTickDelay(UnitSystem.inst, 1); SetLoadTickDelay(JobSystem.inst, 1); diff --git a/StateManagement/Sync/SyncManager.cs b/StateManagement/Sync/SyncManager.cs index 792d0fc..394eb7c 100644 --- a/StateManagement/Sync/SyncManager.cs +++ b/StateManagement/Sync/SyncManager.cs @@ -577,18 +577,14 @@ namespace KCM.StateManagement.Sync private static void BroadcastVillagerSnapshot() { - // TEMPORARILY DISABLED: VillagerSnapshot causes packet overflow errors - // TODO: Fix villager synchronization properly - return; + if (!KCServer.IsRunning) + return; - // if (!KCServer.IsRunning) - // return; + if (KCServer.server.ClientCount == 0) + return; - // if (KCServer.server.ClientCount == 0) - // return; - - // if (Villager.villagers == null || Villager.villagers.Count == 0) - // return; + if (Villager.villagers == null || Villager.villagers.Count == 0) + return; List guids = new List(); List positions = new List();