using Content.Server.Disposal.Unit; using Content.Shared.Disposal.Components; namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Specific; public sealed partial class DisposalInsertOperator : HTNOperator { [Dependency] private IEntityManager _entManager = default!; private DisposalUnitSystem _disposalSystem = default!; /// /// Target entity to flush /// [DataField(required: true)] public string TargetKey = string.Empty; /// /// Target disposal bin entity /// [DataField(required: true)] public string DisposalTargetKey = string.Empty; public override void Initialize(IEntitySystemManager sysManager) { base.Initialize(sysManager); _disposalSystem = sysManager.GetEntitySystem(); } public override void TaskShutdown(NPCBlackboard blackboard, HTNOperatorStatus status) { base.TaskShutdown(blackboard, status); blackboard.Remove(TargetKey); blackboard.Remove(DisposalTargetKey); } public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) { var owner = blackboard.GetValue(NPCBlackboard.Owner); if (!blackboard.TryGetValue(TargetKey, out var target, _entManager) || _entManager.Deleted(target)) return HTNOperatorStatus.Failed; if (!blackboard.TryGetValue(DisposalTargetKey, out var disposalUnitTarget, _entManager) || _entManager.Deleted(target)) return HTNOperatorStatus.Failed; if (!_entManager.TryGetComponent(disposalUnitTarget, out var disposalComp)) return HTNOperatorStatus.Failed; if (!_disposalSystem.TryInsert((disposalUnitTarget, disposalComp), target, owner)) return HTNOperatorStatus.Failed; return HTNOperatorStatus.Finished; } }