Пример #1
0
        public void OnWorldQuit()
        {
            if (!GameUtils.IsInstalled(ProductVersion.EP8))
            {
                return;
            }

            foreach (MotiveTuning tuning in MotiveTuning.GetAllTunings(CommodityKind.Temperature))
            {
                tuning.Universal = true;
            }
        }
Пример #2
0
        public static void ToggleSeasons()
        {
            if (!GameUtils.IsInstalled(ProductVersion.EP8))
            {
                return;
            }

            bool enable = Traveler.Settings.mEnableSeasons;

            if (enable)
            {
                if (SeasonsManager.Enabled)
                {
                    return;
                }

                SeasonsManager.sSeasonsValidForWorld = SeasonsManager.Validity.Valid;
                SeasonsManager.PostWorldStartup();
            }
            else
            {
                //if (!SeasonsManager.Enabled) return;

                SeasonsManager.Shutdown();

                SeasonsManager.sSeasonsValidForWorld = SeasonsManager.Validity.Invalid;

                foreach (MotiveTuning tuning in MotiveTuning.GetAllTunings(CommodityKind.Temperature))
                {
                    tuning.Universal = false;
                }
            }

            foreach (Sim actor in LotManager.Actors)
            {
                if (actor.Motives == null)
                {
                    continue;
                }

                if (enable)
                {
                    actor.Motives.CreateMotive(CommodityKind.Temperature);
                }
                else
                {
                    actor.Motives.RemoveMotive(CommodityKind.Temperature);
                }
            }
        }
Пример #3
0
        public override void OnDelayedWorldLoadFinished()
        {
            Overwatch.Log("FixLushEpidemic");

            if (GameUtils.IsInstalled(ProductVersion.EP9) && !GameUtils.IsUniversityWorld())
            {
                MotiveTuning mTuning = null;
                foreach (MotiveTuning tuning in MotiveTuning.GetAllTunings(CommodityKind.Juiced))
                {
                    MotiveSatisfactionCurve autoSatisfyCurve = new MotiveSatisfactionCurve
                    {
                        Loops = true
                    };
                    Curve curve = autoSatisfyCurve;
                    curve.Add(new Vector2(0f, -49f));
                    Curve motiveDecayCurve = autoSatisfyCurve.GetMotiveDecayCurve();
                    tuning.mMotiveDecayCurve = motiveDecayCurve;
                    tuning.mAutoSatisfyCurve = autoSatisfyCurve;
                    mTuning = tuning;
                }

                if (mTuning != null)
                {
                    foreach (Sim sim in LotManager.Actors)
                    {
                        if (sim == null || sim.Autonomy == null)
                        {
                            continue;
                        }

                        if (sim.Autonomy.Motives.HasMotive(CommodityKind.Juiced))
                        {
                            sim.mMotiveTuning[(int)CommodityKind.Juiced] = mTuning;
                            sim.Autonomy.Motives.RemoveMotive(CommodityKind.Juiced);
                            sim.Autonomy.Motives.CreateMotive(CommodityKind.Juiced);
                        }
                    }
                }

                Overwatch.Log("Banished autosatisfy of Juiced motive");
            }
        }
Пример #4
0
        public static float ScoreMotiveTuning(MotiveTuning tuning, MotiveKey key)
        {
            float             num = 0f;
            CASAgeGenderFlags speciesSpecificity = tuning.SpeciesSpecificity;

            if (speciesSpecificity != CASAgeGenderFlags.None)
            {
                CASAgeGenderFlags species = key.mAgeSpecies & CASAgeGenderFlags.SpeciesMask;
                if (species == CASAgeGenderFlags.None)
                {
                    species = CASAgeGenderFlags.Human;
                }

                if (species != speciesSpecificity)
                {
                    return(float.MinValue);
                }

                num += Sim.kMotiveTuningScoreForSpecies;
            }

            CASAgeGenderFlags ageSpecificity = tuning.AgeSpecificity;

            if (ageSpecificity != CASAgeGenderFlags.AgeMask)
            {
                if ((key.mAgeSpecies & ageSpecificity) == CASAgeGenderFlags.None)
                {
                    return(float.MinValue);
                }

                num += Sim.kMotiveTuningScoreForAge;
            }

            if (tuning.TraitSpecificity != null)
            {
                OccultTypes occult = OccultTypes.None;

                bool flag = true;
                foreach (TraitNames names in tuning.TraitSpecificity)
                {
                    occult = OccultTypeHelper.OccultFromTrait(names);
                    if (occult != key.mOccult)
                    {
                        flag = false;
                        break;
                    }
                }

                if (flag)
                {
                    num += Sim.kMotiveTuningScoreForTrait * tuning.TraitSpecificity.Count;
                }
                else
                {
                    return(float.MinValue);
                }
            }

            if (tuning.WorldRestrictionType == WorldRestrictionType.Allow)
            {
                if (!tuning.WorldRestrictionWorldTypes.Contains(GameUtils.GetCurrentWorldType()) && !tuning.WorldRestrictionWorldNames.Contains(GameUtils.GetCurrentWorld()))
                {
                    return(float.MinValue);
                }
                num += Sim.kMotiveTuningScoreForWorld;
            }

            if (tuning.WorldRestrictionType != WorldRestrictionType.Disallow)
            {
                return(num);
            }

            if (tuning.WorldRestrictionWorldTypes.Contains(GameUtils.GetCurrentWorldType()) || tuning.WorldRestrictionWorldNames.Contains(GameUtils.GetCurrentWorld()))
            {
                return(float.MinValue);
            }

            return(num + Sim.kMotiveTuningScoreForWorld);
        }
Пример #5
0
        public void ApplyRandomBuff(Sim actor, JellyBeanBush.JellyBeanBuffType buffType)
        {
            BuffNames buffNames = BuffNames.Undefined;

            switch (buffType)
            {
            case JellyBeanBush.JellyBeanBuffType.NormalPositive:
                buffNames = RandomUtil.GetRandomObjectFromList <BuffNames>(JellyBeanBush.kPositiveBuffs);
                break;

            case JellyBeanBush.JellyBeanBuffType.NormalNegative:
                buffNames = RandomUtil.GetRandomObjectFromList <BuffNames>(JellyBeanBush.kNegativeBuffs);
                break;

            case JellyBeanBush.JellyBeanBuffType.TransPositive:
                buffNames = RandomUtil.GetRandomObjectFromList <BuffNames>(JellyBeanBush.kPosTransBuffs);
                break;

            case JellyBeanBush.JellyBeanBuffType.TransNegative:
                buffNames = RandomUtil.GetRandomObjectFromList <BuffNames>(JellyBeanBush.kNegTransBuffs);
                break;
            }
            if (buffNames == BuffNames.Undefined)
            {
                return;
            }
            if (!actor.BuffManager.AddElement(buffNames, Origin.FromMagicJellyBean))
            {
                return;
            }
            BuffInstance element = actor.BuffManager.GetElement(buffNames);

            if (element == null)
            {
                return;
            }
            ThoughtBalloonManager.BalloonData balloonData;
            if (element.ThumbString == "moodlet_terrified")
            {
                balloonData = new ThoughtBalloonManager.BalloonData("ep7_balloon_moodlet_terrified");
            }
            else if (element.ThumbString == "moodlet_blueblitz")
            {
                balloonData = new ThoughtBalloonManager.BalloonData("ep7_balloon_moodlet_blueblitz");
            }
            else if (element.ThumbString == "moodlet_allglowyontheoutside")
            {
                balloonData = new ThoughtBalloonManager.BalloonData("ep7_balloon_moodlet_allglowyontheoutside");
            }
            else
            {
                balloonData = new ThoughtBalloonManager.BalloonData(element.ThumbString);
            }
            balloonData.mPriority = ThoughtBalloonPriority.High;
            actor.ThoughtBalloonManager.ShowBalloon(balloonData);
            if (JellyBeanBush.mJellyBeanBuffs.ContainsKey(buffNames))
            {
                JellyBeanBush.JellyBeanBuffStruct jellyBeanBuffStruct = JellyBeanBush.mJellyBeanBuffs[buffNames];
                float        value        = 0f;
                MotiveTuning motiveTuning = actor.GetMotiveTuning(jellyBeanBuffStruct.commodity);
                if (motiveTuning != null)
                {
                    if (jellyBeanBuffStruct.value > 0f)
                    {
                        value = MathUtils.Clamp(jellyBeanBuffStruct.value + JellyBeanBush.kMotiveDelta, motiveTuning.Min, motiveTuning.Max);
                    }
                    else
                    {
                        value = MathUtils.Clamp(jellyBeanBuffStruct.value - JellyBeanBush.kMotiveDelta, motiveTuning.Min, motiveTuning.Max);
                    }
                }
                actor.Motives.SetValue(jellyBeanBuffStruct.commodity, value);
            }
        }
Пример #6
0
        public void update_motive_buffs(Sim sim, CommodityKind commodity, int currentValue)
        {
            if (currentValue == -333)
            {
                return;
            }

            BuffManager    buffManager  = sim.BuffManager;
            SimDescription simd         = sim.SimDescription;
            TraitManager   traitManager = simd.TraitManager;

            MotiveTuning motiveTuning = sim.GetMotiveTuning(commodity);

            if (motiveTuning != null)
            {
                List <MotiveTuning.MotiveBuffTrigger> buffTriggers = motiveTuning.BuffTriggers;
                foreach (MotiveTuning.MotiveBuffTrigger item in buffTriggers)
                {
                    if ((float)currentValue <= Math.Max(item.mTriggerValueStart, item.mTriggerValueEnd) && (float)currentValue >= Math.Min(item.mTriggerValueStart, item.mTriggerValueEnd))
                    {
                        foreach (BuffNames item2 in item.mRemoveBuff)
                        {
                            if (item2 == BuffNames.Hungry)
                            {
                                buffManager.RemoveElement(BuffNames.HungryLikeTheWolf);
                            }
                            buffManager.RemoveElement(item2);
                        }
                        if (item.mAddBuff != BuffNames.Undefined)
                        {
                            if (item.mAddBuff == BuffNames.VeryHungry && simd.IsWerewolf && !buffManager.HasElement(BuffNames.HungryLikeTheWolf))
                            {
                                buffManager.AddElement(BuffNames.HungryLikeTheWolf, Origin.None);
                            }
                            if (!buffManager.HasElement(item.mAddBuff))
                            {
                                buffManager.AddElement(item.mAddBuff, Origin.None);
                            }
                        }
                        if (item.mCustomClass != null)
                        {
                            item.mCustomClass.Invoke(null, new object[1]
                            {
                                sim
                            });
                        }
                    }
                    else if (buffManager.IsPermaMoodlet(item.mAddBuff) && commodity != CommodityKind.Hygiene && commodity != CommodityKind.CatScratch && commodity != CommodityKind.MermaidDermalHydration)
                    {
                        buffManager.RemoveElement(item.mAddBuff);
                    }
                }
            }
            if ((float)currentValue == Tuning.Min || (commodity == CommodityKind.Temperature && (float)currentValue == Tuning.Max))
            {
                MotiveDistress(sim, commodity);
            }
            if (traitManager.HasElement(TraitNames.BroodingTrait))
            {
                if (commodity == CommodityKind.Social && (float)currentValue <= kMisunderstoodSocialMotiveAddValue && !buffManager.HasElement(BuffNames.Misunderstood) && !buffManager.HasElement(BuffNames.NeedToBrood))
                {
                    buffManager.AddElement(BuffNames.Misunderstood, Origin.FromBeingBroodingTrait);
                }
                if (commodity == CommodityKind.Social && (float)currentValue >= kMisunderstoodSocialMotiveRemoveValue)
                {
                    buffManager.RemoveElement(BuffNames.Misunderstood);
                }
            }
            if ((commodity == CommodityKind.Hygiene || commodity == CommodityKind.Energy) && (buffManager.HasElement(BuffNames.SickAndTired) || buffManager.HasElement(BuffNames.PestilencePlague)))
            {
                BuffSickAndTired.CheckForStartStopFlySwarmEffect(sim, commodity, currentValue);
            }
            if (Commodity == CommodityKind.AuraPower)
            {
                BuffFairyAuraProjecting.BuffAuraInstanceBase buffAuraInstanceBase = buffManager.GetElement(BuffNames.FairyAuraProjectingSoothe) as BuffFairyAuraProjecting.BuffAuraInstanceBase;
                if (buffAuraInstanceBase == null)
                {
                    buffAuraInstanceBase = (buffManager.GetElement(BuffNames.FairyAuraProjectingCreative) as BuffFairyAuraProjecting.BuffAuraInstanceBase);
                }
                if (buffAuraInstanceBase == null)
                {
                    buffAuraInstanceBase = (buffManager.GetElement(BuffNames.FairyAuraProjectingMind) as BuffFairyAuraProjecting.BuffAuraInstanceBase);
                }
                if (buffAuraInstanceBase != null)
                {
                    buffAuraInstanceBase.UpdateColor();
                }
            }
        }
Пример #7
0
        public static float ScoreMotiveTuning(MotiveTuning tuning, MotiveKey key)
        {
            float num = 0f;
            CASAgeGenderFlags speciesSpecificity = tuning.SpeciesSpecificity;
            if (speciesSpecificity != CASAgeGenderFlags.None)
            {
                CASAgeGenderFlags species = key.mAgeSpecies & CASAgeGenderFlags.SpeciesMask;
                if (species == CASAgeGenderFlags.None)
                {
                    species = CASAgeGenderFlags.Human;
                }

                if (species != speciesSpecificity)
                {
                    return float.MinValue;
                }

                num += Sim.kMotiveTuningScoreForSpecies;
            }

            CASAgeGenderFlags ageSpecificity = tuning.AgeSpecificity;
            if (ageSpecificity != CASAgeGenderFlags.AgeMask)
            {
                if ((key.mAgeSpecies & ageSpecificity) == CASAgeGenderFlags.None)
                {
                    return float.MinValue;
                }

                num += Sim.kMotiveTuningScoreForAge;
            }

            if (tuning.TraitSpecificity != null)
            {
                OccultTypes occult = OccultTypes.None;

                bool flag = true;
                foreach (TraitNames names in tuning.TraitSpecificity)
                {
                    occult = OccultTypeHelper.OccultFromTrait(names);
                    if (occult != key.mOccult)
                    {
                        flag = false;
                        break;
                    }
                }

                if (flag)
                {
                    num += Sim.kMotiveTuningScoreForTrait * tuning.TraitSpecificity.Count;
                }
                else
                {
                    return float.MinValue;
                }
            }

            if (tuning.WorldRestrictionType == WorldRestrictionType.Allow)
            {
                if (!tuning.WorldRestrictionWorldTypes.Contains(GameUtils.GetCurrentWorldType()) && !tuning.WorldRestrictionWorldNames.Contains(GameUtils.GetCurrentWorld()))
                {
                    return float.MinValue;
                }
                num += Sim.kMotiveTuningScoreForWorld;
            }

            if (tuning.WorldRestrictionType != WorldRestrictionType.Disallow)
            {
                return num;
            }

            if (tuning.WorldRestrictionWorldTypes.Contains(GameUtils.GetCurrentWorldType()) || tuning.WorldRestrictionWorldNames.Contains(GameUtils.GetCurrentWorld()))
            {
                return float.MinValue;
            }

            return (num + Sim.kMotiveTuningScoreForWorld);
        }