MedibotInjectOperator.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using Content.Server.Chat.Systems;
  2. using Content.Shared.NPC.Components;
  3. using Content.Shared.Chemistry.EntitySystems;
  4. using Content.Shared.Damage;
  5. using Content.Shared.Emag.Components;
  6. using Content.Shared.Interaction;
  7. using Content.Shared.Mobs.Components;
  8. using Content.Shared.Popups;
  9. using Content.Shared.Silicons.Bots;
  10. using Robust.Shared.Audio.Systems;
  11. namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Specific;
  12. public sealed partial class MedibotInjectOperator : HTNOperator
  13. {
  14. [Dependency] private readonly IEntityManager _entMan = default!;
  15. private ChatSystem _chat = default!;
  16. private MedibotSystem _medibot = default!;
  17. private SharedAudioSystem _audio = default!;
  18. private SharedInteractionSystem _interaction = default!;
  19. private SharedPopupSystem _popup = default!;
  20. private SharedSolutionContainerSystem _solutionContainer = default!;
  21. /// <summary>
  22. /// Target entity to inject.
  23. /// </summary>
  24. [DataField("targetKey", required: true)]
  25. public string TargetKey = string.Empty;
  26. public override void Initialize(IEntitySystemManager sysManager)
  27. {
  28. base.Initialize(sysManager);
  29. _chat = sysManager.GetEntitySystem<ChatSystem>();
  30. _medibot = sysManager.GetEntitySystem<MedibotSystem>();
  31. _audio = sysManager.GetEntitySystem<SharedAudioSystem>();
  32. _interaction = sysManager.GetEntitySystem<SharedInteractionSystem>();
  33. _popup = sysManager.GetEntitySystem<SharedPopupSystem>();
  34. _solutionContainer = sysManager.GetEntitySystem<SharedSolutionContainerSystem>();
  35. }
  36. public override void TaskShutdown(NPCBlackboard blackboard, HTNOperatorStatus status)
  37. {
  38. base.TaskShutdown(blackboard, status);
  39. blackboard.Remove<EntityUid>(TargetKey);
  40. }
  41. public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
  42. {
  43. // TODO: Wat
  44. var owner = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner);
  45. if (!blackboard.TryGetValue<EntityUid>(TargetKey, out var target, _entMan) || _entMan.Deleted(target))
  46. return HTNOperatorStatus.Failed;
  47. if (!_entMan.TryGetComponent<MedibotComponent>(owner, out var botComp))
  48. return HTNOperatorStatus.Failed;
  49. if (!_medibot.CheckInjectable((owner, botComp), target) || !_medibot.TryInject((owner, botComp), target))
  50. return HTNOperatorStatus.Failed;
  51. _chat.TrySendInGameICMessage(owner, Loc.GetString("medibot-finish-inject"), InGameICChatType.Speak, hideChat: true, hideLog: true);
  52. return HTNOperatorStatus.Finished;
  53. }
  54. }