using Content.Server.Hands.Components; using Content.Server.Items; using Robust.Shared.GameObjects; using Robust.Shared.IoC; namespace Content.Server.AI.Operators.Inventory { /// /// Will find the item in storage, put it in an active hand, then use it /// public class UseItemInInventoryOperator : AiOperator { private readonly IEntity _owner; private readonly IEntity _target; public UseItemInInventoryOperator(IEntity owner, IEntity target) { _owner = owner; _target = target; } public override Outcome Execute(float frameTime) { // TODO: Also have this check storage a la backpack etc. if (!IoCManager.Resolve().TryGetComponent(_owner, out HandsComponent? handsComponent)) { return Outcome.Failed; } if (!IoCManager.Resolve().TryGetComponent(_target, out ItemComponent? itemComponent)) { return Outcome.Failed; } foreach (var slot in handsComponent.ActivePriorityEnumerable()) { if (handsComponent.GetItem(slot) != itemComponent) continue; handsComponent.ActiveHand = slot; handsComponent.ActivateItem(); return Outcome.Success; } return Outcome.Failed; } } }