diff --git a/Main.cs b/Main.cs index fcf7bd7..7f28611 100644 --- a/Main.cs +++ b/Main.cs @@ -199,6 +199,43 @@ namespace KCM return -1; } + private static string TryGetGameModeName() + { + try + { + if (GameState.inst == null) + return "null"; + + var t = GameState.inst.GetType(); + + var modeProp = t.GetProperty("mode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + ?? t.GetProperty("Mode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + ?? t.GetProperty("CurrentMode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + if (modeProp != null) + { + object m = modeProp.GetValue(GameState.inst, null); + return m != null ? m.GetType().Name : "null"; + } + + var modeField = t.GetField("mode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + ?? t.GetField("Mode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + ?? t.GetField("currentMode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + ?? t.GetField("currMode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + if (modeField != null) + { + object fm = modeField.GetValue(GameState.inst); + return fm != null ? fm.GetType().Name : "null"; + } + } + catch + { + } + + return "unknown"; + } + public static void RunPostLoadRebuild(string reason) { try @@ -439,6 +476,8 @@ namespace KCM Main.helper.Log( "VillagerStallDetect: no movement for " + (now - lastVillagerMoveMs) + "ms timeScale=" + Time.timeScale + + " mode=" + TryGetGameModeName() + + " villagerSystemEnabled=" + (VillagerSystem.inst != null && VillagerSystem.inst.enabled) + " villagers=" + Villager.villagers.Count + " sampleGuid=" + probedVillagerGuid + " samplePos=" + v.Pos); diff --git a/Packets/Lobby/StartGame.cs b/Packets/Lobby/StartGame.cs index eefcfcf..c861d49 100644 --- a/Packets/Lobby/StartGame.cs +++ b/Packets/Lobby/StartGame.cs @@ -39,6 +39,25 @@ namespace KCM.Packets.Lobby Main.helper.Log(ex.ToString()); } + try + { + GameState.inst.SetNewMode(GameState.inst.playingMode); + Main.helper.Log("StartGame: forced playing mode"); + } + catch (Exception ex) + { + Main.helper.Log("StartGame: failed forcing playing mode"); + Main.helper.Log(ex.ToString()); + } + + try + { + Main.RunPostLoadRebuild("StartGame"); + } + catch + { + } + SpeedControlUI.inst.SetSpeed(0); } else