using Content.Server.Hands.Systems; using Content.Shared.Wieldable; using Content.Shared.Wieldable.Components; namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat; /// /// Operator that wields or unwields a weapon. /// public sealed partial class WieldOperator : HTNOperator { [Dependency] private IEntityManager _entManager = default!; /// /// If true, tries to wield the item. If false, tries to unwield it. /// [DataField] public bool Wield = true; public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) { var owner = blackboard.GetValue(NPCBlackboard.Owner); if (!blackboard.TryGetValue(NPCBlackboard.ActiveHand, out var activeHand, _entManager)) return HTNOperatorStatus.Failed; var handsSystem = _entManager.System(); if (!handsSystem.TryGetHeldItem(owner, activeHand, out var weaponUid)) return HTNOperatorStatus.Failed; if (!_entManager.TryGetComponent(weaponUid, out var wieldable)) return HTNOperatorStatus.Failed; var wieldableSystem = _entManager.System(); if (Wield) { if (wieldable.Wielded) return HTNOperatorStatus.Failed; return wieldableSystem.TryWield((weaponUid.Value, wieldable), owner) ? HTNOperatorStatus.Finished : HTNOperatorStatus.Failed; } if (!wieldable.Wielded) return HTNOperatorStatus.Failed; return wieldableSystem.TryUnwield((weaponUid.Value, wieldable), owner) ? HTNOperatorStatus.Finished : HTNOperatorStatus.Failed; } }