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); } }
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); } }
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); } }