Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
 /// <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);
Ejemplo n.º 3
0
 /// <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;
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
 /// <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]));
        }