public static bool PreRouteNearEntranceAndIntoBuilding(GoToSchoolInRabbitHole ths, bool canUseCar, Route.RouteMetaType routeMetaType, OnChangeOutfit changedOutfitFunc) { try { // From GoToSchoolInRabbitHole GoToSchoolInRabbitHole.Definition interactionDefinition = ths.InteractionDefinition as GoToSchoolInRabbitHole.Definition; if ((interactionDefinition != null) && (interactionDefinition.PlayerChosenVehicle != null)) { ths.Actor.SetReservedVehicle(interactionDefinition.PlayerChosenVehicle); } bool success = false; School school = ths.Actor.School; if (school != null) { SimOutfit outfit; if (school.TryGetUniformForCurrentLevel(out outfit)) { if (ApplyOccupationUniform(ths.Actor.SimDescription, outfit)) { success = true; } } } if ((!success) && (changedOutfitFunc != null)) { changedOutfitFunc(); } VisitSituation.OnSimLeavingLot(ths.Actor); // From RabbitHoleInteraction<TActor, TRabbitHole> return(true); } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(ths.Actor, ths.Target, e); return(false); } }
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); }