Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions CustomData/CitizenUnitData.cs
Original file line number Diff line number Diff line change
@@ -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<CitizenManager>.instance.m_units.m_size;
familyMoney = new float[numCitizenUnits];
familyGoods = new ushort[numCitizenUnits];

for (int i = 0; i < familyMoney.Length; i++)
{
familyMoney[i] = 0f;
Expand Down
3 changes: 2 additions & 1 deletion Patch/PassengerCarAIArriveAtTargetPatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ public static ushort GetDriverInstance(ushort vehicleID, ref Vehicle data)
{
CitizenManager instance = Singleton<CitizenManager>.instance;
uint num = data.m_citizenUnits;
uint numCitizenUnits = instance.m_units.m_size;
int num2 = 0;
while (num != 0u)
{
Expand All @@ -112,7 +113,7 @@ public static ushort GetDriverInstance(ushort vehicleID, ref Vehicle data)
}
}
num = nextUnit;
if (++num2 > 524288)
if (++num2 > numCitizenUnits)
{
CODebugBase<LogChannel>.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace);
break;
Expand Down
6 changes: 4 additions & 2 deletions Patch/PrivateBuildingAISimulationStepActivePatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ public static float GetResidentialBuildingAverageMoney(Building buildingData)
{
CitizenManager instance = Singleton<CitizenManager>.instance;
uint citzenUnit = buildingData.m_citizenUnits;
uint numCitizenUnits = instance.m_units.m_size;
int unitCount = 0;
long totalMoney = 0;
float averageMoney = 0;
Expand All @@ -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<LogChannel>.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace);
break;
Expand Down Expand Up @@ -203,6 +204,7 @@ public static void LimitCommericalBuildingAccess(ushort buildingID, ref Building
//Remove citizen which already have goods
CitizenManager instance = Singleton<CitizenManager>.instance;
uint num = buildingData.m_citizenUnits;
uint numCitizenunits = instance.m_units.m_size;
int num2 = 0;
while (num != 0u)
{
Expand Down Expand Up @@ -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<LogChannel>.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace);
break;
Expand Down
4 changes: 2 additions & 2 deletions Patch/ResidentAICitizenUnitSimulationStepPatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -257,9 +257,9 @@ public static void ProcessFamily(uint homeID, ref CitizenUnit data)
RealCityResidentAI.preCitizenId = homeID;
RealCityResidentAI.familyCount++;

if (homeID > 524288)
if (homeID > Singleton<CitizenManager>.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]}");
Expand Down
3 changes: 2 additions & 1 deletion Patch/TaxiAIUnloadPassengersPatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public static void Prefix(ref TaxiAI __instance, ref Vehicle data)
CitizenManager instance = Singleton<CitizenManager>.instance;
Vector3 lastFramePosition = data.GetLastFramePosition();
uint num2 = data.m_citizenUnits;
uint numCitizenUnits = instance.m_units.m_size;
int num3 = 0;
while (num2 != 0u)
{
Expand Down Expand Up @@ -58,7 +59,7 @@ public static void Prefix(ref TaxiAI __instance, ref Vehicle data)
}
}
num2 = nextUnit;
if (++num3 > 524288)
if (++num3 > numCitizenUnits)
{
CODebugBase<LogChannel>.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace);
break;
Expand Down
3 changes: 2 additions & 1 deletion UI/BuildingUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ public static float CaculateEmployeeOutcome(Building building, out int totalWork
float allSalary = 0;
CitizenManager instance = Singleton<CitizenManager>.instance;
uint num = building.m_citizenUnits;
uint numCitizenUnits = instance.m_units.m_size;
int num2 = 0;
while (num != 0u)
{
Expand Down Expand Up @@ -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<LogChannel>.Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace);
break;
Expand Down