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); }
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); }
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); }
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); }