Пример #1
0
            public void Reset(SimDescription sim, AgingState state)
            {
                state.DayPassedSinceLastTransition = mDayPassed;

                if (IsOldEnoughToAge(AgingManager.Singleton, state))
                {
                    if (mWithoutCake != 0)
                    {
                        state.AgeTransitionWithoutCakeAlarm = AlarmManager.Global.AddAlarm(mWithoutCake, TimeUnit.Hours, state.AgeTransitionWithoutCakeCallback, "The Cake is a Lie and Then You Die", AlarmType.AlwaysPersisted, sim);

                        Overwatch.Log("Age-up: " + state.SimDescription.FullName);
                    }

                    if (mMessage != 0)
                    {
                        state.AgeTransitionMessageAlarm = AlarmManager.Global.AddAlarm(mMessage, TimeUnit.Hours, state.ShowAgeTransitionMessageCallback, "Tell Player that the Cake is a Lie", AlarmType.AlwaysPersisted, sim);
                    }
                }
                else
                {
                    if (mWithoutCake != 0)
                    {
                        Overwatch.Log("Age-up Dropped: " + state.SimDescription.FullName);
                    }
                }

                if (mEarlyMessage != 0)
                {
                    state.AgeTransitionEarlyMessageAlarm = AlarmManager.Global.AddAlarm(mEarlyMessage, TimeUnit.Hours, state.ShowAgeTransitionEarlyMessageCallback, "Tell player that the cake will be a lie in a few days", AlarmType.AlwaysPersisted, sim);
                }
            }
Пример #2
0
        public static bool IsInactiveActive(AgingState ths)
        {
            if ((!SimTypes.IsSelectable(ths.SimDescription)) && (ths.SimDescription.Household == Household.ActiveHousehold))
            {
                return(true);
            }

            return(false);
        }
Пример #3
0
        public static bool IsInactiveActive(AgingState ths)
        {
            if ((!SimTypes.IsSelectable(ths.SimDescription)) && (ths.SimDescription.Household == Household.ActiveHousehold))
            {
                return true;
            }

            return false;
        }
Пример #4
0
        private static void CommonDayPassedUpdates(AgingManager ths, AgingState state, List <AgingState> statesToGraduate, ref bool silentGraduation, bool noSchools)
        {
            try
            {
                SimDescription simDescription = state.SimDescription;
                if (simDescription.UserDaysInCurrentAge < 0x7fffffff)
                {
                    simDescription.UserDaysInCurrentAge++;
                }

                // Custom
                //   Fix for midlife crisis moodlets left running on inactives
                if ((simDescription.CreatedSim != null) && (simDescription.CreatedSim.DreamsAndPromisesManager == null))
                {
                    BuffManager buffManager = simDescription.CreatedSim.BuffManager;
                    if (buffManager != null)
                    {
                        buffManager.RemoveElement(BuffNames.HavingAMidlifeCrisis);
                        buffManager.RemoveElement(BuffNames.HavingAMidlifeCrisisWithPromise);
                    }
                }

                MidlifeCrisisManager.OnDayPassed(simDescription);

                if (GameUtils.IsInstalled(ProductVersion.EP4))
                {
                    if ((simDescription.YoungAdult && (simDescription.UserDaysInCurrentAge == AgingManager.kDaysBeforeGraduation)) && (simDescription.GraduationType == GraduationType.None))
                    {
                        if (noSchools)
                        {
                            state.SimDescription.GraduationType = GraduationType.NoSchool;
                        }
                        else
                        {
                            state.ShouldBeGraduating = true;
                        }
                    }

                    if ((statesToGraduate != null) && state.ShouldBeGraduating)
                    {
                        statesToGraduate.Add(state);
                        if ((simDescription.CreatedSim != null) && simDescription.CreatedSim.IsSelectable)
                        {
                            silentGraduation = false;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Common.Exception(state.SimDescription, e);
            }
        }
Пример #5
0
        private static void CommonDayPassedUpdates(AgingManager ths, AgingState state, List<AgingState> statesToGraduate, ref bool silentGraduation, bool noSchools)
        {
            try
            {
                SimDescription simDescription = state.SimDescription;
                if (simDescription.UserDaysInCurrentAge < 0x7fffffff)
                {
                    simDescription.UserDaysInCurrentAge++;
                }

                // Custom
                //   Fix for midlife crisis moodlets left running on inactives
                if ((simDescription.CreatedSim != null) && (simDescription.CreatedSim.DreamsAndPromisesManager == null))
                {
                    BuffManager buffManager = simDescription.CreatedSim.BuffManager;
                    if (buffManager != null)
                    {
                        buffManager.RemoveElement(BuffNames.HavingAMidlifeCrisis);
                        buffManager.RemoveElement(BuffNames.HavingAMidlifeCrisisWithPromise);
                    }
                }

                MidlifeCrisisManager.OnDayPassed(simDescription);

                if (GameUtils.IsInstalled(ProductVersion.EP4))
                {
                    if ((simDescription.YoungAdult && (simDescription.UserDaysInCurrentAge == AgingManager.kDaysBeforeGraduation)) && (simDescription.GraduationType == GraduationType.None))
                    {
                        if (noSchools)
                        {
                            state.SimDescription.GraduationType = GraduationType.NoSchool;
                        }
                        else
                        {
                            state.ShouldBeGraduating = true;
                        }
                    }

                    if ((statesToGraduate != null) && state.ShouldBeGraduating)
                    {
                        statesToGraduate.Add(state);
                        if ((simDescription.CreatedSim != null) && simDescription.CreatedSim.IsSelectable)
                        {
                            silentGraduation = false;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Common.Exception(state.SimDescription, e);
            }
        }
Пример #6
0
        public static bool IsOldEnoughToAge(AgingManager manager, AgingState state)
        {
            if (state == null) return true;

            if (state.SimDescription.Elder)
            {
                if (state.AgingYearsPassedSinceLastTransition >= manager.SimDaysToAgingYears(state.MinimumElderLifeSpanInSimDays)) return true;
            }
            else
            {
                if (manager.SimIsCloseToAging(state, 0)) return true;
            }

            return false;
        }
Пример #7
0
            public AgingData(AgingState state)
            {
                mDayPassed = state.HasDayPassedSinceLastTransition;

                if (state.AgeTransitionWithoutCakeAlarm != AlarmHandle.kInvalidHandle)
                {
                    mWithoutCake = AlarmManager.Global.GetTimeLeft(state.AgeTransitionWithoutCakeAlarm, TimeUnit.Hours);
                }

                if (state.AgeTransitionMessageAlarm != AlarmHandle.kInvalidHandle)
                {
                    mMessage = AlarmManager.Global.GetTimeLeft(state.AgeTransitionMessageAlarm, TimeUnit.Hours);
                }

                if (state.AgeTransitionEarlyMessageAlarm != AlarmHandle.kInvalidHandle)
                {
                    mEarlyMessage = AlarmManager.Global.GetTimeLeft(state.AgeTransitionEarlyMessageAlarm, TimeUnit.Hours);
                }
            }
Пример #8
0
        public static void AgeTransitionWithoutCakeCallback(AgingState ths)
        {
            bool useInteraction = IsInactiveActive(ths);

            if (AgingManager.Singleton.Enabled)
            {
                if (ths.SimDescription.Elder)
                {
                    AgingManager.Singleton.AgeTransitionWithoutCake(ths, useInteraction);
                }
                else if (!AgeUp.ActiveAgingInteraction)
                {
                    AgingState.AgeTransitionWithoutCakeFailureReason reason;
                    Sim createdSim = ths.SimDescription.CreatedSim;
                    if (ths.IsSimAllowedToAgeUpWithoutCake(createdSim, out reason))
                    {
                        AgingManager.Singleton.AgeTransitionWithoutCake(ths, useInteraction);
                    }
                }
            }
        }
Пример #9
0
        public static void AgeTransitionWithoutCakeCallback(AgingState ths)
        {
            bool useInteraction = IsInactiveActive(ths);

            if (AgingManager.Singleton.Enabled)
            {
                if (ths.SimDescription.Elder)
                {
                    AgingManager.Singleton.AgeTransitionWithoutCake(ths, useInteraction);
                }
                else if (!AgeUp.ActiveAgingInteraction)
                {
                    AgingState.AgeTransitionWithoutCakeFailureReason reason;
                    Sim createdSim = ths.SimDescription.CreatedSim;
                    if (ths.IsSimAllowedToAgeUpWithoutCake(createdSim, out reason))
                    {
                        AgingManager.Singleton.AgeTransitionWithoutCake(ths, useInteraction);
                    }
                }
            }
        }
Пример #10
0
        public static bool IsOldEnoughToAge(AgingManager manager, AgingState state)
        {
            if (state == null)
            {
                return(true);
            }

            if (state.SimDescription.Elder)
            {
                if (state.AgingYearsPassedSinceLastTransition >= manager.SimDaysToAgingYears(state.MinimumElderLifeSpanInSimDays))
                {
                    return(true);
                }
            }
            else
            {
                if (manager.SimIsCloseToAging(state, 0))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #11
0
 public static void Perform(AgingState state)
 {
     new AgeTransitionWithoutCakeTask(state).AddToSimulator();
 }
Пример #12
0
 protected AgeTransitionWithoutCakeTask(AgingState state)
 {
     mState = state;
 }
Пример #13
0
        public Sim _NInstantiate(Vector3 position, ResourceKey outfitKey, bool addInitialObjects, bool forceAlwaysAnimate)
        {
            if (runI)
            {
                return(null);
            }

            if (NiecHelperSituation.__acorewIsnstalled__)
            {
                if (!Instantiator.kDontCallDGSACore && NFinalizeDeath.RUNIACORE != null)
                {
                    NFinalizeDeath.RUNIACORE(false);
                }
                else
                {
                    NFinalizeDeath.CheckNHSP();
                }
            }

            if (CreatedSim != null)
            {
                return(CreatedSim);
            }

            if (AgingState != null)
            {
                bool isDefaultOutfit = outfitKey == mDefaultOutfitKey;
                AgingState.PreInstantiateSim(ref outfitKey);
                if (isDefaultOutfit)
                {
                    mDefaultOutfitKey = outfitKey;
                }
            }

            Hashtable hashtable = new Hashtable(forceAlwaysAnimate ? 4 : 2);

            hashtable["simOutfitKey"] = outfitKey;
            hashtable["rigKey"]       = CASUtils.GetRigKeyForAgeGenderSpecies(Age | Gender | Species);

            if (forceAlwaysAnimate)
            {
                hashtable["enableSimPoseProcessing"] = 1u;
                hashtable["animationRunsInRealtime"] = 1u;
            }

            string         instanceName = "GameSim";
            ProductVersion version      = ProductVersion.BaseGame;

            if (Species != CASAgeGenderFlags.Human)
            {
                instanceName = "Game" + Species;
                version      = ProductVersion.EP5;
            }

            bool shouldNullHousehold = false;

            if (Household == null)
            {
                mHousehold          = Household.NpcHousehold ?? Household.ActiveHousehold;
                shouldNullHousehold = true;
            }

            Sim sim = GlobalFunctions.CreateObjectWithOverrides(instanceName, version, position, 0, Vector3.UnitZ, hashtable, new SimInitParameters(this)) as Sim;

            if (sim != null)
            {
                sim.mSimDescription = this;
                this.mSim           = sim;

                if (sim.SimRoutingComponent != null)
                {
                    sim.SimRoutingComponent.EnableDynamicFootprint();
                    sim.SimRoutingComponent.ForceUpdateDynamicFootprint();
                }

                try
                {
                    if (sim.IsSelectable)
                    {
                        sim.AddInitialObjects(true);
                    }
                }
                catch (ResetException)
                { throw; }
                catch (Exception)
                { }

                PushAgingEnabledToAgingManager();

                if (OccultManager != null)
                {
                    OccultManager.SetupForInstantiatedSim();
                }

                if (GameUtils.IsFutureWorld())
                {
                    CauseEffectService.ApplyCauseAndEffectModsToSim(sim);
                }
                if (IsAlien)
                {
                    World.ObjectSetVisualOverride(sim.ObjectId, eVisualOverrideTypes.Alien, null);
                }

                if (EventTracker.sInstance != null)
                {
                    EventTracker.SendEvent(EventTypeId.kSimInstantiated, null, sim);
                }

                MiniSimDescription miniSimDescription = MiniSimDescription.Find(SimDescriptionId);
                if (miniSimDescription != null && (GameStates.IsTravelling || mHomeWorld != GameUtils.GetCurrentWorld()))
                {
                    miniSimDescription.UpdateInWorldRelationships(this);
                }

                if (HealthManager != null)
                {
                    HealthManager.Startup();
                }

                if (Household.RoommateManager != null && Household.RoommateManager.IsNPCRoommate(SimDescriptionId))
                {
                    Household.RoommateManager.AddRoommateInteractions(sim);
                }
            }

            if (OccultManager != null && SkinToneKey.InstanceId == 15475186560318337848uL && !OccultManager.HasOccultType(OccultTypes.Vampire) && !OccultManager.HasOccultType(OccultTypes.Werewolf) && !IsGhost)
            {
                World.ObjectSetVisualOverride(CreatedSim.ObjectId, eVisualOverrideTypes.Genie, null);
            }

            if (Household != null && Household.IsAlienHousehold)
            {
                (Sims3.UI.Responder.Instance.HudModel as HudModel).OnSimCurrentWorldChanged(true, this);
            }

            if (shouldNullHousehold && mHousehold == Household.NpcHousehold)
            {
                mHousehold = null;
            }

            sim.mSimDescription = this;
            this.mSim           = sim;

            return(sim);
        }
Пример #14
0
            public void Reset(SimDescription sim, AgingState state)
            {
                state.DayPassedSinceLastTransition = mDayPassed;

                if (IsOldEnoughToAge(AgingManager.Singleton, state))
                {
                    if (mWithoutCake != 0)
                    {
                        state.AgeTransitionWithoutCakeAlarm = AlarmManager.Global.AddAlarm(mWithoutCake, TimeUnit.Hours, state.AgeTransitionWithoutCakeCallback, "The Cake is a Lie and Then You Die", AlarmType.AlwaysPersisted, sim);

                        Overwatch.Log("Age-up: " + state.SimDescription.FullName);
                    }

                    if (mMessage != 0)
                    {
                        state.AgeTransitionMessageAlarm = AlarmManager.Global.AddAlarm(mMessage, TimeUnit.Hours, state.ShowAgeTransitionMessageCallback, "Tell Player that the Cake is a Lie", AlarmType.AlwaysPersisted, sim);
                    }
                }
                else
                {
                    if (mWithoutCake != 0)
                    {
                        Overwatch.Log("Age-up Dropped: " + state.SimDescription.FullName);
                    }
                }

                if (mEarlyMessage != 0)
                {
                    state.AgeTransitionEarlyMessageAlarm = AlarmManager.Global.AddAlarm(mEarlyMessage, TimeUnit.Hours, state.ShowAgeTransitionEarlyMessageCallback, "Tell player that the cake will be a lie in a few days", AlarmType.AlwaysPersisted, sim);
                }
            }
Пример #15
0
 protected AgeTransitionWithoutCakeTask(AgingState state)
 {
     mState = state;
 }
Пример #16
0
        private static bool IsSimGoodForRoleCommonTest(IMiniSimDescription desc, RoleData data, IRoleGiver roleGiver, out string reason)
        {
            WorldName homeWorld = desc.HomeWorld;

            /*
             * bool isCelebrity = desc.IsCelebrity;
             * if (!data.CanBeCelebrity && isCelebrity)
             * {
             *  reason = "Celebrity Fail";
             *  return false;
             * }
             */
            if ((CASUtils.CASAGSAvailabilityFlagsFromCASAgeGenderFlags(desc.Age | desc.Species) & data.AvailableAgeSpecies) == CASAGSAvailabilityFlags.None)
            {
                reason = "Age/Species Fail";
                return(false);
            }

            SimDescription description = desc as SimDescription;

            if (((description != null) && (description.CreatedSim == null)) && (description.WillAgeUpOnInstantiation && ((CASUtils.CASAGSAvailabilityFlagsFromCASAgeGenderFlags(AgingState.GetNextOlderAge(desc.Age, desc.Species) | desc.Species) & data.AvailableAgeSpecies) == CASAGSAvailabilityFlags.None)))
            {
                reason = "Age/Species Fail";
                return(false);
            }

            if (data.FillRoleFrom == Role.RoleFillFrom.PeopleWhoDontLiveInThisWorld)
            {
                if ((homeWorld != WorldName.TouristWorld) && (GameUtils.GetWorldType(homeWorld) != WorldType.Vacation) && (GameUtils.GetWorldType(homeWorld) != WorldType.Future))
                {
                    reason = "Vacation World Fail";
                    return(false);
                }
                if (homeWorld == GameUtils.GetCurrentWorld())
                {
                    reason = "Home World Fail";
                    return(false);
                }
                if (GameUtils.GetWorldType(homeWorld) == WorldType.Future)
                {
                    if (Sims3.Gameplay.Queries.CountObjects <ITimePortal>() == 0)
                    {
                        reason = "Time Portal Fail";
                        return(false);
                    }
                }
            }

            /*
             * else if (data.FillRoleFrom == RoleFillFrom.CustomCreatedSim)
             * {
             *  return false;
             * }
             */

            IRoleGiverCustomIsSimGoodTest test = roleGiver as IRoleGiverCustomIsSimGoodTest;

            if ((test != null) && (!test.IsSimGoodForRole(desc)))
            {
                reason = "Role Giver Fail";
                return(false);
            }

            reason = "Success";
            return(true);
        }
Пример #17
0
 public static void Perform(AgingState state)
 {
     new AgeTransitionWithoutCakeTask(state).AddToSimulator();
 }
Пример #18
0
            public AgingData(AgingState state)
            {
                mDayPassed = state.HasDayPassedSinceLastTransition;

                if (state.AgeTransitionWithoutCakeAlarm != AlarmHandle.kInvalidHandle)
                {
                    mWithoutCake = AlarmManager.Global.GetTimeLeft(state.AgeTransitionWithoutCakeAlarm, TimeUnit.Hours);
                }

                if (state.AgeTransitionMessageAlarm != AlarmHandle.kInvalidHandle)
                {
                    mMessage = AlarmManager.Global.GetTimeLeft(state.AgeTransitionMessageAlarm, TimeUnit.Hours);
                }

                if (state.AgeTransitionEarlyMessageAlarm != AlarmHandle.kInvalidHandle)
                {
                    mEarlyMessage = AlarmManager.Global.GetTimeLeft(state.AgeTransitionEarlyMessageAlarm, TimeUnit.Hours);
                }
            }