コード例 #1
0
        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;
                    }
                }
            }
        }