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);
            }
        }
Example #2
0
        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);
        }