예제 #1
0
        public override bool Run()
        {
            if (Actor.IsSelectable)
            {
                PlumbBob.SelectActor(Actor);
                Camera.FocusOnSim(Actor, Pregnancy.kShowPregnancyCameraLerp.Zoom, Pregnancy.kShowPregnancyCameraLerp.Pitch,
                                  Pregnancy.kShowPregnancyCameraLerp.Time, true, false);
                Audio.StartSound("sting_alien_visit");
            }

            Actor.SimDescription.ShowPregnancy();
            Actor.BuffManager.AddElement(AlienUtilsEx.sXenogenesis, Origin.FromPregnancy);
            ActiveTopic.AddToSim(Actor, "Announce Pregnancy");

            /* TODO------------------------------------------------ */
            /* Set alarm to give leave at start of third trimester! */
            /* ---------------------------------------------------- */

            Tutorialette.TriggerLesson(Lessons.Pregnancy, Actor);
            Actor.PlaySoloAnimation("a_alien_pregnancy_inspectStomach");

            /* TODO------------------------------ */
            /* Will not remove jobs at this time! */
            /* ---------------------------------- */

            return(true);
        }
예제 #2
0
        public override void OnDelayedWorldLoadFinished()
        {
            Overwatch.Log("FixActiveTopics");

            Dictionary <ulong, SimDescription> sims = SimListing.GetResidents(false);

            foreach (SimDescription sim in sims.Values)
            {
                if (sim.CreatedSim == null)
                {
                    continue;
                }
                if (sim.SkillManager == null)
                {
                    continue;
                }

                foreach (Skill skill in sim.SkillManager.List)
                {
                    if (skill.SkillLevel < 1)
                    {
                        continue;
                    }
                    switch (skill.Guid)
                    {
                    // Not sure why these don't work on their own, it may be the active
                    // topic limit. Either way readding them should troop the limit and fix
                    // them if they are truly broken
                    case SkillNames.Bartending:
                        ActiveTopic.AddToSim(sim.CreatedSim, "Bartending Skill");
                        Overwatch.Log("Readded Active Topic - Bartending Skill: " + sim.FullName);
                        break;

                    case SkillNames.Charisma:
                        ActiveTopic.AddToSim(sim.CreatedSim, "Smooth Recovery");
                        Overwatch.Log("Readded Active Topic - Charisma Skill: " + sim.FullName);
                        break;

                    case SkillNames.Logic:
                        if (skill.SkillLevel >= LogicSkill.kSkillLevelForSchoolTutor)
                        {
                            ActiveTopic.AddToSim(sim.CreatedSim, "Logic Skill");
                            Overwatch.Log("Readded Active Topic - Logic Skill: " + sim.FullName);
                        }
                        break;

                    case SkillNames.MartialArts:
                        ActiveTopic.AddToSim(sim.CreatedSim, "Martial Arts Skill");
                        Overwatch.Log("Readded Active Topic - Martial Arts Skill: " + sim.FullName);
                        break;

                    // hopelessly broken regardless
                    case SkillNames.Science:
                        ActiveTopic.AddToSim(sim.CreatedSim, "Science Skill");
                        Overwatch.Log("Readded Active Topic - Science Skill: " + sim.FullName);
                        break;
                    }
                }
            }
        }
예제 #3
0
        protected void PrivateAddBandMember(RockBand ths, SimDescription otherSimDesc)
        {
            if (ths.mBandInfo == null)
            {
                ths.mBandInfo = new RockBandInfo();
                ths.mBandInfo.AddBandMember(ths.SkillOwner.SimDescriptionId);
                Sim createdSim = ths.SkillOwner.CreatedSim;
                if (createdSim != null)
                {
                    ActiveTopic.AddToSim(createdSim, "Rock Band");
                }
            }

            //if (ths.mBandInfo.NumBandMembers < 0x4)
            {
                ths.mBandInfo.AddBandMember(otherSimDesc.SimDescriptionId);
                Sim sim = otherSimDesc.CreatedSim;
                if (sim != null)
                {
                    ActiveTopic.AddToSim(sim, "Rock Band");
                }

                SkillManager skillManager = otherSimDesc.SkillManager;
                RockBand     skill        = skillManager.GetSkill <RockBand>(SkillNames.RockBand);
                if (skill == null)
                {
                    skillManager.AddAutomaticSkill(SkillNames.RockBand);
                    skill = skillManager.GetSkill <RockBand>(SkillNames.RockBand);
                }

                skill.mBandInfo = ths.mBandInfo;
                skill.BandNameUpdate(ths.mBandInfo.BandName);
            }
        }
예제 #4
0
            public void HourlyCallback()
            {
                if (GameUtils.IsOnVacation() || GameUtils.IsUniversityWorld())
                {
                    return;
                }

                Pregnancy.mHourOfPregnancy++;

                if (Pregnancy.mHourOfPregnancy >= Abductor.Settings.mHourToStartPregnantWalk)
                {
                    ActiveTopic.AddToSim(Abductee, "Pregnant", Abductee.SimDescription);

                    if (!Pregnancy.mHasRequestedWalkStyle)
                    {
                        Pregnancy.mHasRequestedWalkStyle = Abductee.RequestWalkStyle(Sim.WalkStyle.Pregnant);
                    }
                }

                if (Pregnancy.mHourOfPregnancy == Abductor.Settings.mHourToStartLabor)
                {
                    for (int i = 0; i < Pregnancy.kNumberOfPuddlesForWaterBreak; i++)
                    {
                        PuddleManager.AddPuddle(Abductee.PositionOnFloor);
                    }

                    if (Abductee.IsSelectable)
                    {
                        StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:BabyIsComingTNS",
                                                                                                          new object[] { Abductee }), StyledNotification.NotificationStyle.kGameMessageNegative));
                    }

                    //Abductee.BuffManager.RemoveElement(AbductionBuffs.sXenogenesis);
                    Abductee.BuffManager.AddElement(BuffsAndTraits.sBabyIsComing, Origin.FromPregnancy);

                    if (Pregnancy.mContractionBroadcast != null)
                    {
                        Pregnancy.mContractionBroadcast.Dispose();
                    }

                    Pregnancy.mContractionBroadcast = new ReactionBroadcaster(Abductee, Pregnancy.kContractionBroadcasterParams,
                                                                              new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction));

                    Abductee.AddInteraction(TakeToHospitalEx.Singleton);
                    InteractionInstance interaction = Pregnancy.HaveContraction.Singleton.CreateInstance(Abductee, Abductee,
                                                                                                         new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false);
                    interaction.Hidden = true;
                    Abductee.InteractionQueue.Add(interaction);
                    Pregnancy.mContractionsAlarm = Abductee.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(Pregnancy.TriggerContraction),
                                                                              5f, TimeUnit.Minutes, "Alien Pregnancy Trigger Contractions Alarm", AlarmType.AlwaysPersisted);
                    EventTracker.SendEvent(EventTypeId.kPregnancyContractionsStarted, Abductee);
                }

                if (Pregnancy.mHourOfPregnancy == Abductor.Settings.mHoursOfPregnancy)
                {
                    HaveTheBaby();
                }

                SetPregnancyMorph();
            }
예제 #5
0
        public override bool Run()
        {
            Actor.SimDescription.Pregnancy.mHasShownPregnancy = true;

            if (Actor.IsSelectable)
            {
                PlumbBob.SelectActor(Actor);
                Camera.FocusOnSim(Actor, Pregnancy.kShowPregnancyCameraLerp.Zoom, Pregnancy.kShowPregnancyCameraLerp.Pitch,
                                  Pregnancy.kShowPregnancyCameraLerp.Time, true, false);
                Audio.StartSound("sting_alien_visit");
                //Audio.StartObjectSound(Actor.ObjectId, "sting_alien_visit", false);
            }

            Actor.SimDescription.ShowPregnancy();
            Actor.BuffManager.AddElement(BuffsAndTraits.sXenogenesis, Origin.FromPregnancy);

            if (Actor.BuffManager.HasElement(BuffNames.Nauseous))
            {
                Actor.BuffManager.GetElement(BuffNames.Nauseous).mBuffOrigin = Origin.FromPregnancy;
            }

            ActiveTopic.AddToSim(Actor, "Announce Pregnancy");
            Actor.SimDescription.Pregnancy.TryToGiveLeave();
            Tutorialette.TriggerLesson(Lessons.Pregnancy, Actor);
            Actor.PlaySoloAnimation("a_alien_pregnancy_inspectStomach", true);

            if (Actor.Occupation != null)
            {
                Actor.Occupation.RemoveAllJobs();
            }

            return(true);
        }
예제 #6
0
        public override void HourlyCallback()
        {
            if (GameUtils.IsOnVacation() || GameUtils.IsUniversityWorld())
            {
                Common.DebugNotify(mMom.FullName + Common.NewLine + "RobotPregnancy.HourlyCallback" + Common.NewLine + " - Pregnancy Paused");
                return;
            }

            mHourOfPregnancy++;

            string msg = mMom.FullName + Common.NewLine + "RobotPregnancy.HourlyCallback" + Common.NewLine + " - Hour: " + mHourOfPregnancy + Common.NewLine;

            if (mMom.Household.IsTouristHousehold)
            {
                msg += " - Foreign Sim" + Common.NewLine;

                ForeignVisitorsSituation foreignVisitorsSituation = ForeignVisitorsSituation.TryGetForeignVisitorsSituation(mMom);

                if (mHourOfPregnancy == Woohooer.Settings.mForeignRobotDisplayTNS && foreignVisitorsSituation != null)
                {
                    StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:ForeignBabyIsComingTNS",
                                                                                                      new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessagePositive), "glb_tns_baby_coming_r2");
                }

                if (mHourOfPregnancy == Woohooer.Settings.mForeignRobotLeavesWorld)
                {
                    if (foreignVisitorsSituation != null)
                    {
                        foreignVisitorsSituation.MakeGuestGoHome(mMom);
                    }
                    else if (mMom.SimDescription.AssignedRole != null)
                    {
                        mMom.SimDescription.AssignedRole.RemoveSimFromRole();
                    }
                }

                if (mHourOfPregnancy > Woohooer.Settings.mForeignRobotLeavesWorld)
                {
                    Common.DebugNotify(msg);

                    mHourOfPregnancy--;
                    return;
                }
            }

            if (mHourOfPregnancy >= Woohooer.Settings.mRobotHourToStartWalkingPregnant)
            {
                ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription);
                RequestPregnantWalkStyle();
            }

            if (mHourOfPregnancy == Woohooer.Settings.mRobotHoursOfPregnancy)
            {
                msg += " - Having the Baby";
                HaveTheBaby();
            }

            Common.DebugNotify(msg);
        }
예제 #7
0
            public void HaveTheBaby()
            {
                if (Pregnancy.mContractionBroadcast != null)
                {
                    Pregnancy.mContractionBroadcast.Dispose();
                }

                Abductee.RemoveAlarm(Pregnancy.PreggersAlarm);
                Abductee.RemoveAlarm(Pregnancy.mContractionsAlarm);
                bool flag = false;

                foreach (InteractionInstance current in Abductee.InteractionQueue.InteractionList)
                {
                    HaveAlienBabyHospital haveBabyHospital = current as HaveAlienBabyHospital;

                    if (haveBabyHospital != null)
                    {
                        haveBabyHospital.CancellableByPlayer = false;
                        haveBabyHospital.BabyShouldBeBorn    = true;
                        flag = true;
                        break;
                    }
                }

                if (!flag)
                {
                    List <RabbitHole> hospitals            = RabbitHole.GetRabbitHolesOfType(RabbitHoleType.Hospital);
                    float             distanceToBirthplace = Abductee.LotHome.GetDistanceToObject(Abductee);
                    RabbitHole        hospital             = null;

                    foreach (RabbitHole current in hospitals)
                    {
                        float distanceToHospital = current.RabbitHoleProxy.GetDistanceToObject(Abductee);

                        if (distanceToHospital < distanceToBirthplace)
                        {
                            distanceToBirthplace = distanceToHospital;
                            hospital             = current;
                        }
                    }

                    InteractionInstance instance;

                    if (hospital != null)
                    {
                        instance = HaveAlienBabyHospital.Singleton.CreateInstance(hospital, Abductee,
                                                                                  new InteractionPriority(InteractionPriorityLevel.Pregnancy), false, false);
                        (instance as HaveAlienBabyHospital).BabyShouldBeBorn = true;
                    }
                    else
                    {
                        instance = HaveAlienBabyHome.Singleton.CreateInstance(Abductee.LotHome, Abductee,
                                                                              new InteractionPriority(InteractionPriorityLevel.Pregnancy), false, false);
                    }

                    Abductee.InteractionQueue.Add(instance);
                    ActiveTopic.AddToSim(Abductee, "Recently Had Baby");
                }
            }
예제 #8
0
        public override bool InRabbitHole()
        {
            try
            {
                LotManager.SetAutoGameSpeed();
                bool succeeded = false;
                BeginCommodityUpdates();

                // Custom
                if (IsAllowedToWork(mCareer) || mCareer.ShouldBeAtWork())
                {
                    DateAndTime previousDateAndTime = SimClock.CurrentTime();
                    float       num2 = SimClock.HoursUntil(mCareer.CurLevel.FinishTime()) + mCareer.OvertimeHours;
                    while (!Actor.WaitForExitReason(1f, ~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached)) && !mCareer.IsSpecialWorkTime)
                    {
                        if (mCareer.IsRegularWorkTime())
                        {
                            break;
                        }
                    }

                    if (Actor.HasExitReason(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached)))
                    {
                        EndCommodityUpdates(false);
                        return(false);
                    }

                    mCareer.StartWorking();
                    succeeded = DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached), new InteractionInstance.InsideLoopFunction(LoopDelegate), null);
                    mCareer.FinishWorking();
                    if (!succeeded)
                    {
                        EventTracker.SendEvent(EventTypeId.kWorkCanceled, Actor);
                    }

                    float num3 = SimClock.ElapsedTime(TimeUnit.Hours, previousDateAndTime);
                    if ((num3 > num2) || (Math.Abs((float)(num3 - num2)) <= kStayLateThreshold))
                    {
                        EventTracker.SendEvent(EventTypeId.kCareerOpportunity_StayedLate, Actor);
                    }
                }
                EndCommodityUpdates(succeeded);

                ActiveTopic.AddToSim(Actor, "After Work");
                return(succeeded);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
                return(false);
            }
        }
예제 #9
0
 public override void OnHappening()
 {
     foreach (Sim sim in base.Guests)
     {
         ActiveTopic.AddToSim(sim, "Funeral", mWhoDied);
     }
     foreach (Sim sim2 in base.OtherHosts)
     {
         ActiveTopic.AddToSim(sim2, "Funeral", mWhoDied);
     }
     ActiveTopic.AddToSim(base.Host, "Funeral", mWhoDied);
 }
예제 #10
0
        private void OnStartedPartyFinishes()
        {
            if (!mbPartyFinishedCalled)
            {
                mbPartyFinishedCalled = true;
                Party.PartyOutcomes       partyOutcome        = GetPartyOutcome();
                Party.SpecialPartyOutcome specialPartyOutcome = GetSpecialPartyOutcome();
                bool flag = Host.HasTrait(TraitNames.LegendaryHost);
                switch (specialPartyOutcome)
                {
                case Party.SpecialPartyOutcome.kSpecialConditionsFailed:
                    partyOutcome = Party.PartyOutcomes.kBadParty;
                    break;
                }
                switch (partyOutcome)
                {
                case Party.PartyOutcomes.kBadParty:
                    Host.BuffManager.AddElement(BuffNames.ThrewLameParty, Origin.FromUnhappyGuests);
                    break;

                case Party.PartyOutcomes.kGoodParty:
                    Host.BuffManager.AddElement(BuffNames.ThrewAGreatParty, Origin.FromHappyGuests);
                    break;
                }
                Host.BuffManager.UnpauseBuff(BuffNames.TheLifeOfTheParty);
                Host.BuffManager.UnpauseBuff(BuffNames.AwesomeParty);
                Host.PartyAnimalWooList.Clear();
                foreach (Sim sim in OtherHosts)
                {
                    if (flag)
                    {
                        sim.BuffManager.AddElement(BuffNames.AwesomeParty, Origin.FromLegendaryHost);
                    }
                    sim.BuffManager.UnpauseBuff(BuffNames.TheLifeOfTheParty);
                    sim.BuffManager.UnpauseBuff(BuffNames.AwesomeParty);
                    sim.PartyAnimalWooList.Clear();
                }
                ActiveTopic.AddToSim(Host, "Party Over");
                EventTracker.SendEvent(new PartyEvent(EventTypeId.kPartyOver, Host, Host.SimDescription, this));
                if (specialPartyOutcome == Party.SpecialPartyOutcome.kSpecialConditionsFailed)
                {
                    ShowSpecialFailureTNS();
                }
                else
                {
                    ShowPartyEndTNS(partyOutcome);
                }
            }
        }
예제 #11
0
        private new void OnDisplayCas()
        {
            try
            {
                Sim instanceActor = LinkedInteractionInstance.InstanceActor;
                if (instanceActor == null)
                {
                    return;
                }

                bool flag = !Target.Repairable.Broken && (Target.Upgradable.Inkinization || !RandomUtil.RandomChance01(Tattooing.GetChanceOfFailure(Actor, instanceActor)));
                if (!flag)
                {
                    Sim        actor  = instanceActor;
                    ObjectGuid choice = ObjectGuid.InvalidObjectGuid;
                    if (Actor.IsSelectable)
                    {
                        actor  = Actor;
                        choice = instanceActor.ObjectId;
                    }

                    if (instanceActor.IsSelectable || Actor.IsSelectable)
                    {
                        TattooChair.AddFailureTattoo(instanceActor);
                    }

                    actor.ShowTNSIfSelectable(TattooChair.LocalizeString("FailureTns" + RandomUtil.GetInt(0x2), new object[0x0]), StyledNotification.NotificationStyle.kSimTalking, Actor.ObjectId, choice);
                }
                else if ((Actor.IsSelectable || instanceActor.IsSelectable) && TryDeductFunds(Target, Actor, instanceActor))
                {
                    bool tookSemaphore = mTookSemaphore;
                    DisplayCAS(instanceActor, ref tookSemaphore);
                    mTookSemaphore = tookSemaphore;
                    EventTracker.SendEvent(EventTypeId.kGotTattoo, instanceActor);
                }

                ActiveTopic.AddToSim(instanceActor, "Got a Tattoo");

                (LinkedInteractionInstance as TattooChair.GetTattoo).IsSuccess = flag;
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
            }
        }
예제 #12
0
파일: Urnstones.cs 프로젝트: yakoder/NRaas
        public static bool GhostSpawn(Urnstone me, Lot lot)
        {
            if (me.DeadSimsDescription == null)
            {
                return(false);
            }

            if (!me.DeadSimsDescription.IsValidDescription)
            {
                me.DeadSimsDescription.Fixup();
            }

            Vector3 position;

            if (me.DeadSimsDescription.ToddlerOrBelow)
            {
                position = lot.EntryPoint();
            }
            else if (!me.InInventory)
            {
                position = me.Position;
            }
            else
            {
                position = Service.GetPositionInRandomLot(lot);
            }

            Household.NpcHousehold.Add(me.DeadSimsDescription);
            Sim sim = Instantiation.Perform(me.DeadSimsDescription, position, null, null);

            sim.SetOpacity(0f, 0f);

            ActiveTopic.AddToSim(sim, "Ghost");
            me.GhostSetup(sim, true);

            if (!me.InInventory)
            {
                sim.GreetSimOnLot(me.LotCurrent);
                Audio.StartObjectSound(me.ObjectId, "sting_ghost_appear", false);
            }

            sim.FadeIn();
            me.CreateAlarmReturnToGrave(false);
            return(true);
        }
예제 #13
0
파일: AnnexEx.cs 프로젝트: yakoder/NRaas
        public static bool AddSimToGraduationList(Annex ths, SimDescription simDesc, AcademicDegree degree)
        {
            if ((simDesc == null) || (degree == null))
            {
                return(false);
            }

            if (IsAGraduationCeremonyInitializedAndIfNecessaryStartOne(ths))
            {
                ths.mGraduatingSims.Add(simDesc, degree);
                if (simDesc.CreatedSim != null)
                {
                    ActiveTopic.AddToSim(simDesc.CreatedSim, "University Graduation");
                }
            }

            return(ths.mGraduationCeremonyInitialized);
        }
예제 #14
0
            public override void Init(SimArrestSituationEx parent)
            {
                if (parent.SimToArrest.LotCurrent != parent.Lot)
                {
                    if (parent.SimToArrest.Parent == Parent.CopCar)
                    {
                        OnArrestFinished(parent.Cop, 1);
                    }
                    else
                    {
                        Exit();
                    }
                }

                ActiveTopic.AddToSim(parent.Cop, "Policeman Arrest Burglar", null);

                RequestWalkStyle(parent.Cop, Sim.WalkStyle.Run);

                SituationSocial.Definition i = new SituationSocial.Definition("Policeman Arrest Burglar", new string[0x0], null, false);
                ForceSituationSpecificInteraction(parent.SimToArrest, parent.Cop, i, null, OnArrested, OnArrestFailed);
            }
예제 #15
0
        public static Terrarium Create(InsectJig ths, Sim actor)
        {
            Terrarium terrarium = Terrarium.Create(ths.InsectType);

            if (Inventories.TryToMove(terrarium, actor))
            {
                InsectData data;
                if (InsectData.sData.TryGetValue(ths.InsectType, out data))
                {
                    bool flag;
                    bool flag2;
                    (actor.SkillManager.AddElement(SkillNames.Collecting) as Collecting).Collected(ths.InsectType, actor, terrarium, out flag, out flag2);

                    /*
                     * string str = CatchInsect.GetLocalizedCatchSuccessTNS(this.InsectType, data.Rarity, terrarium.Value, actor);
                     * string message = str;
                     * if (flag)
                     * {
                     *  string str3 = CatchInsect.LocalizeString(actor.IsFemale, "TNSScienceLab", new object[0]);
                     *  message = CatchInsect.LocalizeString(actor.IsFemale, "TNSFullPlusScienceLab", new object[] { str, str3 });
                     * }
                     * actor.ShowTNSIfSelectable(message, StyledNotification.NotificationStyle.kGameMessagePositive, ObjectGuid.InvalidObjectGuid);
                     * if (!flag2)
                     * {
                     *  actor.Play3dStingIfSelectable("sting_collect_collection");
                     * }
                     */

                    EventTracker.SendEvent(EventTypeId.kCaughtBug, actor, terrarium);
                    ActiveTopic.AddToSim(actor, "Recently Collected Bugs");
                }

                return(terrarium);
            }
            else
            {
                terrarium.Destroy();
                return(null);
            }
        }
예제 #16
0
        public override bool Run()
        {
            try
            {
                if (this.CheckForCancelAndCleanup())
                {
                    return(false);
                }
                if (!this.Target.RouteToOpen(this, true))
                {
                    return(false);
                }
                if (this.Target.InUse)
                {
                    this.Actor.AddExitReason(ExitReason.RouteFailed);
                    return(false);
                }
                this.mImpassableRegion.AddMember(this.Actor);
                this.mImpassableRegion.AddMember(this.Target);
                this.mImpassableRegion.UpdateFootprint();
                base.StandardEntry();
                if (this.Actor.SimDescription.TeenOrAbove && !this.ChosenRecipe.IsSnack)
                {
                    this.Actor.SkillManager.AddElement(SkillNames.Cooking);
                }
                bool flag = true;
                List <Ingredient> ingredientsUsed = new List <Ingredient>();

                if (AniRecipe.UseUpIngredientsFrom(this.ChosenRecipe, this.Actor, ref ingredientsUsed, this.Quantity, this.ChosenRecipe.IsSnack) || this.Actor.IsNPC)
                {
                    //If the food is a snack, remove ingredient
                    if (this.ChosenRecipe.IsSnack && !this.Actor.IsNPC)
                    {
                        Recipe snack = AniRecipe.ReturnSnackIngredientRecipe(this.Actor, this.ChosenRecipe);
                        if (snack != null)
                        {
                            //Create new temp ingredient list
                            foreach (var item in ingredientsUsed)
                            {
                                item.Destroy();
                            }
                            ingredientsUsed.Clear();
                        }
                    }

                    //CommonMethods.PrintMessage("Snack: " + this.ChosenRecipe.IsSnack + " / " + ingredientsUsed.Count.ToString());

                    Fridge.EnterStateMachine(this);
                    IRemovableFromFridgeAsInitialRecipeStep removableFromFridgeAsInitialRecipeStep = GlobalFunctions.CreateObjectOutOfWorld(this.ChosenRecipe.ObjectToCreateInFridge, this.ChosenRecipe.ModelCodeVersion) as IRemovableFromFridgeAsInitialRecipeStep;
                    GameObject gameObject = removableFromFridgeAsInitialRecipeStep as GameObject;
                    gameObject.AddToUseList(this.Actor);
                    try
                    {
                        this.Target.PutOnFridgeShelf(gameObject);
                        this.mThingToPrepareOrEat = (removableFromFridgeAsInitialRecipeStep as IPartOfCookingProcess);
                        this.mThingToPrepareOrEat.CookingProcess = new CookingProcess(this.ChosenRecipe, ingredientsUsed, this.ObjectClickedOn, this.Target.LotCurrent, this.Destination, this.Quantity, this.Repetition, this.MenuText, this.MenuPath, removableFromFridgeAsInitialRecipeStep as IPartOfCookingProcess, this.Actor);
                        removableFromFridgeAsInitialRecipeStep.InitializeForRecipe(this.ChosenRecipe, false);
                        CookingProcess.MoveToNextStep(removableFromFridgeAsInitialRecipeStep as IPartOfCookingProcess, this.Actor);
                        base.SetActor(removableFromFridgeAsInitialRecipeStep.ActorNameForFridge, gameObject);
                        if (this.mbWasHaveSomething)
                        {
                            base.AnimateSim("Ponder");
                        }
                        base.AnimateSim("Remove - " + removableFromFridgeAsInitialRecipeStep.ActorNameForFridge);
                        this.TriggerWatchCookingReactionBroadcaster();
                    }
                    catch (Exception ex)
                    {
                        if (ex == null)
                        {
                        }
                        gameObject.Destroy();
                        throw;
                    }
                    CarrySystem.EnterWhileHolding(this.Actor, removableFromFridgeAsInitialRecipeStep, false);
                    if (this.CheckForCancelAndCleanup())
                    {
                        return(false);
                    }
                    if (this.Actor.HasTrait(TraitNames.NaturalCook))
                    {
                        TraitTipsManager.ShowTraitTip(13271263770231522448uL, this.Actor, TraitTipsManager.TraitTipCounterIndex.NaturalCook, TraitTipsManager.kNaturalCookCountOfMealsCooked);
                    }
                    if (this.Actor.HasTrait(TraitNames.Vegetarian))
                    {
                        TraitTipsManager.ShowTraitTip(13271263770231522928uL, this.Actor, TraitTipsManager.TraitTipCounterIndex.Vegetarian, TraitTipsManager.kVegetarianCountOfMealsCooked);
                    }
                    this.PushNextInteraction(removableFromFridgeAsInitialRecipeStep, gameObject);
                    base.AnimateSim("Exit - Standing");
                }
                else
                {
                    flag = false;
                }

                base.StandardExit();
                if (flag)
                {
                    ActiveTopic.AddToSim(this.Actor, "Has Made Food");
                }
                return(flag);
            }
            catch (Exception ex)
            {
                CommonMethods.PrintMessage("Fridge: " + ex.Message);
                return(false);
            }
        }
예제 #17
0
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            if (!ApplyAll)
            {
                mAdoptionParams = AdoptionDialog.Show(Common.Localize(GetTitlePrefix() + ":Prompt", me.IsFemale, new object[] { me }));
                if (mAdoptionParams.mCancelled)
                {
                    return(false);
                }
            }

            List <SimDescription> residents = new List <SimDescription>();

            foreach (SimDescription sim in SimListing.GetResidents(true).Values)
            {
                if (!sim.IsHuman)
                {
                    continue;
                }

                residents.Add(sim);
            }

            SimDescription dad = RandomUtil.GetRandomObjectFromList(residents);
            SimDescription mom = RandomUtil.GetRandomObjectFromList(residents);

            SimDescription newKid = null;

            if ((dad != null) && (mom != null))
            {
                if (dad.CelebrityManager == null)
                {
                    dad.Fixup();
                }

                if (mom.CelebrityManager == null)
                {
                    mom.Fixup();
                }

                newKid = Genetics.MakeDescendant(dad, mom, mAdoptionParams.mAge, mAdoptionParams.mIsFemale ? CASAgeGenderFlags.Female : CASAgeGenderFlags.Male, 100, new Random(), false, false, true);
            }
            else
            {
                SimUtils.SimCreationSpec spec = new SimUtils.SimCreationSpec();
                spec.Gender = mAdoptionParams.mIsFemale ? CASAgeGenderFlags.Female : CASAgeGenderFlags.Male;
                spec.Age    = mAdoptionParams.mAge;
                spec.Normalize();
                newKid = spec.Instantiate();
            }

            if (newKid == null)
            {
                Common.Notify(Common.Localize(GetTitlePrefix() + ":Failure"));
                return(false);
            }

            string genderName = null;

            if (newKid.IsFemale)
            {
                genderName = Common.Localize("BabyGender:Female");
            }
            else
            {
                genderName = Common.Localize("BabyGender:Male");
            }

            string name = StringInputDialog.Show(Name, Common.Localize("InstaBaby:NamePrompt", newKid.IsFemale, new object[0]), newKid.FirstName);

            if (!string.IsNullOrEmpty(name))
            {
                newKid.FirstName = name;
            }

            newKid.LastName = me.LastName;

            me.Household.Add(newKid);

            newKid.WasAdopted = true;

            Sim adoptedChild = Instantiation.Perform(newKid, null);

            if (adoptedChild != null)
            {
                ResetSimTask.UpdateInterface(adoptedChild);

                SocialWorkerAdoptionSituation.InstantiateNewKid instantiateNewKid = new SocialWorkerAdoptionSituation.InstantiateNewKid();

                instantiateNewKid.AssignTraits(adoptedChild);

                instantiateNewKid.GiveImaginaryFriendDoll(newKid);

                me.Genealogy.AddChild(newKid.Genealogy);

                if (me.CreatedSim != null)
                {
                    ActiveTopic.AddToSim(me.CreatedSim, "Recently Had Baby");

                    EventTracker.SendEvent(EventTypeId.kAdoptedChild, me.CreatedSim, adoptedChild);
                    EventTracker.SendEvent(EventTypeId.kNewOffspring, me.CreatedSim, adoptedChild);
                    EventTracker.SendEvent(EventTypeId.kParentAdded, adoptedChild, me.CreatedSim);
                }

                MidlifeCrisisManager.OnHadChild(me);

                Genealogy spouse = me.Genealogy.Spouse;
                if (spouse != null)
                {
                    spouse.AddChild(newKid.Genealogy);

                    SimDescription spouseDesc = spouse.SimDescription;
                    if (spouseDesc != null)
                    {
                        MidlifeCrisisManager.OnHadChild(spouseDesc);

                        if (spouseDesc.CreatedSim != null)
                        {
                            ActiveTopic.AddToSim(spouseDesc.CreatedSim, "Recently Had Baby");

                            EventTracker.SendEvent(EventTypeId.kAdoptedChild, spouseDesc.CreatedSim, adoptedChild);
                            EventTracker.SendEvent(EventTypeId.kNewOffspring, spouseDesc.CreatedSim, adoptedChild);
                            EventTracker.SendEvent(EventTypeId.kParentAdded, adoptedChild, spouseDesc.CreatedSim);
                        }
                    }
                }

                EventTracker.SendEvent(EventTypeId.kChildBornOrAdopted, null, adoptedChild);
            }

            return(true);
        }
예제 #18
0
        public static void SetPartner(SimDescription ths, SimDescription x)
        {
            Common.StringBuilder msg = new Common.StringBuilder();

            try
            {
                if ((ths == null) || (x == null))
                {
                    return;
                }

                msg += "A";

                if (ths.Partner != x)
                {
                    if (x.IsMale)
                    {
                        ths.IncreaseGenderPreferenceMale();
                    }
                    else
                    {
                        ths.IncreaseGenderPreferenceFemale();
                    }

                    if (ths.IsMale)
                    {
                        x.IncreaseGenderPreferenceMale();
                    }
                    else
                    {
                        x.IncreaseGenderPreferenceFemale();
                    }

                    msg += "B";

                    if ((ths.Partner != null) && (ths.Partner != x))
                    {
                        ths.Partner.ClearPartner();
                    }
                    if ((x.Partner != null) && (x.Partner != ths))
                    {
                        x.ClearPartner();
                    }

                    msg += "C";

                    Relationship relationship = Relationship.Get(ths, x, true);
                    if (relationship != null)
                    {
                        // Must be able to create a relationship to set the Partner
                        ths.Partner = x;
                        x.Partner   = ths;

                        msg += "D";

                        InformationLearnedAboutSim info = relationship.InformationAbout(x);
                        if (info != null)
                        {
                            info.PartnerKnown = true;
                        }

                        info = relationship.InformationAbout(ths);
                        if (info != null)
                        {
                            info.PartnerKnown = true;
                        }
                    }

                    msg += "E";

                    if ((x.CreatedSim != null) && (x.TraitManager.HasElement(TraitNames.CommitmentIssues)))
                    {
                        ActiveTopic.AddToSim(x.CreatedSim, "Has Made Commitment");
                    }

                    msg += "F";

                    if ((ths.CreatedSim != null) && (ths.TraitManager.HasElement(TraitNames.CommitmentIssues)))
                    {
                        ActiveTopic.AddToSim(ths.CreatedSim, "Has Made Commitment");
                    }

                    msg += "G";
                }
            }
            catch (Exception e)
            {
                Common.Exception(ths, x, msg, e);
            }
        }
예제 #19
0
        public static void OnMarried(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                string failReason = null;
                if ((actor.Household == target.Household) || (!MovingSituation.MovingInProgress && ((Household.ActiveHousehold == null) || InWorldSubState.IsEditTownValid(Household.ActiveHousehold.LotHome, ref failReason))))
                {
                    Sim         actorSim;
                    Sim         targetSim;
                    BuffManager actorBuffManager  = actor.BuffManager;
                    BuffManager targetBuffManager = target.BuffManager;

                    actorBuffManager.AddElement(BuffNames.JustMarried, Origin.FromSocialization);
                    targetBuffManager.AddElement(BuffNames.JustMarried, Origin.FromSocialization);

                    BuffJustMarried.BuffInstanceJustMarried element = actorBuffManager.GetElement(BuffNames.JustMarried) as BuffJustMarried.BuffInstanceJustMarried;
                    if (element != null)
                    {
                        element.CreateGiftAlarm(actorBuffManager);
                    }

                    actorBuffManager.RemoveElement(BuffNames.NewlyEngaged);
                    actorBuffManager.RemoveElement(BuffNames.ParentsBlessing);
                    targetBuffManager.RemoveElement(BuffNames.NewlyEngaged);
                    targetBuffManager.RemoveElement(BuffNames.ParentsBlessing);

                    ActiveTopic.AddToSim(actor, "Wedding");
                    ActiveTopic.AddToSim(target, "Wedding");
                    Relationship relationship = Relationship.Get(actor, target, true);
                    relationship.LTR.RemoveInteractionBit(LongTermRelationship.InteractionBits.Divorce);
                    relationship.LTR.AddInteractionBit(LongTermRelationship.InteractionBits.Marry);
                    if (actor.IsNPC && !target.IsNPC)
                    {
                        actorSim  = target;
                        targetSim = actor;
                    }
                    else if (!actor.IsNPC && target.IsNPC)
                    {
                        actorSim  = actor;
                        targetSim = target;
                    }
                    else
                    {
                        SimDescription proposerDesc = relationship.ProposerDesc;
                        actorSim = (proposerDesc == null) ? null : proposerDesc.CreatedSim;
                        if (actorSim == null)
                        {
                            if (RandomUtil.CoinFlip())
                            {
                                actorSim = actor;
                            }
                            else
                            {
                                actorSim = target;
                            }
                        }

                        targetSim = target;
                        if (actorSim == target)
                        {
                            targetSim = actor;
                        }
                    }

                    SocialCallback.GiveDaysOffIfRequired(actorSim, targetSim);
                    MidlifeCrisisManager.OnBecameMarried(actor.SimDescription, target.SimDescription);

                    relationship.SetMarriedInGame();

                    if (SeasonsManager.Enabled)
                    {
                        relationship.WeddingAnniversary      = new WeddingAnniversary(SeasonsManager.CurrentSeason, (int)SeasonsManager.DaysElapsed);
                        relationship.WeddingAnniversary.SimA = relationship.SimDescriptionA;
                        relationship.WeddingAnniversary.SimB = relationship.SimDescriptionB;
                        relationship.WeddingAnniversary.CreateAlarm();
                    }

                    if (sStoryProgressionHandleMarriageName.Valid)
                    {
                        sStoryProgressionHandleMarriageName.Invoke <bool>(new object[] { actorSim.SimDescription, targetSim.SimDescription });
                    }
                    else
                    {
                        targetSim.SimDescription.LastName = actorSim.SimDescription.LastName;
                        foreach (Genealogy genealogy in targetSim.Genealogy.Children)
                        {
                            SimDescription simDescription = genealogy.SimDescription;
                            if (((simDescription != null) && simDescription.TeenOrBelow) && (simDescription.CreatedSim != null))
                            {
                                simDescription.LastName = actorSim.SimDescription.LastName;
                            }
                        }
                    }

                    actor.Genealogy.Marry(target.Genealogy);
                    OnMoveInWith(actor, target, interaction, topic, i);
                    SocialCallback.EndServiceForActor(actor);
                    SocialCallback.EndServiceForActor(target);

                    actorBuffManager.RemoveElement(BuffNames.MissedWedding);
                    targetBuffManager.RemoveElement(BuffNames.MissedWedding);
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #20
0
        public override bool Continue(Sim mom, bool momJustCreated)
        {
            if (mom == null)
            {
                return(false);
            }

            if (momJustCreated)
            {
                mHasRequestedWalkStyle = false;
            }

            mMom = mom;
            mDad = null;
            SimDescription simDescription;

            if (RobotDadDescriptionID != 0uL)
            {
                simDescription = SimDescription.Find(RobotDadDescriptionID);
            }
            else
            {
                simDescription = SimDescription.Find(DadDescriptionId);
            }

            if (simDescription != null && simDescription.IsMale && simDescription.TeenOrAbove)
            {
                mDad = simDescription.CreatedSim;
            }

            mTimeMoodSampled              = SimClock.CurrentTime();
            mMom.MoodManager.MoodChanged += new MoodManager.MoodChangedCallback(MoodManager_MoodChanged);
            ActiveTopic.AddToSim(mom, "Pregnancy");

            if (momJustCreated)
            {
                PreggersAlarm = mom.AddAlarmRepeating(1f, TimeUnit.Hours, new AlarmTimerCallback(HourlyCallback), 1f, TimeUnit.Hours,
                                                      "Hourly Robot Pregnancy Update Alarm", AlarmType.AlwaysPersisted);
            }

            mom.SimDescription.Pregnancy = this;
            int arg_C0_0 = mHourOfPregnancy;

            if (mHourOfPregnancy >= 0)
            {
                if (mHourOfPregnancy < Woohooer.Settings.mRobotHoursOfPregnancy)
                {
                    mMom.BuffManager.AddElement(BuffNames.Pregnant, Origin.FromPregnancy);
                }

                ActiveTopic.AddToSim(mMom, "Announce Pregnancy");

                if (mDad != null && !mDad.HasBeenDestroyed)
                {
                    ActiveTopic.AddToSim(mDad, "Pregnant", mDad.SimDescription);
                }
            }

            if (mHourOfPregnancy >= Woohooer.Settings.mRobotHourToStartWalkingPregnant)
            {
                ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription);
                RequestPregnantWalkStyle();
            }

            // Robots will not have a labor stage.

            if (mHourOfPregnancy == Woohooer.Settings.mRobotHoursOfPregnancy)
            {
                mMom.AddAlarm(1f, TimeUnit.Minutes, new AlarmTimerCallback(HaveTheBaby), "Have the baby", AlarmType.AlwaysPersisted);
            }

            TryToGiveLeave();

            return(true);
        }
예제 #21
0
        public bool BumpToHighestState(Common.IStatGenerator stats, SimDescription a, SimDescription b)
        {
            while (BumpToHigherState(stats, a, b))
            {
                ;
            }

            if ((!a.IsMarried) && (!b.IsMarried))
            {
                IncStat("BumpUp: Not Married");
                stats.IncStat("BumpUp: Not Married");
                return(false);
            }

            if (a.CreatedSim != null)
            {
                a.CreatedSim.BuffManager.AddElement(BuffNames.JustMarried, Origin.FromSocialization);
                a.CreatedSim.BuffManager.RemoveElement(BuffNames.NewlyEngaged);
                ActiveTopic.AddToSim(a.CreatedSim, "Wedding");
            }

            if (b.CreatedSim != null)
            {
                b.CreatedSim.BuffManager.AddElement(BuffNames.JustMarried, Origin.FromSocialization);
                b.CreatedSim.BuffManager.RemoveElement(BuffNames.NewlyEngaged);
                ActiveTopic.AddToSim(b.CreatedSim, "Wedding");
            }

            if ((a.CreatedSim != null) && (b.CreatedSim != null))
            {
                SocialCallback.GiveDaysOffIfRequired(a.CreatedSim, b.CreatedSim);
            }

            a.Genealogy.Marry(b.Genealogy);

            Relationship relationship = ManagerSim.GetRelationship(a, b);

            if (relationship != null)
            {
                MidlifeCrisisManager.OnBecameMarried(a, b);

                relationship.LTR.RemoveInteractionBit(LongTermRelationship.InteractionBits.Divorce);
                relationship.LTR.AddInteractionBit(LongTermRelationship.InteractionBits.Marry);

                relationship.SetMarriedInGame();

                if (SeasonsManager.Enabled)
                {
                    relationship.WeddingAnniversary      = new WeddingAnniversary(SeasonsManager.CurrentSeason, (int)SeasonsManager.DaysElapsed);
                    relationship.WeddingAnniversary.SimA = relationship.SimDescriptionA;
                    relationship.WeddingAnniversary.SimB = relationship.SimDescriptionB;
                    relationship.WeddingAnniversary.CreateAlarm();
                }

                return(true);
            }
            else
            {
                IncStat("BumpUp: Relation Fail");
                stats.IncStat("BumpUp: Relation Fail");
                return(false);
            }
        }
예제 #22
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;
            }
        }
예제 #23
0
 public override void OnHappening()
 {
     ActiveTopic.AddToSim(Host, "Party Happening");
 }
예제 #24
0
        public override void HourlyCallback()
        {
            if (GameUtils.IsOnVacation() || GameUtils.IsUniversityWorld())
            {
                Common.DebugNotify("AlienPregnancy.HourlyCallback - Pregnancy paused");
                return;
            }

            mHourOfPregnancy++;

            string msg = mMom.FullName + Common.NewLine
                         + "AlienPregnancy.HourlyCallback" + Common.NewLine
                         + " - Hour: " + mHourOfPregnancy + Common.NewLine;

            if (mHourOfPregnancy == Aliens.Settings.mPregnancyShow)
            {
                msg += " - Showing Pregnancy";

                InteractionInstance instance = ShowAlienPregnancy.Singleton.CreateInstance(mMom, mMom,
                                                                                           new InteractionPriority(InteractionPriorityLevel.ESRB), false, false);
                instance.Hidden = true;
                mMom.InteractionQueue.AddNext(instance);

                Common.DebugNotify(msg);

                return;
            }

            if (mMom.Household.IsTouristHousehold)
            {
                msg += " - Mother is Tourist" + Common.NewLine;

                ForeignVisitorsSituation situation = ForeignVisitorsSituation.TryGetForeignVisitorsSituation(mMom);

                if (mHourOfPregnancy == Aliens.Settings.mForeignShowTNS && situation != null)
                {
                    StyledNotification.Show(new StyledNotification.Format(
                                                Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:ForeignBabyIsComingTNS",
                                                                            new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessagePositive));
                }

                if (mHourOfPregnancy == Aliens.Settings.mForeignLeaves)
                {
                    msg += " - Sending Pregnant Tourist Home";

                    if (situation != null)
                    {
                        situation.MakeGuestGoHome(mMom);
                    }
                    else if (mMom.SimDescription.AssignedRole != null)
                    {
                        mMom.SimDescription.AssignedRole.RemoveSimFromRole();
                    }

                    Common.DebugNotify(msg);
                }

                if (mHourOfPregnancy > Aliens.Settings.mForeignLeaves)
                {
                    msg += " - Walking Back 1 Hour";

                    mHourOfPregnancy--;

                    Common.DebugNotify(msg);

                    return;
                }
            }

            if (mHourOfPregnancy >= Aliens.Settings.mStartWalk)
            {
                ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription);
                RequestPregnantWalkStyle();
            }

            if (mHourOfPregnancy == Aliens.Settings.mStartLabor)
            {
                msg += " - Beginning Labor" + Common.NewLine;

                for (int i = 0; i < Aliens.Settings.mNumPuddles; i++)
                {
                    PuddleManager.AddPuddle(mMom.PositionOnFloor);
                }

                if (mMom.IsSelectable)
                {
                    StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:BabyIsComingTNS",
                                                                                                      new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessageNegative), "glb_tns_baby_coming_r2");
                }

                mMom.BuffManager.RemoveElement(BuffsAndTraits.sXenogenesis);
                mMom.BuffManager.AddElement(BuffsAndTraits.sAlienBabyIsComing, Origin.FromPregnancy);

                if (mContractionBroadcast != null)
                {
                    mContractionBroadcast.Dispose();
                }

                mContractionBroadcast = new ReactionBroadcaster(mMom, kContractionBroadcasterParams,
                                                                new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction));
                mMom.AddInteraction(TakeToHospitalEx.Singleton);
                InteractionInstance entry = HaveContraction.Singleton.CreateInstance(mMom, mMom,
                                                                                     new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false);
                mMom.InteractionQueue.Add(entry);
                mContractionsAlarm = mMom.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(TriggerContraction), 5f, TimeUnit.Minutes,
                                                            "Trigger Contractions Alarm", AlarmType.AlwaysPersisted);
                EventTracker.SendEvent(EventTypeId.kPregnancyContractionsStarted, mMom);
            }

            if (mHourOfPregnancy >= Aliens.Settings.mPregnancyDuration)
            {
                msg += " - Delivering Baby" + Common.NewLine;
                HaveTheBaby();
            }

            SetPregoBlendShape();

            Common.DebugNotify(msg);
        }
예제 #25
0
        public override void HaveTheBaby()
        {
            string msg = mMom.FullName + Common.NewLine +
                         "AlienPregnancy.HaveTheBaby" + Common.NewLine +
                         " - Initiating Birth Sequence" + Common.NewLine;

            if (mContractionBroadcast != null)
            {
                mContractionBroadcast.Dispose();
            }

            mMom.RemoveAlarm(PreggersAlarm);
            mMom.RemoveAlarm(mContractionsAlarm);

            msg += " - Pregnancy Alarm Removed" + Common.NewLine +
                   " - Contraction Alarm Removed" + Common.NewLine;

            if (mMom.InteractionQueue.HasInteractionOfType(HaveAlienBabyHome.Singleton))
            {
                msg += " - Already Birthing at Home";
                Common.DebugNotify(msg);

                return;
            }

            if (mMom.InteractionQueue.HasInteractionOfType(HaveAlienBabyHospital.Singleton))
            {
                msg += " - Already Birthing at Hospital";

                foreach (InteractionInstance current in mMom.InteractionQueue.InteractionList)
                {
                    HaveAlienBabyHospital haveBabyHosptial = current as HaveAlienBabyHospital;

                    if (haveBabyHosptial != null)
                    {
                        haveBabyHosptial.CancellableByPlayer = false;
                        haveBabyHosptial.BabyShouldBeBorn    = true;

                        Common.DebugNotify(msg);

                        return;
                    }
                }
            }

            msg += " - Checking for Hospitals" + Common.NewLine;

            List <RabbitHole> rabbitHoles = RabbitHole.GetRabbitHolesOfType(RabbitHoleType.Hospital);
            float             num         = mMom.LotHome.GetDistanceToObject(mMom);
            RabbitHole        rabbitHole  = null;

            foreach (RabbitHole current2 in rabbitHoles)
            {
                float distanceToObject = current2.RabbitHoleProxy.GetDistanceToObject(mMom);

                if (distanceToObject < num)
                {
                    num        = distanceToObject;
                    rabbitHole = current2;
                }
            }

            InteractionInstance instance;

            if (rabbitHole != null)
            {
                msg += " - Birthing at Hospital";

                instance = HaveAlienBabyHospital.Singleton.CreateInstance(rabbitHole, mMom,
                                                                          new InteractionPriority(InteractionPriorityLevel.Pregnancy), false, false);
                ((HaveAlienBabyHospital)instance).BabyShouldBeBorn = true;
            }
            else
            {
                msg += " - Birthing at Home";

                instance = HaveAlienBabyHome.Singleton.CreateInstance(mMom.LotHome, mMom,
                                                                      new InteractionPriority(InteractionPriorityLevel.Pregnancy), false, false);
            }

            mMom.InteractionQueue.Add(instance);
            ActiveTopic.AddToSim(mMom, "Recently Had Baby");

            Common.DebugNotify(msg);
        }
예제 #26
0
        public override void HourlyCallback()
        {
            if (GameUtils.IsOnVacation() || GameUtils.IsUniversityWorld())
            {
                Common.DebugNotify(mMom.FullName + Common.NewLine + "HumanSurrogatePregnancy.HourlyCallback" + Common.NewLine + " - Pregnancy Paused");
                return;
            }

            mHourOfPregnancy++;

            string msg = mMom.FullName + Common.NewLine + "HumanSurrogatePregnancy.HourlyCallback" + Common.NewLine +
                         " - Hour: " + mHourOfPregnancy + Common.NewLine;

            if (mHourOfPregnancy == kHourToStartPregnantMotives)
            {
                mMom.BuffManager.AddElement(BuffNames.Nauseous, Origin.FromUnknown);
            }

            if (mHourOfPregnancy < kHourToShowPregnantBuff && mHourOfPregnancy > kHourToStartPregnantMotives)
            {
                mMom.BuffManager.AddElement(BuffNames.Nauseous, Origin.FromUnknown);
            }

            if (mMom.Household.IsTouristHousehold)
            {
                msg += " - Foreign Sim" + Common.NewLine;

                ForeignVisitorsSituation foreignVisitorsSituation = ForeignVisitorsSituation.TryGetForeignVisitorsSituation(mMom);

                if (mHourOfPregnancy == kForeignSimDisplaysTNS && foreignVisitorsSituation != null)
                {
                    StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:ForeignBabyIsComingTNS",
                                                                                                      new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessagePositive), "glb_tns_baby_coming_r2");
                }

                if (mHourOfPregnancy == kForeignSimLeavesWorld)
                {
                    if (foreignVisitorsSituation != null)
                    {
                        foreignVisitorsSituation.MakeGuestGoHome(mMom);
                    }
                    else if (mMom.SimDescription.AssignedRole != null)
                    {
                        mMom.SimDescription.AssignedRole.RemoveSimFromRole();
                    }
                }

                if (mHourOfPregnancy > kForeignSimLeavesWorld)
                {
                    Common.DebugNotify(msg);

                    mHourOfPregnancy--;
                    return;
                }
            }

            if (mHourOfPregnancy == kHourToShowPregnantBuff)
            {
                msg += " - Adding Pregnant Buff" + Common.NewLine;
                Common.DebugNotify(msg);

                InteractionInstance interactionInstance = ShowPregnancyEx.Singleton.CreateInstance(mMom, mMom,
                                                                                                   new InteractionPriority(InteractionPriorityLevel.ESRB), false, false);
                interactionInstance.Hidden = true;
                mMom.InteractionQueue.AddNext(interactionInstance);
                return;
            }

            if (mHourOfPregnancy >= kHourToStartWalkingPregnant)
            {
                ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription);
                RequestPregnantWalkStyle();
            }

            if (mHourOfPregnancy == kHourToStartContractions)
            {
                msg += " - Starting Labor" + Common.NewLine;

                for (int i = 0; i < kNumberOfPuddlesForWaterBreak; i++)
                {
                    PuddleManager.AddPuddle(mMom.PositionOnFloor);
                }

                if (mMom.IsSelectable)
                {
                    StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:BabyIsComingTNS",
                                                                                                      new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessageNegative), "glb_tns_baby_coming_r2");
                }

                mMom.BuffManager.RemoveElement(BuffNames.Pregnant);
                mMom.BuffManager.AddElement(BuffNames.BabyIsComing, Origin.FromPregnancy);

                if (mContractionBroadcast != null)
                {
                    mContractionBroadcast.Dispose();
                }

                mContractionBroadcast = new ReactionBroadcaster(mMom, kContractionBroadcasterParams,
                                                                new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction));
                mMom.AddInteraction(TakeToHospital.Singleton);
                InteractionInstance entry = HaveContraction.Singleton.CreateInstance(mMom, mMom, new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false);
                mMom.InteractionQueue.Add(entry);
                mContractionsAlarm = mMom.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(TriggerContraction),
                                                            5f, TimeUnit.Minutes, "Trigger Contractions Alarm", AlarmType.AlwaysPersisted);
                EventTracker.SendEvent(EventTypeId.kPregnancyContractionsStarted, mMom);
            }

            if (mHourOfPregnancy == kHoursOfPregnancy)
            {
                msg += " - Having the Baby";
                HaveTheBaby();
            }

            SetPregoBlendShape();

            Common.DebugNotify(msg);
        }
예제 #27
0
 public override void OnPreparation()
 {
     ActiveTopic.AddToSim(Host, "Party Preparation");
 }
예제 #28
0
        protected void HandleHomework(Sim sim, bool fromRabbithole)
        {
            if (sim == null)
            {
                return;
            }

            if (sim.School == null)
            {
                return;
            }

            if ((SimTypes.IsSelectable(sim)) &&
                (sim.School.OwnersHomework != null) &&
                (sim.School.OwnersHomework.PercentComplete == 0f))
            {
                Notify(sim, Common.Localize("HomeSchooling:HaveHomework", sim.IsFemale, new object[] { sim }));
            }
            else
            {
                bool bExistingHomework = false;

                if (sim.School.OwnersHomework != null)
                {
                    float perfGain = NRaas.Careers.Settings.mPerformancePerHomework * ((sim.School.OwnersHomework.PercentComplete - 50f) / 100f);

                    sim.School.AddPerformance(perfGain);

                    if (sim.SimDescription.CareerManager != null)
                    {
                        sim.SimDescription.CareerManager.UpdatePerformanceUI(this);
                    }

                    sim.School.OwnersHomework.Dispose();

                    sim.School.OwnersHomework = null;

                    bExistingHomework = true;
                }

                if (sim.School.OwnersHomework == null)
                {
                    sim.School.OwnersHomework = GlobalFunctions.CreateObjectOutOfWorld("Homework") as Homework;
                    sim.School.OwnersHomework.OwningSimDescription = sim.SimDescription;

                    sim.Inventory.TryToAdd(sim.School.OwnersHomework, false);
                }

                sim.School.OwnersHomework.PercentComplete = 0f;
                sim.School.OwnersHomework.Cheated         = false;

                mLastHomeworkDay = SimClock.ElapsedCalendarDays();

                string suffix = null;
                if (fromRabbithole)
                {
                    suffix = "Rabbithole";
                }

                if (bExistingHomework)
                {
                    Notify(sim, Common.Localize("HomeSchooling:ExistingHomework" + suffix, sim.IsFemale, new object[] { sim }));
                }
                else
                {
                    Notify(sim, Common.Localize("HomeSchooling:NewHomework" + suffix, sim.IsFemale, new object[] { sim }));
                }

                if (SchoolTuning != null)
                {
                    if (sim.School.Performance >= SchoolTuning.GradeThresholdA)
                    {
                        sim.School.mConsecutiveDaysWithA++;
                        if (sim.School.mConsecutiveDaysWithA >= SchoolTuning.DaysWithAForHonorRoll)
                        {
                            sim.BuffManager.AddElement(BuffNames.HonorStudent, Origin.FromGoodGrades);
                        }
                    }
                    else
                    {
                        ActiveTopic.AddToSim(sim, "Complain About School");
                        sim.School.mConsecutiveDaysWithA = 0;
                        if (sim.School.Performance <= SchoolTuning.GradeThresholdF)
                        {
                            sim.BuffManager.AddElement(BuffNames.Failing, Origin.FromBadGrades);
                        }
                    }
                }

                EventTracker.SendEvent(EventTypeId.kFinishedSchool, sim);
            }
        }
예제 #29
0
        public override bool Continue(Sim mom, bool momJustCreated)
        {
            if (mom == null)
            {
                return(false);
            }

            if (momJustCreated)
            {
                mHasRequestedWalkStyle = false;
            }

            mMom = mom;
            mDad = null;
            CheckForDad();
            mTimeMoodSampled              = SimClock.CurrentTime();
            mMom.MoodManager.MoodChanged += new MoodManager.MoodChangedCallback(MoodManager_MoodChanged);
            ActiveTopic.AddToSim(mom, "Pregnancy");

            if (momJustCreated)
            {
                PreggersAlarm = mom.AddAlarmRepeating(1f, TimeUnit.Hours, new AlarmTimerCallback(HourlyCallback), 1f, TimeUnit.Hours,
                                                      "Hourly Alien Pregnancy Update Alarm", AlarmType.AlwaysPersisted);
            }

            mom.SimDescription.Pregnancy = this;
            int arg_C0_0 = mHourOfPregnancy;
            int arg_BF_0 = Aliens.Settings.mPregnancyShow;

            if (mHourOfPregnancy >= Aliens.Settings.mPregnancyShow)
            {
                if (mHourOfPregnancy < Aliens.Settings.mStartLabor)
                {
                    mMom.BuffManager.AddElement(BuffsAndTraits.sXenogenesis, Origin.FromPregnancy);
                }

                ActiveTopic.AddToSim(mMom, "Announce Pregnancy");
            }

            if (mHourOfPregnancy >= Aliens.Settings.mStartWalk)
            {
                ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription);
                RequestPregnantWalkStyle();
            }

            if (mHourOfPregnancy >= Aliens.Settings.mStartLabor)
            {
                mMom.BuffManager.AddElement(BuffsAndTraits.sAlienBabyIsComing, Origin.FromPregnancy);

                if (mContractionBroadcast != null)
                {
                    mContractionBroadcast.Dispose();
                }

                mContractionBroadcast = new ReactionBroadcaster(mMom, kContractionBroadcasterParams,
                                                                new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction));
                mMom.AddInteraction(TakeToHospitalEx.Singleton);
                InteractionInstance entry = HaveContraction.Singleton.CreateInstance(mMom, mMom,
                                                                                     new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false);
                mMom.InteractionQueue.Add(entry);
                mContractionsAlarm = mMom.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(TriggerContraction), 5f, TimeUnit.Minutes,
                                                            "Trigger Contractions Alarm", AlarmType.AlwaysPersisted);
            }

            if (mHourOfPregnancy == Aliens.Settings.mPregnancyDuration)
            {
                mMom.AddAlarm(1f, TimeUnit.Minutes, new AlarmTimerCallback(HaveTheBaby), "Re-have the baby.", AlarmType.AlwaysPersisted);
            }

            SetPregoBlendShape();

            if (mMom.SimDescription.IsVisuallyPregnant)
            {
                TryToGiveLeave();
            }

            return(true);
        }
예제 #30
0
        public override bool Continue(Sim mom, bool momJustCreated)
        {
            if (mom == null)
            {
                return(false);
            }

            if (momJustCreated)
            {
                mHasRequestedWalkStyle = false;
            }

            mMom                          = mom;
            mDad                          = null;
            mTimeMoodSampled              = SimClock.CurrentTime();
            mMom.MoodManager.MoodChanged += new MoodManager.MoodChangedCallback(MoodManager_MoodChanged);
            ActiveTopic.AddToSim(mom, "Pregnancy");

            if (momJustCreated)
            {
                PreggersAlarm = mom.AddAlarmRepeating(1f, TimeUnit.Hours, new AlarmTimerCallback(HourlyCallback), 1f, TimeUnit.Hours,
                                                      "Hourly Human Surrogate Pregnancy Update Alarm", AlarmType.AlwaysPersisted);
            }

            mom.SimDescription.Pregnancy = this;
            int arg_C0_0 = mHourOfPregnancy;
            int arg_BF_0 = kHourToShowPregnantBuff;

            if (mHourOfPregnancy >= kHourToShowPregnantBuff)
            {
                if (mHourOfPregnancy < kHourToStartContractions)
                {
                    mMom.BuffManager.AddElement(BuffNames.Pregnant, Origin.FromPregnancy);
                }

                ActiveTopic.AddToSim(mMom, "Announce Pregnancy");
            }

            if (mHourOfPregnancy >= kHourToStartWalkingPregnant)
            {
                ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription);
                RequestPregnantWalkStyle();
            }

            if (mHourOfPregnancy >= kHourToStartContractions)
            {
                // Add BabyIsComing moodlet here!

                if (mContractionBroadcast != null)
                {
                    mContractionBroadcast.Dispose();
                }

                mContractionBroadcast = new ReactionBroadcaster(mMom, kContractionBroadcasterParams,
                                                                new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction));
                // Add TakeToHospital interaction here!
                InteractionInstance entry = HaveContraction.Singleton.CreateInstance(mMom, mMom,
                                                                                     new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false);
                mMom.InteractionQueue.Add(entry);
                mContractionsAlarm = mMom.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(TriggerContraction), 5f, TimeUnit.Minutes,
                                                            "Trigger Contractions Alarm", AlarmType.AlwaysPersisted);
            }

            if (mHourOfPregnancy == kHoursOfPregnancy)
            {
                mMom.AddAlarm(1f, TimeUnit.Minutes, new AlarmTimerCallback(HaveTheBaby), "Re-have the baby", AlarmType.AlwaysPersisted);
            }

            SetPregoBlendShape();

            if (mMom.SimDescription.IsVisuallyPregnant)
            {
                TryToGiveLeave();
            }

            return(true);
        }