public bool ___ReturnBonehildaToCoffin(BonehildaCoffin target) { if (target == null || target.mBonehildaSim == null) // custom { return(false); } InteractionQueue tInteractionQueue = target.mBonehildaSim.InteractionQueue; if (tInteractionQueue != null && !tInteractionQueue.HasInteractionOfType(BonehildaCoffin.BonehildaReturnToCoffin.Singleton)) { Sim targetsim = target.mBonehildaSim; try { tInteractionQueue.CancelAllInteractions(); } catch (Exception) { NFinalizeDeath.ForceCancelAllInteractionsWithoutCleanup(targetsim); NFinalizeDeath.ForceDestroyObject(targetsim); target.mBonehildaSim = null; return(true); } targetsim = target.mBonehildaSim; if (targetsim == null || targetsim.SimDescription == null || targetsim.HasBeenDestroyed) { target.mBonehildaSim = null; return(true); } var entry = BonehildaCoffin.BonehildaReturnToCoffin .Singleton.CreateInstance(target, targetsim, new InteractionPriority(InteractionPriorityLevel.RequiredNPCBehavior), isAutonomous: false, cancellableByPlayer: true) as BonehildaCoffin.BonehildaReturnToCoffin; tInteractionQueue.AddNext(entry); } if (tInteractionQueue == null) { target.mBonehildaSim = null; } return(true); }
public override bool Run() { try { if (!TimePortal.sTimeTravelerHasBeenSummoned && Actor.CreateRoute().PlanToSlot(Target, Slot.RoutingSlot_0).Succeeded()) { if (!TimeTravelerSituation.Create(Actor.LotHome, Actor.ObjectId, Target.ObjectId)) { return(false); } CauseEffectService.OpportunityPortal = Target; mTimeTravlerArrivalHandled = false; } if ((Target.InUse && !Target.IsActorUsingMe(Actor)) || !Actor.RouteToSlot(Target, Slot.RoutingSlot_0, false)) { return(false); } if (Actor.HasExitReason(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached))) { return(false); } Definition interactionDefinition = InteractionDefinition as Definition; if (Target.Active) { interactionDefinition.curState = TimePortal.PortalState.Active; } else { interactionDefinition.curState = TimePortal.PortalState.Inactive; } Actor.SkillManager.AddElement(SkillNames.Future); StandardEntry(!Target.IsActorUsingMe(Actor)); BeginCommodityUpdates(); Target.mTimeToStepBack = false; EnterStateMachine("timeportal", "Enter", "x"); SetActor("portal", Target); mCurrentStateMachine.AddOneShotScriptEventHandler(0x65, SwitchActiveState); mCurrentStateMachine.AddOneShotScriptEventHandler(0x66, PositionTimeTraveler); AnimateSim("Mess With"); if (!TimePortal.sTimeTravelerHasBeenSummoned) { Common.DebugNotify("A"); mCurrentStateMachine.RequestState(false, "x", "FirstTimeReact"); emergencyStopWatch = StopWatch.Create(StopWatch.TickStyles.Seconds); int num = 0x2d; mTimeTraveler = CauseEffectService.GetInstance().GetTimeTraveler(); while ((mTimeTraveler == null) && (emergencyStopWatch.GetElapsedTime() < num)) { SpeedTrap.Sleep(0x1); // Custom SimDescription simDesc = SimDescription.Find(CauseEffectService.sPersistableData.TimeTravelerSimID); if (simDesc == null) { CauseEffectService.sPersistableData.TimeTravelerSimID = 0; CauseEffectService.GetInstance().RequestTimeTravelerSimDesc(Household.NpcHousehold); } else { mTimeTraveler = Instantiation.PerformOffLot(simDesc, Target.LotCurrent, null); } } Common.DebugNotify("B"); if (mTimeTraveler != null) { InteractionQueue interactionQueue = mTimeTraveler.InteractionQueue; mLinkedInteraction = TimePortal.BeSummoned.Singleton.CreateInstance(Actor, mTimeTraveler, new InteractionPriority(InteractionPriorityLevel.CriticalNPCBehavior), false, false) as TimePortal.BeSummoned; mLinkedInteraction.SyncTarget = Actor; interactionQueue.AddNext(mLinkedInteraction); Actor.SynchronizationRole = Sim.SyncRole.Initiator; Actor.SynchronizationTarget = mTimeTraveler; Actor.SynchronizationLevel = Sim.SyncLevel.Routed; if (Actor.WaitForSynchronizationLevelWithSim(mTimeTraveler, Sim.SyncLevel.Started, 40f)) { Common.DebugNotify("C"); SetActorAndEnter("y", mTimeTraveler, "TTEnter"); AnimateJoinSims("TimeTravelerExit"); Actor.SynchronizationLevel = Sim.SyncLevel.Completed; TimeTravelerSituation situation = ServiceSituation.FindServiceSituationInvolving(mTimeTraveler) as TimeTravelerSituation; if (situation != null) { situation.OnAppearComplete(mTimeTraveler, 0f); while (!Actor.HasExitReason(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached))) { Actor.LoopIdle(); SpeedTrap.Sleep(0xa); } } else { Target.ActorsUsingMe.Clear(); TimePortal.sTimeTravelerHasBeenSummoned = true; } } else { AnimateSim("Exit"); } Common.DebugNotify("D"); mTimeTravlerArrivalHandled = true; } else { AnimateSim("Exit"); } } else { if (!GameUtils.IsFutureWorld()) { MiniSimDescription simDesc = MiniSimDescription.Find(CauseEffectService.sPersistableData.TimeTravelerSimID); if (simDesc == null) { CauseEffectService.sPersistableData.TimeTravelerSimID = 0; CauseEffectService.GetInstance().RequestTimeTravelerSimDesc(Household.NpcHousehold); } } AnimateSim("Exit"); Vector3 v = Target.Position + ((Vector3)(2f * Target.ForwardVector)); Actor.RouteToPoint(v); Actor.RouteTurnToFace(Target.Position); } EndCommodityUpdates(true); StandardExit(); if (Target.Active) { EventTracker.SendEvent(EventTypeId.kInspectedTimePortal, Actor); } return(true); } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, e); } finally { TravelUtil.PlayerMadeTravelRequest = false; //Sims3.Gameplay.Gameflow.Singleton.EnableSave(this); } return(false); }
public override bool Run() { try { if (!Actor.RouteToSlotAndCheckInUse(Target, BotMakingStation.kOperatorRoutingSlot)) { return(false); } StandardEntry(); BeginCommodityUpdates(); CASAgeGenderFlags adult = CASAgeGenderFlags.Adult; CASAgeGenderFlags gender = CASAgeGenderFlags.None | CASAgeGenderFlags.Male; RobotForms humanoid = RobotForms.Humanoid; SimDescription simDescription = OccultRobot.MakeRobot(adult, gender, humanoid); if (simDescription == null) { StandardExit(); return(false); } FutureSkill.SetupReactToFutureTech(Target); EnterStateMachine("BotMakingStation", "Enter", "x"); SetActor("BotMakingStation", Target); Target.SetGeometryState("on"); Animate("x", "CreateServoBot"); bool flag = false; Household.NpcHousehold.Add(simDescription); try { new Sims.Advanced.EditInCAS(true).Perform(new GameHitParameters <SimDescriptionObject>(Sim.ActiveActor, new SimDescriptionObject(simDescription), GameObjectHit.NoHit)); while (GameStates.NextInWorldStateId != InWorldState.SubState.LiveMode) { SpeedTrap.Sleep(); } flag |= CASChangeReporter.Instance.CasCancelled; Household.NpcHousehold.Remove(simDescription); Target.LotCurrent.SetDisplayLevel(LotManager.GetBestLevelToDisplayForSim(Actor, Target.LotCurrent)); Household household = Actor.Household; /* Overstuffed * if (!household.CanAddSimDescriptionToHousehold(simDescription)) * { * flag = true; * } */ if (flag) { AnimateSim("CancelCreateServoBot"); simDescription.Dispose(); AnimateSim("Exit"); } else { CASRobotData supernaturalData = simDescription.SupernaturalData as CASRobotData; supernaturalData.CreatorSim = Actor.SimDescription.SimDescriptionId; supernaturalData.BotQualityLevel = Target.GetCreationLevel(Actor); household.Add(simDescription); Sim sim = null; Slot[] containmentSlots = Target.GetContainmentSlots(); if ((containmentSlots != null) && (containmentSlots.Length > 0x0)) { Vector3 slotPosition = Target.GetSlotPosition(containmentSlots[0x0]); Vector3 forwardOfSlot = Target.GetForwardOfSlot(containmentSlots[0x0]); sim = Genetics.InstantiateRobotAndGrantPhone(simDescription, slotPosition); sim.SetPosition(slotPosition); sim.SetForward(forwardOfSlot); } else { Vector3 position = Actor.Position; Vector3 forwardVector = Actor.ForwardVector; sim = simDescription.Instantiate(position); GlobalFunctions.FindGoodLocationNearby(sim, ref position, ref forwardVector); sim.SetPosition(position); sim.SetForward(forwardVector); } Actor.Genealogy.AddChild(sim.Genealogy); InteractionQueue interactionQueue = sim.InteractionQueue; mLinkedInteraction = BotMakingStation.BeCreated.Singleton.CreateInstance(Target, sim, new InteractionPriority(InteractionPriorityLevel.CriticalNPCBehavior), false, false) as BotMakingStation.BeCreated; mLinkedInteraction.SyncTarget = Actor; interactionQueue.AddNext(mLinkedInteraction); Actor.SynchronizationRole = Sim.SyncRole.Initiator; Actor.SynchronizationTarget = sim; Actor.SynchronizationLevel = Sim.SyncLevel.Routed; if (!Actor.WaitForSynchronizationLevelWithSim(sim, Sim.SyncLevel.Started, 40f)) { Actor.ClearSynchronizationData(); AnimateJoinSims("CompleteCreateServoBot"); AnimateSim("ExitWithBot"); Target.SetGeometryState("off"); EndCommodityUpdates(false); StandardExit(); return(false); } SetActorAndEnter("y", sim, "BotEnter"); CASRobotData data2 = simDescription.SupernaturalData as CASRobotData; if (data2 != null) { SetParameter("IsHoverBot", data2.Form == RobotForms.Hovering); } else { SetParameter("IsHoverBot", false); } Actor.ModifyFunds(-BotMakingStation.kCostToBuildServoBot); AnimateJoinSims("CompleteCreateServoBot"); AnimateSim("ExitWithBot"); BotBuildingSkill element = Actor.SkillManager.GetElement(SkillNames.BotBuilding) as BotBuildingSkill; sim.SimDescription.TraitChipManager.UpgradeNumTraitChips(element.GetSimMaxAllowedUpgradeSlots()); EventTracker.SendEvent(EventTypeId.kCreatedBot, Actor, sim); element.OnBotCreated(); } } catch { simDescription.Dispose(); } Target.SetGeometryState("off"); EndCommodityUpdates(!flag); StandardExit(); return(true); } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, e); } return(false); }