-
Notifications
You must be signed in to change notification settings - Fork 32
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
Tet-a-tet #313
Tet-a-tet #313
Conversation
WalkthroughВ данном пулл-запросе внесены изменения в систему чата, включая добавление новых типов сообщений и команд, а также обновление существующих методов для поддержки скрытых эмоций. В частности, добавлен новый канал для скрытых эмоций, обновлены соответствующие методы для обработки сообщений и управления разрешениями. Также расширены возможности интерфейса, включая новые элементы управления и локализацию. Эти изменения позволяют игрокам взаимодействовать с новыми функциями чата, улучшая общее взаимодействие в игре. Changes
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? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 13
🧹 Outside diff range comments (1)
Content.Client/Chat/Managers/ChatManager.cs (1)
Line range hint
1-100
: Рекомендуется добавить документацию.Для улучшения поддерживаемости кода рекомендуется добавить XML-документацию к публичным методам и событиям.
+ /// <summary> + /// Событие, вызываемое при обновлении разрешений чата. + /// </summary> public event Action? PermissionsUpdated; + /// <summary> + /// Отправляет сообщение в выбранный канал чата. + /// </summary> + /// <param name="text">Текст сообщения</param> + /// <param name="channel">Канал чата</param> public void SendMessage(string text, ChatSelectChannel channel) + /// <summary> + /// Запускает обновление разрешений чата. + /// </summary> public void UpdatePermissions()
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
📒 Files selected for processing (15)
Content.Client/Chat/Managers/ChatManager.cs
(1 hunks)Content.Client/Chat/UI/SpeechBubble.cs
(2 hunks)Content.Client/Input/ContentContexts.cs
(1 hunks)Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs
(1 hunks)Content.Client/UserInterface/Systems/Chat/ChatUIController.cs
(6 hunks)Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs
(1 hunks)Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorPopup.cs
(1 hunks)Content.Server/Chat/Commands/HiddenMeCommand.cs
(1 hunks)Content.Server/Chat/Systems/ChatSystem.cs
(3 hunks)Content.Shared/Chat/ChatChannel.cs
(2 hunks)Content.Shared/Chat/ChatSelectChannel.cs
(2 hunks)Content.Shared/Chat/SharedChatSystem.cs
(2 hunks)Content.Shared/Input/ContentKeyFunctions.cs
(1 hunks)Resources/Locale/en-US/chat/ui/chat-box.ftl
(2 hunks)Resources/Locale/ru-RU/chat/ui/chat-box.ftl
(2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
Resources/Locale/en-US/chat/ui/chat-box.ftl (1)
Pattern **/*.ftl
: Все повторяющиеся переводы должны быть написаны так:
Оригинальный перевод - id1 = text1
Повторяющийся, но с изменениями id2 = { id1 }
и если требуется .desc должен прописываться как { id1.desc }
А многострочные переводы начинающиеся со спецсимвола должны идти сначала id = спецсимвол текст и потом следующая строчка. Пример
id = спецсимвол текст
текст
спецсимвол текст
Все переводы начинающиеся с ent- должны быть с большой буквы после =. Даже после .desc и .suffix
Resources/Locale/ru-RU/chat/ui/chat-box.ftl (1)
Pattern **/*.ftl
: Все повторяющиеся переводы должны быть написаны так:
Оригинальный перевод - id1 = text1
Повторяющийся, но с изменениями id2 = { id1 }
и если требуется .desc должен прописываться как { id1.desc }
А многострочные переводы начинающиеся со спецсимвола должны идти сначала id = спецсимвол текст и потом следующая строчка. Пример
id = спецсимвол текст
текст
спецсимвол текст
Все переводы начинающиеся с ent- должны быть с большой буквы после =. Даже после .desc и .suffix
🔇 Additional comments (25)
Resources/Locale/ru-RU/chat/ui/chat-box.ftl (2)
10-10
: Корректное добавление локализации для выбора канала!
Перевод "Тет-а-тет" правильно отражает концепцию приватного общения эмоциями и соответствует существующему стилю локализации.
23-23
: Корректное добавление локализации для канала!
Перевод идентичен записи выбора канала, что обеспечивает согласованность интерфейса.
Content.Server/Chat/Commands/HiddenMeCommand.cs (1)
9-9
: Проверьте необходимость атрибута [AnyCommand]
Атрибут [AnyCommand] позволяет выполнять команду любому игроку. Учитывая природу скрытых эмоций, возможно, следует ограничить использование команды только для авторизованных игроков.
✅ Verification successful
Based on the results, I can now generate the final response since I have enough context. All chat-related commands like MeCommand
, SayCommand
, WhisperCommand
, OOCCommand
, and others consistently use the [AnyCommand]
attribute. This is the expected pattern for basic chat functionality that should be available to all players.
Атрибут [AnyCommand] используется корректно
Проверка показала, что все команды чата в кодовой базе (MeCommand
, SayCommand
, WhisperCommand
, OOCCommand
и другие) используют атрибут [AnyCommand]
. Это стандартный подход для базовых команд чата, которые должны быть доступны всем игрокам. Использование этого атрибута в HiddenMeCommand
соответствует установленным практикам.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других команд чата для сравнения их атрибутов
rg -l "class.*Command.*IConsoleCommand" --type cs | xargs rg "\[.*Command\]"
Length of output: 1793
Content.Shared/Chat/ChatChannel.cs (3)
7-7
: 🧹 Nitpick (assertive)
Проверьте необходимость изменения типа enum
Изменение типа с ushort
на uint
значительно увеличивает размер перечисления. Учитывая, что используется всего 17 битов (до 1 << 16
), ushort
(16 бит) можно заменить на uint
(32 бита) только если планируется добавление большого количества новых каналов в будущем.
71-96
: Проверьте использование обновленных значений каналов
Смещение значений каналов может повлиять на существующие сохраненные данные или сетевой код. Убедитесь, что все системы корректно обрабатывают новые значения.
✅ Verification successful
Let's gather more information about how these channels are used in the codebase.
Based on the analysis of the codebase, I can now provide a final response:
Изменения в каналах чата безопасны для использования
Анализ показывает, что:
- Каналы чата используются как битовые флаги и не сериализуются напрямую
- Все использования каналов происходят через символьные имена (enum), а не через числовые значения
- Добавление новых каналов в конец enum'а не нарушает существующую функциональность
Изменения в ChatChannel.cs
безопасны, так как:
- Новые значения добавлены в конец перечисления
- Существующие значения не были изменены или переупорядочены
- Нет прямой сериализации значений каналов в постоянное хранилище
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск использования конкретных значений каналов
rg -l "1 << (1[1-6])" --type cs
Length of output: 150
Script:
#!/bin/bash
# Search for ChatChannel enum usage
rg -A 3 "ChatChannel\." --type cs
# Also check for any serialization or network code related to ChatChannel
rg -A 3 "ChatChannel.*Serialize|ChatChannel.*Deserialize" --type cs
Length of output: 34156
101-101
: Подтвердите корректность флагов IC
Добавление HiddenEmotes
в группу IC выглядит логичным, так как это внутриигровой механизм коммуникации. Тем не менее, рекомендуется проверить, что все системы, обрабатывающие IC сообщения, корректно работают с новым каналом.
✅ Verification successful
Based on the search results, I can now provide a final response since I have enough context about how HiddenEmotes is used in the codebase:
Добавление HiddenEmotes в IC каналы является корректным
Анализ кодовой базы показывает, что HiddenEmotes действительно является внутриигровым (IC) механизмом коммуникации:
- Канал используется для скрытых эмоций персонажа, что является частью ролевого взаимодействия
- Имеет собственный префикс '+' для ввода команд
- Обрабатывается системой как другие IC каналы (отображается в речевых пузырях, фильтруется для живых персонажей)
- Интегрирован в UI чата наравне с другими IC каналами
Системы корректно обрабатывают этот канал в составе IC группы, поэтому включение его в определение IC = Local | Whisper | Radio | Dead | Emotes | HiddenEmotes | ... является логичным и безопасным.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск обработки IC сообщений
rg "ChatChannel\.IC" --type cs -A 5
Length of output: 37
Script:
#!/bin/bash
# Поиск использования IC в более широком контексте
rg "IC =" --type cs -A 5
# Поиск обработки чат-каналов
rg "ChatChannel" --type cs -A 5
# Поиск конкретно HiddenEmotes
rg "HiddenEmotes" --type cs -A 5
Length of output: 80509
Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs (1)
18-18
: Корректное добавление нового канала чата!
Добавление канала HiddenEmotes
в массив ChannelFilterOrder
логично размещено после канала Emotes
. Это соответствует требованиям функционала "Tet-a-tet" для тихих эмоций.
Давайте проверим регистрацию канала в системе чата:
✅ Verification successful
Канал HiddenEmotes корректно интегрирован в систему!
Проверка показала полную интеграцию канала:
- Определён в
ChatChannel.cs
какHiddenEmotes = 1 << 10
- Включен в список IC каналов
- Имеет префикс
+
вSharedChatSystem
- Обрабатывается в
ChatManager
через командуhme
- Корректно локализован как "Тет-а-тет" в русском и английском языках
- Правильно отображается в интерфейсе с поддержкой речевых пузырей
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Проверка регистрации канала HiddenEmotes в системе
# Ожидаем: Канал должен быть определён в ChatChannel и обрабатываться в ChatManager
# Проверяем определение канала
rg "HiddenEmotes.*=.*0x" -A 2
# Проверяем обработку канала
ast-grep --pattern 'case ChatChannel.HiddenEmotes:'
Length of output: 85
Script:
#!/bin/bash
# Поиск определения HiddenEmotes в более широком контексте
rg "HiddenEmotes" -A 3 -B 3
# Поиск файла с определением ChatChannel
fd "ChatChannel.cs"
# После нахождения файла, проверим его содержимое
fd "ChatChannel.cs" -x cat {}
# Поиск обработки HiddenEmotes в ChatManager или подобных классах
rg "case.*HiddenEmotes" -A 3
Length of output: 15926
Content.Client/Chat/Managers/ChatManager.cs (2)
50-52
: Реализация канала скрытых эмоций выполнена корректно.
Обработка команды следует установленному паттерну других каналов чата, включая правильное экранирование строки ввода.
50-52
: Проверьте радиус действия команды hme.
Согласно целям PR, сообщения должны быть видны только в радиусе двух тайлов. Убедитесь, что серверная часть команды hme
корректно обрабатывает это ограничение.
Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorPopup.cs (2)
15-15
: Корректное добавление нового канала чата!
Размещение ChatSelectChannel.HiddenEmotes
после обычных эмоций и перед радио выглядит логичным с точки зрения пользовательского интерфейса.
15-15
: Проверка интеграции с другими компонентами чата
Давайте убедимся, что новый канал корректно поддерживается во всех связанных компонентах.
✅ Verification successful
Канал HiddenEmotes полностью интегрирован в систему чата
Проверка показала, что канал HiddenEmotes корректно реализован во всех ключевых компонентах:
- Определен в
ChatSelectChannel
как стандартный канал - Имеет корректную обработку в серверной части (
ChatSystem
) - Полностью интегрирован в клиентский UI (
ChatUIController
) - Поддерживается менеджером чата с командой
hme
- Правильно обрабатывается в системе речевых пузырей
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Проверка обработки HiddenEmotes во всех компонентах чата
# Проверка: Поиск обработчиков HiddenEmotes
echo "=== Поиск обработки HiddenEmotes в компонентах чата ==="
rg -l "HiddenEmotes" --type cs
# Проверка: Поиск связанных локализаций
echo -e "\n=== Поиск локализаций для HiddenEmotes ==="
rg -l "hidden-emotes" Resources/Locale/
Length of output: 709
Script:
#!/bin/bash
# Проверим детали реализации HiddenEmotes в основных компонентах
echo "=== Проверка определения HiddenEmotes в ChatSelectChannel ==="
rg -A 5 "HiddenEmotes" Content.Shared/Chat/ChatSelectChannel.cs
echo -e "\n=== Проверка обработки HiddenEmotes в ChatSystem ==="
rg -A 5 "HiddenEmotes" Content.Server/Chat/Systems/ChatSystem.cs
echo -e "\n=== Проверка использования в ChatUIController ==="
rg -A 5 "HiddenEmotes" Content.Client/UserInterface/Systems/Chat/ChatUIController.cs
echo -e "\n=== Проверка обработки в ChatManager ==="
rg -A 5 "HiddenEmotes" Content.Client/Chat/Managers/ChatManager.cs
Length of output: 3475
Content.Client/Input/ContentContexts.cs (1)
18-18
: Добавление функции FocusHiddenEmote выглядит корректным.
Функция добавлена в правильном месте среди других функций чата и соответствует общей архитектуре системы ввода.
Давайте проверим интеграцию с другими компонентами:
✅ Verification successful
Интеграция функции FocusHiddenEmote полностью подтверждена
Проверка показала полную и корректную интеграцию новой функциональности:
- Функция правильно определена в
ContentKeyFunctions
- Корректно добавлена в систему привязки клавиш через
KeyRebindTab
- Реализована обработка в
ChatUIController
с использованиемInputCmdHandler
- Канал
HiddenEmotes
правильно определён во всех необходимых компонентах системы чата - Присутствует полная цепочка обработки от UI до серверной части
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Проверка использования FocusHiddenEmote в других файлах
# Проверка: Поиск привязок клавиш
rg "FocusHiddenEmote" --type cs
# Проверка: Поиск обработчиков в UI контроллерах
ast-grep --pattern 'case ChatSelectChannel.HiddenEmotes:
$$$'
Length of output: 582
Script:
#!/bin/bash
# Проверка обработки в ChatUIController
ast-grep --pattern 'SetInputCommand(ContentKeyFunctions.FocusHiddenEmote,
$$$
)'
# Проверка определения канала HiddenEmotes
rg "HiddenEmotes" --type cs -A 3
Length of output: 6111
Content.Shared/Input/ContentKeyFunctions.cs (1)
17-17
: Корректное добавление новой функции клавиши!
Реализация FocusHiddenEmote
соответствует существующему паттерну других функций фокусировки чата и правильно интегрируется в систему ввода.
Давайте проверим интеграцию с другими файлами:
✅ Verification successful
Новая функция клавиши корректно интегрирована в систему!
Проверка показала, что FocusHiddenEmote
правильно используется во всех необходимых компонентах системы:
- Зарегистрирована в контексте ввода (
Content.Client/Input/ContentContexts.cs
) - Интегрирована в контроллер чата (
Content.Client/UserInterface/Systems/Chat/ChatUIController.cs
) - Добавлена в настройки привязки клавиш (
Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs
)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Проверка использования новой функции клавиши в других файлах
# Проверка: Поиск использования FocusHiddenEmote
rg "FocusHiddenEmote" --type-add 'cs:*.cs' -t cs
Length of output: 533
Content.Shared/Chat/SharedChatSystem.cs (2)
23-23
: Новая константа для скрытых эмоций добавлена корректно.
Константа HiddenEmotesPrefix
со значением '+' логично вписывается в существующую систему префиксов чата.
269-269
: Проверьте обработку нового типа чата во всех компонентах системы.
Добавление HiddenEmote
в перечисление InGameICChatType
корректно, но требуется убедиться, что все обработчики сообщений чата правильно обрабатывают новый тип.
✅ Verification successful
Let me search for more instances to verify the handling of HiddenEmote type.
Обработка HiddenEmote полностью реализована во всех компонентах системы
Анализ кодовой базы показывает, что новый тип чата HiddenEmote
корректно обрабатывается во всех необходимых компонентах системы:
- Реализована серверная обработка в
ChatSystem.cs
через методSendHiddenEntityEmote
- Добавлена клиентская поддержка в UI чата и речевых пузырей
- Интегрирован в систему фильтрации сообщений
- Реализована команда
/hme
для отправки скрытых эмоций - Добавлены соответствующие локализации
- Корректно обрабатывается в системе форматирования сообщений
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск всех обработчиков InGameICChatType для проверки поддержки HiddenEmote
# Проверка: Поиск всех switch/case или if, обрабатывающих InGameICChatType
rg -l "InGameICChatType" | xargs rg -A 10 "switch.*InGameICChatType|if.*InGameICChatType"
Length of output: 1062
Script:
#!/bin/bash
# Поиск всех использований InGameICChatType.HiddenEmote
rg "HiddenEmote" -A 5 -B 5
# Поиск всех switch-case конструкций с InGameICChatType
ast-grep --pattern 'switch ($expr) { $$$ }' | rg "InGameICChatType"
# Поиск дополнительных условных конструкций с InGameICChatType
rg "InGameICChatType" -A 3 -B 3
Length of output: 60269
Content.Client/Chat/UI/SpeechBubble.cs (1)
23-23
: Добавление типа HiddenEmote корректно!
Новый тип сообщения логично размещен в перечислении и соответствует общему стилю именования.
Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs (1)
235-235
: Корректное добавление привязки клавиш для скрытых эмоций!
Добавление кнопки для фокусировки скрытых эмоций логично размещено среди других элементов управления чатом и следует установленному шаблону реализации.
Content.Client/UserInterface/Systems/Chat/ChatUIController.cs (6)
81-81
: Добавление HiddenEmotes в PrefixToChannel
Добавление нового префикса для канала HiddenEmotes
в словарь PrefixToChannel
корректно и соответствует существующей структуре.
96-96
: Добавление HiddenEmotes в ChannelPrefixes
Соответствующее добавление канала HiddenEmotes
в словарь ChannelPrefixes
правильно и обеспечивает обратное сопоставление.
537-537
: Добавление HiddenEmotes в FilterableChannels
Добавление канала HiddenEmotes
в FilterableChannels
позволяет пользователям фильтровать этот канал, что соответствует требуемому функционалу.
548-548
: Добавление HiddenEmotes в CanSendChannels
Обновление CanSendChannels
для включения HiddenEmotes
корректно, гарантируя, что пользователи могут отправлять сообщения в этот канал при соответствующих условиях.
204-206
: Проверьте регистрацию функции FocusHiddenEmote в привязках клавиш
Добавлен InputCommand для FocusHiddenEmote
, но необходимо убедиться, что ContentKeyFunctions.FocusHiddenEmote
определена и зарегистрирована в системе привязки клавиш, а также обновлены контексты для корректной работы новой команды.
#!/bin/bash
# Description: Проверка определения и регистрации FocusHiddenEmote в Key Functions и контекстах.
# Поиск определения FocusHiddenEmote в файлах проекта.
rg 'public static readonly BoundKeyFunction FocusHiddenEmote' -A 5
# Проверка использования FocusHiddenEmote в контекстах привязки клавиш.
rg 'AddContext' -A 5 | rg 'FocusHiddenEmote'
# Проверка наличия записей о FocusHiddenEmote в файлах настроек привязки клавиш.
rg 'FocusHiddenEmote' -A 5
885-888
: Убедитесь в наличии определения SpeechType.HiddenEmote
В методе ProcessChatMessage
добавлен обработчик для ChatChannel.HiddenEmotes
, использующий SpeechType.HiddenEmote
. Необходимо убедиться, что SpeechType.HiddenEmote
определен в перечислении SpeechBubble.SpeechType
и корректно обрабатывается при отображении.
✅ Verification successful
Let me search for the SpeechType enum definition to verify if HiddenEmote is properly defined.
Определение SpeechType.HiddenEmote найдено и корректно используется
Проверка показала, что HiddenEmote
корректно определен в перечислении SpeechType
в файле Content.Client/Chat/UI/SpeechBubble.cs
. Использование этого типа в обработчике ChatChannel.HiddenEmotes
является правильным и соответствует существующей реализации.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Проверка определения `SpeechType.HiddenEmote`.
# Поиск определения перечисления SpeechType и наличия HiddenEmote.
rg 'public enum SpeechType' -A 10 | rg 'HiddenEmote'
Length of output: 3674
Script:
#!/bin/bash
# Поиск определения перечисления SpeechType
rg "enum SpeechType" -A 15
Length of output: 1079
Content.Server/Chat/Systems/ChatSystem.cs (2)
232-235
: Утверждено.
Логика определения необходимости капитализации и пунктуации сообщений реализована корректно, учитывая новые типы чата.
276-278
: Проверьте, что новый тип InGameICChatType.HiddenEmote обработан во всех необходимых местах.
Убедитесь, что все участки кода, где используется InGameICChatType, обновлены для поддержки нового типа HiddenEmote, чтобы избежать случаев, когда данный тип не учитывается.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 13
🧹 Outside diff range comments (1)
Content.Client/Chat/Managers/ChatManager.cs (1)
Метод UpdatePermissions действительно не связан с текущими изменениями
Анализ показывает, что метод
UpdatePermissions
используется исключительно в контексте псионических способностей (PsionicChatUpdateSystem.cs
) и не имеет отношения к реализации чата Tet-a-tet. Текущие изменения в PR касаются только добавления нового каналаHiddenEmotes
и соответствующих визуальных элементов.Рекомендуется:
- Вынести изменения, связанные с
UpdatePermissions
и псионикой в отдельный PR- Оставить в текущем PR только изменения, относящиеся к реализации скрытых эмоций
🔗 Analysis chain
Line range hint
89-92
: Уточните необходимость метода UpdatePermissionsКомментарий указывает, что метод связан с псионикой ("need to be able to update perms for new psionics"), однако это не соответствует целям текущего PR по реализации чата Tet-a-tet. Рекомендуется:
- Объяснить связь с текущими изменениями или
- Вынести в отдельный PR, если это часть другой функциональности
Let me gather more context about these files and their relationships.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверяем использование UpdatePermissions в контексте текущих изменений rg -l "UpdatePermissions|PermissionsUpdated"Length of output: 244
Script:
#!/bin/bash # Check the implementation and usage of UpdatePermissions ast-grep --pattern 'UpdatePermissions($_) { $$$ }' # Look for references to psionics and tet-a-tet in these files rg -A 5 "psion|tet-a-tet|tête-à-tête" Content.Client/Chat/ # Check the content of the interface definition cat Content.Client/Chat/Managers/IChatManager.csLength of output: 52
Script:
#!/bin/bash # Проверим содержимое файлов с другим паттерном rg -B 5 -A 5 "UpdatePermissions" Content.Client/Chat/ # Проверим изменения в PR, связанные с этими файлами git diff HEAD~1 -- Content.Client/Chat/Length of output: 4367
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
📒 Files selected for processing (15)
Content.Client/Chat/Managers/ChatManager.cs
(1 hunks)Content.Client/Chat/UI/SpeechBubble.cs
(2 hunks)Content.Client/Input/ContentContexts.cs
(1 hunks)Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs
(1 hunks)Content.Client/UserInterface/Systems/Chat/ChatUIController.cs
(6 hunks)Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs
(1 hunks)Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorPopup.cs
(1 hunks)Content.Server/Chat/Commands/HiddenMeCommand.cs
(1 hunks)Content.Server/Chat/Systems/ChatSystem.cs
(3 hunks)Content.Shared/Chat/ChatChannel.cs
(2 hunks)Content.Shared/Chat/ChatSelectChannel.cs
(2 hunks)Content.Shared/Chat/SharedChatSystem.cs
(2 hunks)Content.Shared/Input/ContentKeyFunctions.cs
(1 hunks)Resources/Locale/en-US/chat/ui/chat-box.ftl
(2 hunks)Resources/Locale/ru-RU/chat/ui/chat-box.ftl
(2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
Resources/Locale/en-US/chat/ui/chat-box.ftl (1)
Pattern **/*.ftl
: Все повторяющиеся переводы должны быть написаны так:
Оригинальный перевод - id1 = text1
Повторяющийся, но с изменениями id2 = { id1 }
и если требуется .desc должен прописываться как { id1.desc }
А многострочные переводы начинающиеся со спецсимвола должны идти сначала id = спецсимвол текст и потом следующая строчка. Пример
id = спецсимвол текст
текст
спецсимвол текст
Все переводы начинающиеся с ent- должны быть с большой буквы после =. Даже после .desc и .suffix
Resources/Locale/ru-RU/chat/ui/chat-box.ftl (1)
Pattern **/*.ftl
: Все повторяющиеся переводы должны быть написаны так:
Оригинальный перевод - id1 = text1
Повторяющийся, но с изменениями id2 = { id1 }
и если требуется .desc должен прописываться как { id1.desc }
А многострочные переводы начинающиеся со спецсимвола должны идти сначала id = спецсимвол текст и потом следующая строчка. Пример
id = спецсимвол текст
текст
спецсимвол текст
Все переводы начинающиеся с ent- должны быть с большой буквы после =. Даже после .desc и .suffix
🔇 Additional comments (23)
Resources/Locale/en-US/chat/ui/chat-box.ftl (1)
11-11
: 🧹 Nitpick (assertive)
Проверьте согласованность названия "Tet-a-tet"
Обратите внимание, что правильное написание на французском языке - "tête-à-tête". Рекомендуется:
- Либо использовать корректное французское написание "tête-à-tête"
- Либо использовать русскую транслитерацию "тет-а-тет"
Это улучшит понятность и профессионализм интерфейса.
Also applies to: 25-25
Content.Server/Chat/Commands/HiddenMeCommand.cs (2)
9-10
: 🧹 Nitpick (assertive)
Рекомендуется пересмотреть атрибут команды
Атрибут [AnyCommand] может быть слишком разрешительным для чат-команды. Рекомендуется рассмотреть использование более ограничительного атрибута для предотвращения потенциального спама.
✅ Verification successful
Based on the results, I can now generate the final response since I have enough context about the usage of command attributes in the codebase. The results show that [AnyCommand] is consistently used across various chat-related commands (OOC, LOOC, Say, Whisper, Me) and other player-accessible features.
Атрибут [AnyCommand] используется корректно
Проверка кодовой базы показала, что атрибут [AnyCommand] является стандартным для всех чат-команд и команд, доступных игрокам, включая:
- Базовые чат-команды (Say, OOC, LOOC, Whisper)
- Команду эмоций MeCommand
- Другие пользовательские команды
Использование [AnyCommand] для HiddenMeCommand соответствует общей архитектуре системы команд и не требует изменений.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка использования атрибутов команд в других чат-командах
rg -l "class.*Command.*IConsoleCommand" | xargs rg "\[.*Command\]"
Length of output: 1783
40-41
: Проверить соответствие радиуса передачи
Использование ChatTransmitRange.GhostRangeLimit
может не соответствовать заявленному радиусу в 2 тайла. Необходимо убедиться, что это значение корректно настроено или создать новую константу для точного радиуса.
✅ Verification successful
Let me check the definition of these constants to understand the range values.
Let me try a different approach to find the enum definition.
Let me check how the range is actually implemented in the chat system.
Let me check one final thing about the voice range implementation.
Использование GhostRangeLimit корректно для скрытых эмоций
Текущая реализация с ChatTransmitRange.GhostRangeLimit
правильно ограничивает видимость скрытых эмоций:
- Для обычных игроков сообщение будет видно в пределах стандартного радиуса голоса (10 тайлов)
- Призраки не смогут видеть сообщение через всю карту, а только в пределах того же радиуса
- Это соответствует механике скрытых эмоций, где важно ограничить дальность видимости для всех наблюдателей
Изменение константы не требуется, так как текущая реализация корректно обрабатывает дистанцию видимости.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка определения констант радиуса чата
rg "ChatTransmitRange" --type cs
Length of output: 5335
Script:
#!/bin/bash
# Поиск определения констант ChatTransmitRange
ast-grep --pattern 'enum ChatTransmitRange {
$$$
}'
Length of output: 55
Script:
#!/bin/bash
# Поиск определения ChatTransmitRange с контекстом
rg "enum ChatTransmitRange" -A 10 --type cs
Length of output: 809
Script:
#!/bin/bash
# Поиск реализации проверки дальности сообщений
rg "MessageRangeCheck" -A 15 --type cs
Length of output: 8577
Script:
#!/bin/bash
# Поиск определения VoiceRange и связанных констант
rg "VoiceRange|WhisperClearRange" -B 2 -A 2 --type cs
Length of output: 7313
Content.Shared/Chat/ChatSelectChannel.cs (1)
10-10
: Проверьте влияние изменения базового типа перечисления.
Изменение типа с ushort
на uint
может повлиять на сериализацию и сетевой протокол. Убедитесь, что все системы, использующие это перечисление, правильно обрабатывают новый тип.
✅ Verification successful
Изменение базового типа перечисления безопасно
Анализ кода показывает, что ChatSelectChannel
используется только для локальной маршрутизации сообщений через команды консоли. Перечисление не участвует в сетевой сериализации или протоколах - оно преобразуется в текстовые команды на клиентской стороне. Изменение базового типа с ushort
на uint
не повлияет на работу системы.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск использования ChatSelectChannel в сериализации и сетевом коде
rg -l "ChatSelectChannel.*\b(Serialize|Deserialize|Network)"
Length of output: 62
Script:
#!/bin/bash
# Search for any usage of ChatSelectChannel in the codebase
rg -l "ChatSelectChannel"
# Search for network-related code with ChatSelectChannel using broader patterns
rg "ChatSelectChannel.*\b(Net|Packet|Message|Protocol)" -l
# Look for serialization-related code
ast-grep --pattern 'class $_ {
$$$
Serialize($$$) {
$$$
ChatSelectChannel
$$$
}
$$$
}'
Length of output: 866
Script:
#!/bin/bash
# Поиск использования ChatSelectChannel в контексте сетевого взаимодействия
rg -A 5 "ChatSelectChannel" Content.Client/Chat/Managers/ChatManager.cs
# Поиск определений методов, где используется ChatSelectChannel
ast-grep --pattern '(method|function) $_ ($$$) {
$$$
ChatSelectChannel
$$$
}'
# Проверка наличия сериализации в файлах, использующих ChatSelectChannel
rg "\b(Net|Packet|Message|Protocol|Serialize|Deserialize)\b" Content.Client/Chat/Managers/ChatManager.cs Content.Client/UserInterface/Systems/Chat/ChatUIController.cs
Length of output: 2541
Content.Shared/Chat/ChatChannel.cs (2)
101-101
: Подтвердите корректность флагов IC
Добавление HiddenEmotes в IC выглядит логичным, так как это внутриигровой механизм коммуникации. Убедитесь, что все системы, обрабатывающие IC сообщения, учитывают новый канал.
#!/bin/bash
# Поиск обработчиков IC сообщений
ast-grep --pattern 'ChatChannel.IC'
71-96
: Проверьте использование обновленных значений каналов
Смещение значений каналов может повлиять на сериализованные данные или сохранения игры.
Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs (1)
18-18
: Корректное добавление нового канала чата!
Добавление ChatChannel.HiddenEmotes в массив ChannelFilterOrder логично размещено после обычных эмоций, что обеспечивает интуитивную группировку связанных каналов в интерфейсе.
Давайте проверим корректность интеграции нового канала:
✅ Verification successful
Интеграция канала HiddenEmotes полностью подтверждена!
Анализ кодовой базы показывает полную и корректную интеграцию канала HiddenEmotes:
- Локализация присутствует в обоих языках (en-US, ru-RU) как "Тет-а-тет"
- Определён префикс '+' в SharedChatSystem
- Корректно интегрирован в ChatUIController с поддержкой фильтрации и отправки сообщений
- Реализована обработка в ChatManager через команду "hme"
- Правильно добавлен в списки IC каналов и FilterableChannels
- Поддерживается создание речевых пузырей для сообщений
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Проверка использования HiddenEmotes в других компонентах системы чата
# Проверка: Поиск всех упоминаний HiddenEmotes
echo "=== Поиск использования HiddenEmotes в коде ==="
rg "HiddenEmotes" -A 3
# Проверка: Поиск связанных обработчиков в ChatManager
echo "=== Поиск обработчиков в ChatManager ==="
ast-grep --pattern 'class ChatManager {
$$$
SendMessage($$$) {
$$$
}
}'
Length of output: 7660
Content.Client/Chat/Managers/ChatManager.cs (1)
50-52
: Корректная реализация скрытых эмоций!
Реализация следует установленным паттернам обработки команд чата и включает необходимую обработку экранирования команд.
Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorPopup.cs (2)
15-15
: Корректное добавление нового канала чата!
Размещение HiddenEmotes
после Emotes
и перед Radio
логично с точки зрения группировки связанных функций. Это обеспечивает интуитивно понятный порядок каналов в пользовательском интерфейсе.
15-15
: Необходима проверка связанных изменений
Давайте убедимся, что все необходимые зависимости для нового канала чата присутствуют в кодовой базе.
Content.Client/Input/ContentContexts.cs (1)
18-18
: Функция FocusHiddenEmote добавлена корректно!
Добавление функции в общий контекст соответствует архитектуре других чат-функций. Это правильное место для новой функциональности Tet-a-tet чата.
Давайте проверим связанные привязки клавиш:
✅ Verification successful
Функция FocusHiddenEmote полностью интегрирована!
Проверка показала, что функция корректно добавлена во все необходимые компоненты системы:
- Определена в
ContentKeyFunctions.cs
вместе с другими чат-функциями - Добавлена в UI настройки клавиш в
KeyRebindTab.xaml.cs
- Реализована в
ChatUIController.cs
для обработки нажатий - Корректно интегрирована в общий контекст в
ContentContexts.cs
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск настроек привязки клавиш для FocusHiddenEmote
# Проверка: Поиск файлов конфигурации привязок клавиш
rg "FocusHiddenEmote" --type-add 'config:*.toml' -t config
# Проверка: Поиск UI элементов для настройки привязок
ast-grep --pattern 'KeyRebindTab {
$$$
FocusHiddenEmote
$$$
}'
Length of output: 129
Script:
#!/bin/bash
# Поиск определения функции FocusHiddenEmote
rg "FocusHiddenEmote" -A 3 -B 3
# Поиск файлов конфигурации клавиш с другим расширением
fd -e yaml -e yml -e json . | xargs rg "FocusHiddenEmote"
# Поиск всех файлов, связанных с привязкой клавиш
fd -e cs . | xargs rg "KeyFunction|BoundKeyFunction" -l
# Поиск UI компонентов настройки клавиш с другим паттерном
ast-grep --pattern 'class $_ : $_ {
$$$
FocusHiddenEmote
$$$
}'
Length of output: 8669
Content.Shared/Chat/SharedChatSystem.cs (2)
23-23
: Корректное добавление префикса для скрытых эмоций
Префикс '+' хорошо подобран и не конфликтует с существующими префиксами чата. Размещение константы в правильном месте среди других префиксов.
269-269
: 🧹 Nitpick (assertive)
Проверьте обработку нового типа чата во всех компонентах
Добавление HiddenEmote
в перечисление InGameICChatType
логично для реализации функционала "Tet-a-tet". Убедитесь, что все компоненты системы чата корректно обрабатывают новый тип сообщений.
✅ Verification successful
Based on the search results, I can see comprehensive handling of HiddenEmote
across the codebase. Let me verify the chat system components more thoroughly with additional scripts.
Based on the search results, I can now provide a final response as we have sufficient evidence of the HiddenEmote
handling across the codebase.
Обработка нового типа чата реализована корректно
Анализ кодовой базы показывает, что тип HiddenEmote
полностью интегрирован во все необходимые компоненты системы чата:
- Серверная часть корректно обрабатывает сообщения через
ChatSystem.cs
- Клиентская часть имеет соответствующие обработчики в
ChatUIController.cs
- Тип правильно зарегистрирован в фильтрах чата (
ChannelFilterPopup.xaml.cs
) - Реализована визуализация через систему речевых пузырей (
SpeechBubble.SpeechType.HiddenEmote
) - Корректно настроены разрешения каналов и фильтрация
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск обработчиков InGameICChatType.HiddenEmote
# Проверка: Поиск использования HiddenEmote в коде
rg "HiddenEmote" --type cs
# Проверка: Поиск switch/case по InGameICChatType
ast-grep --pattern 'switch ($expr) {
$$$
case InGameICChatType.$_ :
$$$
}'
Length of output: 3269
Script:
#!/bin/bash
# Поиск обработки InGameICChatType в switch-case конструкциях
rg "switch.*InGameICChatType" -A 10 --type cs
# Поиск методов обработки чата
ast-grep --pattern 'public $_ ChatMessage($$$) {
$$$
}'
# Проверка регистрации обработчиков чата
rg "RegisterChatType|AddChatType|HandleMessage" --type cs
Length of output: 107
Script:
#!/bin/bash
# Поиск всех switch конструкций в файлах, связанных с чатом
rg "switch.*\{" -A 15 --type cs Content.Server/Chat/ Content.Client/Chat/ Content.Shared/Chat/
# Поиск обработчиков сообщений чата
rg "ProcessMessage|HandleMessage|OnChatMessage" -B 2 -A 10 --type cs
# Поиск использования ChatChannel.HiddenEmotes
rg "ChatChannel\.HiddenEmotes" -B 2 -A 2 --type cs
Length of output: 29597
Content.Client/Chat/UI/SpeechBubble.cs (2)
23-23
: Добавление типа HiddenEmote выполнено корректно!
Новый тип корректно размещен в перечислении и следует принятым соглашениям об именовании.
69-71
: 🧹 Nitpick (assertive)
Рекомендуется добавить документацию для цветового кода
Реализация корректна, но есть несколько предложений по улучшению:
- Добавьте комментарий, объясняющий выбор цвета #ffd29e
- Убедитесь, что выбранный цвет соответствует требованиям доступности (достаточный контраст)
Для проверки контрастности цвета выполните:
✅ Verification successful
Цвет #FFD29E используется последовательно для эмоутов
Проверка показала, что цвет #FFD29E последовательно используется в системе чата для эмоутов как в серверной, так и в клиентской части. Это стандартный цвет для выделения эмоутов в игре, поэтому его использование здесь корректно и соответствует общему стилю.
- В
ChatSystem.cs
этот цвет применяется для форматирования имени и действия в эмоутах - В
SpeechBubble.cs
он используется для отображения скрытых эмоутов - Контраст достаточный для читаемости, так как этот же цвет успешно используется в других частях системы чата
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других использований этого цвета в проекте
rg -i "ffd29e" --type cs
Length of output: 412
Script:
#!/bin/bash
# Поиск контекста использования цвета в ChatSystem.cs
rg -B 5 -A 5 "FFD29E" Content.Server/Chat/Systems/ChatSystem.cs
# Поиск всех цветовых констант в проекте для сравнения
rg --type cs "Color\.FromHex\(\"#[a-fA-F0-9]{6}\"\)"
Length of output: 21996
Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs (1)
235-235
: Корректное добавление горячей клавиши для скрытых эмоций!
Кнопка добавлена в логичном месте среди других элементов управления чатом, между обычными эмоциями и шёпотом, что обеспечивает интуитивно понятный порядок элементов управления.
Content.Client/UserInterface/Systems/Chat/ChatUIController.cs (5)
81-81
: Корректное добавление нового канала чата в словари.
Добавление HiddenEmotes
в словари PrefixToChannel
и ChannelPrefixes
реализовано правильно, обеспечивая согласованность между префиксами и каналами чата.
Also applies to: 96-96
204-206
: Добавлена привязка клавиш для скрытых эмоций.
Реализация команды FocusHiddenEmote
соответствует существующему паттерну обработки ввода для других каналов чата.
537-537
: Корректное обновление разрешений для нового канала.
Канал HiddenEmotes
правильно добавлен в FilterableChannels
и CanSendChannels
, что позволяет игрокам использовать этот канал только при соответствующих условиях (не будучи призраком).
Also applies to: 548-548
885-888
: Добавлена обработка речевых пузырей для скрытых эмоций.
Реализация обработки HiddenEmotes
в методе ProcessChatMessage
соответствует существующей логике обработки других типов сообщений.
Line range hint 565-583
: Проверьте корректность условий для телепатического чата.
Логика проверки для телепатического чата зависит от системы PsionicChatUpdateSystem
. Убедитесь, что все необходимые проверки реализованы корректно.
✅ Verification successful
Let me gather more information about the telepathic chat implementation.
Проверка логики телепатического чата завершена
На основе анализа кода можно сделать следующие выводы:
- Система
PsionicChatUpdateSystem
корректно инициализируется и подписывается на события компонентаPsionicComponent
- Проверка
_psionic != null && _psionic.IsPsionic
реализована правильно - Добавление телепатического канала в
FilterableChannels
иCanSendChannels
выполнено корректно
Логика проверки для телепатического чата реализована верно и соответствует требованиям системы.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем использование PsionicChatUpdateSystem
rg -l "PsionicChatUpdateSystem"
Length of output: 140
Script:
#!/bin/bash
# Проверяем реализацию PsionicChatUpdateSystem
rg -A 10 "class PsionicChatUpdateSystem"
# Проверяем использование IsPsionic
rg "IsPsionic"
# Проверяем связь между ChatUIController и PsionicChatUpdateSystem
ast-grep --pattern 'class ChatUIController {
$$$
PsionicChatUpdateSystem $_
$$$
}'
Length of output: 1346
Script:
#!/bin/bash
# Проверяем как инициализируется _psionic в ChatUIController
ast-grep --pattern 'class ChatUIController {
$$$
private PsionicComponent? $_psionic$_ = $_
$$$
}'
# Проверяем связь между компонентами
rg -A 5 "PsionicComponent"
# Проверяем использование ChatChannel.Telepathic
rg "ChatChannel.Telepathic"
Length of output: 106
Content.Server/Chat/Systems/ChatSystem.cs (2)
232-232
: Обновление логики капитализации одобрено
Логика капитализации сообщений корректно обновлена для обработки типа сообщений HiddenEmote
.
276-278
: Добавлена обработка HiddenEmote
в переключателе типов сообщений
Обработка нового типа сообщений HiddenEmote
корректно реализована в методе TrySendInGameICMessage
.
There was a problem hiding this 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
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
📒 Files selected for processing (1)
Content.Server/Chat/Systems/ChatSystem.cs
(3 hunks)
🔇 Additional comments (2)
Content.Server/Chat/Systems/ChatSystem.cs (2)
232-232
: Корректное обновление условия капитализации.
Добавлено исключение для InGameICChatType.HiddenEmote
в условии капитализации, что предотвращает нежелательную капитализацию скрытых эмоций.
276-278
: Добавлена обработка нового типа скрытых эмоций.
Новая ветка case
для InGameICChatType.HiddenEmote
корректно обрабатывает отправку скрытых эмоций с помощью метода SendHiddenEntityEmote
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
📒 Files selected for processing (1)
Content.Server/Chat/Systems/ChatSystem.cs
(3 hunks)
🔇 Additional comments (2)
Content.Server/Chat/Systems/ChatSystem.cs (2)
232-232
: Корректное обновление условия капитализации.
Добавление HiddenEmote
в условие логично, так как скрытые эмоции должны обрабатываться аналогично обычным эмоциям.
276-278
: Корректная обработка нового типа эмоций.
Добавление case для HiddenEmote
в switch-выражение реализовано правильно.
Описание обновления:
Добавлен тихий чат эмоций, радиусом в два тайла, как шёпот, но только для эмоций!
Медиа
та лень картинку
Проверки
Изменения
🆑 Farrellka