private void FinishSchoolOrWork(uint citizenID, ref Citizen data) { if (data.m_workBuilding != 0) { if ((data.CurrentLocation == Citizen.Location.Work) && (data.m_homeBuilding != 0)) { base.StartMoving(citizenID, ref data, data.m_workBuilding, data.m_homeBuilding); } BuildingManager instance = Singleton<BuildingManager>.instance; CitizenManager manager2 = Singleton<CitizenManager>.instance; uint citizenUnits = instance.m_buildings.m_buffer[data.m_workBuilding].m_citizenUnits; int num2 = 0; while (citizenUnits != 0) { uint nextUnit = manager2.m_units.m_buffer[citizenUnits].m_nextUnit; CitizenUnit.Flags flags = manager2.m_units.m_buffer[citizenUnits].m_flags; if (((ushort)(flags & (CitizenUnit.Flags.None | CitizenUnit.Flags.Student | CitizenUnit.Flags.Work))) != 0) { if (((ushort)(flags & (CitizenUnit.Flags.None | CitizenUnit.Flags.Student))) != 0) { if (data.RemoveFromUnit(citizenID, ref manager2.m_units.m_buffer[citizenUnits])) { BuildingInfo info = instance.m_buildings.m_buffer[data.m_workBuilding].Info; if (info.m_buildingAI.GetEducationLevel1()) { data.Education1 = true; } if (info.m_buildingAI.GetEducationLevel2()) { data.Education2 = true; } if (info.m_buildingAI.GetEducationLevel3()) { data.Education3 = true; } data.m_workBuilding = 0; data.m_flags &= ~Citizen.Flags.Student; return; } } else if (data.RemoveFromUnit(citizenID, ref manager2.m_units.m_buffer[citizenUnits])) { data.m_workBuilding = 0; data.m_flags &= ~Citizen.Flags.Student; return; } } citizenUnits = nextUnit; if (++num2 > 524288) { CODebugBase<LogChannel>.Error(LogChannel.Core, "Invalid list detected!\n" + System.Environment.StackTrace); break; } } } }