private static void OnAutonomousDone(Sim sim, float f) { if (DGSCommon.IsExtKillSimNiecAndYLevel(sim)) { return; } if (sim.SimDescription.CreatedSim == null) { return; } InteractionInstance headInteraction = sim.InteractionQueue.GetHeadInteraction(); if (headInteraction == null) { Sim.MakeSimGoHome(sim, false); return; } if (!(headInteraction is DGSGoToVirtualHome)) { InteractionInstance interactionInstance = headInteraction.InteractionDefinition.CreateInstanceWithCallbacks(headInteraction.Target, sim, headInteraction.GetPriority(), headInteraction.Autonomous, headInteraction.CancellableByPlayer, null, new Callback(DGSGoToVirtualHome.DGSGoToVirtualHomeInternal.OnAutonomousDone), new Callback(DGSGoToVirtualHome.DGSGoToVirtualHomeInternal.OnAutonomousDone)); InteractionInstance linkedInteractionInstance = headInteraction.LinkedInteractionInstance; if (linkedInteractionInstance != null) { headInteraction.LinkedInteractionInstance = null; interactionInstance.LinkedInteractionInstance = linkedInteractionInstance; } sim.InteractionQueue.CancelAllInteractions(); sim.InteractionQueue.AddNext(interactionInstance); } }
public override void Cleanup() { if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor)) { return; } if (this.Actor.IsNPC && this.Actor.CurrentOutfitCategory == OutfitCategories.SkinnyDippingTowel) { this.Actor.SwitchToPreviousOutfitWithoutSpin(); } base.Cleanup(); }
public override bool Run() { VisitSituation.OnSimLeavingLot(this.Actor); Lot lot = this.Actor.SimDescription.VirtualLotHome; if (lot == null) { List <Lot> list = new List <Lot>(); foreach (object obj in LotManager.AllLotsWithoutCommonExceptions) { Lot lot2 = (Lot)obj; if (lot2 != this.Actor.LotCurrent && lot2.LotId != 18446744073709551615UL) { list.Add(lot2); } } if (list.Count > 0) { lot = RandomUtil.GetRandomObjectFromList <Lot>(list); } } GroupingSituation.RemoveSimFromGroupSituation(this.Actor); if (this.Actor.LotCurrent.CommercialLotSubType == CommercialLotSubType.kEP10_Resort && this.Actor.IsHuman && this.Actor.SimDescription.ChildOrAbove && (this.Actor.SimDescription.AssignedRole == null || this.Actor.SimDescription.AssignedRole.Type != Role.RoleType.Paparazzi)) { IResortTower[] objects = this.Actor.LotCurrent.GetObjects <IResortTower>(); if (objects.Length > 0) { IResortTower randomObjectFromList = RandomUtil.GetRandomObjectFromList <IResortTower>(objects); InteractionInstance instance = randomObjectFromList.GetEnterTowerDefinition().CreateInstance(randomObjectFromList, this.Actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), base.Autonomous, false); if (this.Actor.InteractionQueue.PushAsContinuation(instance, false)) { return(true); } } } InteractionInstance interactionInstance = null; if (lot != null) { DGSGoToVirtualHomeInternal goToVirtualHomeInternal; if (this.SuccessCallbackForSequence != null || this.FailureCallbackForSequence != null) { goToVirtualHomeInternal = (DGSGoToVirtualHomeInternal.Singleton.CreateInstanceWithCallbacks(lot, this.Actor, this.Actor.InheritedPriority(), base.Autonomous, base.CancellableByPlayer, null, this.SuccessCallbackForSequence, this.FailureCallbackForSequence) as DGSGoToVirtualHomeInternal); } else { goToVirtualHomeInternal = (DGSGoToVirtualHomeInternal.Singleton.CreateInstance(lot, this.Actor, this.Actor.InheritedPriority(), base.Autonomous, base.CancellableByPlayer) as DGSGoToVirtualHomeInternal); } goToVirtualHomeInternal.SimWalkStyle = this.SimWalkStyle; if (base.TryPushAsContinuation(goToVirtualHomeInternal)) { interactionInstance = goToVirtualHomeInternal; } } if (lot == null || interactionInstance == null || !this.Actor.InteractionQueue.HasInteraction(interactionInstance)) { SimDescription simDescription = this.Actor.SimDescription; if (simDescription.Household != null && simDescription.Household.IsTouristHousehold) { Sim.GoToVirtualHome.SendTouristHome(simDescription); } else { if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor)) { return(true); } this.Actor.FadeOut(true, true); } Simulator.Sleep(uint.MaxValue); } return(true); }
public override bool Run() { bool flag = this.Actor.LotCurrent == this.Target; SimDescription simDescription = this.Actor.SimDescription; Lot virtualLotHome = simDescription.VirtualLotHome; if (this.SimWalkStyle != Sim.WalkStyle.AutoSelect) { this.Actor.RequestWalkStyle(this.SimWalkStyle); } if (!flag) { if (virtualLotHome != null) { BuildableShell[] buildableShells = this.Target.BuildableShells; if (buildableShells.Length > 0) { if (!buildableShells[0].RouteInsideShell(this.Actor)) { if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor)) { return(true); } this.Actor.FadeOut(true, true); Simulator.Sleep(uint.MaxValue); return(true); } } else if (!this.Actor.RouteToLot(virtualLotHome.LotId)) { if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor)) { return(true); } this.Actor.FadeOut(true, true); Simulator.Sleep(uint.MaxValue); return(true); } } else { Route route = this.Actor.CreateRoute(); this.Target.PlanToLotEx(route); if (route.PlanResult.Succeeded()) { this.Actor.DoRoute(route); } } } if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor)) { return(true); } if (simDescription.Household != null && simDescription.Household.IsTouristHousehold) { Sim.GoToVirtualHome.SendTouristHome(simDescription); } else if (simDescription.Household != null && simDescription.Household.IsAlienHousehold) { (Sims3.UI.Responder.Instance.HudModel as HudModel).OnSimCurrentWorldChanged(false, simDescription); if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor)) { return(true); } this.Actor.FadeOut(true, true); } else if (virtualLotHome != null) { if (!flag && RandomUtil.RandomChance01(this.kAutonomuousReactionChanceOnGoingToVirtualHome)) { simDescription.ShowSocialsOnSim = true; simDescription.MotivesDontDecay = false; InteractionInstance interactionInstance = this.Actor.Autonomy.FindBestActionForCommodityOnLot(CommodityKind.None, virtualLotHome, AutonomySearchType.Generic); if (interactionInstance == null) { this.Actor.Motives.SetMotivesToTimedDefaultsAndRemoveBuffs(false); interactionInstance = this.Actor.Autonomy.FindBestActionForCommodityOnLot(CommodityKind.None, virtualLotHome, AutonomySearchType.Generic); } if (interactionInstance != null) { interactionInstance = interactionInstance.InteractionDefinition.CreateInstanceWithCallbacks(interactionInstance.Target, this.Actor, interactionInstance.GetPriority(), interactionInstance.Autonomous, interactionInstance.CancellableByPlayer, null, new Callback(DGSGoToVirtualHome.DGSGoToVirtualHomeInternal.OnAutonomousDone), new Callback(DGSGoToVirtualHome.DGSGoToVirtualHomeInternal.OnAutonomousDone)); this.Actor.InteractionQueue.AddNext(interactionInstance); return(true); } } Door associatedNPCDoor = virtualLotHome.GetAssociatedNPCDoor(this.Actor.SimDescription); Slot slot; if (associatedNPCDoor != null && this.Actor.RouteToSlotListAndCheckInUse(associatedNPCDoor, new Slot[] { Door.RoutingSlots.Upgrade_Front, Door.RoutingSlots.Upgrade_Rear }, out slot)) { Audio.StartObjectSound(associatedNPCDoor.ObjectId, "shell_door_apt_open", false); if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor)) { return(true); } this.Actor.FadeOut(true, true); Simulator.Sleep(uint.MaxValue); return(true); } int num = int.MaxValue; Route route2 = null; foreach (ElevatorDoors elevatorDoors in virtualLotHome.GetObjects <ElevatorDoors>()) { int num2 = Math.Abs(this.Actor.Level - elevatorDoors.Level); if (num2 < num) { Route route3 = this.Actor.CreateRoute(); if (route3.PlanToSlot(elevatorDoors, Slot.RoutingSlot_0).Succeeded()) { route2 = route3; num = num2; } } } if (route2 != null) { route2.DoRouteFail = false; this.Actor.DoRoute(route2); } if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor)) { return(true); } this.Actor.FadeOut(true, true); } else { if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor)) { return(true); } this.Actor.FadeOut(true, true); } Simulator.Sleep(uint.MaxValue); return(true); }