-
Notifications
You must be signed in to change notification settings - Fork 150
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] [Balance] Mood Traits & Things #961
Conversation
WalkthroughВ данном запросе на изменение были удалены классы и перечисления, связанные с управлением настроением, включая Changes
Poem
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: 3
🧹 Outside diff range and nitpick comments (9)
Content.Server/Backmen/Traits/Assorted/ModifyMoodTraitComponent.cs (1)
12-16
: Рекомендуется добавить документацию для новых полейПредлагаю добавить XML-документацию для новых множителей, чтобы описать их влияние на систему настроения.
Предлагаемые изменения:
[DataField] +/// <summary> +/// Множитель, применяемый к положительным эффектам настроения. +/// </summary> public float GoodMoodMultiplier = 1.0f; [DataField] +/// <summary> +/// Множитель, применяемый к отрицательным эффектам настроения. +/// </summary> public float BadMoodMultiplier = 1.0f;Resources/Locale/ru-RU/backmen/trait/OwOAccent.ftl (1)
3-4
: Рекомендуется перенести записи OwO акцента в отдельный файлЗаписи OwO акцента находятся в файле с настроением, что нарушает организацию локализаций. Предлагается создать отдельный файл для акцентов.
Resources/Prototypes/_Backmen/Traits/neutral.yml (1)
18-50
: Рекомендации по улучшению системы черт настроения
- Добавьте документацию, описывающую влияние множителей на геймплей
- Стандартизируйте диапазоны множителей для поддержания баланса
- Рассмотрите возможность добавления событий или триггеров для активации эффектов черт
Хотите, чтобы я помог составить документацию по системе множителей настроения?
Resources/Locale/ru-RU/backmen/mood/mood.ftl (1)
37-38
: Новый эффект настроения соответствует требованиямПеревод корректен и хорошо вписывается в общий стиль игры. Эффект настроения логично размещен после других негативных черт характера.
Для улучшения читаемости кода предлагаю добавить пустую строку после нового эффекта:
mood-effect-TraitFortitude = Мне уже на всё плевать. + mood-effect-Dead = Вы мертвы.
Content.Server/Backmen/Mood/MoodComponent.cs (2)
51-61
: Рекомендуется добавить валидацию множителей настроенияНовые множители GoodMoodMultiplier и BadMoodMultiplier позволяют тонко настраивать влияние настроения, но стоит добавить проверку на отрицательные значения во избежание некорректного поведения.
Предлагаемые изменения:
[DataField] + [ViewVariables(VVAccess.ReadWrite)] public float GoodMoodMultiplier = 1.0f; [DataField] + [ViewVariables(VVAccess.ReadWrite)] public float BadMoodMultiplier = 1.0f;Также рекомендуется добавить проверку значений в конструкторе или методе Initialize():
private void ValidateMoodMultipliers() { if (GoodMoodMultiplier < 0) GoodMoodMultiplier = 0; if (BadMoodMultiplier < 0) BadMoodMultiplier = 0; }
63-67
: Улучшить документацию новых пороговых значенийДля полей BuffsMoodThreshold и ConsMoodThreshold следует добавить более подробную документацию, объясняющую их влияние на игровую механику.
Предлагаемые изменения:
[DataField] + /// <summary> + /// Пороговое значение настроения, при котором начинают действовать положительные эффекты. + /// Определяет минимальный уровень настроения для активации бонусов. + /// </summary> public MoodThreshold BuffsMoodThreshold = MoodThreshold.Good; [DataField] + /// <summary> + /// Пороговое значение настроения, при котором начинают действовать отрицательные эффекты. + /// Определяет максимальный уровень настроения для активации штрафов. + /// </summary> public MoodThreshold ConsMoodThreshold = MoodThreshold.Bad;Content.Server/Backmen/Mood/MoodSystem.cs (3)
163-163
: Удалите ненужную интерполяцию строк при использованииMoodId
Интерполяция строк не требуется, так как
MoodId
уже является строкой. Используйте простоcomponent.MoodId
без$""
.
315-318
: Устраните дублирование кода при расчете суммы настроенияЛогика вычисления
amount
в обоих циклах повторяется. Рассмотрите возможность объединить эту логику для повышения читаемости и поддерживаемости кода.Also applies to: 323-326
464-471
: Убедитесь, чтоBuffsMoodThreshold
больше или равенConsMoodThreshold
Для корректной работы метода
GetMovementThreshold
важно, чтобыBuffsMoodThreshold
было больше или равноConsMoodThreshold
. Проверьте настройки этих значений, чтобы избежать логических ошибок.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (9)
Content.Server/Backmen/Mood/MoodComponent.cs
(2 hunks)Content.Server/Backmen/Mood/MoodSystem.cs
(4 hunks)Content.Server/Backmen/Traits/Assorted/ModifyMoodTraitComponent.cs
(1 hunks)Resources/Locale/ru-RU/backmen/mood/mood.ftl
(1 hunks)Resources/Locale/ru-RU/backmen/trait/OwOAccent.ftl
(1 hunks)Resources/Prototypes/_Backmen/Mood/genericNegativeEffects.yml
(2 hunks)Resources/Prototypes/_Backmen/Traits/categories.yml
(1 hunks)Resources/Prototypes/_Backmen/Traits/disabilities.yml
(0 hunks)Resources/Prototypes/_Backmen/Traits/neutral.yml
(2 hunks)
💤 Files with no reviewable changes (1)
- Resources/Prototypes/_Backmen/Traits/disabilities.yml
🔇 Additional comments (11)
Resources/Prototypes/_Backmen/Traits/categories.yml (1)
1-4
: Структура и ограничения выглядят корректно
Категория черт характера определена правильно. Ограничение maxTraitPoints: 1 предотвращает накопление нескольких черт настроения у одного персонажа, что важно для баланса.
Content.Server/Backmen/Traits/Assorted/ModifyMoodTraitComponent.cs (2)
10-10
: Одобрено упрощение инициализации MoodId!
Удаление явной инициализации null делает код чище, при этом сохраняя nullable-семантику поля.
12-16
: Корректная реализация множителей настроения!
Новые поля GoodMoodMultiplier
и BadMoodMultiplier
хорошо вписываются в систему настроения:
- Значения по умолчанию 1.0f логичны и не меняют базовое поведение
- Поля правильно помечены атрибутом DataField
Resources/Locale/ru-RU/backmen/trait/OwOAccent.ftl (2)
1-1
: Корректное определение категории!
Название категории соответствует контексту и правильно локализовано.
5-10
: Проверьте тон описания депрессии и интеграцию с системой настроения
- Описание черты "Депрессия" использует слишком разговорный тон ("Чувак", "отстой"), что может не соответствовать общему стилю игры.
- Необходимо убедиться, что описания соответствуют механике влияния на настроение.
✅ Verification successful
Let me check the content of those YAML files to verify the integration.
Тон и механика реализованы корректно
Проверка показала, что:
- Все три черты корректно интегрированы в систему настроения через компонент
MoodModifyTrait
- Черты имеют соответствующие эффекты настроения в
genericNegativeEffects.yml
- Разговорный тон в описании депрессии допустим, так как он соответствует общему настроению и механике черты
TraitSaturnine
(самый сильный негативный модификатор -20)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка интеграции с системой настроения
# Description: Check mood system integration
# Поиск связанных прототипов черт
rg -l "Fortitude|Hypomania|Depression" --type yaml
# Поиск использования в системе настроения
ast-grep --pattern 'class MoodSystem {
$$$
$_(Fortitude|Hypomania|Depression)$_
$$$
}'
Length of output: 258
Script:
#!/bin/bash
# Check trait and mood system integration details
cat Resources/Prototypes/_Backmen/Traits/neutral.yml
cat Resources/Prototypes/_Backmen/Mood/genericNegativeEffects.yml
# Search for mood system implementation
rg -g "*.cs" "MoodSystem" -A 5
# Look for trait implementations
rg -g "*.cs" "Fortitude|Hypomania|Depression" -A 3
Length of output: 2806
Resources/Prototypes/_Backmen/Mood/genericNegativeEffects.yml (2)
66-67
: Значительное усиление эффекта SurgeryPain
Увеличение штрафа к настроению в два раза (-30 вместо -15) при одновременном уменьшении длительности (90 вместо 180) создает более острый, но кратковременный эффект. Это хорошо соответствует реальным ощущениям от хирургического вмешательства.
44-47
: Проверьте баланс нового эффекта настроения TraitFortitude
Постоянный отрицательный модификатор настроения -10 может быть слишком сильным для базовой черты характера. Рекомендуется рассмотреть возможность уменьшения значения или добавления компенсирующих бонусов.
✅ Verification successful
Let me check the trait definition and localization to better understand the balance context.
Отрицательный модификатор настроения TraitFortitude сбалансирован
Эффект является частью черты характера "Fortitude", которая уменьшает влияние всех эффектов настроения на 50% (goodMoodMultiplier: 0.5, badMoodMultiplier: 0.5). Постоянный отрицательный модификатор -10 компенсируется этим уменьшением влияния других эффектов, что делает персонажа более устойчивым к изменениям настроения. Это соответствует тематике черты характера, что подтверждается и локализацией "Мне уже на всё плевать".
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск связанных определений и использования TraitFortitude
rg -l "TraitFortitude"
Length of output: 178
Script:
#!/bin/bash
# Check the trait definition
cat Resources/Prototypes/_Backmen/Traits/neutral.yml
# Check the localization
cat Resources/Locale/ru-RU/backmen/mood/mood.ftl
Length of output: 4762
Resources/Prototypes/_Backmen/Traits/neutral.yml (2)
5-6
: Корректное обновление существующей черты характера
Добавление категории и стоимости для черты OwOAccent соответствует стандартному формату черт характера.
19-29
: Проверить балансировку множителей настроения
Черта Fortitude использует одинаковые множители 0.5 для хорошего и плохого настроения, что делает персонажа более эмоционально стабильным. Необходимо убедиться, что такое значение не делает систему настроения слишком пассивной.
✅ Verification successful
Множители настроения сбалансированы корректно
Анализ показывает, что множители 0.5 для черты Fortitude хорошо сбалансированы:
- В сравнении с TraitSanguine (множитель 1.5) значение 0.5 создает правильный контраст между разными типами личности
- Симметричные множители (0.5 для обоих типов настроения) соответствуют концепции эмоциональной стабильности
- Эффект TraitFortitude существует в системе и правильно интегрирован с отрицательным изменением настроения (-10)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем существование и реализацию TraitFortitude
rg "TraitFortitude" -A 5 "Resources/Prototypes/_Backmen/Mood/"
Length of output: 522
Script:
#!/bin/bash
# Поиск других черт с MoodModifyTrait для сравнения множителей
rg "MoodModifyTrait" -A 5 "Resources/Prototypes/_Backmen/Traits/"
# Поиск других эффектов настроения для TraitFortitude
rg "TraitFortitude" "Resources/Prototypes/_Backmen/Mood/"
Length of output: 1214
Content.Server/Backmen/Mood/MoodComponent.cs (1)
37-37
: Корректное изменение минимального модификатора скорости!
Увеличение MinimumSpeedModifier с 0.75f до 0.90f делает штраф к скорости менее суровым, что соответствует целям PR по созданию более плавных изменений скорости персонажа.
Content.Server/Backmen/Mood/MoodSystem.cs (1)
401-404
: Код корректно обновляет модификатор движения
Реализация логики обновления модификатора движения соответствует ожиданиям и не вызывает очевидных проблем.
@@ -0,0 +1,4 @@ | |||
- type: traitCategory | |||
id: MoodTraits | |||
name: trait-category-mood |
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.
💡 Codebase verification
Требуется добавление локализации для других языков
Ключ локализации 'trait-category-mood' найден только в русской локализации (ru-RU), но отсутствует в других языковых файлах. Необходимо:
- Добавить ключ 'trait-category-mood' в файлы локализации для других поддерживаемых языков в директории Resources/Locale/
🔗 Analysis chain
Проверка наличия ключа локализации
Необходимо убедиться, что ключ локализации 'trait-category-mood' определен в файлах локализации.
Ключ локализации найден и корректно определен
Ключ локализации 'trait-category-mood' найден в файле локализации для русского языка (ru-RU).
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify that the localization key exists in the localization files
rg "trait-category-mood" Resources/Locale/
Length of output: 126
Script:
#!/bin/bash
# Проверим наличие ключа в других языковых файлах
fd . Resources/Locale/ -t f -e ftl --exec rg -l "trait-category-mood" {}
Length of output: 125
- type: trait | ||
id: Depression | ||
name: trait-depression-name | ||
description: trait-depression-desc | ||
category: MoodTraits | ||
cost: 1 | ||
components: | ||
- type: MoodModifyTrait | ||
moodId: TraitSaturnine |
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.
Отсутствуют необходимые множители настроения
В реализации черты Depression полностью отсутствуют множители настроения, что может привести к некорректной работе этой черты.
Предлагаемые изменения:
- type: MoodModifyTrait
moodId: TraitSaturnine
+ goodMoodMultiplier: 0.8 # Пониженный положительный эффект
+ badMoodMultiplier: 1.3 # Усиленный отрицательный эффект
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
- type: trait | |
id: Depression | |
name: trait-depression-name | |
description: trait-depression-desc | |
category: MoodTraits | |
cost: 1 | |
components: | |
- type: MoodModifyTrait | |
moodId: TraitSaturnine | |
- type: trait | |
id: Depression | |
name: trait-depression-name | |
description: trait-depression-desc | |
category: MoodTraits | |
cost: 1 | |
components: | |
- type: MoodModifyTrait | |
moodId: TraitSaturnine | |
goodMoodMultiplier: 0.8 # Пониженный положительный эффект | |
badMoodMultiplier: 1.3 # Усиленный отрицательный эффект |
- type: trait | ||
id: Hypomania | ||
name: trait-hypomania-name | ||
description: trait-hypomania-desc | ||
category: MoodTraits | ||
cost: 1 | ||
components: | ||
- type: MoodModifyTrait | ||
moodId: TraitSanguine | ||
badMoodMultiplier: 1.5 # Everything comes with a price. |
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.
Необходимо добавить множитель для положительного настроения
В реализации черты Hypomania отсутствует goodMoodMultiplier
. Наличие только отрицательного множителя 1.5 может сделать эту черту чрезмерно невыгодной для игрока.
Предлагаемые изменения:
- type: MoodModifyTrait
moodId: TraitSanguine
+ goodMoodMultiplier: 1.2 # Повышенный положительный эффект для баланса
badMoodMultiplier: 1.5 # Everything comes with a price.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
- type: trait | |
id: Hypomania | |
name: trait-hypomania-name | |
description: trait-hypomania-desc | |
category: MoodTraits | |
cost: 1 | |
components: | |
- type: MoodModifyTrait | |
moodId: TraitSanguine | |
badMoodMultiplier: 1.5 # Everything comes with a price. | |
- type: trait | |
id: Hypomania | |
name: trait-hypomania-name | |
description: trait-hypomania-desc | |
category: MoodTraits | |
cost: 1 | |
components: | |
- type: MoodModifyTrait | |
moodId: TraitSanguine | |
goodMoodMultiplier: 1.2 # Повышенный положительный эффект для баланса | |
badMoodMultiplier: 1.5 # Everything comes with a price. |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
@Rxup тут всё готово и работает |
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: 0
🧹 Outside diff range and nitpick comments (4)
Content.Shared/Movement/Systems/MovementSpeedModifierSystem.cs (2)
14-15
: Исправьте опечатку в имени переменнойПеременная
_layerQuery
содержит опечатку. Она используется для компонентаLayingDownComponent
, поэтому должна называться_layingQuery
.-private EntityQuery<LayingDownComponent> _layerQuery; +private EntityQuery<LayingDownComponent> _layingQuery;
41-44
: Упростите проверку условийТекущая проверка условий может быть упрощена с использованием составного метода TryComp.
-if (_standingStateQuery.TryComp(uid, out var standing) && - !standing.Standing && - _layerQuery.TryComp(uid, out var layingDown)) +if (!_standingStateQuery.TryComp(uid, out var standing, out var layingDown) || + (!standing.Standing && layingDown != null))Content.Shared/Backmen/Mood/SharedMoodComponent.cs (2)
123-136
: Рассмотрите порядок значений в перечисленииMoodThreshold
Обратите внимание, что
Dead
имеет значение0
, аInsane
—1
. Возможно, логичнее было бы изменить порядок значений, чтобы они отражали последовательность от худшего состояния (Dead
) к лучшему (Perfect
). Это может повысить ясность при использовании перечисления в коде.
113-120
: Рекомендуется использоватьenum
вместо строковых ключейВ словаре
HealthMoodEffectsThresholds
используются строковые ключи для обозначения состояний здоровья, например"HealthHeavyDamage"
. Рекомендуется заменить эти строковые ключи наenum
или константы. Это поможет избежать возможных ошибок из-за опечаток и улучшит читаемость и поддерживаемость кода.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (4)
Content.Server/Backmen/Mood/MoodComponent.cs
(0 hunks)Content.Server/Backmen/Mood/MoodSystem.cs
(5 hunks)Content.Shared/Backmen/Mood/SharedMoodComponent.cs
(1 hunks)Content.Shared/Movement/Systems/MovementSpeedModifierSystem.cs
(3 hunks)
💤 Files with no reviewable changes (1)
- Content.Server/Backmen/Mood/MoodComponent.cs
🚧 Files skipped from review as they are similar to previous changes (1)
- Content.Server/Backmen/Mood/MoodSystem.cs
🔇 Additional comments (3)
Content.Shared/Movement/Systems/MovementSpeedModifierSystem.cs (2)
17-23
: Корректная инициализация запросов
Инициализация EntityQuery выполнена правильно, следуя стандартному паттерну.
37-55
: Проверьте согласованность переименования переменных
После рефакторинга с использованием локальных переменных walkSpeedModifier
и sprintSpeedModifier
, убедитесь, что все места их использования обновлены корректно.
✅ Verification successful
The search results show that the only occurrences of ev.WalkSpeedModifier
and ev.SprintSpeedModifier
are the initial assignments to the local variables. Let me verify the complete context of the file to ensure there are no other inconsistencies.
Переименование переменных выполнено корректно
После проверки файла подтверждаю, что все использования локальных переменных walkSpeedModifier
и sprintSpeedModifier
согласованы. Переменные инициализируются значениями из ev
и затем последовательно используются для модификации скорости и присвоения финальных значений в компоненте move
. Несогласованностей в именовании не обнаружено.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify consistent usage of new variable names
# Search for any remaining direct usage of ev.WalkSpeedModifier or ev.SprintSpeedModifier
rg "ev\.(Walk|Sprint)SpeedModifier" --type cs
Length of output: 293
Script:
#!/bin/bash
# Get the full content of the file to verify variable usage
cat "Content.Shared/Movement/Systems/MovementSpeedModifierSystem.cs"
Length of output: 4120
Content.Shared/Backmen/Mood/SharedMoodComponent.cs (1)
1-136
: Код выглядит отлично
Изменения в классе MoodComponent
хорошо структурированы и корректны. Использование атрибута SendOnlyToOwner
для отправки обновлений только владельцу компонента эффективно с точки зрения сетевого взаимодействия. Все поля и свойства правильно аннотированы и отражают улучшенную функциональность системы настроения.
Изменения в системе настроения
🆑 Rouden
🆑 Rxup
Summary by CodeRabbit
Новые функции
Исправления ошибок
Документация