/// <summary>Accepts an event attendee with specified properties.</summary> /// <param name="age">The attendee age.</param> /// <param name="gender">The attendee gender.</param> /// <param name="education">The attendee education.</param> /// <param name="wealth">The attendee wealth.</param> /// <param name="wellbeing">The attendee wellbeing.</param> /// <param name="happiness">The attendee happiness.</param> /// <param name="randomizer">A reference to the game's randomizer.</param> /// <returns> /// <c>true</c> if the event attendee with specified properties is accepted and can attend this city event; /// otherwise, <c>false</c>. /// </returns> public override bool TryAcceptAttendee( Citizen.AgeGroup age, Citizen.Gender gender, Citizen.Education education, Citizen.Wealth wealth, Citizen.Wellbeing wellbeing, Citizen.Happiness happiness, IRandomizer randomizer) { if (attendeesCount > eventTemplate.Capacity) { return(false); } if (eventTemplate.Costs != null && eventTemplate.Costs.Entry > GetCitizenBudgetForEvent(wealth, randomizer)) { return(false); } CityEventAttendees attendees = eventTemplate.Attendees; float randomPercentage = randomizer.GetRandomValue(100u); if (!CheckAge(age, attendees, randomPercentage)) { return(false); } randomPercentage = randomizer.GetRandomValue(100u); if (!CheckGender(gender, attendees, randomPercentage)) { return(false); } randomPercentage = randomizer.GetRandomValue(100u); if (!CheckEducation(education, attendees, randomPercentage)) { return(false); } randomPercentage = randomizer.GetRandomValue(100u); if (!CheckWealth(wealth, attendees, randomPercentage)) { return(false); } randomPercentage = randomizer.GetRandomValue(100u); if (!CheckWellbeing(wellbeing, attendees, randomPercentage)) { return(false); } randomPercentage = randomizer.GetRandomValue(100u); if (!CheckHappiness(happiness, attendees, randomPercentage)) { return(false); } attendeesCount++; return(true); }
/// <summary>Accepts an event attendee with specified properties.</summary> /// <param name="age">The attendee age.</param> /// <param name="gender">The attendee gender.</param> /// <param name="education">The attendee education.</param> /// <param name="wealth">The attendee wealth.</param> /// <param name="wellbeing">The attendee wellbeing.</param> /// <param name="happiness">The attendee happiness.</param> /// <param name="randomizer">A reference to the game's randomizer.</param> /// <returns> /// <c>true</c> if the event attendee with specified properties is accepted and can attend /// this city event; otherwise, <c>false</c>. /// </returns> public override bool TryAcceptAttendee( Citizen.AgeGroup age, Citizen.Gender gender, Citizen.Education education, Citizen.Wealth wealth, Citizen.Wellbeing wellbeing, Citizen.Happiness happiness, IRandomizer randomizer) => ticketPrice <= GetCitizenBudgetForEvent(wealth, randomizer);
/// <summary>Accepts an event attendee with specified properties.</summary> /// <param name="age">The attendee age.</param> /// <param name="gender">The attendee gender.</param> /// <param name="education">The attendee education.</param> /// <param name="wealth">The attendee wealth.</param> /// <param name="wellbeing">The attendee wellbeing.</param> /// <param name="happiness">The attendee happiness.</param> /// <param name="randomizer">A reference to the game's randomizer.</param> /// <returns> /// <c>true</c> if the event attendee with specified properties is accepted and can attend /// this city event; otherwise, <c>false</c>. /// </returns> public virtual bool TryAcceptAttendee( Citizen.AgeGroup age, Citizen.Gender gender, Citizen.Education education, Citizen.Wealth wealth, Citizen.Wellbeing wellbeing, Citizen.Happiness happiness, IRandomizer randomizer) => true;
public override bool CitizenCanGo(uint citizenID, ref Citizen person) { Citizen.AgeGroup _citizenAge = Citizen.GetAgeGroup(person.Age); Citizen.Gender _citizenGender = Citizen.GetGender(citizenID); int percentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100); return((_citizenGender == Citizen.Gender.Male || (_citizenGender == Citizen.Gender.Female && percentage < 20)) && _citizenAge == Citizen.AgeGroup.Young || _citizenAge == Citizen.AgeGroup.Teen); }
private bool CanAttendEvent(uint citizenId, ref TCitizen citizen, ICityEvent cityEvent) { Citizen.AgeGroup age = CitizenProxy.GetAge(ref citizen); Citizen.Gender gender = CitizenProxy.GetGender(citizenId); Citizen.Education education = CitizenProxy.GetEducationLevel(ref citizen); Citizen.Wealth wealth = CitizenProxy.GetWealthLevel(ref citizen); Citizen.Wellbeing wellbeing = CitizenProxy.GetWellbeingLevel(ref citizen); Citizen.Happiness happiness = CitizenProxy.GetHappinessLevel(ref citizen); return(cityEvent.TryAcceptAttendee(age, gender, education, wealth, wellbeing, happiness, Random)); }
public ZombieInfo getZombieInfo(uint zombieId) { if (this.m_instance != 0) { return(Singleton <ZombieManager> .instance.m_instances.m_buffer[(int)this.m_instance].Info); } ItemClass.Service service = ItemClass.Service.Residential; // @todo figure out a way to set a logical ItemClass for a Zombie. Citizen.Gender gender = Citizen.GetGender(zombieId); Randomizer randomizer = new Randomizer(zombieId); return(Singleton <ZombieManager> .instance.GetGroupZombieInfo(ref randomizer, service, gender, Citizen.SubCulture.Generic)); }
private static bool CheckGender(Citizen.Gender gender, CityEventAttendees attendees, float randomPercentage) { switch (gender) { case Citizen.Gender.Female: return(randomPercentage < attendees.Females); case Citizen.Gender.Male: return(randomPercentage < attendees.Males); } return(false); }
public override bool CitizenCanGo(uint citizenID, ref Citizen person) { Citizen.Wealth _citizenWealth = person.WealthLevel; Citizen.Education _citizenEducation = person.EducationLevel; Citizen.AgeGroup _citizenAge = Citizen.GetAgeGroup(person.Age); 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); return(_citizenWealth >= Citizen.Wealth.Medium && _citizenAge == Citizen.AgeGroup.Senior && _citizenHappiness >= Citizen.Happiness.Good && _citizenWellbeing > Citizen.Wellbeing.Unhappy); }
private int GetGroupIndex(ItemClass.Service service, Citizen.Gender gender, Citizen.SubCulture subCulture) { int num; if (subCulture != Citizen.SubCulture.Generic) { num = subCulture + 20 - Citizen.SubCulture.Hippie; } else { num = service - ItemClass.Service.Residential; } num = (int)(num * 2 + gender); return((int)(num * 14)); }
public override bool CitizenCanGo(uint citizenID, ref Citizen person) { 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); int percentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100); return(_citizenWealth < Citizen.Wealth.High && (_citizenEducation < Citizen.Education.ThreeSchools || _citizenEducation == Citizen.Education.ThreeSchools && percentage < 5) && (_citizenGender == Citizen.Gender.Male || (_citizenGender == Citizen.Gender.Female && percentage < 20)) && _citizenHappiness > Citizen.Happiness.Bad && _citizenWellbeing > Citizen.Wellbeing.Unhappy); }
public override bool CitizenCanGo(uint citizenID, ref Citizen person) { Citizen.Wealth _citizenWealth = person.WealthLevel; Citizen.Education _citizenEducation = person.EducationLevel; Citizen.AgeGroup _citizenAge = Citizen.GetAgeGroup(person.Age); 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); int percentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100); return(_citizenWealth >= Citizen.Wealth.Medium && (_citizenGender == Citizen.Gender.Male || (_citizenGender == Citizen.Gender.Female && percentage < 40)) && _citizenAge >= Citizen.AgeGroup.Young && _citizenAge < Citizen.AgeGroup.Senior && _citizenHappiness >= Citizen.Happiness.Good && _citizenWellbeing > Citizen.Wellbeing.Unhappy); }
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); }
/// <summary> /// 以性别计算对政党的兴趣度 /// </summary> /// <param name="gender"></param> /// <returns></returns> private ushort GetFromGender(Citizen.Gender gender) { return(this.partyInterestData.Gender[(int)gender]); }
public ZombieInfo GetGroupZombieInfo(ref Randomizer r, ItemClass.Service service, Citizen.Gender gender, Citizen.SubCulture subCulture) { if (!this.m_citizensRefreshed) { CODebugBase <LogChannel> .Error(LogChannel.Core, "Random citizens not refreshed yet!"); return(null); } int num = this.GetGroupIndex(service, gender, subCulture); FastList <ushort> fastList = this.m_groupZombies[num]; if (fastList == null) { return(null); } if (fastList.m_size == 0) { return(null); } num = r.Int32((uint)fastList.m_size); return(PrefabCollection <ZombieInfo> .GetPrefab((uint)fastList.m_buffer[num])); }