From 2140fc386896103b9f7080f7ff1ab6125613a440 Mon Sep 17 00:00:00 2001 From: devbeni Date: Sun, 14 Dec 2025 00:54:55 +0100 Subject: [PATCH] =?UTF-8?q?nem=20tudom=20most=20claude=20tal=C3=A1n=20mego?= =?UTF-8?q?ldja=20xd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Main.cs | 26 +++++++++++++++++++++++--- StateManagement/Sync/SyncManager.cs | 2 +- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Main.cs b/Main.cs index 7f28611..50195f1 100644 --- a/Main.cs +++ b/Main.cs @@ -153,7 +153,7 @@ namespace KCM try { - FieldInfo loadTickDelayField = instance.GetType().GetField("loadTickDelay", BindingFlags.Instance | BindingFlags.NonPublic); + FieldInfo loadTickDelayField = instance.GetType().GetField("loadTickDelay", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); if (loadTickDelayField != null) { loadTickDelayField.SetValue(instance, ticks); @@ -164,8 +164,9 @@ namespace KCM if (loadTickDelayProp != null && loadTickDelayProp.CanWrite && loadTickDelayProp.PropertyType == typeof(int)) loadTickDelayProp.SetValue(instance, ticks, null); } - catch + catch (Exception e) { + helper?.Log("SetLoadTickDelay failed for " + instance.GetType().Name + ": " + e.Message); } } @@ -176,7 +177,7 @@ namespace KCM try { - FieldInfo loadTickDelayField = instance.GetType().GetField("loadTickDelay", BindingFlags.Instance | BindingFlags.NonPublic); + FieldInfo loadTickDelayField = instance.GetType().GetField("loadTickDelay", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); if (loadTickDelayField != null) { object v = loadTickDelayField.GetValue(instance); @@ -247,10 +248,17 @@ namespace KCM try { Player.inst.irrigation.UpdateIrrigation(); } catch (Exception e) { helper?.Log(e.ToString()); } try { Player.inst.CalcMaxResources(null, -1); } catch (Exception e) { helper?.Log(e.ToString()); } + helper?.Log("Setting loadTickDelay for game systems"); SetLoadTickDelay(Player.inst, 1); SetLoadTickDelay(UnitSystem.inst, 1); SetLoadTickDelay(JobSystem.inst, 1); SetLoadTickDelay(VillagerSystem.inst, 1); + + helper?.Log( + "loadTickDelay after set: Player=" + GetLoadTickDelayOrMinusOne(Player.inst) + + " Unit=" + GetLoadTickDelayOrMinusOne(UnitSystem.inst) + + " Job=" + GetLoadTickDelayOrMinusOne(JobSystem.inst) + + " Villager=" + GetLoadTickDelayOrMinusOne(VillagerSystem.inst)); } catch (Exception e) { @@ -487,6 +495,18 @@ namespace KCM GetLoadTickDelayOrMinusOne(UnitSystem.inst) + "/" + GetLoadTickDelayOrMinusOne(JobSystem.inst) + "/" + GetLoadTickDelayOrMinusOne(VillagerSystem.inst)); + + // Try to fix stalled systems by resetting loadTickDelay + if (GetLoadTickDelayOrMinusOne(VillagerSystem.inst) == -1 || + GetLoadTickDelayOrMinusOne(UnitSystem.inst) == -1 || + GetLoadTickDelayOrMinusOne(JobSystem.inst) == -1) + { + Main.helper.Log("VillagerStallDetect: Attempting to fix stalled systems"); + SetLoadTickDelay(Player.inst, 1); + SetLoadTickDelay(UnitSystem.inst, 1); + SetLoadTickDelay(JobSystem.inst, 1); + SetLoadTickDelay(VillagerSystem.inst, 1); + } } } } diff --git a/StateManagement/Sync/SyncManager.cs b/StateManagement/Sync/SyncManager.cs index 9498098..394eb7c 100644 --- a/StateManagement/Sync/SyncManager.cs +++ b/StateManagement/Sync/SyncManager.cs @@ -588,7 +588,7 @@ namespace KCM.StateManagement.Sync List guids = new List(); List positions = new List(); - const int maxVillagersPerSnapshot = 200; + const int maxVillagersPerSnapshot = 50; for (int i = 0; i < Villager.villagers.Count && guids.Count < maxVillagersPerSnapshot; i++) {