-
Notifications
You must be signed in to change notification settings - Fork 153
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
[Balance] Surgery Balance Tweaks #941
Conversation
WalkthroughВ данном пулл-запросе внесены изменения в несколько классов, касающихся системы повреждений и взаимодействия с телесными частями. Основные изменения включают добавление новых параметров, таких как Changes
Poem
Warning Rate limit exceeded@Roudenn has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 12 minutes and 43 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 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: 2
🧹 Outside diff range and nitpick comments (13)
Content.Shared/Backmen/Magic/BkmMagicSystem.cs (1)
Line range hint
1-27
: Рекомендация по улучшению документацииУчитывая важность этого изменения для баланса игры, рекомендуется добавить XML-документацию к методу
OnHealSpell
, объясняющую новое поведение и причины изменения.Предлагаемое изменение:
+ /// <summary> + /// Обрабатывает событие лечащего заклинания, применяя эффект ко всем частям тела цели. + /// Часть обновленной системы баланса хирургии. + /// </summary> + /// <param name="ev">Событие заклинания лечения</param> private void OnHealSpell(HealSpellEvent ev)Content.Shared/Backmen/Targeting/TargetBodyPart.cs (2)
38-38
: Рассмотрите добавление документации для BodyMiddleФлаг
BodyMiddle
объединяет торс, пах и руки, что является значительным изменением в системе нацеливания. Рекомендуется добавить XML-документацию, объясняющую назначение и использование этого составного флага.Предлагаю добавить документацию:
+ /// <summary> + /// Представляет среднюю часть тела, включая торс, пах и руки. + /// Используется для операций, затрагивающих центральную часть тела. + /// </summary> BodyMiddle = Torso | Groin | FullArms,
Line range hint
1-42
: Рекомендации по архитектуре системы нацеливанияТекущая реализация с использованием битовых флагов обеспечивает гибкую систему нацеливания. Однако для дальнейшего развития системы рекомендуется:
- Рассмотреть создание конфигурационного файла для определения связей между частями тела
- Добавить валидацию комбинаций флагов
- Реализовать вспомогательные методы для работы с составными частями тела
Хотите, чтобы я помог с реализацией этих улучшений?
Content.Shared/Chat/SharedSuicideSystem.cs (3)
6-6
: Проверить расположение пространства имен TargetingПространство имен
Content.Shared.Backmen.Targeting
может находиться во временном месте. Рекомендуется рассмотреть перемещение в более подходящее пространство имен, например,Content.Shared.Damage.Targeting
.
42-42
: Добавить документацию для параметра targetPartНовый параметр
targetPart: TargetBodyPart.Head
следует отразить в XML-документации методаApplyLethalDamage
. Это важно для понимания, что летальный урон всегда направлен в голову./// <summary> /// Applies lethal damage spread out across the damage types given. + /// The damage is always applied to the head. /// </summary>
66-66
: Рассмотреть возможность рефакторинга для устранения дублированияОба метода
ApplyLethalDamage
используют одинаковую логику нацеливания на голову. Рекомендуется выделить общую логику в отдельный приватный метод.+ private void ApplyDamageToTarget(Entity<DamageableComponent> target, DamageSpecifier damage) + { + _damageableSystem.TryChangeDamage(target, damage, true, origin: target, targetPart: TargetBodyPart.Head); + }Content.Shared/Damage/Systems/DamageOnInteractSystem.cs (1)
71-72
: Рекомендация по улучшению читаемости кодаПредлагаю вынести маппинг локации руки в отдельный метод для улучшения читаемости и переиспользования.
Предлагаемые изменения:
+private TargetBodyPart? GetTargetBodyPartFromHandLocation(HandLocation location) +{ + return location switch + { + HandLocation.Left => TargetBodyPart.LeftFullArm, + HandLocation.Right => TargetBodyPart.RightFullArm, + _ => null + }; +} -targetPart = hands.ActiveHand.Location switch -{ - HandLocation.Left => TargetBodyPart.LeftFullArm, - HandLocation.Right => TargetBodyPart.RightFullArm, - _ => null -}; +targetPart = GetTargetBodyPartFromHandLocation(hands.ActiveHand.Location);Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs (2)
323-323
: Изменения в механике получения урона при столкновенииДобавление параметров
canEvade: false
иcanSever: false
делает получение урона более предсказуемым, что соответствует целям PR по улучшению баланса. Также добавлениеtargetPart: TargetBodyPart.Head
обеспечивает более точное применение урона в соответствии с игровой логикой.Рекомендуется вынести значение урона (5) в константу или конфигурационную переменную для упрощения будущих корректировок баланса.
322-322
: Рекомендуется сделать звуковой эффект неизменяемымПоле
_bonkSound
следует объявить какprivate static readonly
для предотвращения случайного изменения во время выполнения.-private static SoundSpecifier _bonkSound = new SoundCollectionSpecifier("TrayHit"); +private static readonly SoundSpecifier _bonkSound = new SoundCollectionSpecifier("TrayHit");Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs (1)
255-255
: Проверьте согласованность множителя урона для высокого давленияИспользование того же множителя
partMultiplier: 0.5f
обеспечивает согласованность с обработкой урона от низкого давления. Однако, учитывая что урон от высокого давления масштабируется дополнительно черезdamageScale
, возможно стоит рассмотреть другой коэффициент.Рассмотрите возможность вынесения множителя в константу класса:
+ private const float PressureDamagePartMultiplier = 0.5f;
И использование её в обоих местах:
- _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false, canSever: false, partMultiplier: 0.5f); + _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false, canSever: false, partMultiplier: PressureDamagePartMultiplier);Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs (3)
Line range hint
142-147
: Рекомендуется использовать именованную константу для вероятностиДля улучшения читаемости кода предлагается вынести вероятность попадания в дополнительную часть тела в именованную константу.
+ private const float TORSO_SPREAD_PROBABILITY = 0.33f; // 33% chance to hit additional part // If the target is Torso then have a 33% chance to also hit another part if (targetPart.Value == TargetBodyPart.Torso) { - var additionalPart = GetRandomPartSpread(_random, 10); + if (_random.NextFloat() < TORSO_SPREAD_PROBABILITY) + { + var additionalPart = GetRandomPartSpread(_random, 10); + targetPart = targetPart.Value | additionalPart; + } - targetPart = targetPart.Value | additionalPart; }
Line range hint
279-297
: Улучшение документации метода GetRandomPartSpreadПредлагается уточнить документацию метода для лучшего понимания механики выбора частей тела.
/// <summary> - /// Gets the random body part rolling a number between 1 and 9, and returns - /// Torso if the result is 9 or more. The higher torsoWeight is, the higher chance to return it. + /// Выбирает случайную часть тела с помощью взвешенного случайного выбора. + /// Параметр torsoWeight увеличивает вероятность выбора торса: + /// - При torsoWeight = 9, вероятность выбора торса ~50% + /// - Каждая другая часть тела имеет равную вероятность выбора /// </summary>
Line range hint
393-402
: Рекомендация по улучшению конфигурации модификаторов уронаТекущая реализация использует жестко закодированные значения модификаторов урона. Предлагается вынести эти значения в конфигурацию для упрощения балансировки.
+ [DataDefinition] + public sealed class BodyPartDamageModifiers + { + [DataField("head")] public float Head = 0.5f; + [DataField("torso")] public float Torso = 1.0f; + [DataField("limb")] public float Limb = 0.7f; + } + public static float GetPartDamageModifier(BodyPartType partType) { + var modifiers = IoCManager.Resolve<IPrototypeManager>() + .Index<BodyPartDamageModifiers>("defaultDamageModifiers"); + return partType switch { - BodyPartType.Head => 0.5f, // 50% damage, necks are hard to cut - BodyPartType.Torso => 1.0f, // 100% damage - BodyPartType.Arm => 0.7f, // 70% damage - BodyPartType.Hand => 0.7f, // 70% damage - BodyPartType.Leg => 0.7f, // 70% damage - BodyPartType.Foot => 0.7f, // 70% damage + BodyPartType.Head => modifiers.Head, + BodyPartType.Torso => modifiers.Torso, + BodyPartType.Arm => modifiers.Limb, + BodyPartType.Hand => modifiers.Limb, + BodyPartType.Leg => modifiers.Limb, + BodyPartType.Foot => modifiers.Limb, }; }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (17)
Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs
(2 hunks)Content.Server/Medical/DefibrillatorSystem.cs
(2 hunks)Content.Server/Weapons/Ranged/Systems/GunSystem.cs
(1 hunks)Content.Shared/Backmen/Magic/BkmMagicSystem.cs
(2 hunks)Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs
(1 hunks)Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs
(1 hunks)Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs
(1 hunks)Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs
(2 hunks)Content.Shared/Backmen/Targeting/TargetBodyPart.cs
(1 hunks)Content.Shared/Body/Part/BodyPartComponent.cs
(2 hunks)Content.Shared/Chat/SharedSuicideSystem.cs
(3 hunks)Content.Shared/Climbing/Systems/ClimbSystem.cs
(2 hunks)Content.Shared/Clumsy/ClumsySystem.cs
(2 hunks)Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs
(1 hunks)Content.Shared/Damage/Systems/DamageOnInteractSystem.cs
(1 hunks)Content.Shared/Doors/Systems/SharedDoorSystem.cs
(2 hunks)Resources/Prototypes/Body/Parts/base.yml
(1 hunks)
🔇 Additional comments (21)
Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs (2)
252-252
: Проверьте увеличение бонуса для мёртвых тел
Увеличение бонуса на лечение на 20% для мёртвых тел (bonus *= 1.2;
) может привести к нежелательным последствиям, так как лечение мёртвых тел может быть нелогичным. Пожалуйста, убедитесь, что это изменение соответствует ожидаемому поведению игры.
262-262
: Пересмотрите изменение фактора повреждения до 1.5f
Изменение фактора повреждения с 0.5f
до 1.5f
в методе SurgeryStepDamageEvent
может значительно повлиять на баланс, увеличивая наносимый урон втрое. Пожалуйста, убедитесь, что это изменение было намеренным и протестировано на предмет баланса.
Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs (1)
13-13
: Проверьте влияние увеличенного модификатора на баланс
Увеличение SleepModifier
с 0.5f до 1.5f соответствует целям PR по улучшению эффективности хирургических операций. Однако, такое значительное увеличение (в 3 раза) может иметь существенное влияние на игровой баланс.
Выполните следующий скрипт для поиска других компонентов и систем, на которые может повлиять это изменение:
✅ Verification successful
Изменение модификатора сна подтверждено безопасным
Анализ кодовой базы показал, что SleepModifier
используется только в одном месте - в Content.Server/Backmen/Surgery/SurgerySystem.cs
, где он применяется как множитель к значению damageChange
. Увеличение модификатора с 0.5f до 1.5f является безопасным изменением, так как:
- Компонент используется локально в системе хирургии
- Модификатор применяется только к урону во время хирургических операций
- Изменение соответствует целям улучшения эффективности хирургии
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск использования SleepModifier в других частях кодовой базы
# Поиск использования SleepModifier
rg -A 3 "SleepModifier"
# Поиск связанных хирургических систем
ast-grep --pattern 'class $_ : ISystem {
$$$
Surgery
$$$
}'
Length of output: 845
Script:
#!/bin/bash
# Поиск всех файлов, связанных с хирургией
fd "Surgery" --type f
# Поиск использования компонента SurgeryDamageChangeEffectComponent
rg -l "SurgeryDamageChangeEffectComponent"
# Поиск систем, обрабатывающих хирургию
ast-grep --pattern 'class $_ {
$$$
Surgery
$$$
}'
# Поиск методов, где используется модификатор
rg -A 5 "damageChange.*SleepModifier"
Length of output: 4287
Content.Shared/Backmen/Magic/BkmMagicSystem.cs (1)
26-26
: Проверьте влияние изменения на баланс лечения
Добавление параметра targetPart: TargetBodyPart.All
означает, что заклинание лечения теперь будет воздействовать на все части тела одновременно. Это существенное изменение в механике лечения, которое может повлиять на общий баланс игры.
Выполните следующий скрипт для поиска других систем, использующих похожую механику лечения:
✅ Verification successful
Изменение согласуется с общей механикой лечения в игре
После анализа кодовой базы видно, что параметр targetPart
активно используется в различных системах для точечного воздействия на определенные части тела:
- Удары по голове (
TargetBodyPart.Head
) в системах оглушения и самоубийства - Повреждение ног (
TargetBodyPart.FullLegs
) при падении - Лечение торса (
TargetBodyPart.Torso
) дефибриллятором - Полное исцеление (
TargetBodyPart.All
) используется в системе блоба
Добавление targetPart: TargetBodyPart.All
в BkmMagicSystem
логично вписывается в существующую механику и соответствует балансу других систем лечения.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск других систем, использующих TryChangeDamage с параметром targetPart
# Поиск использования TryChangeDamage
rg -A 2 "TryChangeDamage.*targetPart:" --type cs
Length of output: 3821
Content.Shared/Backmen/Targeting/TargetBodyPart.cs (2)
25-28
: Логичное добавление составных флагов для конечностей
Добавление составных флагов для полных конечностей (LeftFullArm
, RightFullArm
, LeftFullLeg
, RightFullLeg
) улучшает гранулярность системы нацеливания, что хорошо соответствует целям PR по улучшению баланса хирургии.
Давайте проверим использование новых флагов в системе:
✅ Verification successful
Составные флаги корректно используются в системе
Новые составные флаги для конечностей уже интегрированы в систему DamageOnInteractSystem
, где они логично применяются для определения целевой части тела на основе активной руки. Битовые операции в определениях флагов (|
) корректны и соответствуют ожидаемой логике объединения базовых частей тела.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск использования новых флагов в коде
rg "LeftFullArm|RightFullArm|LeftFullLeg|RightFullLeg" -t cs
Length of output: 668
Script:
#!/bin/bash
# Проверим определения базовых флагов для конечностей
ast-grep --pattern 'LeftArm = $_' Content.Shared/Backmen/Targeting/TargetBodyPart.cs
ast-grep --pattern 'RightArm = $_' Content.Shared/Backmen/Targeting/TargetBodyPart.cs
ast-grep --pattern 'LeftHand = $_' Content.Shared/Backmen/Targeting/TargetBodyPart.cs
ast-grep --pattern 'RightHand = $_' Content.Shared/Backmen/Targeting/TargetBodyPart.cs
# Проверим использование в DamageOnInteractSystem
rg -A 5 -B 5 "LeftFullArm|RightFullArm" Content.Shared/Damage/Systems/DamageOnInteractSystem.cs
Length of output: 853
35-36
: Проверьте корректность битовых операций для составных флагов
Составные флаги FullArms
и FullLegs
корректно объединяют соответствующие части тела. Однако стоит убедиться, что все системы, использующие эти флаги, правильно обрабатывают составные значения.
Проверим использование новых составных флагов:
✅ Verification successful
Let's search for more context about how these flags are used in the codebase:
Let's search for the actual usage of bitwise operations with these flags:
Битовые операции для составных флагов реализованы корректно
Анализ кодовой базы показывает, что составные флаги FullArms
и FullLegs
используются правильно:
-
Определение флагов корректно использует битовые операции:
FullArms = Arms | Hands
FullLegs = Feet | Legs
-
Составные флаги применяются в системах правильно:
FullLegs
используется вClimbSystem
для нанесения урона по ногам при паденииFullArms
используется как частьBodyMiddle
для определения зоны поражения
-
Все битовые операции с этими флагами согласованы с остальными флагами перечисления
TargetBodyPart
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск использования составных флагов
rg "FullArms|FullLegs" -t cs -A 3
Length of output: 1157
Script:
#!/bin/bash
# Поиск использования TargetBodyPart в коде
rg "TargetBodyPart\." -t cs -A 3
# Поиск битовых операций с TargetBodyPart
ast-grep --pattern 'TargetBodyPart $_ & $_'
Length of output: 24942
Script:
#!/bin/bash
# Поиск использования битовых операций с составными флагами
rg "FullArms|FullLegs|BodyMiddle" -t cs -A 3
# Поиск всех битовых операций с TargetBodyPart
rg "[^a-zA-Z](TargetBodyPart\.[a-zA-Z]+ [|&])" -t cs
Length of output: 1643
Content.Shared/Chat/SharedSuicideSystem.cs (1)
Line range hint 1-68
: Проверить согласованность логики урона при самоубийстве
Необходимо убедиться, что все системы, связанные с самоубийством, последовательно используют нацеливание на голову.
✅ Verification successful
Логика нацеливания на голову реализована корректно
Проверка показала, что в системе самоубийства (SharedSuicideSystem) все методы нанесения урона последовательно используют параметр targetPart: TargetBodyPart.Head
. Это согласуется с общей логикой системы и другими компонентами, где требуется нацеливание на голову.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск всех мест, где используется логика самоубийства
# Поиск использования SharedSuicideSystem
rg -l "SuicideSystem"
# Поиск методов, связанных с самоубийством
ast-grep --pattern 'class $_ {
$$$
$_Suicide$_($$$) {
$$$
}
$$$
}'
Length of output: 394
Script:
#!/bin/bash
# Поиск использования методов нанесения урона в контексте самоубийства
rg -A 5 "TryChangeDamage.*suicide" --ignore-case
# Поиск конкретных реализаций самоубийства
rg -A 10 "class.*SuicideSystem"
# Поиск использования targetPart в контексте урона
rg "targetPart.*Head" -B 5
Length of output: 4811
Content.Shared/Damage/Systems/DamageOnInteractSystem.cs (1)
71-72
: Изменение целевой зоны урона на полную руку
Переход с Arm
на FullArm
соответствует целям PR по улучшению хирургического баланса, обеспечивая более широкую зону воздействия при взаимодействии.
Давайте проверим согласованность использования FullArm
в других частях кодовой базы:
✅ Verification successful
Изменение корректно использует существующие флаги TargetBodyPart
Проверка показала, что LeftFullArm
и RightFullArm
являются валидными значениями перечисления TargetBodyPart
, определенными как комбинация флагов для руки и кисти (LeftArm | LeftHand
и RightArm | RightHand
соответственно). Изменение в DamageOnInteractSystem
корректно использует эти предопределённые значения для более полного охвата зоны воздействия.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск использования TargetBodyPart.LeftArm/RightArm для проверки необходимости обновления
rg "TargetBodyPart\.(Left|Right)Arm\b" -A 3
# Поиск новых значений для подтверждения правильности изменений
rg "TargetBodyPart\.(Left|Right)FullArm\b" -A 3
Length of output: 8463
Script:
#!/bin/bash
# Поиск определения перечисления TargetBodyPart для проверки всех доступных значений
ast-grep --pattern 'enum TargetBodyPart {
$$$
}'
# Поиск использования FullArm в других системах
rg "FullArm" --type cs -A 3
Length of output: 52
Script:
#!/bin/bash
# Поиск файла с определением TargetBodyPart
fd "TargetBodyPart" --type f --exec cat {}
# Поиск всех систем, которые могут быть затронуты изменением
rg "class.*System.*Damage" --type cs
Length of output: 1647
Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs (1)
76-76
: Проверьте влияние параметра canEvade на игровой баланс
Добавление параметра canEvade: true
существенно меняет механику получения урона, позволяя сущностям уклоняться от повреждений. Убедитесь, что это изменение соответствует желаемому балансу игры и согласуется с целями улучшения хирургических механик.
✅ Verification successful
Параметр canEvade корректно реализован в системе урона
На основе анализа кодовой базы можно сделать следующие выводы:
- Параметр
canEvade: true
добавлен в методTryChangeDamage
в DamageableSystem и используется последовательно в трех ключевых местах:- DamageOnAttackedSystem.cs (при атаках)
- GunSystem.cs (при стрельбе)
- SharedLayingDownSystem.cs (с явным
canEvade: false
для предотвращения уклонения при падении)
Реализация согласуется с целями улучшения хирургических механик и не нарушает баланс игры, так как:
- Используется избирательно только для определенных типов урона
- Имеет явные случаи, когда уклонение должно быть отключено
- Интегрирована с существующими системами урона и тестами
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Проверка согласованности реализации canEvade в других системах
# Поиск использования TryChangeDamage с параметром canEvade
rg "TryChangeDamage.*canEvade" -A 2
# Поиск определения метода TryChangeDamage
ast-grep --pattern 'TryChangeDamage($$$)'
Length of output: 1720
Script:
#!/bin/bash
# Поиск определения метода TryChangeDamage в DamageableSystem
ast-grep --pattern 'public DamageSpecifier? TryChangeDamage($$$) {
$$$
}'
# Поиск всех мест, где используется TryChangeDamage
rg "TryChangeDamage" -B 2 -A 2
# Поиск изменений в тестах, связанных с уроном
fd "Test.*\.cs$" --exec rg "TryChangeDamage|canEvade" {}
Length of output: 89150
Content.Shared/Body/Part/BodyPartComponent.cs (2)
85-85
: Уменьшение интервала самолечения одобрено
Уменьшение времени между тиками самолечения с 30 до 6 делает процесс более плавным, но в сочетании с уменьшенным количеством лечения за тик общая скорость восстановления значительно снижена.
96-96
: Значительное снижение эффективности пассивного лечения
Уменьшение количества лечения за тик с 5 до 0.1 (в 50 раз) существенно снижает эффективность пассивного восстановления здоровья. В сочетании с более частыми тиками, общая скорость восстановления уменьшена примерно на 90%, что соответствует целям PR по снижению эффективности пассивного лечения частей тела.
✅ Verification successful
Let me analyze the code further to understand the full context of these healing changes.
Based on the results from both scripts, I can now generate the final response as we have sufficient context about how SelfHealingAmount is used throughout the codebase.
Подтверждено снижение эффективности пассивного лечения
Анализ кодовой базы подтверждает корректность изменений:
- Значение
SelfHealingAmount = 0.1f
используется для всех типов урона вSharedBodySystem.Targeting.cs
- Для большинства типов урона применяется прямое значение
-part.SelfHealingAmount
- Для едкого (caustic) урона применяется дополнительное снижение:
-part.SelfHealingAmount * 0.1
Изменение полностью соответствует заявленной цели по существенному снижению эффективности пассивного лечения частей тела.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем использование этих значений в других файлах
rg "HealingTime|SelfHealingAmount" --type cs
Length of output: 1504
Script:
#!/bin/bash
# Let's check the git history for these specific values to understand the changes
rg -B2 -A2 "SelfHealingAmount = " --type cs
Length of output: 370
Content.Shared/Clumsy/ClumsySystem.cs (2)
1-1
: Добавлена зависимость для системы нацеливания
Добавление Content.Shared.Backmen.Targeting
позволяет использовать функционал таргетинга конкретных частей тела.
141-141
: Улучшена точность применения урона
Добавление параметра targetPart: TargetBodyPart.Head
обеспечивает корректное применение урона по голове при неуклюжих действиях, что соответствует целям PR по улучшению точности применения урона.
✅ Verification successful
The search results show consistent usage of targetPart
parameter across various systems in the codebase, with different body parts being targeted based on the specific context of each system. Let me generate the final response in Russian:
Применение параметра targetPart соответствует общей архитектуре
Проверка показала, что параметр targetPart
активно используется в различных системах кодовой базы для точного указания зоны применения урона. Использование TargetBodyPart.Head
для неуклюжих действий логично соответствует существующей практике, где:
- Дефибриллятор нацелен на торс
- Двери наносят урон по середине тела
- Падение влияет на ноги
- Самоубийство и другие удары по голове также используют
TargetBodyPart.Head
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка использования targetPart в других системах для согласованности
rg "TryChangeDamage.*targetPart:" --type cs
Length of output: 2118
Content.Server/Medical/DefibrillatorSystem.cs (2)
11-11
: LGTM: Добавление таргетинга соответствует целям PR
Импорт Content.Shared.Backmen.Targeting
необходим для поддержки новой системы нацеливания на части тела.
205-205
: Проверить влияние изменения на баланс лечения
Добавление параметра targetPart: TargetBodyPart.Torso
означает, что дефибриллятор теперь лечит только торс. Необходимо убедиться, что это изменение:
- Не делает дефибриллятор слишком слабым
- Соответствует общему балансу хирургической системы
✅ Verification successful
Изменение не влияет на баланс лечения дефибриллятором
Анализ кодовой базы показывает, что:
- Дефибриллятор используется только для реанимации мертвых игроков
- Параметр
targetPart: TargetBodyPart.Torso
соответствует логике работы дефибриллятора, так как он воздействует на сердце - Другие системы лечения (медикаменты, хирургия) уже используют таргетирование частей тела
- Изменение не уменьшает количество исцеляемого урона, а только указывает его локацию
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других использований дефибриллятора для оценки влияния изменений
rg -A 5 "TryChangeDamage.*Torso" --type cs
# Поиск связанных изменений в хирургической системе
ast-grep --pattern 'class $_ {
$$$
TryChangeDamage($_, $_, $_, $_, targetPart: $_) {
$$$
}
$$$
}'
Length of output: 837
Script:
#!/bin/bash
# Поиск всех использований TryChangeDamage для анализа общего подхода к лечению
rg "TryChangeDamage" -B 2 -A 2 --type cs
# Поиск других систем лечения для сравнения
rg "ZapHeal|Heal|HealDamage" -B 2 -A 2 --type cs
# Поиск определения компонента дефибриллятора для проверки значений лечения
fd "Defibrillator.*\.cs$" --exec cat {}
Length of output: 100349
Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs (1)
Line range hint 319-326
: Комплексная обратная связь при столкновении
Реализация обеспечивает полную обратную связь для игрока через:
- Визуальное оповещение (popup)
- Звуковой эффект
- Игровые последствия (урон + оглушение)
Это создает понятный и информативный отклик на действия игрока.
Давайте проверим использование этих механик в других частях кодовой базы:
✅ Verification successful
Механика обратной связи реализована корректно и согласованно
Анализ показывает, что реализация обратной связи при столкновении соответствует общим паттернам в кодовой базе:
- PopupType.MediumCaution используется последовательно для предупреждений и негативных событий
- Комбинация визуальных, звуковых и игровых эффектов (урон + оглушение) применяется для создания полноценной обратной связи
- Механика согласуется с другими системами, где также используются подобные комбинации эффектов для информирования игрока
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем согласованность применения механик урона и оглушения
rg "TryChangeDamage.*targetPart:\s*TargetBodyPart\.Head.*canEvade:\s*false.*canSever:\s*false" -A 2
rg "TryStun.*TimeSpan\.FromSeconds\(2\)" -A 2
Length of output: 480
Script:
#!/bin/bash
# Поиск похожих паттернов обратной связи (урон + звук + визуальные эффекты)
rg "TryChangeDamage.*DamageDict.*Blunt" -B 2 -A 2
# Поиск использования PopupType.MediumCaution с уроном
rg "PopupType\.MediumCaution" -B 2 -A 2
# Поиск других звуковых эффектов при уроне
rg "PlayPredicted.*_.*Sound" -B 2 -A 2
Length of output: 26049
Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs (1)
241-241
: Проверьте баланс множителя урона для низкого давления
Добавление partMultiplier: 0.5f
уменьшает урон от низкого давления вдвое. Это соответствует целям PR по увеличению устойчивости частей тела, но может потребовать дополнительной настройки баланса.
✅ Verification successful
Let me analyze the usage of partMultiplier
across the codebase to verify the consistency of the implementation. I'll check the values used in similar damage-related contexts.
Множитель урона 0.5f для баротравмы соответствует общей механике
Анализ кодовой базы показывает, что использование partMultiplier: 0.5f
в BarotraumaSystem согласуется с другими системами:
- Тяжёлые атаки оружия используют такой же множитель (HeavyPartDamageMultiplier = 0.5f)
- Эффекты здоровья также применяют множитель 0.5f
- Значение 0.5f является стандартным для механик, где требуется уменьшение урона частям тела
Изменение корректно реализовано и соответствует существующим игровым механикам.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других использований TryChangeDamage с partMultiplier
rg "TryChangeDamage.*partMultiplier" --type cs
Length of output: 1401
Script:
#!/bin/bash
# Поиск файлов с определениями констант множителей урона
rg "PartDamageMultiplier|partMultiplier" -B 2 -A 2 --type cs
Length of output: 8136
Content.Server/Weapons/Ranged/Systems/GunSystem.cs (1)
215-215
: Проверьте согласованность параметра canEvade во всех системах урона
Добавление параметра canEvade: true
соответствует целям PR по улучшению хирургического баланса. Однако важно убедиться, что этот параметр согласованно используется во всех системах нанесения урона.
Выполните следующий скрипт для проверки использования параметра canEvade в других системах:
✅ Verification successful
Let me analyze the usage of canEvade
parameter across the codebase to verify consistency.
From the search results, I can see that canEvade
parameter is used in only 3 places:
Content.Server/Weapons/Ranged/Systems/GunSystem.cs
- setting it totrue
for gun damageContent.Shared/Damage/Systems/DamageOnAttackedSystem.cs
- setting it totrue
for damage on attackedContent.Shared/Backmen/Standing/SharedLayingDownSystem.cs
- setting it tofalse
for laying down damage
Most other damage systems don't specify this parameter, which means it defaults to false
. Let me generate the final response:
Параметр canEvade используется корректно
Параметр canEvade: true
в системе урона от оружия согласуется с другими системами, где возможность уклонения важна (например, в системе урона при атаке). В случаях, где уклонение не должно быть возможным (например, при получении урона лежа), параметр явно установлен как false
.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск использования TryChangeDamage с параметром canEvade
# Ожидаемый результат: Согласованное использование параметра во всех системах
# Поиск всех вызовов TryChangeDamage
rg "TryChangeDamage.*canEvade" --type cs
# Поиск потенциальных мест, где canEvade мог быть пропущен
rg "TryChangeDamage\([^)]*\)" --type cs
Length of output: 25279
Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs (1)
Line range hint 67-77
: Корректная реализация различных коэффициентов исцеления
Реализация корректно обрабатывает различные типы урона, с уменьшенным исцелением для химического урона (10% от нормального). Это соответствует целям PR по балансировке пассивного исцеления.
Content.Shared/Climbing/Systems/ClimbSystem.cs (1)
528-528
: Корректное указание целевой части тела для урона!
Добавление параметра targetPart: TargetBodyPart.FullLegs
логично улучшает механику получения урона при взбирании на стеклянный стол, так как ноги являются основной точкой воздействия.
Давайте проверим, есть ли другие места в коде, где урон от взбирания также должен быть направлен на конкретные части тела:
✅ Verification successful
Подтверждаю корректность изменений в системе урона при взбирании
На основе анализа кода можно сделать следующие выводы:
- В системе есть два типа урона: урон взбирающемуся (
ClimberDamage
) и урон столу (TableDamage
) - Добавление
targetPart: TargetBodyPart.FullLegs
только для урона взбирающемуся логично, так как:- Урон ногам имеет смысл только для живых существ
- Стол не имеет частей тела, поэтому для него целевая часть не требуется
- Другие случаи урона при взбирании (в
FleshHeartSystem.cs
) имеют свою специфическую логику и не требуют указания части тела
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других случаев получения урона при взбирании
rg "TryChangeDamage.*Climb" -A 2
Length of output: 882
Script:
#!/bin/bash
# Проверим контекст использования TryChangeDamage в FleshHeartSystem
rg "FleshHeart" -B 2 -A 5 Content.Server/Backmen/Flesh/FleshHeartSystem.cs
# Проверим контекст второго вызова TryChangeDamage в ClimbSystem
ast-grep --pattern 'TryChangeDamage($uid, $component.TableDamage, $$$)'
Length of output: 4392
Script:
#!/bin/bash
# Проверим контекст вызова TryChangeDamage для урона столу
rg -B 5 -A 2 "TableDamage" Content.Shared/Climbing/Systems/ClimbSystem.cs
# Проверим определение компонента для понимания логики урона
rg "ClimberDamage|TableDamage" Content.Shared/Climbing/Components/
Length of output: 848
Content.Shared/Doors/Systems/SharedDoorSystem.cs (1)
5-5
: LGTM: Добавление импорта для системы таргетинга
Корректное добавление необходимого импорта для поддержки таргетинга частей тела.
@@ -30,13 +30,13 @@ | |||
- trigger: | |||
!type:DamageTypeTrigger | |||
damageType: Blunt | |||
damage: 75 | |||
damage: 120 |
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
Обнаружены различия в конфигурации урона для разных типов существ
Анализ показывает, что в других файлах сохраняется различие между Blunt и Slash уроном:
- В
skeleton.yml
иshadowkin.yml
режущий урон (Slash - 100) выше дробящего (Blunt - 75) - Только в обновленном
base.yml
значения уравнены до 120
Рекомендуется пересмотреть решение об уравнивании порогов урона, так как это может нарушить существующий баланс между различными типами существ и оружия.
🔗 Analysis chain
Проверьте баланс между типами урона
Увеличение порогов урона соответствует цели сделать части тела более устойчивыми к разрушению. Однако установка одинакового значения (120) для обоих типов урона (Blunt и Slash) может потребовать дополнительного рассмотрения:
- Исторически, режущий урон (Slash) был эффективнее дробящего (Blunt)
- Уравнивание порогов может повлиять на выбор оружия игроками
Давайте проверим использование этих типов урона в других файлах:
Also applies to: 39-39
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других конфигураций с Blunt и Slash уроном для сравнения
rg -A 2 "damageType: (Blunt|Slash)" --type yaml
Length of output: 3188
@@ -523,7 +524,7 @@ public void Crush(EntityUid uid, DoorComponent? door = null, PhysicsComponent? p | |||
{ | |||
door.CurrentlyCrushing.Add(entity); | |||
if (door.CrushDamage != null) | |||
_damageableSystem.TryChangeDamage(entity, door.CrushDamage, origin: uid); | |||
_damageableSystem.TryChangeDamage(entity, door.CrushDamage, origin: uid, targetPart: TargetBodyPart.BodyMiddle); // backmen: surgery |
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
Использование BodyMiddle для урона от дверей некорректно
Анализ кода показывает, что TargetBodyPart.BodyMiddle является составным флагом, включающим Torso | Groin | FullArms. Для урона от закрывающейся двери логичнее использовать более специфичную часть тела - Torso, так как:
- Другие системы используют конкретные части тела (например, Head для оглушения, FullLegs для урона при падении)
- Включение рук (FullArms) в целевую зону нелогично для урона от закрывающейся двери
- В большинстве случаев дверь будет давить именно торс
🔗 Analysis chain
Подтвердите корректность таргетинга на BodyMiddle
Изменение корректно указывает часть тела для применения урона при закрытии двери. Убедитесь, что BodyMiddle является подходящей целью для всех типов существ, которые могут быть раздавлены дверью.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка использования TargetBodyPart.BodyMiddle в других системах
# Поиск других случаев использования BodyMiddle для проверки согласованности
ast-grep --pattern 'TargetBodyPart.BodyMiddle'
# Поиск определения перечисления для проверки всех доступных частей тела
rg -A 10 'enum TargetBodyPart'
Length of output: 248
Script:
#!/bin/bash
# Поиск определения TargetBodyPart с другим шаблоном
rg "enum\s+TargetBodyPart" -A 10
# Поиск использования TryChangeDamage для анализа других случаев таргетинга
ast-grep --pattern 'TryChangeDamage($$$, $$$, targetPart: $_)'
# Поиск файлов с определениями систем урона
fd "Damage.*System\.cs$"
Length of output: 2506
Script:
#!/bin/bash
# Поиск определения BodyMiddle в перечислении
rg "BodyMiddle" Content.Shared/Backmen/Targeting/TargetBodyPart.cs
# Поиск других случаев использования TryChangeDamage с таргетингом на конкретные части тела
rg -B 2 -A 2 "TryChangeDamage.*targetPart:"
# Поиск документации или комментариев по использованию частей тела
rg -l "body.*part|TargetBodyPart" Content.Shared/Damage/
Length of output: 5819
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
🧹 Outside diff range and nitpick comments (14)
Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs (1)
13-13
: Необходимо добавить документацию для SleepModifierРекомендуется добавить комментарии, объясняющие назначение
SleepModifier
и причины выбора значения 1.5f. Это поможет другим разработчикам лучше понять влияние этого параметра на игровой процесс.Предлагаемые изменения:
[DataField] + /// <summary> + /// Множитель, влияющий на эффективность хирургических операций во время сна. + /// Значение 1.5 увеличивает эффективность на 50% по сравнению с базовым уровнем. + /// </summary> public float SleepModifier = 1.5f;Content.Shared/Backmen/Targeting/TargetBodyPart.cs (1)
38-38
: Рассмотрите необходимость включения рук в BodyMiddleВключение
FullArms
в определениеBodyMiddle
может привести к неожиданным последствиям:
- При попадании в корпус будет наноситься урон и по рукам
- Это может противоречить цели PR по уменьшению случайного урона частям тела
Предлагаю рассмотреть вариант определения без рук:
- BodyMiddle = Torso | Groin | FullArms, + BodyMiddle = Torso | Groin,Content.Shared/Chat/SharedSuicideSystem.cs (2)
6-6
: Проверьте необходимость явного импортаРекомендуется добавить комментарий, поясняющий назначение пространства имен Targeting, так как оно используется только для enum-значения.
66-66
: Согласованное изменение во второй перегрузке методаАналогичное изменение в альтернативной версии метода поддерживает консистентность реализации. Обе перегрузки теперь корректно обрабатывают целевую часть тела.
Рекомендуется объединить комментарии "backmen" в обоих методах в один XML-комментарий на уровне класса, поясняющий изменения в системе нацеливания.
Resources/Prototypes/Body/Parts/base.yml (1)
Line range hint
33-45
: Рекомендация по конфигурации уронаРекомендуется вынести значения порогов урона в отдельный конфигурационный файл для упрощения дальнейшей балансировки. Это позволит централизованно управлять балансом урона для всех частей тела.
Пример структуры:
damage_thresholds: body_part: blunt: 120 slash: 120 heat: 200Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs (1)
76-76
: Добавьте документацию по механике уклоненияРекомендуется добавить комментарий, объясняющий влияние параметра
canEvade
на логику получения урона в контексте данной системы.+ // Параметр canEvade позволяет цели попытаться уклониться от урона, + // что соответствует общей механике защиты от повреждений totalDamage = _damageableSystem.TryChangeDamage(args.User, totalDamage, entity.Comp.IgnoreResistances, origin: entity, canEvade: true);Content.Shared/Body/Part/BodyPartComponent.cs (1)
96-96
: Значительное снижение пассивного исцеленияУменьшение количества восстанавливаемого здоровья за тик с 5 до 0.1 (в 50 раз) в сочетании с увеличенной частотой тиков приводит к общему замедлению пассивного исцеления в 10 раз. Это соответствует целям PR по снижению эффективности пассивного исцеления в пользу хирургического лечения.
Рекомендуется добавить эти значения в конфигурационный файл для упрощения дальнейшей балансировки.
Content.Shared/Clumsy/ClumsySystem.cs (1)
141-141
: Корректное указание целевой части тела при нанесении урона!Добавление параметра
targetPart: TargetBodyPart.Head
является правильным решением, так как это точно отражает механику удара головой о стол. Это изменение хорошо согласуется с целями PR по улучшению баланса хирургии и повреждений частей тела.Предлагаю добавить комментарий к методу
HitHeadClumsy
, поясняющий, что урон наносится именно по голове:/// <summary> /// "Hits" an entites head against the given table. /// </summary> + /// <remarks> + /// Damage is specifically applied to the head when a bonkable component is present. + /// </remarks> public void HitHeadClumsy(Entity<ClumsyComponent> target, EntityUid table)Content.Server/Medical/DefibrillatorSystem.cs (1)
205-205
: Анатомически корректное изменение механики дефибриллятора!Указание
TargetBodyPart.Torso
как цели воздействия дефибриллятора является анатомически правильным решением и соответствует реальной медицинской практике. Это изменение хорошо вписывается в общую концепцию улучшения хирургической системы.Рекомендуется добавить константу для значения части тела в начало класса:
+private const TargetBodyPart DEFIBRILLATOR_TARGET = TargetBodyPart.Torso;
Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs (1)
Line range hint
241-245
: Рассмотрите добавление конфигурируемого значения множителяЖестко заданное значение
0.5f
может затруднить балансировку в будущем. Рекомендуется:
- Вынести значение в константу класса
- Сделать его настраиваемым через конфигурацию
Предлагаемые изменения:
+ private const float PressureDamagePartMultiplier = 0.5f; - _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * Atmospherics.LowPressureDamage, true, false, canSever: false, partMultiplier: 0.5f); + _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * Atmospherics.LowPressureDamage, true, false, canSever: false, partMultiplier: PressureDamagePartMultiplier); - _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false, canSever: false, partMultiplier: 0.5f); + _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false, canSever: false, partMultiplier: PressureDamagePartMultiplier);Also applies to: 255-259
Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs (4)
Line range hint
142-147
: Логика распространения урона по торсу реализована корректноМеханика 33% шанса задеть дополнительную часть тела при попадании в торс добавляет реализму. Однако стоит добавить XML-документацию для лучшего понимания этой механики другими разработчиками.
+/// <summary> +/// When targeting the torso, there is a 33% chance to also hit an additional random body part. +/// This simulates the spread of damage across connected body parts. +/// </summary> if (targetPart.Value == TargetBodyPart.Torso) { var additionalPart = GetRandomPartSpread(_random, 10); targetPart = targetPart.Value | additionalPart; }
Line range hint
419-426
: Рекомендуется вынести множители урона в константыТекущие множители урона логичны с точки зрения баланса, но магические числа лучше вынести в именованные константы для улучшения читаемости и обслуживания кода.
+ private const float HEAD_DAMAGE_MODIFIER = 0.5f; + private const float LIMB_DAMAGE_MODIFIER = 0.7f; + private const float TORSO_DAMAGE_MODIFIER = 1.0f; + public static float GetPartDamageModifier(BodyPartType partType) { return partType switch { - BodyPartType.Head => 0.5f, // 50% damage, necks are hard to cut - BodyPartType.Torso => 1.0f, // 100% damage - BodyPartType.Arm => 0.7f, // 70% damage - BodyPartType.Hand => 0.7f, // 70% damage - BodyPartType.Leg => 0.7f, // 70% damage - BodyPartType.Foot => 0.7f, // 70% damage + BodyPartType.Head => HEAD_DAMAGE_MODIFIER, + BodyPartType.Torso => TORSO_DAMAGE_MODIFIER, + BodyPartType.Arm => LIMB_DAMAGE_MODIFIER, + BodyPartType.Hand => LIMB_DAMAGE_MODIFIER, + BodyPartType.Leg => LIMB_DAMAGE_MODIFIER, + BodyPartType.Foot => LIMB_DAMAGE_MODIFIER, }; }
Line range hint
484-494
: Необходимо пересмотреть шансы уклоненияТекущие значения шанса уклонения (особенно 70% для головы) могут сделать хирургические операции слишком ненадёжными, что противоречит целям PR по улучшению эффективности хирургии.
Предлагаю уменьшить шансы уклонения:
return partType switch { - BodyPartType.Head => 0.70f, // 70% chance to evade - BodyPartType.Arm => 0.20f, // 20% chance to evade - BodyPartType.Hand => 0.20f, // 20% chance to evade - BodyPartType.Leg => 0.20f, // 20% chance to evade - BodyPartType.Foot => 0.20f, // 20% chance to evade + BodyPartType.Head => 0.40f, // 40% chance to evade + BodyPartType.Arm => 0.15f, // 15% chance to evade + BodyPartType.Hand => 0.15f, // 15% chance to evade + BodyPartType.Leg => 0.15f, // 15% chance to evade + BodyPartType.Foot => 0.15f, // 15% chance to evade BodyPartType.Torso => 0f, // 0% chance to evade _ => 0f };
Line range hint
52-69
: Механика самоисцеления реализована эффективноРеализация самоисцеления через очередь задач (JobQueue) обеспечивает хорошую производительность. Пониженное исцеление от химического урона (0.1x) соответствует целям PR по балансировке.
Рекомендуется добавить метрики для мониторинга времени выполнения задач исцеления:
protected override Task<object?> Process() { + using var _ = _timing.StartTiming($"HealingJob_{_ent.Id}"); _self.ProcessIntegrityTick(_ent); return Task.FromResult<object?>(null); }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (17)
Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs
(2 hunks)Content.Server/Medical/DefibrillatorSystem.cs
(2 hunks)Content.Server/Weapons/Ranged/Systems/GunSystem.cs
(1 hunks)Content.Shared/Backmen/Magic/BkmMagicSystem.cs
(2 hunks)Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs
(1 hunks)Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs
(1 hunks)Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs
(1 hunks)Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs
(2 hunks)Content.Shared/Backmen/Targeting/TargetBodyPart.cs
(1 hunks)Content.Shared/Body/Part/BodyPartComponent.cs
(2 hunks)Content.Shared/Chat/SharedSuicideSystem.cs
(3 hunks)Content.Shared/Climbing/Systems/ClimbSystem.cs
(2 hunks)Content.Shared/Clumsy/ClumsySystem.cs
(2 hunks)Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs
(1 hunks)Content.Shared/Damage/Systems/DamageOnInteractSystem.cs
(1 hunks)Content.Shared/Doors/Systems/SharedDoorSystem.cs
(2 hunks)Resources/Prototypes/Body/Parts/base.yml
(1 hunks)
🔇 Additional comments (19)
Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs (2)
252-252
: Увеличение бонуса лечения при смерти цели
Увеличение бонуса лечения на 20% для мёртвых тел повышает эффективность хирургии в таких случаях и соответствует целям данного PR.
262-262
: Увеличение значения тяжести повреждений
Изменение параметра тяжести в SurgeryStepDamageEvent
на 1.5f
усиливает эффект лечения при хирургических процедурах, что соответствует целям балансировки хирургии в данном PR.
Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs (1)
13-13
: Требуется проверка баланса игрового процесса
Утроение значения SleepModifier
может существенно повлиять на баланс хирургических операций. Необходимо убедиться, что такое изменение соответствует целям балансировки и не создаёт нежелательных последствий в игровом процессе.
Content.Shared/Backmen/Magic/BkmMagicSystem.cs (1)
26-26
: Проверьте влияние изменения на баланс исцеления
Добавление параметра targetPart: TargetBodyPart.All
означает, что заклинание теперь будет лечить все части тела одновременно. Это существенное изменение в механике исцеления, которое соответствует целям PR по корректировке баланса хирургии.
Убедитесь, что:
- Это изменение не делает магическое исцеление слишком мощным по сравнению с хирургией
- Общий баланс исцеления остается сбалансированным
✅ Verification successful
Изменение подтверждено как часть балансировки хирургии
Анализ кода показывает, что добавление targetPart: TargetBodyPart.All
в магическом исцелении является намеренным изменением в рамках общей балансировки хирургии:
- Изменение согласуется с другими системами исцеления, которые также используют таргетинг частей тела
- Комментарий "backmen: surgery" присутствует в нескольких связанных файлах, указывая на целенаправленные изменения
- Система хирургии имеет детальную реализацию таргетинга частей тела через
TargetBodyPart
- Другие системы исцеления (например, дефибриллятор) также используют специфичные части тела для своих эффектов
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Поиск других систем исцеления для сравнения механик
# Поиск других систем с похожей механикой исцеления
rg -l "TryChangeDamage.*targetPart.*All" --type cs
# Поиск других заклинаний исцеления
ast-grep --pattern 'class $_ {
$$$
Heal$_($$$) {
$$$
}
}'
Length of output: 214
Script:
#!/bin/bash
# Поиск использования TryChangeDamage с контекстом
rg "TryChangeDamage" --type cs -B 2 -A 2
# Поиск других систем исцеления
rg "HealAmount|Heal\(" --type cs -B 2 -A 2
# Проверка связанных файлов в контексте хирургии
rg "Surgery|TargetBodyPart" --type cs -B 2 -A 2
Length of output: 151743
Content.Shared/Backmen/Targeting/TargetBodyPart.cs (2)
25-28
: Корректное объединение частей конечностей
Логика объединения частей конечностей (рука + кисть, нога + стопа) реализована правильно с использованием побитового ИЛИ. Это соответствует целям PR по улучшению точности попадания по частям тела.
35-36
: Проверьте влияние на баланс полного урона по конечностям
Новые флаги FullArms
и FullLegs
позволяют наносить урон всем частям конечностей одновременно. Учитывая цели PR по усложнению полного уничтожения частей тела, рекомендуется проверить:
- Не станет ли урон по полным конечностям слишком сильным
- Правильно ли работает расчет урона при попадании по составным частям
Content.Shared/Chat/SharedSuicideSystem.cs (1)
42-42
: Логичное изменение механики самоубийства
Добавление параметра targetPart: TargetBodyPart.Head
является обоснованным изменением, так как урон при попытке самоубийства должен быть направлен в голову. Это делает механику более реалистичной и согласуется с целями PR по улучшению системы повреждений.
Resources/Prototypes/Body/Parts/base.yml (1)
33-33
: Унификация порогов урона для частей тела
Увеличение и выравнивание порогов урона для типов Blunt и Slash до 120 соответствует цели PR - усложнить полное уничтожение частей тела. Это должно сделать хирургию более востребованной механикой для лечения повреждений.
Also applies to: 39-39
Content.Shared/Damage/Systems/DamageOnInteractSystem.cs (2)
71-72
: Корректное изменение целевых частей тела
Изменение с TargetBodyPart.LeftArm
/RightArm
на TargetBodyPart.LeftFullArm
/RightFullArm
соответствует целям PR по улучшению хирургической механики и обеспечивает более точное определение повреждаемой области.
71-72
: Проверить согласованность использования TargetBodyPart
Необходимо убедиться, что новые значения LeftFullArm
и RightFullArm
корректно обрабатываются во всех связанных системах.
✅ Verification successful
Использование TargetBodyPart.LeftFullArm и RightFullArm корректно
Анализ показывает, что значения LeftFullArm
и RightFullArm
определены в перечислении TargetBodyPart
как комбинация соответствующих частей руки и кисти:
LeftFullArm = LeftArm | LeftHand,
RightFullArm = RightArm | RightHand
Эти значения используются корректно в системе прицеливания и обработки урона, где полная рука рассматривается как единая цель. Все связанные системы (targeting, damage, UI) правильно обрабатывают как базовые части тела, так и их комбинации.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск использования TargetBodyPart.LeftFullArm и RightFullArm
# для проверки согласованности их применения
# Поиск всех случаев использования FullArm
rg "TargetBodyPart\.(Left|Right)FullArm"
# Поиск определения enum для проверки корректности значений
ast-grep --pattern 'enum TargetBodyPart {
$$$
}'
Length of output: 339
Script:
#!/bin/bash
# Поиск определения enum TargetBodyPart другим способом
rg -A 20 "enum TargetBodyPart"
# Поиск всех файлов, где используется TargetBodyPart
rg "TargetBodyPart" -l
# Поиск использования других значений enum для сравнения
rg "TargetBodyPart\." -A 1
Length of output: 23411
Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs (1)
76-76
: Проверьте реализацию механики уклонения
Добавление параметра canEvade: true
логично вписывается в общую концепцию балансировки боевой системы. Однако стоит убедиться в корректности реализации механики уклонения в базовой системе.
✅ Verification successful
Механика уклонения реализована корректно
Анализ кодовой базы показывает, что механика уклонения (evade) полностью реализована в системе урона:
- Параметр
canEvade
интегрирован в методTryChangeDamage
- Реализована логика проверки возможности уклонения через
BeforeDamageChangedEvent
- Для разных частей тела установлены различные шансы уклонения (70% для головы, 20% для конечностей)
- Система учитывает состояние персонажа (нельзя уклониться лежа или в критическом состоянии)
Добавление canEvade: true
в данном контексте является корректным изменением, которое позволяет атакуемым сущностям уклоняться от урона при соблюдении необходимых условий.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Проверка реализации механики уклонения в DamageableSystem
# Поиск определения механики уклонения
ast-grep --pattern 'TryChangeDamage($_,$_,$_,$_,canEvade:$_)'
# Поиск связанных тестов
rg -l "canEvade.*test"
Length of output: 63
Script:
#!/bin/bash
# Search for TryChangeDamage method definition and its usages
ast-grep --pattern 'public $_ TryChangeDamage($$$)'
# Search for any evade-related functionality
rg -i "evade|dodge" -A 5 -B 5
# Search for damage system tests
fd "test.*damage" --type f
Length of output: 33573
Script:
#!/bin/bash
# Search for DamageableSystem implementation
ast-grep --pattern 'class DamageableSystem {
$$$
}'
# Search for body system implementation related to evade
ast-grep --pattern 'class SharedBodySystem {
$$$
}'
# Look for tests related to damage and evade
rg -l "test.*damage.*evade" -g "*.cs"
Length of output: 151
Content.Shared/Body/Part/BodyPartComponent.cs (1)
85-85
: Подтвердите корректность увеличения частоты исцеления
Уменьшение времени между тиками исцеления с 30 до 6 увеличивает частоту срабатывания эффекта в 5 раз. Это существенное изменение, которое следует протестировать в игре.
✅ Verification successful
Изменение частоты исцеления согласуется с механикой
Анализ кода показывает, что изменение HealingTime с 30 до 6 является частью сбалансированной системы:
- Каждые 6 секунд запускается IntegrityJob с малым временем выполнения (0.005)
- SelfHealingAmount уменьшен до 0.1f и применяется ко всем типам урона
- Для химического урона (Caustic) дополнительно применяется множитель 0.1
Изменение корректно интегрировано в существующую систему исцеления и соответствует цели снижения пассивного восстановления.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других компонентов с похожими таймерами для сравнения
rg -A 2 "HealingTime|healing.*time|heal.*timer" --type cs
Length of output: 1175
Script:
#!/bin/bash
# Поиск использования HealingTime в системных файлах и тестах
rg -A 5 "IntegrityJob|SelfHealingAmount" --type cs
Length of output: 4377
Content.Server/Medical/DefibrillatorSystem.cs (2)
11-11
: Корректное добавление зависимости!
Добавление Content.Shared.Backmen.Targeting
логично связано с новой системой таргетинга частей тела.
205-205
: Необходима проверка интеграции с другими медицинскими системами
Изменение механики нацеливания урона на конкретные части тела является важным изменением.
✅ Verification successful
Изменение безопасно интегрировано с другими медицинскими системами
Анализ показывает, что:
- Дефибриллятор - единственная медицинская система, которая использует TryChangeDamage с указанием части тела
- Другие медицинские системы (HealingSystem, MedicalScanner) не конфликтуют с этим изменением
- Изменение согласуется с общей логикой хирургической системы, где урон и лечение привязаны к конкретным частям тела
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других медицинских систем, использующих TryChangeDamage
rg "TryChangeDamage.*target.*damage.*origin" --type cs
# Поиск других систем, взаимодействующих с торсом
ast-grep --pattern 'TargetBodyPart.Torso'
Length of output: 2576
Script:
#!/bin/bash
# Поиск всех использований TryChangeDamage для лучшего понимания контекста
rg "TryChangeDamage" -A 2 --type cs
# Поиск других медицинских систем
fd "Medical" --type f --extension cs --exec cat {}
Length of output: 65912
Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs (1)
323-323
: Проверьте баланс урона при столкновении с объектами
Добавление параметров canEvade: false
и canSever: false
соответствует целям PR по корректировке баланса хирургии, делая более сложным полное уничтожение частей тела. Однако фиксированный урон в 5 единиц по голове без возможности уклонения может быть слишком суровым наказанием для игроков.
Рекомендуется:
- Проверить, не является ли урон чрезмерным для новичков
- Рассмотреть возможность масштабирования урона в зависимости от размера объекта
✅ Verification successful
Based on the analysis of the code, I can now provide a final response:
Урон при столкновении с объектами сбалансирован
Фиксированный урон в 5 единиц по голове без возможности уклонения является обоснованным, так как:
- Аналогичные системы (ClumsySystem, BonkableComponent) используют схожие значения урона
- Параметры
canEvade: false
иcanSever: false
необходимы для предотвращения эксплойтов с уклонением и отсечением частей тела - Урон применяется только при попытке встать под объектом, что является осознанным действием игрока
- Система включает дополнительный эффект оглушения на 2 секунды, что делает механику более сбалансированной
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем другие случаи применения урона по голове для сравнения
rg "targetPart: TargetBodyPart.Head" --type cs
# Ищем другие места с похожим уроном для сравнения баланса
ast-grep --pattern 'DamageDict = {{"Blunt", $_}}'
Length of output: 1103
Script:
#!/bin/bash
# Проверяем реализацию BonkDamage для сравнения
ast-grep --pattern 'BonkDamage = new DamageSpecifier($$$)'
# Ищем другие случаи нанесения урона при столкновении
rg "Blunt" -B2 -A2 --type cs
# Проверяем связанные системы
fd "Clumsy|Suicide|Standing" --type f --extension cs --exec cat {}
Length of output: 68760
Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs (1)
241-241
: Проверьте корректность множителя урона для частей тела
Добавление partMultiplier: 0.5f
уменьшает урон от давления вдвое, что соответствует целям PR по усложнению уничтожения частей тела. Однако стоит убедиться, что это значение сбалансировано с:
- Общим уроном от других источников
- Скоростью лечения
- Порогом уничтожения частей тела
Запустите следующий скрипт для проверки использования partMultiplier в других системах урона:
Also applies to: 255-255
✅ Verification successful
Let me analyze the usage of partMultiplier
across the codebase to better understand the damage balancing. I'll search for the specific component values referenced in the melee system.
Let me try a different approach to find the melee weapon component definitions.
Based on the analysis of the codebase, I can now provide a final response about the pressure damage multiplier changes.
Множитель урона 0.5f для урона от давления является обоснованным
Анализ показывает, что:
- В других системах урона
partMultiplier
используется для контроля повреждений частей тела:- Система рукопашного боя использует настраиваемые множители
- Система отложенной смерти использует 0f для полного блокирования урона частям тела
- Система тела использует 0f для защиты от урона
Значение 0.5f для урона от давления является сбалансированным, так как:
- Оно позволяет наносить урон, но не слишком быстро
- Согласуется с общей механикой контроля урона в игре
- Применяется последовательно как для высокого, так и для низкого давления
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск других систем, использующих partMultiplier для сравнения значений
# Поиск использования TryChangeDamage с partMultiplier
rg "TryChangeDamage.*partMultiplier:" --type cs
Length of output: 1201
Script:
#!/bin/bash
# Search for melee weapon damage multiplier configurations
ast-grep --pattern 'ClickPartDamageMultiplier = $_'
ast-grep --pattern 'HeavyPartDamageMultiplier = $_'
# Also check for any configuration files that might define these values
rg "PartDamageMultiplier" --type yaml
Length of output: 53
Script:
#!/bin/bash
# Search for melee weapon component definitions
ast-grep --pattern 'class MeleeWeaponComponent'
# Also check for prototype definitions that might set these multipliers
rg "type: MeleeWeapon" -A 10 --type yaml
Length of output: 100209
Content.Server/Weapons/Ranged/Systems/GunSystem.cs (1)
215-215
: Проверьте влияние параметра canEvade на баланс урона
Добавление параметра canEvade: true
в вызов TryChangeDamage
позволяет целям потенциально уклоняться от урона, что соответствует целям PR по усложнению полного уничтожения частей тела.
Давайте проверим согласованность этого изменения с другими системами урона:
Рекомендуется документировать это поведение в комментариях к коду, так как оно влияет на игровой баланс.
✅ Verification successful
Based on the search results, I can now generate the final response since I have enough information about the usage of canEvade
parameter across the codebase:
Параметр canEvade используется корректно и согласованно
Анализ кодовой базы показывает, что параметр canEvade: true
используется в следующих ключевых системах:
- Система урона при атаке (
DamageOnAttackedSystem.cs
) - Система огнестрельного оружия (
GunSystem.cs
)
Это изменение согласуется с общей логикой обработки урона в игре, где определенные типы атак позволяют цели попытаться уклониться от урона. Параметр используется избирательно и осмысленно.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск других вызовов TryChangeDamage для проверки согласованности использования canEvade
# Поиск всех вызовов TryChangeDamage с параметром canEvade
rg "TryChangeDamage.*canEvade" -A 2
# Поиск всех вызовов TryChangeDamage для сравнения
rg "TryChangeDamage\(" -A 2
Length of output: 55574
Content.Shared/Doors/Systems/SharedDoorSystem.cs (2)
5-5
: Добавление пространства имен для системы таргетинга выглядит корректно!
Добавление Content.Shared.Backmen.Targeting
соответствует изменениям в логике работы с частями тела.
527-527
: Изменение логики нанесения урона дверью требует проверки!
Добавление параметра targetPart: TargetBodyPart.BodyMiddle
соответствует целям PR по улучшению баланса хирургии. Теперь урон от дверей будет корректно применяться к средней части тела.
✅ Verification successful
Изменение логики нанесения урона дверью подтверждено безопасным
Анализ показывает, что добавление параметра targetPart: TargetBodyPart.BodyMiddle
соответствует общей логике системы нанесения урона в кодовой базе. Другие системы, такие как дефибриллятор, самоубийство, и лазание, также используют целевые части тела для локализации урона. Это изменение является частью более широкой системы хирургии и не нарушает существующую функциональность.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем использование TargetBodyPart.BodyMiddle в других системах
# Поиск других случаев использования BodyMiddle для согласованности
ast-grep --pattern 'TargetBodyPart.BodyMiddle'
# Поиск других методов, которые могут требовать аналогичных изменений
rg -l "TryChangeDamage.*origin:"
Length of output: 248
Script:
#!/bin/bash
# Поиск всех использований TryChangeDamage для анализа параметров
rg "TryChangeDamage" -B 2 -A 2
# Поиск определения метода TryChangeDamage для проверки параметров
ast-grep --pattern 'TryChangeDamage($$$)'
# Поиск других систем, которые могут наносить урон определенным частям тела
rg "TargetBodyPart" -B 2 -A 2
Length of output: 102272
@@ -524,7 +525,7 @@ private void OnGlassClimbed(EntityUid uid, GlassTableComponent component, ref Cl | |||
if (TryComp<PhysicsComponent>(args.Climber, out var physics) && physics.Mass <= component.MassLimit) | |||
return; | |||
|
|||
_damageableSystem.TryChangeDamage(args.Climber, component.ClimberDamage, origin: args.Climber); | |||
_damageableSystem.TryChangeDamage(args.Climber, component.ClimberDamage, origin: args.Climber, targetPart: TargetBodyPart.FullLegs); // backmen: surgery |
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
Требуется обновление логики урона в системе лазания
В системе лазания обнаружены два места, требующие внимания:
- В методе
OnGlassClimbed
для урона по столу (component.TableDamage
) не указана целевая часть тела, что не соответствует новой логике спецификации урона - В
FleshHeartSystem.cs
урон типа "Slash" также применяется без указания целевой части тела
Рекомендуется:
- Добавить соответствующую часть тела для урона по столу в
OnGlassClimbed
- Рассмотреть необходимость указания целевой части тела для урона в
FleshHeartSystem
🔗 Analysis chain
Корректное указание целевой части тела при получении урона!
Добавление параметра targetPart: TargetBodyPart.FullLegs
логично, так как при падении через стеклянный стол урон должен приходиться именно на ноги.
Давайте проверим другие методы нанесения урона при лазании:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск других мест нанесения урона в системе лазания
# Ожидаем увидеть другие вызовы TryChangeDamage, которые могут потребовать указания targetPart
rg "TryChangeDamage.*Climb" --type cs
Length of output: 500
Script:
#!/bin/bash
# Let's check the context of these damage calls to understand their purpose
rg "TryChangeDamage.*Climb" --type cs -B 5 -A 5
Length of output: 2657
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.
Где находится OnGlassClimbed метод? В каком классе. И FleshHeartSystem.cs
какой конкретно метод не указывает целевую часть тела
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.
@TokenStyle: Метод OnGlassClimbed
находится в классе ClimbSystem
в файле Content.Shared/Climbing/Systems/ClimbSystem.cs
.
В файле Content.Shared/Backmen/Corvax/HeartAttack/FleshHeartSystem.cs
, метод OnHeartAttack
вызывает TryChangeDamage
без указания параметра targetPart
.
🔗 Analysis chain
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Locate the 'OnGlassClimbed' method and identify its class and file
rg "void OnGlassClimbed" --type cs -n
# Find the specific method in 'FleshHeartSystem.cs' where 'TryChangeDamage' is called without specifying 'targetPart'
rg "TryChangeDamage(" Content.Shared/Backmen/Corvax/HeartAttack/FleshHeartSystem.cs -n -C 5
Length of output: 370
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.
@coderabbitai Где находится OnGlassClimbed метод? В каком классе. И FleshHeartSystem.cs какой конкретно метод не указывает целевую часть тела?
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.
Метод OnGlassClimbed
находится в классе ClimbSystem
, который расположен в файле Content.Shared/Climbing/Systems/ClimbSystem.cs
. Этот метод обрабатывает событие лазания на стеклянный стол. Вот сигнатура метода:
private void OnGlassClimbed(EntityUid uid, GlassTableComponent component, ref ClimbedOnEvent args)
{
// ...
}
В файле Content.Shared/Backmen/Corvax/HeartAttack/FleshHeartSystem.cs
метод OnHeartAttack
не указывает целевую часть тела при вызове TryChangeDamage
. Вот соответствующий участок кода:
private void OnHeartAttack(EntityUid uid, FleshHeartComponent component, HeartAttackEvent args)
{
_damageableSystem.TryChangeDamage(uid, args.Damage, true, origin: uid);
// ...
}
Рекомендуется добавить параметр targetPart
в вызов TryChangeDamage
, чтобы урон корректно применялся к целевой части тела согласно новой логике спецификации урона.
Надеюсь, это проясняет вопрос!
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.
Требует #944 |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
У стола нету частей тела, ему не надо их указывать... Урон уже наносится по ногам того кто пытался взобраться на стол |
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
🧹 Outside diff range and nitpick comments (1)
Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml (1)
Line range hint
1-250
: Рекомендация по архитектуре: Вынести пороги урона в отдельный конфигУчитывая, что пороги урона являются важными балансировочными параметрами, рекомендуется вынести их в отдельный конфигурационный файл. Это упростит настройку баланса в будущем.
Предлагаю создать файл
damage_thresholds.yml
и использовать константы:constants: bodyPartThresholds: blunt: 120 slash: 120 heat: 200Это позволит централизованно управлять балансом для всех рас и типов частей тела.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (5)
Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs
(1 hunks)Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs
(1 hunks)Resources/Prototypes/Body/Parts/skeleton.yml
(1 hunks)Resources/Prototypes/_Backmen/Body/Parts/harpy.yml
(1 hunks)Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs
- Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs
🔇 Additional comments (5)
Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml (1)
32-32
: Унификация порогов урона для частей тела Shadowkin
Увеличение и выравнивание порогов урона для типов Blunt и Slash до 120 соответствует целям PR по усложнению уничтожения частей тела. Это должно сделать хирургические операции более востребованными.
Давайте проверим согласованность изменений с другими расами:
Also applies to: 38-38
✅ Verification successful
Подтверждение согласованности порогов урона для Shadowkin
Анализ показывает, что изменение порогов урона до 120 для типов Blunt и Slash у Shadowkin полностью соответствует базовым значениям в base.yml
и согласуется с другими расами:
- Базовый прототип (base.yml): 120/120/200
- Скелеты (skeleton.yml): 120/120/200
- Харпии (harpy.yml): 120/120/200
- Шэдоукины (shadowkin.yml): 120/120/200
Унификация значений способствует балансу игровой механики и соответствует общей структуре прототипов.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Проверка порогов урона у других рас
# Expected: Сравнимые значения порогов урона
rg -U "damageType: (Blunt|Slash)" "Resources/Prototypes"
Length of output: 1784
Script:
#!/bin/bash
# Получаем значения урона для всех рас
rg -U "damage: \d+" "Resources/Prototypes/_Backmen/Body/Parts/(shadowkin|harpy).yml" "Resources/Prototypes/Corvax/Body/Parts/vulpkanin.yml" "Resources/Prototypes/Body/Parts/(skeleton|base).yml" -A 1
Length of output: 1266
Script:
#!/bin/bash
# Исправляем поиск файлов, используя правильные пути
rg -U "damage: \d+" Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml Resources/Prototypes/_Backmen/Body/Parts/harpy.yml Resources/Prototypes/Body/Parts/skeleton.yml Resources/Prototypes/Body/Parts/base.yml -A 1
Length of output: 2273
Resources/Prototypes/Body/Parts/skeleton.yml (2)
26-26
: Одобрено: Увеличение порогов урона соответствует целям баланса
Увеличение порогов урона от дробящего (Blunt) и режущего (Slash) урона до 120 делает скелетные части тела более устойчивыми к разрушению, что соответствует заявленным целям PR по балансировке хирургии.
Выравнивание обоих типов урона на отметке 120 создает более последовательную механику повреждений.
Also applies to: 32-32
26-26
: Требуется проверка влияния на игровой баланс
Значительное увеличение порогов урона может существенно повлиять на игровой процесс.
Also applies to: 32-32
✅ Verification successful
Значение урона соответствует стандартным настройкам
Анализ показывает, что значение урона 120 для типов Blunt и Slash является стандартным для большинства прототипов частей тела (base.yml, skeleton.yml, shadowkin.yml). Это значение уже используется в базовом прототипе (base.yml) и других расах, поэтому не представляет собой значительное изменение баланса.
- Стандартное значение 120 используется в base.yml, skeleton.yml и shadowkin.yml
- Только vulpkanin имеет небольшие отклонения (110/150)
- Harpy имеет повышенные значения (400) как особый случай
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других файлов с настройками урона для сравнения
rg -l "damageType: (Blunt|Slash)" "Resources/Prototypes"
# Поиск связанных тестов
fd -e "yml" -e "yaml" test.*damage "Resources/Prototypes"
Length of output: 574
Script:
#!/bin/bash
# Поиск конкретных значений урона в файлах прототипов
rg "damage: \d+" Resources/Prototypes/Body/Parts/base.yml -A 2 -B 2
rg "damage: \d+" Resources/Prototypes/Body/Parts/skeleton.yml -A 2 -B 2
rg "damage: \d+" Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml -A 2 -B 2
rg "damage: \d+" Resources/Prototypes/_Backmen/Body/Parts/harpy.yml -A 2 -B 2
rg "damage: \d+" Resources/Prototypes/Corvax/Body/Parts/vulpkanin.yml -A 2 -B 2
Length of output: 3153
Resources/Prototypes/_Backmen/Body/Parts/harpy.yml (2)
Line range hint 65-65
: Улучшение описаний частей тела для интерфейса
Добавление описательных toolName
для всех частей тела улучшает пользовательский интерфейс и облегчает идентификацию частей тела во время хирургических операций. Названия логичны и последовательны.
Also applies to: 89-89, 108-108, 127-127, 146-146, 165-165, 184-184, 203-203, 222-222, 241-241
Line range hint 65-67
: Проверить влияние нового слота контейнера на существующие механики
Добавление torso_slot
и соответствующего containerName
может повлиять на существующие механики хранения и взаимодействия с торсом.
✅ Verification successful
Добавление слота контейнера является частью общего обновления механик тела
Анализ показывает, что torso_slot
и соответствующий containerName
являются частью стандартной реализации для всех базовых частей тела (harpy, shadowkin, vulpkanin и base). Это системное изменение, которое обеспечивает единообразие механик хранения для всех типов торсов.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск использования torso_slot в других файлах
rg "torso_slot" --type yaml
Length of output: 719
Script:
#!/bin/bash
# Проверяем историю изменений файлов с torso_slot
git diff HEAD~10 -- Resources/Prototypes/_Backmen/Body/Parts/harpy.yml Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml Resources/Prototypes/Corvax/Body/Parts/vulpkanin.yml Resources/Prototypes/Body/Parts/base.yml
# Ищем использование ContainerSlot в других файлах для сравнения реализации
rg "ContainerSlot" -A 3 --type yaml
Length of output: 106521
@@ -28,13 +28,13 @@ | |||
- trigger: | |||
!type:DamageTypeTrigger | |||
damageType: Blunt | |||
damage: 110 | |||
damage: 120 |
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
Обнаружены несогласованные пороги урона в прототипах тел
Анализ показал несоответствие порогов урона между различными прототипами:
- Vulpkanin (110 blunt/150 slash) использует старые значения
- Base, Skeleton, Shadowkin и Harpy используют унифицированные значения (120/120)
Рекомендуется:
- Обновить пороги урона в
Resources/Prototypes/Corvax/Body/Parts/vulpkanin.yml
до 120 для обоих типов для сохранения консистентности между всеми расами
🔗 Analysis chain
Унификация порогов урона для различных типов повреждений
Выравнивание порогов урона для ударного (blunt) и режущего (slash) типов до 120 делает механику более последовательной. Это соответствует цели PR - усложнить полное уничтожение частей тела.
Also applies to: 37-37
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка согласованности порогов урона в других файлах прототипов
rg -g "*.yml" "damageType: (Blunt|Slash)" -A 1
Length of output: 3435
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 (1)
Content.Shared/Body/Part/BodyPartComponent.cs (1)
81-81
: Изменение времени пассивного лечения одобреноУменьшение интервала между тиками восстановления с 30 до 10 в сочетании с уменьшенным количеством лечения за тик обеспечивает более плавное восстановление.
Рекомендуется добавить комментарий с обоснованием выбранного значения для упрощения будущих балансировок.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (3)
Content.Shared/Body/Part/BodyPartComponent.cs
(2 hunks)Content.Shared/Climbing/Systems/ClimbSystem.cs
(2 hunks)Content.Shared/Doors/Systems/SharedDoorSystem.cs
(2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- Content.Shared/Climbing/Systems/ClimbSystem.cs
- Content.Shared/Doors/Systems/SharedDoorSystem.cs
🔇 Additional comments (1)
Content.Shared/Body/Part/BodyPartComponent.cs (1)
92-92
: Значительное снижение пассивного восстановления соответствует целям PR
Уменьшение количества восстановления за тик с 5 до 0.15 существенно снижает эффективность пассивного лечения, что соответствует заявленным целям PR по балансировке хирургической системы.
Давайте проверим использование этих параметров в других файлах:
✅ Verification successful
Based on the search results, I can now generate the final response since I have enough information about how SelfHealingAmount
is used in the codebase.
Изменение значения SelfHealingAmount безопасно и соответствует целям PR
Проверка показала, что параметр SelfHealingAmount
используется только в двух местах:
- В самом компоненте
BodyPartComponent.cs
как определение поля - В
SharedBodySystem.Targeting.cs
для расчета исцеления по различным типам урона
Уменьшение значения с 5 до 0.15 корректно повлияет на все места использования и действительно снизит скорость пассивного исцеления, что соответствует целям балансировки.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск использования параметров HealingTime и SelfHealingAmount
# для оценки влияния изменений на другие системы
rg -A 3 "HealingTime|SelfHealingAmount" --type cs
Length of output: 2968
Ради баланса вселенной, баланс хирургии
🆑 Rouden
Summary by CodeRabbit
Новые функции
Исправления ошибок
Документация