using Content.Server.CombatMode; using Content.Server.Interaction; using Content.Shared.Interaction.Helpers; using Robust.Shared.GameObjects; using Robust.Shared.IoC; namespace Content.Server.AI.Operators.Inventory { /// /// A Generic interacter; if you need to check stuff then make your own /// public class InteractWithEntityOperator : AiOperator { private readonly IEntity _owner; private readonly IEntity _useTarget; public InteractWithEntityOperator(IEntity owner, IEntity useTarget) { _owner = owner; _useTarget = useTarget; } public override Outcome Execute(float frameTime) { if (IoCManager.Resolve().GetComponent(_useTarget.Uid).GridID != IoCManager.Resolve().GetComponent(_owner.Uid).GridID) { return Outcome.Failed; } if (!_owner.InRangeUnobstructed(_useTarget, popup: true)) { return Outcome.Failed; } if (IoCManager.Resolve().TryGetComponent(_owner.Uid, out CombatModeComponent? combatModeComponent)) { combatModeComponent.IsInCombatMode = false; } // Click on da thing var interactionSystem = IoCManager.Resolve().GetEntitySystem(); interactionSystem.AiUseInteraction(_owner, IoCManager.Resolve().GetComponent(_useTarget.Uid).Coordinates, _useTarget.Uid); return Outcome.Success; } } }