SpeakOnUIClosedSystem.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Content.Server.Chat.Systems;
  2. using Content.Shared.Advertise.Components;
  3. using Content.Shared.Advertise.Systems;
  4. using Content.Shared.UserInterface;
  5. using Robust.Shared.Prototypes;
  6. using Robust.Shared.Random;
  7. namespace Content.Server.Advertise.EntitySystems;
  8. public sealed partial class SpeakOnUIClosedSystem : SharedSpeakOnUIClosedSystem
  9. {
  10. [Dependency] private readonly IRobustRandom _random = default!;
  11. [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
  12. [Dependency] private readonly ChatSystem _chat = default!;
  13. public override void Initialize()
  14. {
  15. base.Initialize();
  16. SubscribeLocalEvent<SpeakOnUIClosedComponent, BoundUIClosedEvent>(OnBoundUIClosed);
  17. }
  18. private void OnBoundUIClosed(Entity<SpeakOnUIClosedComponent> entity, ref BoundUIClosedEvent args)
  19. {
  20. if (!TryComp(entity, out ActivatableUIComponent? activatable) || !args.UiKey.Equals(activatable.Key))
  21. return;
  22. if (entity.Comp.RequireFlag && !entity.Comp.Flag)
  23. return;
  24. TrySpeak((entity, entity.Comp));
  25. }
  26. public bool TrySpeak(Entity<SpeakOnUIClosedComponent?> entity)
  27. {
  28. if (!Resolve(entity, ref entity.Comp))
  29. return false;
  30. if (!entity.Comp.Enabled)
  31. return false;
  32. if (!_prototypeManager.TryIndex(entity.Comp.Pack, out var messagePack))
  33. return false;
  34. var message = Loc.GetString(_random.Pick(messagePack.Values), ("name", Name(entity)));
  35. _chat.TrySendInGameICMessage(entity, message, InGameICChatType.Speak, true);
  36. entity.Comp.Flag = false;
  37. return true;
  38. }
  39. }