public void OnWorldQuit() { if (!GameUtils.IsInstalled(ProductVersion.EP8)) { return; } foreach (MotiveTuning tuning in MotiveTuning.GetAllTunings(CommodityKind.Temperature)) { tuning.Universal = true; } }
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); } } }
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"); } }
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); }
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); } }
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(); } } }
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); }