Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Emotes Menu Type #215

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open

[Feature] Emotes Menu Type #215

wants to merge 6 commits into from

Conversation

Spatison
Copy link
Member

Описание PR

Меню эмоций теперь можно переключать в настройках, выбирая стандартное окно или радиальное меню.
Все эмоции теперь переданы определённым расам и животным (Теперь у человека не будут эмоции кошек крыс и собак). В меню добавлены эмоции с анимациями


Медиа

Список

image
image
image
image
В финальной версии она переведена
image


Изменения

🆑 Spatison

  • tweak: Тип меню эмоций теперь можно менять в настройках
  • tweak: Теперь у всех отдельный пул эмоций

@Spatison Spatison requested a review from Remuchi December 28, 2024 16:11
@Spatison Spatison self-assigned this Dec 28, 2024
Copy link
Contributor

coderabbitai bot commented Dec 28, 2024

Walkthrough

Изменения представляют собой обширное обновление системы эмоций в игре, включая реализацию нового интерфейса IBaseEmoteMenu, добавление новых элементов пользовательского интерфейса для управления эмоциями, а также обновление и добавление локализационных строк для различных языков. Также были внесены изменения в конфигурационные переменные и теги для сущностей, что улучшает организацию и взаимодействие с эмоциями в игре.

Changes

Файл Изменения
Content.Client/Chat/UI/EmotesMenu.xaml.cs Добавлена реализация интерфейса IBaseEmoteMenu, добавлена директива using для Content.Client._White.UI.Emotes
Content.Client/Options/UI/Tabs/MiscTab.xaml Добавлен новый элемент UI <BoxContainer> для настройки меню эмоций
Content.Client/Options/UI/Tabs/MiscTab.xaml.cs Добавлена логика для управления стилем меню эмоций, включая обработчики событий для выбора стиля
Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs Удалена зависимость от EmotesUIController, добавлена зависимость от WhiteEmotesUIController
Content.Client/_White/UI/Emotes/EmotesMenuType.cs Добавлен новый перечисляемый тип EmotesMenuType
Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml Создан новый XAML файл для интерфейса WhiteEmotesMenu
Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml.cs Добавлен новый класс WhiteEmotesMenu, реализующий интерфейс IBaseEmoteMenu
Content.Client/_White/UI/Emotes/WhiteEmotesUIController.cs Создан новый класс WhiteEmotesUIController, реализующий интерфейс IOnStateChanged<GameplayState>
Content.Client/_White/UI/Emotions/EmotionsUIController.cs Удален класс EmotionsUIController
Content.Server/Chat/Systems/ChatSystem.Emote.cs Изменена логика проверки белого и черного списков в методе TryEmoteWithChat
Content.Shared/_White/CVars.cs Добавлена новая конфигурационная переменная EmotesMenuStyle
Resources/Locale/en-US/_white/chat/emotion.ftl Добавлены новые строки для эмоций в локализации
Resources/Locale/en-US/_white/emotes/speech-emotes.ftl Удален файл с определениями эмоций
Resources/Locale/en-US/_white/escape-menu/options-menu.ftl Добавлена новая строка для меню эмоций
Resources/Locale/en-US/chat/emotes.ftl Добавлены новые имена эмоций и сообщения, удалены некоторые старые
Resources/Locale/ru-RU/_white/chat/emotion.ftl Добавлены новые строки для эмоций в локализации на русском языке
Resources/Locale/ru-RU/_white/emotes/speech-emotes.ftl Удален файл с определениями эмоций на русском языке
Resources/Locale/ru-RU/_white/escape-menu/options-menu.ftl Добавлена новая строка для меню эмоций на русском языке
Resources/Locale/ru-RU/chat/emotes.ftl Добавлены новые имена эмоций и сообщения на русском языке
Resources/Prototypes/Actions/emotes.yml Обновлены триггеры для эмоций Flip, Spin, Jump
Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml Добавлен новый тег Dog для сущности Urist McVulp
Resources/Prototypes/DeltaV/Voice/speech_emotes.yml Обновлены определения эмоций для харпи и вулпканин, добавлены новые триггеры и сообщения
Resources/Prototypes/Entities/Mobs/NPCs/dogs.yml Добавлен тег Dog для сущности MobPibble
Resources/Prototypes/Voice/speech_emote_sounds.yml Обновлены идентификаторы звуков для кошачьих звуков, изменены на Meow и Hisses

Suggested labels

Changes: Localization, Status: Needs Review

Suggested reviewers

  • Remuchi

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (12)
Content.Shared/_White/CVars.cs (1)

30-32: Рекомендуется добавить комментарий с описанием новой переменной.

Переменная EmotesMenuStyle имеет ключевое значение для выбора меню эмоций. Для улучшения сопровождения кода добавьте краткий комментарий, поясняющий, как и где это поле влияет на логику конфигурации.

Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml.cs (3)

22-22: Уточните назначение события OnPlayEmote.

Событие OnPlayEmote может стать важной точкой расширения функционала, например для дополнительной логики при проигрывании эмоции (звук, анимация и т.п.). Рекомендуется добавить краткую документацию в коде.


31-40: Улучшите читаемость фильтрации эмоций.

В блоке проверок (категории, триггеры, вайтлист/блэклист) соберите условия в отдельные приватные методы или добавьте комментарии для каждой проверки. Это упростит понимание логики и укажет, почему некоторые эмоции отсекаются.


47-62: Учитывайте разные размеры апп UI при размещении кнопок.

Вы задаёте фиксированные размеры и форматирование (MinWidth, MaxWidth, MaxHeight и т.п.). Возможно, стоит предусмотреть адаптивное поведение интерфейса для устройств с отличным разрешением.

Resources/Locale/en-US/chat/emotes.ftl (2)

32-35: Уточнение формулировок.
"Do a flip" и "Wagging your tail" звучат естественно, однако убедитесь, что стиль остальных эмоций также остается в едином, удобочитаемом формате.


53-55: Общая согласованность новых сообщений.
Новые описания действий эмоций (boops, wags tail, и т.д.) добавляют игровую атмосферу. Однако убедитесь, что используете точку или восклицательный знак последовательно, чтобы сохранить единообразие. Например, “boops.” или “wags tail.”

Also applies to: 58-58, 62-64, 70-73

Resources/Locale/ru-RU/chat/emotes.ftl (1)

37-74: Единообразие пунктуации и формулировок.
Некоторые строки заканчиваются восклицательным знаком, другие — точкой. Для единообразия пользовательского интерфейса рекомендуется сохранять общий стиль: либо все с точкой, либо с восклицательным знаком.

Content.Client/_White/UI/Emotes/WhiteEmotesUIController.cs (2)

30-31: Интервал перезарядки эмоций.
Значение EmoteCooldown = 1.5f кажется разумным, но стоит проверить, не слишком ли часто стают возможны спам-эмоции. Возможно, нужно увеличить до 2 или 3 секунд.


110-122: Открытие меню в позициях мыши.
Функционал OpenCenteredAt() полезен. Убедитесь, что при высоком разрешении экрана UI не обрезается.

Resources/Prototypes/_White/tags.yml (1)

17-26: Добавление тегов Dog, Bird, Cat и отсутствие символа новой строки
Добавлены новые теги для животных. Это поможет при фильтрации и назначении эмоций конкретным видам. Также статический анализ указывает на отсутствие новой строки в конце файла. Рекомендуется добавить пустую строку в конец, чтобы удовлетворить общий стиль работы с YAML-файлами и избежать потенциальных предупреждений.

...
  id: Cat
+ 
🧰 Tools
🪛 yamllint (1.35.1)

[error] 26-26: no new line character at the end of file

(new-line-at-end-of-file)

Resources/Prototypes/Voice/disease_emotes.yml (1)

58-67: Предложение: Унифицировать стиль комментариев

Эмоция Snore использует комментарии "WD EDIT START/END", в то время как другие эмоции используют однострочные комментарии. Рекомендуется придерживаться единого стиля.

Предлагаемые изменения:

-  # WD EDIT START
   whitelist:
     components:
     - Vocal
   blacklist:
     components:
     - BorgChassis
   chatTriggers:
     - "chat-emote-trigger-snore-1"
-  # WD EDIT END
+  # WD EDIT
Resources/Prototypes/Voice/speech_emotes.yml (1)

306-311: Добавьте документацию для эмоции

Рекомендуется добавить описание и иконку для эмоции "Boop", как это сделано для других эмоций.

 - type: emote
   id: Boop
   name: chat-emote-name-boop
   category: Vocal
+  description: chat-emote-desc-boop
+  icon: Interface/Emotes/boop.png
   whitelist:
     components:
     - BorgChassis
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e58d1b5 and 83d66b7.

📒 Files selected for processing (37)
  • Content.Client/Chat/UI/EmotesMenu.xaml.cs (2 hunks)
  • Content.Client/Options/UI/Tabs/MiscTab.xaml (1 hunks)
  • Content.Client/Options/UI/Tabs/MiscTab.xaml.cs (5 hunks)
  • Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs (4 hunks)
  • Content.Client/_White/UI/Emotes/EmotesMenuType.cs (1 hunks)
  • Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml (1 hunks)
  • Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml.cs (1 hunks)
  • Content.Client/_White/UI/Emotes/WhiteEmotesUIController.cs (1 hunks)
  • Content.Client/_White/UI/Emotions/EmotionsUIController.cs (0 hunks)
  • Content.Server/Chat/Systems/ChatSystem.Emote.cs (1 hunks)
  • Content.Shared/_White/CVars.cs (1 hunks)
  • Resources/Locale/en-US/_white/chat/emotion.ftl (1 hunks)
  • Resources/Locale/en-US/_white/emotes/speech-emotes.ftl (0 hunks)
  • Resources/Locale/en-US/_white/escape-menu/options-menu.ftl (1 hunks)
  • Resources/Locale/en-US/chat/emotes.ftl (2 hunks)
  • Resources/Locale/en-US/deltav/chat/emotes.ftl (1 hunks)
  • Resources/Locale/en-US/emotes.ftl (0 hunks)
  • Resources/Locale/en-US/nyanotrasen/chat/emotes.ftl (1 hunks)
  • Resources/Locale/ru-RU/_white/chat/emotion.ftl (1 hunks)
  • Resources/Locale/ru-RU/_white/emotes/speech-emotes.ftl (0 hunks)
  • Resources/Locale/ru-RU/_white/escape-menu/options-menu.ftl (1 hunks)
  • Resources/Locale/ru-RU/chat/emotes.ftl (1 hunks)
  • Resources/Locale/ru-RU/deltav/chat/emotes.ftl (1 hunks)
  • Resources/Locale/ru-RU/nyanotrasen/chat/emotes.ftl (1 hunks)
  • Resources/Prototypes/Actions/emotes.yml (1 hunks)
  • Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml (1 hunks)
  • Resources/Prototypes/DeltaV/Voice/speech_emotes.yml (1 hunks)
  • Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (3 hunks)
  • Resources/Prototypes/Entities/Mobs/NPCs/dogs.yml (1 hunks)
  • Resources/Prototypes/Entities/Mobs/Species/harpy.yml (1 hunks)
  • Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml (1 hunks)
  • Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml (1 hunks)
  • Resources/Prototypes/Voice/disease_emotes.yml (3 hunks)
  • Resources/Prototypes/Voice/speech_emotes.yml (16 hunks)
  • Resources/Prototypes/Voice/tail_emotes.yml (1 hunks)
  • Resources/Prototypes/_White/Voice/speech_emotes.yml (1 hunks)
  • Resources/Prototypes/_White/tags.yml (1 hunks)
💤 Files with no reviewable changes (4)
  • Content.Client/_White/UI/Emotions/EmotionsUIController.cs
  • Resources/Locale/en-US/emotes.ftl
  • Resources/Locale/ru-RU/_white/emotes/speech-emotes.ftl
  • Resources/Locale/en-US/_white/emotes/speech-emotes.ftl
✅ Files skipped from review due to trivial changes (4)
  • Content.Client/_White/UI/Emotes/EmotesMenuType.cs
  • Resources/Prototypes/Entities/Mobs/Species/harpy.yml
  • Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml
  • Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
🧰 Additional context used
🪛 yamllint (1.35.1)
Resources/Prototypes/_White/tags.yml

[error] 26-26: no new line character at the end of file

(new-line-at-end-of-file)

🔇 Additional comments (54)
Resources/Locale/en-US/_white/escape-menu/options-menu.ftl (1)

1-1: Добавлен перевод для переключателя типа меню эмоций.

Хорошая локализация. Важно убедиться, что все элементы интерфейса, связанные с этим ключом ui-options-emotes-menu, корректно отображаются и тестируются.

Resources/Locale/ru-RU/_white/escape-menu/options-menu.ftl (1)

1-1: Новая локализованная строка для выбора типа меню эмоций.

Строка корректна. Убедитесь, что в коде нет опечаток и что всё работает при переключении на русский язык.

Resources/Locale/en-US/_white/chat/emotion.ftl (3)

2-5: Блок названий эмоций выглядит хорошо.

Все названия соответствуют ожидаемым действиям. Рекомендуется проверить, не пересекаются ли эти имена с другими имеющимися ключами.


8-11: Описание действий эмоций адекватно отражает происходящее.

Строки выглядят корректно для описания игровых эмоций в чате. Убедитесь, что переменные, такие как {POSS-ADJ($entity)}, правильно интерполируются на клиенте.


14-18: Триггеры эмоций выглядят логично.

Следует проверить, что триггеры корректно сопоставляются с существующей логикой, особенно если в коде есть проверка множественных триггерных фраз.

Resources/Locale/ru-RU/_white/chat/emotion.ftl (3)

2-5: Названия эмоций переведены корректно.

Всё соответствует ожидаемым действиям и выглядит естественно для русскоязычных игроков.


8-11: Описания действий эмоций вызывают понятные изображения в чате.

Формулировки «кивает», «качает головой», «хмурится» и «улыбается» звучат хорошо. Убедитесь в отсутствии стилистических несоответствий.


14-18: Триггеры эмоций на русском языке добавлены корректно.

Рекомендуется протестировать, чтобы убедиться, что данные фразы (например, «качает своей головой») корректно активируют соответствующие эмоции в игре.

Resources/Locale/en-US/nyanotrasen/chat/emotes.ftl (3)

1-7: Новые названия эмоций выглядят корректно
Добавление шести уникальных названий эмоций для кошек на английском языке выглядит удачным шагом. Названия легко читаются и соответствуют общему стилю.


8-14: Сообщения к эмоциям оформлены последовательно
Текстовые описания эмоций хорошо отражают суть звуков, которые должны воспроизводиться. Формат единообразен и понятен.


15-23: Проверить корректность всех триггеров эмоций
Триггеры для эмоций (такие как "mews", "nyas", "mraows") охватывают широкий спектр вариантов. Рекомендуется убедиться, что эти варианты действительно используются игрой и что все формы ввода (включая заглавные буквы, опечатки и т.д.) отражены при необходимости.

Resources/Locale/ru-RU/nyanotrasen/chat/emotes.ftl (3)

1-7: Добавлены корректные названия эмоций на русском языке
Локализация названий эмоций (шипение, мяукание и т.п.) выглядит точной и соответствует контексту.


8-14: Сообщения эмоций читаются естественно
Все сообщения (например, «шипит!», «рычит!») хорошо отражают соответствующие звуки в чате. Формат единообразен.


15-23: Убедитесь в корректном распознавании триггеров по-русски
Проверить, что чат-система корректно обрабатывает все триггеры на русском языке (мяукает, някает, мраовой вариант и т.д.). При необходимости стоит удостовериться, что различные грамматические формы также учтены правильно.

Resources/Locale/en-US/deltav/chat/emotes.ftl (3)

1-11: Новые названия эмоций для harpy и vulpine
Названия разнообразны (Rings, Pew, Bang и т.д.) и хорошо подходят для обозначения звуков. Поддерживайте такую же единообразную схему именования в будущем.


12-22: Содержательные сообщения эмоций
Каждое сообщение с восклицаниями или точками («pew!», «bang!», «rev!») передаёт нужный эффект. Можно расширить описания, если хотите более детально отразить взаимодействие в чате, но текущий формат вполне достаточен.


23-33: Проверьте полноту триггеров
Список триггеров охватывает различные формы слов: «pews», «pewpews», «bangs» и другие. Рекомендуется удостовериться, что пользовательские ошибки или альтернативные формы (например, случайные заглавные буквы) не вызовут проблем. При необходимости добавляйте уточняющие варианты триггеров.

Resources/Locale/ru-RU/deltav/chat/emotes.ftl (3)

1-11: Удачное добавление русскоязычных названий эмоций
Новые названия (Звон, Пиу, Бах и т.д.) чётко отражают суть звуков и добавляют атмосферу для русскоязычных пользователей.


12-22: Сообщения эмоций точно передают звучание
«пиу!», «бах!», «ревёт!» и прочие формы выглядят естественно. Пользователи будут понимать, какие звуки должны отражаться в чате.


23-33: Проверить все триггеры для русской локализации
Для форм «пиукает», «пиу-пиукает», «бахает» и других надо убедиться, что чат корректно обрабатывает такие составные варианты. Возможно, следует протестировать в разных ситуациях, чтобы исключить несоответствия.

Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs (3)

28-28: Проверьте корректность внедрения WhiteEmotesUIController.

Обратите внимание, что класс WhiteEmotesUIController должен полноценно обслуживать функционал меню эмоций, заместив ранее использовавшийся контроллер. Убедитесь, что все вызовы инициализации и выгрузки переданы корректно.


52-52: Убедитесь в последовательности выгрузки.

Метод UnloadButtons() теперь вызывает _whiteEmotes.UnloadButton(). Проверьте, не осталось ли логики, которую ранее обрабатывал старый контроллер эмоций и которая должна быть перенесена в WhiteEmotesUIController.


66-66: Убедитесь в последовательности загрузки.

При добавлении LoadButton() для _whiteEmotes проверьте, что его запуск производится в нужном порядке относительно других контроллеров. Это гарантирует корректное отображение кнопок и отсутствие конфликтов.

Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml.cs (2)

16-16: Хорошая реализация интерфейса IBaseEmoteMenu.

Класс WhiteEmotesMenu удобно вписывается в общую архитектуру отрисовки окна эмоций. Поддержка интерфейса даёт гибкость для альтернативных реализаций.


66-69: Отличная идея вынести EmoteMenuButton в отдельный класс.

Это улучшает модульность кода, облегчает поддержку и доработку логики отображения. Можно позже добавить, при необходимости, новые поля (например, иконки) без изменения базовой функциональности меню эмоций.

Content.Client/Chat/UI/EmotesMenu.xaml.cs (2)

3-3: Следите за дублированием кода.

Подключение пространства имён Content.Client._White.UI.Emotes указывает на использование новых компонентов. Убедитесь, что общий функционал с другими меню эмоций (например, WhiteEmotesMenu) не дублируется и реализован единообразно.


18-18: Удачное добавление IBaseEmoteMenu к EmotesMenu.

Единый интерфейс упрощает переключение между разными вариантами меню (оконное, радиальное и т.д.). Это соответствует идее масштабируемого дизайна и улучшает читаемость кодовой базы.

Resources/Locale/en-US/chat/emotes.ftl (2)

20-26: Добавление новых эмоций выглядит корректным.
Новые названия эмоций хорошо вписываются в общий список и помогают разнообразить взаимодействие игроков.


75-127: Обширный список триггеров.
Расширенный перечень триггеров повышает вариативность эмоций в чате. Проверьте, не дублируются ли некоторые триггеры и не создаётся ли путаница у игроков, например «snaps» и «snaps fingers».

Resources/Locale/ru-RU/chat/emotes.ftl (2)

1-35: Корректность перевода названий эмоций.
Добавленные переводы эмоций (например, «Чихание», «Сальто», «Кручение») выглядят адекватно. Проверьте, что термины не конфликтуют с другими локализованными элементами игры.


75-127: Проверка новых триггеров в русской локализации.
Расширенные варианты, такие как «орет», «вопит», «визжит» и т.д., добавляют богатство выражения. Рекомендуется проверить, что все триггеры легко вводить и они соответствуют нормам языка (не опечатки).

Content.Client/_White/UI/Emotes/WhiteEmotesUIController.cs (3)

20-28: Инъекция зависимостей.
Использование [Dependency] здесь выглядит уместным. Убедитесь, что в других местах кода всё корректно, и отсутствуют циклические зависимости.


85-105: Обработка разных стилей меню эмоций.
Логика выбора EmotesMenuType выглядит корректной. Два стиля (Window и Radial) расширяют удобство для пользователей. Убедитесь, что Radial-меню корректно открывается и закрывается при использовании быстрых команд.


137-147: Событие воспроизведения эмоции.
Обработка времени последнего использования хорошо защищает от спама. При этом, убедитесь, что серверная часть корректно отслеживает эти события, чтобы избежать несинхронного состояния.

Content.Client/Options/UI/Tabs/MiscTab.xaml (1)

22-27: Новый визуальный элемент для выбора меню эмоций.
Добавление блока для EmotesMenuType в MiscTab улучшает удобство выбора стиля меню эмоций. Убедитесь, что названия вариантов (Window, Radial) переведены локализовано при необходимости.

Content.Server/Chat/Systems/ChatSystem.Emote.cs (1)

87-87: Изменение логики проверки в вайтлисте
Данный код теперь использует IsWhitelistPassOrNull вместо IsWhitelistFailOrNull. Это означает, что ресурс должен явно находиться в разрешённом списке (или не иметь условий), чтобы пройти проверку. Убедитесь, что все связанные элементы (например, другие места, где вызывается TryEmoteWithChat) корректно обрабатывают новую логику вайтлиста. Если до этого допускались все сущности, кроме явно запрещённых, то теперь, возможно, понадобится расширить вайтлисты.

Content.Client/Options/UI/Tabs/MiscTab.xaml.cs (3)

64-85: Добавление настроек стиля меню эмоций
Данный блок кода создаёт новый UI-элемент для выбора типа меню эмоций и привязывает его к WhiteCVars.EmotesMenuStyle. Это удобное решение, позволяющее пользователям переключаться между разными интерфейсами эмоций. Убедитесь, что все перечисленные значения EmotesMenuType корректно отображаются в элементе OptionButton и что при смене стиля всё действительно работает ожидаемо в клиентском интерфейсе.


194-198: Сохранение выбранного типа меню эмоций
Код записывает значение выбранного пункта в WhiteCVars.EmotesMenuStyle. Похоже, что всё сделано правильно. Однако рекомендуется проверить, корректно ли этот стиль меню возвращается и учитывается при следующем запуске клиента, а также при переключении серверных или локальных настроек.


Line range hint 207-229: Условие блокировки кнопки "Apply" обогащено проверкой типа меню эмоций
Код проверяет, совпадает ли текущая настройка меню эмоций с сохранённой, и учитывает это при решении, нужно ли разблокировать кнопку "Apply". Выглядит корректно и согласуется с остальной логикой. Убедитесь, что при ручном переключении меню эмоций и возврате к исходному значению кнопка снова блокируется.

Resources/Prototypes/Voice/tail_emotes.yml (1)

4-17: Расширенное использование whitelist и обновлённые триггеры эмоции
Новая секция whitelist указывает, что эмоции доступны только существам с тегами Dog и Cat. Это повышает реалистичность, исключая доступ к эмоции для неподходящих видов. Также расширен список триггеров для WagTail, что предоставляет более гибкие способы вызвать эмоцию через чат. Всё выглядит корректно, однако убедитесь, что эти новые триггеры локализованы и надлежащим образом отражаются в пользовательском интерфейсе.

Resources/Prototypes/Actions/emotes.yml (1)

6-6: Одобрено: Стандартизация триггеров эмоций

Изменения корректно стандартизируют формат триггеров для эмоций Flip, Spin и Jump, используя локализационные ключи вместо прямого текста. Это улучшает поддержку мультиязычности и согласуется с целями PR.

Also applies to: 14-14, 22-22

Resources/Prototypes/_White/Voice/speech_emotes.yml (1)

5-6: Проверьте необходимость множественных триггеров

Структура триггеров эмоций обновлена корректно. Однако, эмоция ShakeHead имеет два триггера, в то время как остальные имеют по одному. Убедитесь, что это сделано намеренно и соответствует требованиям.

Запустите следующий скрипт для проверки согласованности триггеров:

Also applies to: 12-14, 20-21, 27-28

✅ Verification successful

Подтверждено наличие двух триггеров для эмоции ShakeHead

На основе анализа файла подтверждаю, что эмоция ShakeHead действительно имеет два триггера:

  • "chat-emote-trigger-shake-head-1"
  • "chat-emote-trigger-shake-head-2"

В то время как остальные эмоции (Nod, Frown, Smile) имеют по одному триггеру. Это отличие в количестве триггеров является намеренным, так как файл содержит полностью структурированные и отформатированные определения для всех эмоций.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Проверка количества триггеров у эмоций

# Поиск всех эмоций с множественными триггерами
rg "chatTriggers:" -A 3 "Resources/Prototypes" | grep -B 1 "^  - \"chat-emote-trigger"

Length of output: 83


Script:

#!/bin/bash
# Поиск всех файлов эмоций и их содержимого
fd -e yml -e yaml . Resources/Prototypes/_White/Voice/ -x cat {}

Length of output: 7371

Resources/Prototypes/Voice/disease_emotes.yml (4)

6-15: Одобрено: Добавление компонентных ограничений для Sneeze

Корректно реализованы ограничения компонентов через whitelist/blacklist. Структура соответствует общему формату системы эмоций.


28-28: Исправление: Корректное именование компонента в blacklist

Исправление опечатки в имени компонента BorgChassis и добавление стандартизированного триггера.

Also applies to: 30-30


49-49: Исправление: Обновление blacklist для Yawn

Аналогичное исправление для эмоции Yawn. Изменения согласованы с общей структурой.

Also applies to: 51-51


Line range hint 1-67: Проверка: Согласованность с системой локализации

Убедитесь, что все новые ключи триггеров имеют соответствующие записи в файлах локализации.

✅ Verification successful

Локализация триггеров эмоций проверена и подтверждена

Все новые ключи триггеров эмоций имеют корректные записи в файлах локализации как для русского (ru-RU), так и для английского (en-US) языков:

  • chat-emote-trigger-sneeze-1
  • chat-emote-trigger-cough-1
  • chat-emote-trigger-yawn-1
  • chat-emote-trigger-snore-1
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Проверка наличия локализационных ключей

# Извлекаем все ключи триггеров
triggers=$(rg "chat-emote-trigger-" "Resources/Prototypes" -o | sort -u)

# Проверяем наличие ключей в файлах локализации
for trigger in $triggers; do
  echo "Checking $trigger"
  rg "$trigger" "Resources/Locale"
done

Length of output: 2505


Script:

#!/bin/bash
# Извлекаем конкретные ключи триггеров из файла disease_emotes.yml
rg "chat-emote-trigger-[a-z0-9-]+" Resources/Prototypes/Voice/disease_emotes.yml -o

# Проверяем наличие этих ключей в файлах локализации
echo "Checking localization files:"
rg "chat-emote-trigger-(sneeze|cough|yawn|snore)-1" Resources/Locale/

Length of output: 933

Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml (1)

6-13: Структурные изменения в эмоциях

Изменения корректно ограничивают эмоции для кошачьих персонажей и стандартизируют локализационные ключи. Реализация последовательна во всех эмоциях.

Рекомендации:

  1. Убедитесь, что все локализационные ключи определены в соответствующих файлах локализации.
  2. Проверьте, что система тегов правильно интегрирована с системой проверки прав доступа к эмоциям.

Also applies to: 19-29, 35-42, 48-55, 61-68

✅ Verification successful

Локализационные ключи и теги для кошачьих эмоций подтверждены

Проверка показала, что все локализационные ключи корректно определены как в английской (en-US), так и в русской (ru-RU) локализации. Каждая эмоция имеет соответствующие сообщения и триггеры на обоих языках.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверка наличия локализационных ключей
rg -g '*.ftl' "chat-emote-(msg|trigger)-(hisses|meow|mew|growl|purr)"

Length of output: 2275

Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml (1)

87-91: Добавление тега для кошачьих персонажей

Тег Cat корректно добавлен к сущности Felinid, что обеспечивает правильную работу системы ограничений эмоций.

Рекомендация: Убедитесь, что все сущности кошачьего типа в игре имеют соответствующий тег.

✅ Verification successful

Let me gather more information to verify if there are any other cat-like entities that might need the Cat tag.


Let me check specifically for cat-related entities to ensure we haven't missed any that might need the Cat tag.


Let me check the content of files that might contain cat-related entities to ensure we identify all entities that should have the Cat tag.


Let me check the specific content of the pets file to see if there are any cat entities that need the Cat tag.


Тег Cat успешно добавлен к сущности Felinid

Проверка показала, что тег Cat корректно добавлен к сущности Felinid. В кодовой базе также присутствуют обычные кошки (pets), которые уже имеют необходимые теги для работы системы эмоций. Дополнительных действий не требуется.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск всех сущностей кошачьего типа
rg -l "species: Felinid" | xargs rg "type: Tag"

Length of output: 130


Script:

#!/bin/bash
# Search for any entities that might be cat-related
rg -l "cat|feline|kitten" --type yaml

Length of output: 49557


Script:

#!/bin/bash
# Search for cat-related entities in specific prototype files
rg -l "cat|feline|kitten" Resources/Prototypes/Entities/Mobs/

Length of output: 2853


Script:

#!/bin/bash
# Check content of potentially relevant files
rg "species:|type: Tag" Resources/Prototypes/Entities/Mobs/Customization/Markings/cat_parts.yml Resources/Prototypes/Entities/Mobs/NPCs/pets.yml

Length of output: 1280


Script:

#!/bin/bash
# Check the content of pets.yml for cat entities
rg -A 5 "cat|kitten" Resources/Prototypes/Entities/Mobs/NPCs/pets.yml

Length of output: 328

Resources/Prototypes/DeltaV/Voice/speech_emotes.yml (2)

5-65: Эмоции для птиц реализованы корректно

Все эмоции для птиц правильно помечены тегом Bird и используют согласованную структуру локализационных ключей.

Рекомендация: Рассмотрите возможность группировки эмоций по подкатегориям для более удобного управления.


71-118: Эмоции для собак следуют единому шаблону

Эмоции для собак корректно помечены тегом Dog и следуют той же структуре, что и другие эмоции.

Рекомендация: Добавьте комментарии к каждой эмоции, описывающие контекст их использования.

✅ Verification successful

Подтверждаю корректность структуры эмоций для собак

Анализ показывает, что:

  • Все эмоции собак (Bark, Snarl, Whine, Howl) следуют единому шаблону с тегом "Dog"
  • Структура аналогична другим эмоциям в файле (например, эмоциям птиц с тегом "Bird")
  • Каждая эмоция имеет правильно определенные поля id, name, category и whitelist

Рекомендация по добавлению комментариев остается актуальной для улучшения документации кода.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверка согласованности тегов для всех эмоций
rg "whitelist:\n\s+tags:" -A 2

Length of output: 224


Script:

#!/bin/bash
# Проверка согласованности тегов для всех эмоций с поддержкой многострочного поиска
rg -U "whitelist:\n\s+tags:" -A 2 Resources/Prototypes/DeltaV/Voice/speech_emotes.yml

Length of output: 772


Script:

#!/bin/bash
# Поиск всех эмоций в файле
rg "^- type: emote" -A 5 Resources/Prototypes/DeltaV/Voice/speech_emotes.yml

Length of output: 1093

Resources/Prototypes/Entities/Mobs/NPCs/dogs.yml (1)

92-96: Корректное добавление тега!

Добавление тега "Dog" соответствует целям PR по ограничению доступа к эмоциям в зависимости от расы существа.

Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml (1)

119-123: Логичное добавление тега!

Добавление тега "Dog" согласуется с существующими характеристиками сущности (DogVision, язык Canilunzt) и поддерживает новую систему эмоций.

Resources/Prototypes/Voice/speech_emotes.yml (2)

15-20: Улучшение структуры триггеров эмоций!

Стандартизация формата триггеров чата улучшает читаемость и поддерживаемость кода.


230-234: Последовательное применение ограничений

Добавление blacklist с BorgChassis для DefaultDeathgasp соответствует общей структуре других эмоций.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🔭 Outside diff range comments (1)
Resources/Prototypes/Voice/speech_emote_sounds.yml (1)

Line range hint 1-594: Общие рекомендации по реорганизации звуков эмоций

В соответствии с целями PR по категоризации эмоций по расам и видам, необходима полная реорганизация звуковых эффектов.

Рекомендуется:

  1. Создать отдельные конфигурации для каждого вида существ
  2. Определить базовый набор общих эмоций
  3. Добавить специфические эмоции для каждой расы
  4. Удалить несоответствующие звуки из конфигураций

Пример структуры:

- type: emoteSounds
  id: BaseEmotes  # Базовые эмоции для всех
  sounds:
    Laugh: {}
    Scream: {}
    
- type: emoteSounds
  id: HumanEmotes  # Специфические для людей
  parent: BaseEmotes
  sounds:
    Whistle: {}
    Sigh: {}

- type: emoteSounds
  id: FelinidEmotes  # Специфические для кошачьих
  parent: BaseEmotes
  sounds:
    Meow:
      collection: CatMeows
    Hisses:
      collection: CatHisses
🧹 Nitpick comments (2)
Resources/Prototypes/Voice/speech_emotes.yml (2)

15-20: Стандартизация триггеров чата требует унификации

Наблюдается несогласованность в количестве триггеров для разных эмоций:

  • Scream: 4 триггера
  • Laugh: 4 триггера
  • Crying: 2 триггера
  • Click: 2 триггера
  • Snap: 7 триггеров

Рекомендуется унифицировать количество триггеров для схожих типов эмоций для поддержания консистентности.

Also applies to: 35-40, 98-101, 165-168, 199-207


Line range hint 1-403: Добавьте документацию по категоризации эмоций

Для улучшения поддержки кода рекомендуется добавить комментарии в начало файла, объясняющие:

  1. Систему категоризации эмоций по расам и животным
  2. Правила использования тегов и компонентов
  3. Структуру идентификаторов триггеров
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 83d66b7 and 5ab59e1.

📒 Files selected for processing (3)
  • Resources/Prototypes/Voice/disease_emotes.yml (3 hunks)
  • Resources/Prototypes/Voice/speech_emote_sounds.yml (7 hunks)
  • Resources/Prototypes/Voice/speech_emotes.yml (16 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • Resources/Prototypes/Voice/disease_emotes.yml
🔇 Additional comments (6)
Resources/Prototypes/Voice/speech_emote_sounds.yml (4)

15-17: Проверьте необходимость звуков кошачьих эмоций для людей

Согласно целям PR, эмоции должны быть специфичны для каждой расы/вида. Однако, у людей (MaleHuman и FemaleHuman) всё ещё присутствуют кошачьи звуки Meow и Hisses. Это противоречит заявленной цели разделения эмоций по расам.

Рекомендуется удалить эти звуки из конфигурации людей, так как они не соответствуют логике разделения эмоций по расам.

Also applies to: 51-53


123-125: Проверьте необходимость звуков кошачьих эмоций для слизней

Аналогично людям, у слизней (MaleSlime и FemaleSlime) также присутствуют кошачьи звуки. Это не соответствует концепции видоспецифичных эмоций.

Рекомендуется удалить кошачьи звуки из конфигурации слизней и, возможно, добавить специфичные для слизней звуки.

Also applies to: 161-163


322-324: Проверьте необходимость звуков кошачьих эмоций для гномов

У гномов (UnisexDwarf и FemaleDwarf) также присутствуют кошачьи звуки, что не соответствует концепции разделения эмоций по расам.

Рекомендуется удалить кошачьи звуки из конфигурации гномов и рассмотреть возможность добавления уникальных гномьих звуков.

Also applies to: 359-361


556-562: Проверьте необходимость звуков кошачьих эмоций для IPC

У роботов IPC (UnisexIPC) присутствуют кошачьи звуки с дополнительными параметрами вариации. Учитывая механическую природу IPC, наличие биологических звуков кажется нелогичным.

Рекомендуется:

  1. Удалить кошачьи звуки из конфигурации IPC
  2. Рассмотреть возможность замены их на синтезированные или механические аналоги, если требуется похожая функциональность
Resources/Prototypes/Voice/speech_emotes.yml (2)

377-385: Добавьте тег Dog для эмоций Mars и Wurble

Как было отмечено в предыдущем обзоре, рекомендуется добавить тег Dog к эмоциям Mars и Wurble, так как они уже имеют теги Bird и Cat.

  tags:
  - Bird
  - Cat
+ - Dog

Also applies to: 393-400


231-236: Обновление компонентов для эмоций машин

Корректное добавление компонента Silicon для эмоций машин, но рекомендуется:

  1. Проверить необходимость добавления других компонентов для роботов
  2. Убедиться, что все эмоции машин имеют одинаковый набор компонентов в whitelist

Also applies to: 250-256, 311-317, 363-369

✅ Verification successful

This script will help us find all component whitelists and blacklists in yaml files to verify the consistency of machine-related emotes.

This will show us the complete content of the speech emotes file to analyze the context and patterns of component usage.


Компоненты для эмоций машин корректно обновлены

Проверка показала, что все эмоции машин (Beep, Boop, Chime, Buzz, Buzz-Two, Ping, Whirr) имеют одинаковый набор компонентов в whitelist:

  • BorgChassis
  • Silicon

Также компоненты BorgChassis и Silicon корректно добавлены в blacklist для DefaultDeathgasp и используются в whitelist для SiliconDeathgasp.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск всех эмоций с компонентами BorgChassis или Silicon
rg "components:(\s+-.+)+" --type yaml | rg -A 2 "BorgChassis|Silicon"

Length of output: 71


Script:

#!/bin/bash
# Поиск файлов yaml с эмоциями
fd -e yml -e yaml | xargs cat | grep -A 5 "whitelist:\|blacklist:" | grep -A 2 "components:"

Length of output: 16523


Script:

#!/bin/bash
# Поиск конкретного файла с эмоциями
cat Resources/Prototypes/Voice/speech_emotes.yml

Length of output: 8434

Copy link
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
Content.Client/Options/UI/Tabs/MiscTab.xaml.cs (3)

64-86: Улучшить стиль комментариев и структуру кода

Инициализация меню эмоций реализована корректно, но есть замечания по стилю:

  1. Комментарии "WD EDIT" нарушают единообразие кодовой базы
  2. Большой блок кода можно разбить на отдельные методы для улучшения читаемости

Предлагаю выделить инициализацию в отдельный метод:

-            // WD EDIT START
-            id = 0;
-            var emotesMenuStyle = _cfg.GetCVar(WhiteCVars.EmotesMenuStyle);
-            foreach (var type in Enum.GetValues(typeof(EmotesMenuType)))
-            {
-                var name = type.ToString()!;
-                EmotesMenuType.AddItem(name, id);
-
-                if (name == emotesMenuStyle)
-                    EmotesMenuType.SelectId(id);
-
-                EmotesMenuType.SetItemMetadata(id, name);
-
-                id++;
-            }
-
-            EmotesMenuType.OnItemSelected += args =>
-            {
-                EmotesMenuType.SelectId(args.Id);
-                UpdateApplyButton();
-            };
-            // WD EDIT END
+            InitializeEmotesMenu();
+
+private void InitializeEmotesMenu()
+{
+    var id = 0;
+    var emotesMenuStyle = _cfg.GetCVar(WhiteCVars.EmotesMenuStyle);
+    
+    foreach (var type in Enum.GetValues(typeof(EmotesMenuType)))
+    {
+        var name = type.ToString()!;
+        EmotesMenuType.AddItem(name, id);
+        
+        if (name == emotesMenuStyle)
+            EmotesMenuType.SelectId(id);
+            
+        EmotesMenuType.SetItemMetadata(id, name);
+        id++;
+    }
+    
+    EmotesMenuType.OnItemSelected += args =>
+    {
+        EmotesMenuType.SelectId(args.Id);
+        UpdateApplyButton();
+    };
+}

196-199: Сохранение настроек реализовано корректно

Логика сохранения типа меню эмоций реализована правильно, но стоит удалить комментарии "WD EDIT" для поддержания единого стиля кода.


209-209: Обновление состояния кнопки реализовано верно

Проверка изменений типа меню эмоций корректно интегрирована в логику обновления состояния кнопки применения. Рекомендуется удалить комментарии "WD EDIT" для поддержания единого стиля.

Also applies to: 233-233

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 52a8434 and b2d9fdb.

📒 Files selected for processing (5)
  • Content.Client/Options/UI/Tabs/MiscTab.xaml (1 hunks)
  • Content.Client/Options/UI/Tabs/MiscTab.xaml.cs (5 hunks)
  • Content.Shared/_White/CVars.cs (1 hunks)
  • Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (3 hunks)
  • Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
  • Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml
  • Content.Shared/_White/CVars.cs
  • Content.Client/Options/UI/Tabs/MiscTab.xaml
  • Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
🔇 Additional comments (1)
Content.Client/Options/UI/Tabs/MiscTab.xaml.cs (1)

4-4: Импорт корректен!

Добавление пространства имен для EmotesMenuType логично структурировано и необходимо для новой функциональности.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant