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); } 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(EntityUid uid, BarkAccentComponent component, AccentGetEvent args) { args.Message = Accentuate(args.Message); } } }