using Content.Server.Abilities.Mime; using Content.Server.Chat.Systems; using Content.Server.Speech.Components; using Content.Shared.Chat; using Content.Shared.DeltaV.AACTablet; using Content.Shared.IdentityManagement; using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Server.DeltaV.AACTablet; public sealed class AACTabletSystem : EntitySystem { [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly MimePowersSystem _mimePowers = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnSendPhrase); } private void OnSendPhrase(Entity ent, ref AACTabletSendPhraseMessage message) { if (ent.Comp.NextPhrase > _timing.CurTime) return; var senderName = Identity.Entity(message.Actor, EntityManager); var speakerName = Loc.GetString("speech-name-relay", ("speaker", Name(ent)), ("originalName", senderName)); if (!_prototype.TryIndex(message.PhraseId, out var phrase)) return; if (HasComp(message.Actor)) _mimePowers.BreakVow(message.Actor); EnsureComp(ent).NameOverride = speakerName; _chat.TrySendInGameICMessage(ent, Loc.GetString(phrase.Text), InGameICChatType.Speak, hideChat: false, nameOverride: speakerName); var curTime = _timing.CurTime; ent.Comp.NextPhrase = curTime + ent.Comp.Cooldown; } }