Esempio n. 1
0
            public override InteractionInstance CreateInstance(ref InteractionInstanceParameters parameters)
            {
                InteractionInstance result = new HaveBabyHomeEx();

                result.Init(ref parameters);
                return(result);
            }
Esempio n. 2
0
        public override bool Run()
        {
            try
            {
                if (Actor.LotCurrent != Target)
                {
                    Vector3 point = World.LotGetPtInside(Target.LotId);
                    if (point == Vector3.Invalid)
                    {
                        return(false);
                    }
                    if (!Actor.RouteToPointRadius(point, 3f) && (!GlobalFunctions.PlaceAtGoodLocation(Actor, new World.FindGoodLocationParams(point), false) || !SimEx.IsPointInLotSafelyRoutable(Actor, Target, Actor.Position)))
                    {
                        Actor.AttemptToPutInSafeLocation(true);
                    }
                }

                Sim   destObj          = null;
                float negativeInfinity = float.NegativeInfinity;
                foreach (Sim sim2 in Actor.Household.Sims)
                {
                    if ((sim2.IsHuman && sim2.IsAtHome) && !sim2.IsSleeping)
                    {
                        Relationship relationship = Relationship.Get(Actor, sim2, false);
                        if ((relationship != null) && (relationship.LTR.Liking > negativeInfinity))
                        {
                            destObj          = sim2;
                            negativeInfinity = relationship.LTR.Liking;
                        }
                    }
                }

                if (destObj != null)
                {
                    Actor.RouteToDynamicObjectRadius(destObj, kRouteToHighRelSimRange[0x0], kRouteToHighRelSimRange[0x1], null, new Route.RouteOption[] { Route.RouteOption.DoLineOfSightCheckUserOverride });
                }

                string instanceName = null;
                switch (Actor.SimDescription.Species)
                {
                case CASAgeGenderFlags.Dog:
                    instanceName = "dogPregnantJig";
                    break;

                case CASAgeGenderFlags.LittleDog:
                    instanceName = "smallDogPregnantJig";
                    break;

                case CASAgeGenderFlags.Horse:
                    instanceName = "horsePregnantJig";
                    break;

                case CASAgeGenderFlags.Cat:
                    instanceName = "catPregnantJig";
                    break;
                }

                if (instanceName != null)
                {
                    mPetPregnancyJig = GlobalFunctions.CreateObjectOutOfWorld(instanceName, ProductVersion.EP5) as SocialJigOnePerson;
                    if (mPetPregnancyJig != null)
                    {
                        mPetPregnancyJig.RegisterParticipants(Actor, null);
                        Vector3 position      = Actor.Position;
                        Vector3 forwardVector = Actor.ForwardVector;
                        if (GlobalFunctions.FindGoodLocationNearby(mPetPregnancyJig, ref position, ref forwardVector))
                        {
                            mPetPregnancyJig.SetPosition(position);
                            mPetPregnancyJig.SetForward(forwardVector);
                            mPetPregnancyJig.AddToWorld();
                            Route r = mPetPregnancyJig.RouteToJigA(Actor);
                            if (!Actor.DoRoute(r))
                            {
                                mPetPregnancyJig.Destroy();
                                mPetPregnancyJig = null;
                            }
                        }
                        else
                        {
                            mPetPregnancyJig.Destroy();
                            mPetPregnancyJig = null;
                        }
                    }
                }

                StandardEntry();
                BeginCommodityUpdates();
                EnterStateMachine("GiveBirth", "Enter", "x");
                AnimateSim("LieDown");
                if (Actor.IsSelectable)
                {
                    try
                    {
                        Sims3.Gameplay.Gameflow.Singleton.DisableSave(this, "Gameplay/ActorSystems/PetPregnancy:DisableSave");

                        // Custom
                        HaveBabyHomeEx.EnsureForeignFather(Actor.SimDescription.Pregnancy);

                        mOffspring = new Proxies.PetPregnancyProxy(Actor.SimDescription.Pregnancy).CreateNewborns(0f, true, true);
                        int num2 = 0x0;
                        foreach (Sim sim3 in mOffspring)
                        {
                            sim3.SimDescription.IsNeverSelectable = true;
                            if (mPetPregnancyJig != null)
                            {
                                Slot slotName = kPregnancyJigContainmentSlots[num2++];
                                sim3.SetPosition(mPetPregnancyJig.GetPositionOfSlot(slotName));
                                sim3.SetForward(mPetPregnancyJig.GetForwardOfSlot(slotName));
                                InteractionInstance entry = Pregnancy.BabyPetLieDown.Singleton.CreateInstance(sim3, sim3, new InteractionPriority(InteractionPriorityLevel.Autonomous), true, true);
                                entry.Hidden = true;
                                sim3.InteractionQueue.AddNext(entry);
                            }
                            else
                            {
                                World.FindGoodLocationParams fglParams = new World.FindGoodLocationParams(Actor.Position);
                                fglParams.RequiredRoomID = Actor.RoomId;
                                if ((!GlobalFunctions.PlaceAtGoodLocation(sim3, fglParams, false) || !sim3.IsPointInLotSafelyRoutable(sim3.LotCurrent, sim3.Position)) && !sim3.AttemptToPutInSafeLocation(true))
                                {
                                    sim3.SetPosition(Actor.Position);
                                }
                            }
                        }
                    }
                    finally
                    {
                        Sims3.Gameplay.Gameflow.Singleton.EnableSave(this);
                    }
                }

                // Custom call
                bool flag = DoLoop(ExitReason.Finished, GiveBirthLoopFunc, mCurrentStateMachine);
                AnimateSim("Exit");
                StandardExit();
                return(flag);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
                return(false);
            }
        }
Esempio n. 3
0
        private new void SpawnOffspring()
        {
            Pregnancy pregnancy    = Actor.SimDescription.Pregnancy;
            Sim       dad          = pregnancy.Dad;
            bool      isSelectable = Actor.IsSelectable;

            if (isSelectable)
            {
                PlumbBob.SelectActor(Actor);
                Camera.LerpParams kShowPetPregnancyCameraLerp = PetPregnancy.kShowPetPregnancyCameraLerp;
                Camera.FocusOnSim(Actor, kShowPetPregnancyCameraLerp.Zoom, kShowPetPregnancyCameraLerp.Pitch, kShowPetPregnancyCameraLerp.Time, true, false);
                BuffNames newKittensHuman = BuffNames.NewKittensHuman;
                Origin    fromNewLitter   = Origin.FromNewLitter;
                if (Actor.IsHorse)
                {
                    newKittensHuman = BuffNames.NewFoalHuman;
                    fromNewLitter   = Origin.FromNewFoal;
                }
                else if (Actor.IsADogSpecies)
                {
                    newKittensHuman = BuffNames.NewPuppiesHuman;
                }
                PetPregnancy.ReactToPetBirthHelper helper = new PetPregnancy.ReactToPetBirthHelper(newKittensHuman, fromNewLitter, Actor.Household.HouseholdId);
                new Sim.Celebrate.Event(Actor, null, PetPregnancy.kHadLitterCelebrationWitnessTuning, PetPregnancy.kHadLitterCelebrationBroadcasterParams, null, new Callback(helper.OnLitterCelebrationStarted));
                Audio.StartObjectSound(Actor.ObjectId, "sting_pet_baby_born", false);
            }
            else
            {
                try
                {
                    Simulator.YieldingDisabled = true;

                    // Custom
                    HaveBabyHomeEx.EnsureForeignFather(pregnancy);

                    // Custom
                    mOffspring = new Proxies.PetPregnancyProxy(pregnancy).CreateNewborns(0f, isSelectable, true);
                }
                finally
                {
                    Simulator.YieldingDisabled = false;
                }
            }

            Actor.SimDescription.SetPetPregnant(false);
            string effectName = "ep5birthfoalconfetti";
            int    count      = mOffspring.Count;

            if (Actor.IsCat)
            {
                if (count == 0x1)
                {
                    Actor.ShowTNSIfSelectable(TNSNames.PetPregnancyCatSingleKittenTNS, null, Actor, new object[] { Actor });
                }
                else
                {
                    Actor.ShowTNSIfSelectable(TNSNames.PetPregnancyCatHadLitterTNS, null, Actor, new object[] { Actor, count });
                }
                effectName = "ep5birthkittenconfetti";
            }
            else if (Actor.IsADogSpecies)
            {
                if (count == 0x1)
                {
                    Actor.ShowTNSIfSelectable(TNSNames.PetPregnancyDogSinglePuppyTNS, null, Actor, new object[] { Actor });
                }
                else
                {
                    Actor.ShowTNSIfSelectable(TNSNames.PetPregnancyDogHadLitterTNS, null, Actor, new object[] { Actor, count });
                }
                effectName = "ep5birthpuppyconfetti";
            }

            foreach (Sim sim2 in mOffspring)
            {
                Relationship.Get(Actor, sim2, true).LTR.UpdateLiking(RandomUtil.GetFloat(kInitialChildParentRelLikingRange[0x0], kInitialChildParentRelLikingRange[0x1]));
                if (dad != null)
                {
                    Relationship relationship2 = Relationship.Get(dad, sim2, true);
                    if (relationship2 != null)
                    {
                        relationship2.LTR.UpdateLiking(RandomUtil.GetFloat(kInitialChildParentRelLikingRange[0x0], kInitialChildParentRelLikingRange[0x1]));
                    }
                }
                if (isSelectable)
                {
                    sim2.SimDescription.IsNeverSelectable = false;
                }
                Pregnancy.MakeBabyVisible(sim2);
                VisualEffect effect = VisualEffect.Create(effectName);
                effect.SetPosAndOrient(Slots.GetPositionOfSlot(sim2.ObjectId, (uint)Sim.FXJoints.Spine0), -sim2.ForwardVector, Slots.GetUpOfSlot(sim2.ObjectId, Sim.FXJoints.Spine0));
                effect.SubmitOneShotEffect(VisualEffect.TransitionType.SoftTransition);
            }
        }
Esempio n. 4
0
 public override bool Run()
 {
     return(HaveBabyHomeEx.Run(this));
 }
Esempio n. 5
0
 public override InteractionInstance CreateInstance(ref InteractionInstanceParameters parameters)
 {
     InteractionInstance result = new HaveBabyHomeEx();
     result.Init(ref parameters);
     return result;
 }
Esempio n. 6
0
        public override bool InRabbitHole()
        {
            string msg = "HaveBabyHospitalEx:InRabbitHole" + Common.NewLine;

            try
            {
                while (!Actor.WaitForExitReason(Sim.kWaitForExitReasonDefaultTime, ExitReason.CanceledByScript))
                {
                    if (BabyShouldBeBorn && (((mDad == null) || !(mDad.CurrentInteraction is Pregnancy.GoToHospital)) || ((SimFollowers != null) && SimFollowers.Contains(mDad))))
                    {
                        break;
                    }
                }

                msg += "A";

                if (!BabyShouldBeBorn && Actor.HasExitReason(ExitReason.CanceledByScript))
                {
                    return(false);
                }

                msg += "B";

                Pregnancy pregnancy = Actor.SimDescription.Pregnancy;
                if (pregnancy != null)
                {
                    // Custom
                    HaveBabyHomeEx.EnsureForeignFather(pregnancy);
                }

                bool isSelectable = Actor.IsSelectable;
                //if (isSelectable)
                //{
                Sims3.Gameplay.Gameflow.Singleton.DisableSave(this, "Gameplay/ActorSystems/Pregnancy:DisableSave");
                //mNewborns = CreateNewborns(new HaveBabyHomeEx.PregnancyProxy(pregnancy), kBonusMoodPointsForHospitalBirth, isSelectable, false);
                mNewborns = new Proxies.PregnancyProxy(pregnancy).CreateNewborns(kBonusMoodPointsForHospitalBirth, isSelectable, false);
                // }
                // else
                // {
                //   try
                // {
                //   Simulator.YieldingDisabled = true;
                //mNewborns = CreateNewborns(new HaveBabyHomeEx.PregnancyProxy(pregnancy), kBonusMoodPointsForHospitalBirth, isSelectable, false); - was commented
                // mNewborns = new Proxies.PregnancyProxy(pregnancy).CreateNewborns(kBonusMoodPointsForHospitalBirth, isSelectable, false);
                // }
                //// finally
                // {
                //     Simulator.YieldingDisabled = false;
                // }
                // }

                msg += "C";

                Sim dad = Actor.SimDescription.Pregnancy.mDad;

                Actor.SimDescription.SetPregnancy(0f);
                List <Sim> simFollowers = SimFollowers;
                Actor.SimDescription.Pregnancy.PregnancyComplete(mNewborns, simFollowers);

                if (mNewborns.Count == 4)
                {
                    Actor.BuffManager.RemoveElement(BuffNames.ItsABoy);
                    Actor.BuffManager.AddElement(CommonPregnancy.sItsQuadruplets, Origin.FromNewBaby);

                    if (dad != null)
                    {
                        dad.BuffManager.RemoveElement(BuffNames.ItsABoy);
                        dad.BuffManager.AddElement(CommonPregnancy.sItsQuadruplets, Origin.FromNewBaby);
                    }
                }

                msg += "D";

                SpeedTrap.Sleep(0x0);

                List <Sim> list2 = new List <Sim>();
                list2.Add(Actor);

                if (simFollowers != null)
                {
                    foreach (Sim sim in simFollowers)
                    {
                        if (sim.SimDescription.TeenOrAbove && (sim.GetObjectInRightHand() == null))
                        {
                            list2.Add(sim);
                        }
                    }
                }

                msg += "E";

                if (mNewborns.Count <= list2.Count)
                {
                    for (int i = 0x0; i < mNewborns.Count; i++)
                    {
                        Sim     target  = list2[i];
                        Posture posture = target.Posture;
                        target.Posture = null;
                        Sim actor = mNewborns[i];
                        InteractionInstance entry = Pregnancy.PregnancyPlaceholderInteraction.Singleton.CreateInstance(target, actor, new InteractionPriority(InteractionPriorityLevel.Zero), false, false);
                        actor.InteractionQueue.Add(entry);

                        while ((actor.CurrentInteraction != entry) && actor.InteractionQueue.HasInteraction(entry))
                        {
                            SpeedTrap.Sleep();
                        }

                        try
                        {
                            ChildUtils.CarryChild(target, actor, false);
                        }
                        catch (Exception e)
                        {
                            Common.Exception(actor, target, e);
                        }

                        target.Posture = posture;
                        AddFollower(mNewborns[i]);
                    }
                }
                else
                {
                    BabyBasket basket = GlobalFunctions.CreateObject("BabyBasket", Vector3.OutOfWorld, 0x0, Vector3.UnitZ) as BabyBasket;
                    basket.AddBabiesToBasket(mNewborns);
                    CarrySystem.EnterWhileHolding(Actor, basket);
                    CarrySystem.VerifyAnimationParent(basket, Actor);
                }

                msg += "F";

                if (Actor.IsSelectable)
                {
                    OccultImaginaryFriend.DeliverDollToHousehold(mNewborns);
                }
                return(true);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, msg, e);
                return(false);
            }
        }