public HouseholdStore(IEnumerable <SimDescription> newSims, bool catchDreams) { if (newSims != null) { mNewSims = new List <SimDescription>(newSims); } mOldHouse = PlumbBob.sCurrentNonNullHousehold; if ((mOldHouse != null) && (catchDreams)) { foreach (Sim member in AllSims(mOldHouse)) { DreamStore element = new DreamStore(member, false, true); mDreamStore.Add(member, element); } } if (mNewSims != null) { foreach (SimDescription member in mNewSims) { Alive.ResetClearSimTask. CleanupBrokenSkills(member); mSafeStore.Add(member, new SafeStore(member, SafeStore.Flag.Selectable | SafeStore.Flag.Unselectable | SafeStore.Flag.StoreOpportunities)); if ((member.CreatedSim != null) && (member.CreatedSim.Autonomy != null)) { Motives motives = member.CreatedSim.Autonomy.Motives; if ((motives == null) || (motives.GetMotive(CommodityKind.Hunger) == null)) { member.CreatedSim.Autonomy.RecreateAllMotives(); } } } } }
protected void ForceSetMax (Motives ths, CommodityKind commodity) { Motive motive = ths.GetMotive(commodity); if ((motive != null) && (motive.Value != motive.Tuning.Max)) { motive.UpdateMotiveBuffs(ths.mSim, commodity, (int) motive.Tuning.Max); motive.mValue = motive.Tuning.Max; } }
protected void ForceSetMax(Motives ths, CommodityKind commodity) { Motive motive = ths.GetMotive(commodity); if ((motive != null) && (motive.Value != motive.Tuning.Max)) { motive.UpdateMotiveBuffs(ths.mSim, commodity, (int)motive.Tuning.Max); motive.mValue = motive.Tuning.Max; } }
protected override void PrivatePerform(SimDescription sim, SimData data, ScenarioFrame frame) { if (SimTypes.IsService(sim.Household)) { return; } if (sim.LotHome == null) { return; } if (sim.AssignedRole != null) { if (sim.AssignedRole.IsActive) { return; } } if (sim.CreatedSim == null) { return; } if (sim.CreatedSim.HasBeenDestroyed) { return; } if (sim.CreatedSim.Autonomy == null) { return; } Motives motives = sim.CreatedSim.Autonomy.Motives; if (motives == null) { return; } bool frozen = data.GetValue <StaticHungerOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.VampireThirst), frozen); AlterDecay(motives.GetMotive(CommodityKind.Hunger), frozen); AlterDecay(motives.GetMotive(CommodityKind.BatteryPower), frozen); if (!sim.IsMummy) { frozen = data.GetValue <StaticEnergyOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.Energy), frozen); AlterDecay(motives.GetMotive(CommodityKind.AlienBrainPower), frozen); frozen = data.GetValue <StaticBladderOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.Bladder), frozen); } frozen = data.GetValue <StaticHygieneOption, bool>(); if (!sim.IsFrankenstein) { AlterDecay(motives.GetMotive(CommodityKind.Hygiene), frozen); } AlterDecay(motives.GetMotive(CommodityKind.Maintenence), frozen); frozen = data.GetValue <StaticFunOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.Fun), frozen); frozen = data.GetValue <StaticSocialOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.Social), frozen); if (GameUtils.IsInstalled(ProductVersion.EP8)) { frozen = data.GetValue <StaticTemperatureOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.Temperature), frozen); } if (GameUtils.IsInstalled(ProductVersion.EP5)) { switch (sim.Species) { case CASAgeGenderFlags.Horse: frozen = data.GetValue <StaticExerciseOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.HorseExercise), frozen); frozen = data.GetValue <StaticThirstOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.HorseThirst), frozen); break; case CASAgeGenderFlags.Cat: frozen = data.GetValue <StaticDestructionOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.CatScratch), frozen); break; case CASAgeGenderFlags.Dog: case CASAgeGenderFlags.LittleDog: frozen = data.GetValue <StaticDestructionOption, bool>(); AlterDecay(motives.GetMotive(CommodityKind.DogDestruction), frozen); break; } } }
public void motive_motive_distress(Sim sim, CommodityKind commodity) { if (commodity == (CommodityKind)0x44440444) { return; } SimDescription simd = sim.SimDescription; BuffManager buffManager = sim.BuffManager; Motives moves = sim.Motives; switch (commodity) { case CommodityKind.Bladder: { bool flag = true; InteractionDefinition interactionDefinition; switch (simd.Species) { case CASAgeGenderFlags.Horse: interactionDefinition = Sim.HorsePee.Singleton; break; case CASAgeGenderFlags.Dog: case CASAgeGenderFlags.LittleDog: interactionDefinition = (InteractionDefinition)Sim.DogPeeStart.Singleton; break; case CASAgeGenderFlags.Cat: interactionDefinition = (InteractionDefinition)Sim.CatPeeStart.Singleton; break; default: interactionDefinition = Sim.BladderFailure.Singleton; break; } foreach (InteractionInstance interaction in sim.InteractionQueue.InteractionList) { if (interaction is Sim.DogPee || interaction is Sim.CatPee || interaction.InteractionDefinition == interactionDefinition) { flag = false; break; } } if (flag) { SwimmingInPool swimmingInPool = sim.Posture as SwimmingInPool; if (swimmingInPool == null) { InteractionInstance interactionInstance = interactionDefinition.CreateInstance(sim, sim, new InteractionPriority(InteractionPriorityLevel.High), false, false); Sim.DogPeeStart dogPeeStart = interactionInstance as Sim.DogPeeStart; if (dogPeeStart != null) { dogPeeStart.DoNotRoute = true; } else { Sim.CatPeeStart catPeeStart = interactionInstance as Sim.CatPeeStart; if (catPeeStart != null) { catPeeStart.DoNotRoute = true; } } if (sim.InteractionQueue.AddNext(interactionInstance) && simd.IsRaccoon) { sim.AddExitReason(ExitReason.BuffFailureState); } else { BuffInstance buffOfSolveCommodity = buffManager.GetBuffOfSolveCommodity(commodity); if (buffOfSolveCommodity != null && buffOfSolveCommodity.EffectValue <= 0) { ThoughtBalloonManager.BalloonData balloonData = new ThoughtBalloonManager.BalloonData(buffOfSolveCommodity.ThumbString); if (balloonData.IsValid) { balloonData.BalloonType = ThoughtBalloonTypes.kScreamBalloon; balloonData.mCoolDown = ThoughtBalloonCooldown.None; sim.ThoughtBalloonManager.ShowBalloon(balloonData); } } moves.SetMax(CommodityKind.Bladder); if (!simd.IsPet) { PuddleManager.AddPuddle(sim.Position); moves.SetValue(CommodityKind.Hygiene, -100f); if (GlobalFunctions.AreOtherSimsNearby(sim, BuffEmbarrassed.DistanceForEmbarrassedBuff)) { buffManager.AddElement(BuffNames.Embarrassed, Origin.FromPeeingSelf); } ActiveTopic.AddToSim(sim, "Embarrassment"); } else { MetaAutonomyVenueType metaAutonomyVenueType = sim.LotCurrent.GetMetaAutonomyVenueType(); if ((!simd.IsADogSpecies || metaAutonomyVenueType != MetaAutonomyVenueType.DogPark) && World.GetTerrainType(sim.Position) == TerrainType.LotFloor) { PuddleManager.AddPuddle(sim.Position); } } EventTracker.SendEvent(EventTypeId.kBladderFailure, sim); } Motive motive = moves.GetMotive(CommodityKind.Bladder); if (motive != null) { motive.PotionBladderDecayOverride = false; } } else { swimmingInPool.ContainerPool.PeeInPool(sim); } } break; } case CommodityKind.Hunger: case CommodityKind.VampireThirst: if (simd.IsFrankenstein) { OccultFrankenstein.PushFrankensteinShortOut(sim); } else if (!simd.IsGhost && !simd.IsDead && !IsCheckKillSimInteraction(sim)) { if (sim.Posture.Satisfies(CommodityKind.ScubaDiving, null) && !simd.IsMermaid) { sim.Kill(SimDescription.DeathType.ScubaDrown); } else if (sim.Posture.Satisfies(CommodityKind.SwimmingInPool, null) && !simd.IsMermaid) { sim.Kill(SimDescription.DeathType.Drown); } else if (SimTemperature.HasFrozenSolidInteraction(sim)) { sim.Kill(SimDescription.DeathType.Freeze, null, false); } else if (OccultMermaid.IsDehydrated(sim)) { sim.Kill(SimDescription.DeathType.MermaidDehydrated, null, false); } else { sim.Kill(sim.SimDescription.IsVampire ? SimDescription.DeathType.Thirst : SimDescription.DeathType.Starve); } } break; case CommodityKind.Temperature: { float value = moves.GetValue(CommodityKind.Temperature); if (value > 0f) { SimTemperature.PushSpontaneouslyCombustInteraction(sim); } else { SimTemperature.PushFreezeInteraction(sim); } break; } case CommodityKind.MermaidDermalHydration: OccultMermaid.CollapseFromDehydration(sim); break; } }