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 (_useTarget.Transform.GridID != _owner.Transform.GridID) { return Outcome.Failed; } if (!_owner.InRangeUnobstructed(_useTarget, popup: true)) { return Outcome.Failed; } if (_owner.TryGetComponent(out CombatModeComponent? combatModeComponent)) { combatModeComponent.IsInCombatMode = false; } // Click on da thing var interactionSystem = IoCManager.Resolve().GetEntitySystem(); interactionSystem.AiUseInteraction(_owner, _useTarget.Transform.Coordinates, _useTarget.Uid); return Outcome.Success; } } }