コード例 #1
0
ファイル: Class1.cs プロジェクト: niec-and-linc/OpenDGS
            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);
                }
            }
コード例 #2
0
ファイル: Class1.cs プロジェクト: niec-and-linc/OpenDGS
 public override void Cleanup()
 {
     if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor))
     {
         return;
     }
     if (this.Actor.IsNPC && this.Actor.CurrentOutfitCategory == OutfitCategories.SkinnyDippingTowel)
     {
         this.Actor.SwitchToPreviousOutfitWithoutSpin();
     }
     base.Cleanup();
 }
コード例 #3
0
ファイル: Class1.cs プロジェクト: niec-and-linc/OpenDGS
        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);
        }
コード例 #4
0
ファイル: Class1.cs プロジェクト: niec-and-linc/OpenDGS
            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);
            }