public static bool Prefix(ref int __result, ushort instanceID, ref CitizenInstance citizenData, Citizen.AgeGroup ageGroup) { // Original method return value. // Array cache has already been set when GetCarProbability was called. __result = AIUtils.cacheArray[DataStore.TAXI]; if (Logging.UseTransportLog) { Logging.WriteToLog(Logging.TransportLogName, "The same ", ageGroup.ToString(), " has ", __result.ToString(), "% chance of using a taxi"); } // Don't execute base method after this. return(false); }
public override bool CitizenCanGo(uint citizenID, ref Citizen person) { bool canGo = false; if (m_eventChances != null && m_eventData.m_registeredCitizens < GetCapacity()) { canGo = true; Citizen.Wealth _citizenWealth = person.WealthLevel; Citizen.Education _citizenEducation = person.EducationLevel; Citizen.Gender _citizenGender = Citizen.GetGender(citizenID); Citizen.Happiness _citizenHappiness = Citizen.GetHappinessLevel(Citizen.GetHappiness(person.m_health, person.m_wellbeing)); Citizen.Wellbeing _citizenWellbeing = Citizen.GetWellbeingLevel(_citizenEducation, person.m_wellbeing); Citizen.AgeGroup _citizenAgeGroup = Citizen.GetAgeGroup(person.Age); float percentageChange = GetAdjustedChancePercentage(); int randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U); switch (_citizenWealth) { case Citizen.Wealth.Low: canGo = canGo && randomPercentage < Adjust(m_eventChances._lowWealth, percentageChange); break; case Citizen.Wealth.Medium: canGo = canGo && randomPercentage < Adjust(m_eventChances._mediumWealth, percentageChange); break; case Citizen.Wealth.High: canGo = canGo && randomPercentage < Adjust(m_eventChances._highWealth, percentageChange); break; } randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U); switch (_citizenEducation) { case Citizen.Education.Uneducated: canGo = canGo && randomPercentage < Adjust(m_eventChances._uneducated, percentageChange); break; case Citizen.Education.OneSchool: canGo = canGo && randomPercentage < Adjust(m_eventChances._oneSchool, percentageChange); break; case Citizen.Education.TwoSchools: canGo = canGo && randomPercentage < Adjust(m_eventChances._twoSchools, percentageChange); break; case Citizen.Education.ThreeSchools: canGo = canGo && randomPercentage < Adjust(m_eventChances._threeSchools, percentageChange); break; } randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U); switch (_citizenGender) { case Citizen.Gender.Female: canGo = canGo && randomPercentage < Adjust(m_eventChances._females, percentageChange); break; case Citizen.Gender.Male: canGo = canGo && randomPercentage < Adjust(m_eventChances._males, percentageChange); break; } randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U); switch (_citizenHappiness) { case Citizen.Happiness.Bad: canGo = canGo && randomPercentage < Adjust(m_eventChances._badHappiness, percentageChange); break; case Citizen.Happiness.Poor: canGo = canGo && randomPercentage < Adjust(m_eventChances._poorHappiness, percentageChange); break; case Citizen.Happiness.Good: canGo = canGo && randomPercentage < Adjust(m_eventChances._goodHappiness, percentageChange); break; case Citizen.Happiness.Excellent: canGo = canGo && randomPercentage < Adjust(m_eventChances._excellentHappiness, percentageChange); break; case Citizen.Happiness.Suberb: canGo = canGo && randomPercentage < Adjust(m_eventChances._superbHappiness, percentageChange); break; } randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U); switch (_citizenWellbeing) { case Citizen.Wellbeing.VeryUnhappy: canGo = canGo && randomPercentage < Adjust(m_eventChances._veryUnhappyWellbeing, percentageChange); break; case Citizen.Wellbeing.Unhappy: canGo = canGo && randomPercentage < Adjust(m_eventChances._unhappyWellbeing, percentageChange); break; case Citizen.Wellbeing.Satisfied: canGo = canGo && randomPercentage < Adjust(m_eventChances._satisfiedWellbeing, percentageChange); break; case Citizen.Wellbeing.Happy: canGo = canGo && randomPercentage < Adjust(m_eventChances._happyWellbeing, percentageChange); break; case Citizen.Wellbeing.VeryHappy: canGo = canGo && randomPercentage < Adjust(m_eventChances._veryHappyWellbeing, percentageChange); break; } randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U); switch (_citizenAgeGroup) { case Citizen.AgeGroup.Child: canGo = canGo && randomPercentage < Adjust(m_eventChances._children, percentageChange); break; case Citizen.AgeGroup.Teen: canGo = canGo && randomPercentage < Adjust(m_eventChances._teens, percentageChange); break; case Citizen.AgeGroup.Young: canGo = canGo && randomPercentage < Adjust(m_eventChances._youngAdults, percentageChange); break; case Citizen.AgeGroup.Adult: canGo = canGo && randomPercentage < Adjust(m_eventChances._adults, percentageChange); break; case Citizen.AgeGroup.Senior: canGo = canGo && randomPercentage < Adjust(m_eventChances._seniors, percentageChange); break; } CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log( (canGo ? "[Can Go]" : "[Ignoring]") + " Citizen " + citizenID + " for " + m_eventData.m_eventName + "\n\t" + _citizenWealth.ToString() + ", " + _citizenEducation.ToString() + ", " + _citizenGender.ToString() + ", " + _citizenHappiness.ToString() + ", " + _citizenWellbeing.ToString() + ", " + _citizenAgeGroup.ToString()); } return(canGo); }
public static bool Prefix(ref int __result, ushort instanceID, ref CitizenInstance citizenData, Citizen.AgeGroup ageGroup) { // Cache as best we can. The order of calls is car, bike, taxi AIUtils.citizenCache = citizenData.m_citizen; // Not needed, but just in case Citizen citizen = Singleton <CitizenManager> .instance.m_citizens.m_buffer[(int)((UIntPtr)citizenData.m_citizen)]; ushort homeBuilding = citizen.m_homeBuilding; ItemClass.SubService subService = ItemClass.SubService.ResidentialLow; if (homeBuilding != 0) { DistrictManager instance = Singleton <DistrictManager> .instance; Building building = Singleton <BuildingManager> .instance.m_buildings.m_buffer[(int)homeBuilding]; District district = instance.m_districts.m_buffer[instance.GetDistrict(building.m_position)]; DistrictPolicies.CityPlanning cityPlanningPolicies = district.m_cityPlanningPolicies; AIUtils.livesInBike = (cityPlanningPolicies & DistrictPolicies.CityPlanning.EncourageBiking) != DistrictPolicies.CityPlanning.None; subService = Singleton <BuildingManager> .instance.m_buildings.m_buffer[homeBuilding].Info.GetSubService(); } // Set the cache AIUtils.cacheArray = AIUtils.GetArray(citizen.WealthLevel, subService, ageGroup); // Original method return value. __result = AIUtils.cacheArray[DataStore.CAR]; if (Logging.UseTransportLog) { Logging.WriteToLog(Logging.TransportLogName, citizen.WealthLevel.ToString(), "-wealth ", ageGroup.ToString(), " has ", __result + "% chance of driving"); } // Don't execute base method after this. return(false); }