2022-01-30 00:06:16 -08:00
|
|
|
|
using System.Text;
|
|
|
|
|
|
using Content.Server.Speech.Components;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Content.Server.Speech.EntitySystems;
|
|
|
|
|
|
|
|
|
|
|
|
public sealed class RussianAccentSystem : EntitySystem
|
|
|
|
|
|
{
|
2024-08-09 07:49:38 +02:00
|
|
|
|
[Dependency] private readonly ReplacementAccentSystem _replacement = default!;
|
2022-01-30 00:06:16 -08:00
|
|
|
|
public override void Initialize()
|
|
|
|
|
|
{
|
|
|
|
|
|
SubscribeLocalEvent<RussianAccentComponent, AccentGetEvent>(OnAccent);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-09 07:49:38 +02:00
|
|
|
|
public string Accentuate(string message)
|
2022-01-30 00:06:16 -08:00
|
|
|
|
{
|
2024-08-09 07:49:38 +02:00
|
|
|
|
var accentedMessage = new StringBuilder(_replacement.ApplyReplacements(message, "russian"));
|
2022-01-30 00:06:16 -08:00
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < accentedMessage.Length; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var c = accentedMessage[i];
|
|
|
|
|
|
|
|
|
|
|
|
accentedMessage[i] = c switch
|
|
|
|
|
|
{
|
2024-08-09 07:49:38 +02:00
|
|
|
|
'A' => 'Д',
|
2022-01-30 00:06:16 -08:00
|
|
|
|
'b' => 'в',
|
|
|
|
|
|
'N' => 'И',
|
|
|
|
|
|
'n' => 'и',
|
|
|
|
|
|
'K' => 'К',
|
|
|
|
|
|
'k' => 'к',
|
|
|
|
|
|
'm' => 'м',
|
|
|
|
|
|
'h' => 'н',
|
|
|
|
|
|
't' => 'т',
|
|
|
|
|
|
'R' => 'Я',
|
|
|
|
|
|
'r' => 'я',
|
|
|
|
|
|
'Y' => 'У',
|
|
|
|
|
|
'W' => 'Ш',
|
|
|
|
|
|
'w' => 'ш',
|
|
|
|
|
|
_ => accentedMessage[i]
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return accentedMessage.ToString();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnAccent(EntityUid uid, RussianAccentComponent component, AccentGetEvent args)
|
|
|
|
|
|
{
|
|
|
|
|
|
args.Message = Accentuate(args.Message);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|