Exemple #1
0
 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();
                 }
             }
         }
     }
 }
Exemple #2
0
 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;
     }
 }
Exemple #3
0
        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;
            }
        }
Exemple #4
0
        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;
                }
            }
        }
Exemple #5
0
        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;
            }
        }