Debug: Add detailed logging to ProcessBuildingHook

Added step-by-step logging to identify where building load fails:
- GetPlaceableByUniqueName result
- Each initialization step
- Exception details if any step fails

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-14 11:50:31 +01:00
parent ce1c067fca
commit b3d7108574

72
Main.cs
View File

@@ -1394,38 +1394,60 @@ namespace KCM
{
if (KCClient.client.IsConnected)
{
Main.helper.Log($"[ProcessBuilding] START - {structureData.uniqueName}");
Building Building = GameState.inst.GetPlaceableByUniqueName(structureData.uniqueName);
bool flag = Building;
if (flag)
try
{
Building building = UnityEngine.Object.Instantiate<Building>(Building);
building.transform.position = structureData.globalPosition;
building.Init();
building.transform.SetParent(p.buildingContainer.transform, true);
structureData.Unpack(building);
p.AddBuilding(building);
Building Building = GameState.inst.GetPlaceableByUniqueName(structureData.uniqueName);
Main.helper.Log($"[ProcessBuilding] GetPlaceable: {(Building != null ? "OK" : "NULL")}");
// Place building in world and setup pathing
World.inst.PlaceFromLoad(building);
structureData.UnpackStage2(building);
Main.helper.Log($"Loading player id: {p.PlayerLandmassOwner.teamId}");
Main.helper.Log($"loading building: {building.FriendlyName}");
Main.helper.Log($" (teamid: {building.TeamID()})");
Main.helper.Log(p.ToString());
bool flag2 = building.GetComponent<Keep>() != null && building.TeamID() == p.PlayerLandmassOwner.teamId;
Main.helper.Log("Set keep? " + flag2);
if (flag2)
if (Building)
{
p.keep = building.GetComponent<Keep>();
Main.helper.Log(p.keep.ToString());
Building building = UnityEngine.Object.Instantiate<Building>(Building);
Main.helper.Log($"[ProcessBuilding] Instantiated");
building.transform.position = structureData.globalPosition;
Main.helper.Log($"[ProcessBuilding] Position set: {structureData.globalPosition}");
building.Init();
Main.helper.Log($"[ProcessBuilding] Init done");
building.transform.SetParent(p.buildingContainer.transform, true);
Main.helper.Log($"[ProcessBuilding] SetParent done");
structureData.Unpack(building);
Main.helper.Log($"[ProcessBuilding] Unpack done");
p.AddBuilding(building);
Main.helper.Log($"[ProcessBuilding] AddBuilding done");
World.inst.PlaceFromLoad(building);
Main.helper.Log($"[ProcessBuilding] PlaceFromLoad done");
structureData.UnpackStage2(building);
Main.helper.Log($"[ProcessBuilding] UnpackStage2 done");
bool isKeep = building.GetComponent<Keep>() != null && building.TeamID() == p.PlayerLandmassOwner.teamId;
if (isKeep)
{
p.keep = building.GetComponent<Keep>();
Main.helper.Log($"[ProcessBuilding] Keep set");
}
__result = building;
Main.helper.Log($"[ProcessBuilding] SUCCESS - {structureData.uniqueName}");
}
else
{
Main.helper.Log($"[ProcessBuilding] FAILED - {structureData.uniqueName} not found in GameState");
__result = null;
}
__result = building;
}
else
catch (Exception e)
{
Main.helper.Log(structureData.uniqueName + " failed to load correctly");
Main.helper.Log($"[ProcessBuilding] EXCEPTION: {structureData.uniqueName}");
Main.helper.Log($"[ProcessBuilding] Error: {e.Message}");
Main.helper.Log($"[ProcessBuilding] Stack: {e.StackTrace}");
__result = null;
}