using Content.Server.Hands.Components; using Content.Server.Interaction; using Content.Shared.Interaction; using Content.Shared.Interaction.Helpers; using Content.Shared.Item; using Robust.Shared.Containers; using Robust.Shared.GameObjects; using Robust.Shared.IoC; namespace Content.Server.AI.Operators.Inventory { public sealed class PickupEntityOperator : AiOperator { // Input variables private readonly EntityUid _owner; private readonly EntityUid _target; public PickupEntityOperator(EntityUid owner, EntityUid target) { _owner = owner; _target = target; } public override Outcome Execute(float frameTime) { var entMan = IoCManager.Resolve(); if (entMan.Deleted(_target) || !entMan.HasComponent(_target) || _target.IsInContainer() || !EntitySystem.Get().InRangeUnobstructed(_owner, _target, popup: true)) { return Outcome.Failed; } if (!entMan.TryGetComponent(_owner, out HandsComponent? handsComponent)) { return Outcome.Failed; } var emptyHands = false; foreach (var hand in handsComponent.ActivePriorityEnumerable()) { if (handsComponent.GetItem(hand) == null) { if (handsComponent.ActiveHand != hand) { handsComponent.ActiveHand = hand; } emptyHands = true; break; } } if (!emptyHands) { return Outcome.Failed; } var interactionSystem = EntitySystem.Get(); interactionSystem.InteractHand(_owner, _target); return Outcome.Success; } } }