MonkeyAccentSystem.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System.Text;
  2. using Content.Server.Speech.Components;
  3. using Robust.Shared.Random;
  4. namespace Content.Server.Speech.EntitySystems;
  5. public sealed class MonkeyAccentSystem : EntitySystem
  6. {
  7. [Dependency] private readonly IRobustRandom _random = default!;
  8. public override void Initialize()
  9. {
  10. SubscribeLocalEvent<MonkeyAccentComponent, AccentGetEvent>(OnAccent);
  11. }
  12. public string Accentuate(string message)
  13. {
  14. var words = message.Split();
  15. var accentedMessage = new StringBuilder(message.Length + 2);
  16. for (var i = 0; i < words.Length; i++)
  17. {
  18. var word = words[i];
  19. if (_random.NextDouble() >= 0.5)
  20. {
  21. if (word.Length > 1)
  22. {
  23. foreach (var _ in word)
  24. {
  25. accentedMessage.Append('O');
  26. }
  27. if (_random.NextDouble() >= 0.3)
  28. accentedMessage.Append('K');
  29. }
  30. else
  31. accentedMessage.Append('O');
  32. }
  33. else
  34. {
  35. foreach (var _ in word)
  36. {
  37. if (_random.NextDouble() >= 0.8)
  38. accentedMessage.Append('H');
  39. else
  40. accentedMessage.Append('A');
  41. }
  42. }
  43. if (i < words.Length - 1)
  44. accentedMessage.Append(' ');
  45. }
  46. accentedMessage.Append('!');
  47. return accentedMessage.ToString();
  48. }
  49. private void OnAccent(EntityUid uid, MonkeyAccentComponent component, AccentGetEvent args)
  50. {
  51. args.Message = Accentuate(args.Message);
  52. }
  53. }