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