using Content.Server.Interaction; using Content.Shared.Timing; namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators; public sealed class InteractWithOperator : HTNOperator { [Dependency] private readonly IEntityManager _entManager = default!; /// /// Key that contains the target entity. /// [DataField("targetKey", required: true)] public string TargetKey = default!; public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) { var owner = blackboard.GetValue(NPCBlackboard.Owner); if (_entManager.System().ActiveDelay(owner) || !blackboard.TryGetValue(TargetKey, out var moveTarget, _entManager) || !_entManager.TryGetComponent(moveTarget, out var targetXform)) { return HTNOperatorStatus.Continuing; } _entManager.System().UserInteraction(owner, targetXform.Coordinates, moveTarget); return HTNOperatorStatus.Finished; } }