From 827bcaa67e5e1a944addb2ee6a1593753803f1b6 Mon Sep 17 00:00:00 2001 From: algernon-A Date: Thu, 18 Nov 2021 08:48:23 +1100 Subject: [PATCH] Make compatible with More CitizenUnits mod. --- CustomData/CitizenUnitData.cs | 11 ++++++++--- Patch/PassengerCarAIArriveAtTargetPatch.cs | 3 ++- Patch/PrivateBuildingAISimulationStepActivePatch.cs | 6 ++++-- Patch/ResidentAICitizenUnitSimulationStepPatch.cs | 4 ++-- Patch/TaxiAIUnloadPassengersPatch.cs | 3 ++- UI/BuildingUI.cs | 3 ++- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CustomData/CitizenUnitData.cs b/CustomData/CitizenUnitData.cs index 9958376..3202c28 100644 --- a/CustomData/CitizenUnitData.cs +++ b/CustomData/CitizenUnitData.cs @@ -1,14 +1,19 @@ -using RealCity.Util; +using ColossalFramework; +using RealCity.Util; namespace RealCity.CustomData { public class CitizenUnitData { - public static float[] familyMoney = new float[524288]; - public static ushort[] familyGoods = new ushort[524288]; + public static float[] familyMoney; + public static ushort[] familyGoods; public static void DataInit() { + uint numCitizenUnits = Singleton.instance.m_units.m_size; + familyMoney = new float[numCitizenUnits]; + familyGoods = new ushort[numCitizenUnits]; + for (int i = 0; i < familyMoney.Length; i++) { familyMoney[i] = 0f; diff --git a/Patch/PassengerCarAIArriveAtTargetPatch.cs b/Patch/PassengerCarAIArriveAtTargetPatch.cs index 7f4e73b..0593983 100644 --- a/Patch/PassengerCarAIArriveAtTargetPatch.cs +++ b/Patch/PassengerCarAIArriveAtTargetPatch.cs @@ -95,6 +95,7 @@ public static ushort GetDriverInstance(ushort vehicleID, ref Vehicle data) { CitizenManager instance = Singleton.instance; uint num = data.m_citizenUnits; + uint numCitizenUnits = instance.m_units.m_size; int num2 = 0; while (num != 0u) { @@ -112,7 +113,7 @@ public static ushort GetDriverInstance(ushort vehicleID, ref Vehicle data) } } num = nextUnit; - if (++num2 > 524288) + if (++num2 > numCitizenUnits) { CODebugBase.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace); break; diff --git a/Patch/PrivateBuildingAISimulationStepActivePatch.cs b/Patch/PrivateBuildingAISimulationStepActivePatch.cs index 5ba9f67..ee235f0 100644 --- a/Patch/PrivateBuildingAISimulationStepActivePatch.cs +++ b/Patch/PrivateBuildingAISimulationStepActivePatch.cs @@ -152,6 +152,7 @@ public static float GetResidentialBuildingAverageMoney(Building buildingData) { CitizenManager instance = Singleton.instance; uint citzenUnit = buildingData.m_citizenUnits; + uint numCitizenUnits = instance.m_units.m_size; int unitCount = 0; long totalMoney = 0; float averageMoney = 0; @@ -166,7 +167,7 @@ public static float GetResidentialBuildingAverageMoney(Building buildingData) } } citzenUnit = instance.m_units.m_buffer[citzenUnit].m_nextUnit; - if (++unitCount > 524288) + if (++unitCount > numCitizenUnits) { CODebugBase.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace); break; @@ -203,6 +204,7 @@ public static void LimitCommericalBuildingAccess(ushort buildingID, ref Building //Remove citizen which already have goods CitizenManager instance = Singleton.instance; uint num = buildingData.m_citizenUnits; + uint numCitizenunits = instance.m_units.m_size; int num2 = 0; while (num != 0u) { @@ -290,7 +292,7 @@ public static void LimitCommericalBuildingAccess(ushort buildingID, ref Building } } num = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_nextUnit; - if (++num2 > 524288) + if (++num2 > numCitizenUnits) { CODebugBase.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace); break; diff --git a/Patch/ResidentAICitizenUnitSimulationStepPatch.cs b/Patch/ResidentAICitizenUnitSimulationStepPatch.cs index 03550d8..8e2a614 100644 --- a/Patch/ResidentAICitizenUnitSimulationStepPatch.cs +++ b/Patch/ResidentAICitizenUnitSimulationStepPatch.cs @@ -257,9 +257,9 @@ public static void ProcessFamily(uint homeID, ref CitizenUnit data) RealCityResidentAI.preCitizenId = homeID; RealCityResidentAI.familyCount++; - if (homeID > 524288) + if (homeID > Singleton.instance.m_units.m_size) { - DebugLog.LogToFileOnly("Error: citizen ID greater than 524288"); + DebugLog.LogToFileOnly("Error: home ID greater than CitizenUnit array size"); } //DebugLog.LogToFileOnly($"ProcessCitizen pre family {homeID} moneny {CitizenUnitData.familyMoney[homeID]}"); diff --git a/Patch/TaxiAIUnloadPassengersPatch.cs b/Patch/TaxiAIUnloadPassengersPatch.cs index 784b1a8..8d1ec0f 100644 --- a/Patch/TaxiAIUnloadPassengersPatch.cs +++ b/Patch/TaxiAIUnloadPassengersPatch.cs @@ -20,6 +20,7 @@ public static void Prefix(ref TaxiAI __instance, ref Vehicle data) CitizenManager instance = Singleton.instance; Vector3 lastFramePosition = data.GetLastFramePosition(); uint num2 = data.m_citizenUnits; + uint numCitizenUnits = instance.m_units.m_size; int num3 = 0; while (num2 != 0u) { @@ -58,7 +59,7 @@ public static void Prefix(ref TaxiAI __instance, ref Vehicle data) } } num2 = nextUnit; - if (++num3 > 524288) + if (++num3 > numCitizenUnits) { CODebugBase.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace); break; diff --git a/UI/BuildingUI.cs b/UI/BuildingUI.cs index 14d5f61..2cf83b6 100644 --- a/UI/BuildingUI.cs +++ b/UI/BuildingUI.cs @@ -253,6 +253,7 @@ public static float CaculateEmployeeOutcome(Building building, out int totalWork float allSalary = 0; CitizenManager instance = Singleton.instance; uint num = building.m_citizenUnits; + uint numCitizenUnits = instance.m_units.m_size; int num2 = 0; while (num != 0u) { @@ -290,7 +291,7 @@ public static float CaculateEmployeeOutcome(Building building, out int totalWork } } num = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_nextUnit; - if (++num2 > 524288) + if (++num2 > numCitizenUnits) { CODebugBase.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace); break;