ContainerOperator.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Robust.Server.Containers;
  2. namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat;
  3. public sealed partial class ContainerOperator : HTNOperator
  4. {
  5. [Dependency] private readonly IEntityManager _entManager = default!;
  6. private ContainerSystem _container = default!;
  7. private EntityQuery<TransformComponent> _transformQuery;
  8. [DataField("shutdownState")]
  9. public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished;
  10. [DataField("targetKey", required: true)]
  11. public string TargetKey = default!;
  12. public override void Initialize(IEntitySystemManager sysManager)
  13. {
  14. base.Initialize(sysManager);
  15. _container = sysManager.GetEntitySystem<ContainerSystem>();
  16. _transformQuery = _entManager.GetEntityQuery<TransformComponent>();
  17. }
  18. public override void Startup(NPCBlackboard blackboard)
  19. {
  20. base.Startup(blackboard);
  21. var owner = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner);
  22. if (!_container.TryGetOuterContainer(owner, _transformQuery.GetComponent(owner), out var outerContainer) && outerContainer == null)
  23. return;
  24. var target = outerContainer.Owner;
  25. blackboard.SetValue(TargetKey, target);
  26. }
  27. public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
  28. {
  29. return HTNOperatorStatus.Finished;
  30. }
  31. }