public override bool AfterExitingRabbitHole() { BabyBasket babyBasket = Actor.GetObjectInRightHand() as BabyBasket; GoHome goHome = GoHome.Singleton.CreateInstance(Actor.LotHome, Actor, GetPriority(), false, false) as GoHome; if (SimFollowers != null) { goHome.SimFollowers = new List <Sim>(); foreach (Sim sim in SimFollowers) { if (sim.LotHome != Actor.LotHome) { Relationship relationship = Relationship.Get(Actor, sim, false); if (relationship == null || relationship.LTR.Liking < Pregnancy.kLikingToGoHomeWithMother) { continue; } sim.GreetSimOnLot(Actor.LotHome); } goHome.SimFollowers.Add(sim); } } Actor.InteractionQueue.PushAsContinuation(goHome, true); GoInsideLot instance = GoInsideLot.Singleton.CreateInstance(Actor.LotHome, Actor, GetPriority(), false, false) as GoInsideLot; Actor.InteractionQueue.PushAsContinuation(instance, true); if (babyBasket != null) { Pregnancy.PutDownBabyBasket instance2 = Pregnancy.PutDownBabyBasket.Singleton.CreateInstance(babyBasket, Actor, GetPriority(), false, false) as Pregnancy.PutDownBabyBasket; Actor.InteractionQueue.PushAsContinuation(instance2, true); Pregnancy.SetupPickUpBabiesInBasket(Actor, babyBasket, GetPriority(), false, false); } return(base.AfterExitingRabbitHole()); }
public override bool InRabbitHole() { string msg = "HaveAlienBabyHosptial:InRabbitHole" + "\n"; try { while (!Actor.WaitForExitReason(Sim.kWaitForExitReasonDefaultTime, ExitReason.CanceledByScript)) { if (BabyShouldBeBorn) { break; } } msg += "A"; if (!BabyShouldBeBorn && Actor.HasExitReason(ExitReason.CanceledByScript)) { return(false); } msg += "B"; Pregnancy pregnancy = Actor.SimDescription.Pregnancy; bool isSelectable = Actor.IsSelectable; Sims3.Gameplay.Gameflow.Singleton.DisableSave(this, "Gameplay/ActorSystems/Pregnancy:DisableSave"); mNewborns = new PregnancyProxy(pregnancy).CreateNewborns(Pregnancy.HaveBabyHospital.kBonusMoodPointsForHospitalBirth, isSelectable, false); msg += "C"; Actor.SimDescription.SetPregnancy(0f); List <Sim> simFollowers = SimFollowers; new PregnancyProxy(pregnancy).PregnancyComplete(mNewborns, simFollowers); /* * if (mNewborns.Count == 4) * { * Actor.BuffManager.RemoveElement(BuffNames.ItsABoy); * Actor.BuffManager.AddElement(CommonPregnancy.sItsQuadruplets, Origin.FromNewBaby); * } */ msg += "D"; Simulator.Sleep(0u); //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 = 0; 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)) { Simulator.Sleep(0u); //SpeedTrap.Sleep(); } try { ChildUtils.CarryChild(target, actor, false); } catch (Exception e) { Logger.WriteExceptionLog(e, this, "HaveAlienBabyHospital.Run() Error - CarryChild()"); } target.Posture = posture; AddFollower(mNewborns[i]); } } else { BabyBasket basket = GlobalFunctions.CreateObject("BabyBasket", Vector3.OutOfWorld, 0, 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) { Logger.WriteExceptionLog(e, this, "HaveAlienBabyHospital.Run() Error"); return(false); } }
public override bool InRabbitHole() { string msg = "HaveAlienBabyHospital.InRabbitHole" + Common.NewLine; bool result; try { while (!Actor.WaitForExitReason(Sim.kWaitForExitReasonDefaultTime, ExitReason.CanceledByScript) && !BabyShouldBeBorn) { } msg += "A"; if (!BabyShouldBeBorn && Actor.HasExitReason(ExitReason.CanceledByScript)) { result = false; } else { msg += "B"; AlienPregnancyProxy pregnancy = new AlienPregnancyProxy(Actor.SimDescription.Pregnancy); if (Actor.IsSelectable) { Sims3.Gameplay.Gameflow.Singleton.DisableSave(this, "Gameplay/ActorSystems/Pregnancy:DisableSave"); } mNewborns = pregnancy.CreateNewborns(Pregnancy.HaveBabyHospital.kBonusMoodPointsForHospitalBirth, Actor.IsSelectable, false); for (int i = 0; i < mNewborns.Count; i++) { Relationship.Get(Actor, mNewborns[i], true).LTR.ForceChangeState(LongTermRelationshipTypes.Friend); } msg += "C"; Actor.SimDescription.SetPregnancy(0f); List <Sim> followers = SimFollowers; pregnancy.PregnancyComplete(mNewborns, followers); msg += "D"; SpeedTrap.Sleep(0u); List <Sim> list2 = new List <Sim>(); list2.Add(Actor); if (followers != null) { foreach (Sim sim in followers) { if (sim.SimDescription.TeenOrAbove && sim.GetObjectInRightHand() == null) { list2.Add(sim); } } } msg += "E"; if (mNewborns.Count <= list2.Count) { for (int i = 0; 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, 0, Vector3.UnitZ) as BabyBasket; basket.AddBabiesToBasket(mNewborns); CarrySystem.EnterWhileHolding(Actor, basket); CarrySystem.VerifyAnimationParent(basket, Actor); } msg += "F"; if (Actor.IsSelectable) { OccultImaginaryFriend.DeliverDollToHousehold(mNewborns); } result = true; } } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, msg, e); result = false; } Common.DebugNotify(msg); return(result); }
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); } }