From 21ede66dfe4b0737ededfa7dad1b1b02764dbafd Mon Sep 17 00:00:00 2001 From: banumbas Date: Fri, 10 Jan 2025 01:19:48 +0300 Subject: [PATCH] Sosal? (#1064) Co-authored-by: Seven2280 --- .../TransliterationAccentComponent.cs | 5 + .../TransliterationAccentSystem.cs | 162 ++++++++++++++++++ .../ru-RU/_strings/_sunrise/traits/traits.ftl | 2 + .../Prototypes/_Sunrise/Traits/speech.yml | 10 ++ 4 files changed, 179 insertions(+) create mode 100644 Content.Server/_Sunrise/Speech/Components/TransliterationAccentComponent.cs create mode 100644 Content.Server/_Sunrise/Speech/EntitySystems/TransliterationAccentSystem.cs diff --git a/Content.Server/_Sunrise/Speech/Components/TransliterationAccentComponent.cs b/Content.Server/_Sunrise/Speech/Components/TransliterationAccentComponent.cs new file mode 100644 index 0000000000..c2c6d961c3 --- /dev/null +++ b/Content.Server/_Sunrise/Speech/Components/TransliterationAccentComponent.cs @@ -0,0 +1,5 @@ +namespace Content.Server._Sunrise.Speech.Components; +[RegisterComponent] +public sealed partial class TransliterationAccentComponent : Component +{ +} \ No newline at end of file diff --git a/Content.Server/_Sunrise/Speech/EntitySystems/TransliterationAccentSystem.cs b/Content.Server/_Sunrise/Speech/EntitySystems/TransliterationAccentSystem.cs new file mode 100644 index 0000000000..bf55542494 --- /dev/null +++ b/Content.Server/_Sunrise/Speech/EntitySystems/TransliterationAccentSystem.cs @@ -0,0 +1,162 @@ +using System.Text; +using Content.Server._Sunrise.Speech.Components; +using Content.Server.Speech; +using Content.Server.Speech.Components; +using Content.Server.Speech.EntitySystems; +namespace Content.Server._Sunrise.Speech.EntitySystems; +public sealed class TransliterationAccentSystem : EntitySystem +{ + [Dependency] private readonly ReplacementAccentSystem _replacement = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnAccent); + } + private string Accentuate(string message) + { + var accentedMessage = new StringBuilder(_replacement.ApplyReplacements(message, "transliteration")); + for (var i = 0; i < accentedMessage.Length; i++) + { + var c = accentedMessage[i]; + accentedMessage[i] = c switch + { + 'й' => 'q', + 'ц' => 'w', + 'у' => 'e', + 'к' => 'r', + 'е' => 't', + 'н' => 'y', + 'г' => 'u', + 'ш' => 'i', + 'щ' => 'o', + 'з' => 'p', + 'х' => '[', + 'ъ' => ']', + 'ф' => 'a', + 'ы' => 's', + 'в' => 'd', + 'а' => 'f', + 'п' => 'g', + 'р' => 'h', + 'о' => 'j', + 'л' => 'k', + 'д' => 'l', + 'ж' => ';', + 'э' => '"', + 'я' => 'z', + 'ч' => 'x', + 'с' => 'c', + 'м' => 'v', + 'и' => 'b', + 'т' => 'n', + 'ь' => 'm', + 'б' => ',', + 'ю' => '.', + 'ё' => '`', + 'Й' => 'Q', + 'Ц' => 'W', + 'У' => 'E', + 'К' => 'R', + 'Е' => 'T', + 'Н' => 'Y', + 'Г' => 'U', + 'Ш' => 'I', + 'Щ' => 'O', + 'З' => 'P', + 'Х' => '{', + 'Ъ' => '}', + 'Ф' => 'A', + 'Ы' => 'S', + 'В' => 'D', + 'А' => 'F', + 'П' => 'G', + 'Р' => 'H', + 'О' => 'J', + 'Л' => 'K', + 'Д' => 'L', + 'Ж' => ':', + 'Э' => '"', + 'Я' => 'Z', + 'Ч' => 'X', + 'С' => 'C', + 'М' => 'V', + 'И' => 'B', + 'Т' => 'N', + 'Ь' => 'M', + 'Б' => '<', + 'Ю' => '>', + 'Ё' => '~', + 'q' => 'й', + 'w' => 'ц', + 'e' => 'у', + 'r' => 'к', + 't' => 'е', + 'y' => 'н', + 'u' => 'г', + 'i' => 'ш', + 'o' => 'щ', + 'p' => 'з', + '[' => 'х', + ']' => 'ъ', + 'a' => 'ф', + 's' => 'ы', + 'd' => 'в', + 'f' => 'а', + 'g' => 'п', + 'h' => 'р', + 'j' => 'о', + 'k' => 'л', + 'l' => 'д', + ';' => 'ж', + '\'' => 'э', + 'z' => 'я', + 'x' => 'ч', + 'c' => 'с', + 'v' => 'м', + 'b' => 'и', + 'n' => 'т', + 'm' => 'ь', + ',' => 'б', + '`' => 'ё', + 'Q' => 'Й', + 'W' => 'Ц', + 'E' => 'У', + 'R' => 'К', + 'T' => 'Е', + 'Y' => 'Н', + 'U' => 'Г', + 'I' => 'Ш', + 'O' => 'Щ', + 'P' => 'З', + '{' => 'Х', + '}' => 'Ъ', + 'A' => 'Ф', + 'S' => 'Ы', + 'D' => 'В', + 'F' => 'А', + 'G' => 'П', + 'H' => 'Р', + 'J' => 'О', + 'K' => 'Л', + 'L' => 'Д', + ':' => 'Ж', + '"' => 'Э', + 'Z' => 'Я', + 'X' => 'Ч', + 'C' => 'С', + 'V' => 'М', + 'B' => 'И', + 'N' => 'Т', + 'M' => 'Ь', + '<' => 'Б', + '>' => 'Ю', + '~' => 'Ё', + _ => accentedMessage[i] + }; + } + return accentedMessage.ToString(); + } + private void OnAccent(EntityUid uid, TransliterationAccentComponent component, AccentGetEvent args) + { + args.Message = Accentuate(args.Message); + } +} \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_strings/_sunrise/traits/traits.ftl b/Resources/Locale/ru-RU/_strings/_sunrise/traits/traits.ftl index e0570f6ff7..f202ef1deb 100644 --- a/Resources/Locale/ru-RU/_strings/_sunrise/traits/traits.ftl +++ b/Resources/Locale/ru-RU/_strings/_sunrise/traits/traits.ftl @@ -8,3 +8,5 @@ trait-ukrainian-accent-name = Украинский акцент trait-ukrainian-accent-desc = Заробiтчани вже навiть у космосi. trait-russian-accent-name = Русский акцент trait-russian-accent-desc = Товарищ, это не ваше а наше. +trait-transliteration-accent-name = Транслитерированный акцент +trait-transliteration-accent-desc = Ds ujdjhbnt nhfyckbnjv. \ No newline at end of file diff --git a/Resources/Prototypes/_Sunrise/Traits/speech.yml b/Resources/Prototypes/_Sunrise/Traits/speech.yml index 40e839a935..0ba5b6e740 100644 --- a/Resources/Prototypes/_Sunrise/Traits/speech.yml +++ b/Resources/Prototypes/_Sunrise/Traits/speech.yml @@ -28,3 +28,13 @@ components: - type: RussianAccent +# 2 Cost + +- type: trait + id: TransliterationAccent + name: trait-transliteration-accent-name + description: trait-transliteration-accent-desc + category: SpeechTraits + cost: 2 + components: + - type: TransliterationAccent \ No newline at end of file