SayKeyOperator.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Content.Server.Chat.Systems;
  2. namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators;
  3. public sealed partial class SayKeyOperator : HTNOperator
  4. {
  5. [Dependency] private readonly IEntityManager _entManager = default!;
  6. private ChatSystem _chat = default!;
  7. [DataField(required: true)]
  8. public string Key = string.Empty;
  9. /// <summary>
  10. /// Whether to hide message from chat window and logs.
  11. /// </summary>
  12. [DataField]
  13. public bool Hidden;
  14. public override void Initialize(IEntitySystemManager sysManager)
  15. {
  16. base.Initialize(sysManager);
  17. _chat = sysManager.GetEntitySystem<ChatSystem>();
  18. }
  19. public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
  20. {
  21. if (!blackboard.TryGetValue<object>(Key, out var value, _entManager))
  22. return HTNOperatorStatus.Failed;
  23. var @string = value.ToString();
  24. if (@string is not { })
  25. return HTNOperatorStatus.Failed;
  26. var speaker = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner);
  27. _chat.TrySendInGameICMessage(speaker, @string, InGameICChatType.Speak, hideChat: Hidden, hideLog: Hidden);
  28. return base.Update(blackboard, frameTime);
  29. }
  30. }