Files
tbd-station-14/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs
slarticodefast 1469b9484d Add virtual chat API methods in Shared (#40895)
* move chat stuff to shared

* refactor: using cleanup +whitespaces + xml-doc

* review

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-10-19 19:08:27 +00:00

51 lines
1.6 KiB
C#

using Content.Server.Chat.Systems;
using Content.Shared.Advertise.Components;
using Content.Shared.Advertise.Systems;
using Content.Shared.Chat;
using Content.Shared.UserInterface;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Server.Advertise.EntitySystems;
public sealed partial class SpeakOnUIClosedSystem : SharedSpeakOnUIClosedSystem
{
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly ChatSystem _chat = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SpeakOnUIClosedComponent, BoundUIClosedEvent>(OnBoundUIClosed);
}
private void OnBoundUIClosed(Entity<SpeakOnUIClosedComponent> entity, ref BoundUIClosedEvent args)
{
if (!TryComp(entity, out ActivatableUIComponent? activatable) || !args.UiKey.Equals(activatable.Key))
return;
if (entity.Comp.RequireFlag && !entity.Comp.Flag)
return;
TrySpeak((entity, entity.Comp));
}
public bool TrySpeak(Entity<SpeakOnUIClosedComponent?> entity)
{
if (!Resolve(entity, ref entity.Comp))
return false;
if (!entity.Comp.Enabled)
return false;
if (!_prototypeManager.Resolve(entity.Comp.Pack, out var messagePack))
return false;
var message = Loc.GetString(_random.Pick(messagePack.Values), ("name", Name(entity)));
_chat.TrySendInGameICMessage(entity, message, InGameICChatType.Speak, true);
entity.Comp.Flag = false;
return true;
}
}