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{ " Woof!", " WOOF", " wof-wof" }.AsReadOnly(); private static readonly IReadOnlyDictionary SpecialWords = new Dictionary() { { "ah", "arf" }, { "Ah", "Arf" }, { "oh", "oof" }, { "Oh", "Oof" }, }; 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)) .Replace("l", "r").Replace("L", "R"); } 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); } } }