コード例 #1
0
ファイル: Javpan.cs プロジェクト: niec-and-linc/OpenDGS
        internal static JapLowDinnerTable FindClosestFreeJPNTable(Sim actor)
        {
            List <JapLowDinnerTable> list  = new List <JapLowDinnerTable>(Queries.GetObjects <JapLowDinnerTable>(actor.LotCurrent, actor.RoomId));
            List <JapLowDinnerTable> list2 = new List <JapLowDinnerTable>();

            foreach (JapLowDinnerTable japLowDinnerTable in list)
            {
                ObjectGuid containedObject = Slots.GetContainedObject(japLowDinnerTable.ObjectId, 2820733094u);
                if (containedObject == ObjectGuid.InvalidObjectGuid)
                {
                    list2.Add(japLowDinnerTable);
                }
            }
            list.Clear();
            if (list2.Count == 0)
            {
                list.AddRange(Queries.GetObjects <JapLowDinnerTable>(actor.LotCurrent));
            }
            foreach (JapLowDinnerTable japLowDinnerTable2 in list)
            {
                ObjectGuid containedObject = Slots.GetContainedObject(japLowDinnerTable2.ObjectId, 2820733094u);
                if (containedObject == ObjectGuid.InvalidObjectGuid)
                {
                    list2.Add(japLowDinnerTable2);
                }
            }
            if (list2.Count > 0)
            {
                return(GlobalFunctions.GetClosestObject <JapLowDinnerTable>(list2, actor));
            }
            return(null);
        }
コード例 #2
0
ファイル: Javpan.cs プロジェクト: niec-and-linc/OpenDGS
            public override bool Run()
            {
                if (this.Target.Parent != this.Actor && !CarrySystem.PickUp(this.Actor, this.Target))
                {
                    return(false);
                }
                if (this.Actor.GetObjectInRightHand() == null)
                {
                    return(false);
                }
                if (this.mJT == null)
                {
                    Food.PutHeldObjectDownOnCounterTableOrFloor(this.Actor, SurfaceType.Normal);
                    return(false);
                }
                if (!this.Actor.RouteToObjectRadialRange(this.mJT, 0.5f, 1.5f))
                {
                    Food.PutHeldObjectDownOnCounterTableOrFloor(this.Actor, SurfaceType.Normal);
                    return(false);
                }
                ObjectGuid containedObject = Slots.GetContainedObject(this.mJT.ObjectId, 2820733094u);

                if (containedObject != ObjectGuid.InvalidObjectGuid)
                {
                    Food.PutHeldObjectDownOnCounterTableOrFloor(this.Actor, SurfaceType.Normal);
                    return(false);
                }
                if (this.Target.ParentToSlot(this.mJT, 2820733094u))
                {
                    CarrySystem.ExitCarry(this.Actor);
                    return(true);
                }
                Food.PutHeldObjectDownOnCounterTableOrFloor(this.Actor, SurfaceType.Normal);
                return(false);
            }
コード例 #3
0
ファイル: Javpan.cs プロジェクト: niec-and-linc/OpenDGS
                public override bool Test(Sim a, JapLowDinnerTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
                {
                    ObjectGuid containedObject = Slots.GetContainedObject(target.ObjectId, 2820733094u);

                    if (containedObject == ObjectGuid.InvalidObjectGuid)
                    {
                        return(false);
                    }
                    PreparedFood preparedFood = containedObject.ObjectFromId <PreparedFood>();

                    if (!JapLowDinnerTable.CheckIfHasFood(preparedFood))
                    {
                        return(false);
                    }
                    if (!JapLowDinnerTable.kServeOrEatSpoiledFood && preparedFood.IsSpoiled)
                    {
                        return(false);
                    }
                    if (JapLowDinnerTable.kOnlyRecipesThatUseFork && (preparedFood.CookingProcess == null || preparedFood.CookingProcess.Recipe == null || preparedFood.CookingProcess.Recipe.Utensil != "fork"))
                    {
                        return(false);
                    }
                    if (!JapLowDinnerTable.kServeOrEatBurntFood && preparedFood.CookingProcess != null && preparedFood.CookingProcess.FoodState == FoodCookState.Burnt)
                    {
                        return(false);
                    }
                    if (target.ActorsUsingMe.Contains(a))
                    {
                        return(false);
                    }
                    if (target.InUse && target.ActorsUsingMe.Count >= 4)
                    {
                        greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback("No Free Spots");
                        return(false);
                    }
                    if (isAutonomous)
                    {
                        if (a.SimDescription.IsRobot)
                        {
                            return(false);
                        }
                        if (a.BuffManager.HasElement(BuffNames.Stuffed))
                        {
                            return(false);
                        }
                    }
                    return(true);
                }
コード例 #4
0
ファイル: Javpan.cs プロジェクト: niec-and-linc/OpenDGS
            public override bool Run()
            {
                int num = -1;

                if (!JapLowDinnerTable.FindClosestFreeSlot(this.Actor, this.Target, out num))
                {
                    return(false);
                }
                ObjectGuid containedObject = Slots.GetContainedObject(this.Target.ObjectId, 2820733094u);

                if (containedObject == ObjectGuid.InvalidObjectGuid)
                {
                    return(false);
                }
                this.mServingContainer = containedObject.ObjectFromId <PreparedFood>();
                if (this.mServingContainer == null || !JapLowDinnerTable.CheckIfHasFood(this.mServingContainer))
                {
                    return(false);
                }
                this.mServingContainer.AddToUseList(this.Actor);
                if (this.Actor.HasTrait(TraitNames.Slob))
                {
                    this.mEatingDuration = JapLowDinnerTable.kMealDurationSlobTrait;
                }
                else
                {
                    this.mEatingDuration = JapLowDinnerTable.kMealDuration;
                }
                if (JapLowDinnerTable.kEnableGroupTalkWhileEating)
                {
                    this.mEatingDuration += JapLowDinnerTable.kGroupTalkMealDurationExtra;
                }
                this.mLastReactionTime = SimClock.ElapsedTime(TimeUnit.Minutes);
                base.StandardEntry();
                base.BeginCommodityUpdates();
                base.AcquireStateMachine("ArsilSeiza");
                base.SetActor("x", this.Actor);
                base.EnterState("x", "Enter");
                base.AnimateSim("Idle");
                if (!this.Target.ChangeIntoOutfit(this.Actor))
                {
                    base.AnimateSim("Exit");
                    this.Actor.PlayReaction(ReactionTypes.Shrug, ReactionSpeed.Immediate);
                    base.StandardExit();
                    return(false);
                }
                Simulator.Sleep(1u);
                bool isSufficientlyFullForStuffed = false;
                bool hasFatDelta = false;

                Food.PreEat(this.Actor, this.mServingContainer, ref isSufficientlyFullForStuffed, ref hasFatDelta);
                base.AnimateSim("PreEat");
                base.AnimateSim("Eat");
                bool result = this.DoLoop(ExitReason.Default, new InteractionInstance.InsideLoopFunction(this.LoopCallback), this.mCurrentStateMachine);

                base.AnimateSim("PostEat");
                if (this.mServingContainer != null && this.mServingContainer.ActorsUsingMe.Contains(this.Actor))
                {
                    this.mServingContainer.ActorsUsingMe.Remove(this.Actor);
                }
                this.Actor.SwitchToPreviousOutfitWithoutSpin();
                base.AnimateSim("Idle");
                base.AnimateSim("Exit");
                Food.PostEat(this.Actor, this.mServingContainer, isSufficientlyFullForStuffed, true, hasFatDelta);
                base.StandardExit();
                return(result);
            }