using Content.Shared.StatusEffectNew; using Content.Server.Speech.Components; using Content.Shared.Speech; using Robust.Shared.Random; namespace Content.Server.Speech.EntitySystems { public sealed class BarkAccentSystem : EntitySystem { [Dependency] private readonly IRobustRandom _random = default!; private static readonly IReadOnlyList Barks = new List{ " Гав!", " ГАВ", " вуф-вуф" // Russian-Localization }.AsReadOnly(); private static readonly IReadOnlyDictionary SpecialWords = new Dictionary() { { "ah", "arf" }, { "Ah", "Arf" }, { "oh", "oof" }, { "Oh", "Oof" }, // Russian-Localization-Start { "га", "гаф" }, { "Га", "Гаф" }, { "угу", "вуф" }, { "Угу", "Вуф" }, // Russian-Localization-End }; public override void Initialize() { SubscribeLocalEvent(OnAccent); SubscribeLocalEvent>(OnAccentRelayed); } public string Accentuate(string message) { foreach (var (word, repl) in SpecialWords) { message = message.Replace(word, repl); } return message.Replace("!", _random.Pick(Barks)) // Russian-Localization-Start .Replace("l", "r").Replace("L", "R") .Replace("л", "р").Replace("Л", "Р"); // Russian-Localization-End } private void OnAccent(Entity entity, ref AccentGetEvent args) { args.Message = Accentuate(args.Message); } private void OnAccentRelayed(Entity entity, ref StatusEffectRelayedEvent args) { args.Args.Message = Accentuate(args.Args.Message); } } }