Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[Balance] Surgery Balance Tweaks #941

Merged
merged 8 commits into from
Dec 6, 2024
Merged

Conversation

Roudenn
Copy link
Collaborator

@Roudenn Roudenn commented Nov 24, 2024

Ради баланса вселенной, баланс хирургии

🆑 Rouden

  • tweak: Теперь операция по лечению ран гораздо более эффективна, если у пациента много общего урона.
  • tweak: Пассивное лечение частей тела со временем теперь гораздо меньше.
  • tweak: Части тел теперь сложнее полностью уничтожить.
  • fix: Некоторые действия теперь наносят урон по корректным частям тела.

Summary by CodeRabbit

  • Новые функции

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

    • Оптимизированы механизмы проверки наличия защиты от урона при взаимодействиях.
  • Документация

    • Обновлены комментарии и описание методов для улучшения понимания механик повреждений и взаимодействий.

@Roudenn Roudenn requested a review from Rxup as a code owner November 24, 2024 09:04
Copy link
Contributor

coderabbitai bot commented Nov 24, 2024

Walkthrough

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

Changes

File Path Change Summary
Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs Изменения в методе TryChangeDamage, добавлен параметр partMultiplier для расчета урона в зависимости от давления. Уточнена логика определения состояния давления.
Content.Server/Medical/DefibrillatorSystem.cs Изменен метод Zap, добавлен параметр targetPart, указывающий на TargetBodyPart.Torso для более точного лечения.
Content.Server/Weapons/Ranged/Systems/GunSystem.cs Обновлен метод Shoot, добавлен параметр canEvade: true для возможности уклонения от урона. Изменена логика воспроизведения звуков удара.
Content.Shared/Backmen/Magic/BkmMagicSystem.cs Обновлен метод OnHealSpell, добавлен параметр targetPart: TargetBodyPart.All для применения лечения ко всем частям тела.
Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs Изменения в методе TryStandUp, изменены параметры обработки урона при попытке встать.
Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs Обновлены комментарии и логика целевой обработки частей тела, уточнены вероятности попадания.
Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs Изменено значение SleepModifier с 0.5f на 1.5f.
Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs Изменены множители и условия для шагов хирургии, улучшена обработка условий выполнения операций.
Content.Shared/Backmen/Targeting/TargetBodyPart.cs Добавлены новые значения в перечисление TargetBodyPart для более сложного таргетинга частей тела.
Content.Shared/Chat/SharedSuicideSystem.cs Добавлен параметр targetPart: TargetBodyPart.Head в методы ApplyLethalDamage.
Content.Shared/Climbing/Systems/ClimbSystem.cs Обновлен метод OnGlassClimbed, добавлен параметр targetPart: TargetBodyPart.FullLegs.
Content.Shared/Clumsy/ClumsySystem.cs Изменен метод HitHeadClumsy, добавлен параметр targetPart для указания части тела.
Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs Обновлен метод OnAttacked, добавлен параметр canEvade: true для обработки урона.
Content.Shared/Damage/Systems/DamageOnInteractSystem.cs Изменены маппинги для определения целевых частей тела при взаимодействии.
Content.Shared/Doors/Systems/SharedDoorSystem.cs Добавлен параметр targetPart в метод Crush для уточнения части тела, получающей урон.
Resources/Prototypes/Body/Parts/base.yml Увеличены значения урона для типов Blunt и Slash в компоненте Destructible.
Resources/Prototypes/Body/Parts/skeleton.yml Увеличены значения урона для типов Blunt и Slash в компоненте Destructible.
Resources/Prototypes/_Backmen/Body/Parts/harpy.yml Изменены значения урона и добавлены новые свойства для частей тела.
Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml Увеличены значения урона для типов Blunt и Slash в компоненте Destructible.

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 @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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.

📥 Commits

Reviewing files that changed from the base of the PR and between 3eec66d and 709ec68.


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

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

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

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

CodeRabbit Commands (Invoked using PR comments)

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

Other keywords and placeholders

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

CodeRabbit Configuration File (.coderabbit.yaml)

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

Documentation and Community

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

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 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: Рекомендации по архитектуре системы нацеливания

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

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

Хотите, чтобы я помог с реализацией этих улучшений?

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

📥 Commits

Reviewing files that changed from the base of the PR and between 120f7e8 and bfa0ccd.

📒 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 используются правильно:

  1. Определение флагов корректно использует битовые операции:

    • FullArms = Arms | Hands
    • FullLegs = Feet | Legs
  2. Составные флаги применяются в системах правильно:

    • FullLegs используется в ClimbSystem для нанесения урона по ногам при падении
    • FullArms используется как часть BodyMiddle для определения зоны поражения
  3. Все битовые операции с этими флагами согласованы с остальными флагами перечисления 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 для предотвращения уклонения при падении)

Реализация согласуется с целями улучшения хирургических механик и не нарушает баланс игры, так как:

  1. Используется избирательно только для определенных типов урона
  2. Имеет явные случаи, когда уклонение должно быть отключено
  3. Интегрирована с существующими системами урона и тестами
🏁 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 означает, что дефибриллятор теперь лечит только торс. Необходимо убедиться, что это изменение:

  1. Не делает дефибриллятор слишком слабым
  2. Соответствует общему балансу хирургической системы
✅ Verification successful

Изменение не влияет на баланс лечения дефибриллятором

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

  1. Дефибриллятор используется только для реанимации мертвых игроков
  2. Параметр targetPart: TargetBodyPart.Torso соответствует логике работы дефибриллятора, так как он воздействует на сердце
  3. Другие системы лечения (медикаменты, хирургия) уже используют таргетирование частей тела
  4. Изменение не уменьшает количество исцеляемого урона, а только указывает его локацию
🏁 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:

  1. Content.Server/Weapons/Ranged/Systems/GunSystem.cs - setting it to true for gun damage
  2. Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs - setting it to true for damage on attacked
  3. Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs - setting it to false 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
Copy link
Contributor

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
Copy link
Contributor

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

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 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: 200
Content.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 может затруднить балансировку в будущем. Рекомендуется:

  1. Вынести значение в константу класса
  2. Сделать его настраиваемым через конфигурацию

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

+ 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

📥 Commits

Reviewing files that changed from the base of the PR and between 120f7e8 and bfa0ccd.

📒 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 по корректировке баланса хирургии.

Убедитесь, что:

  1. Это изменение не делает магическое исцеление слишком мощным по сравнению с хирургией
  2. Общий баланс исцеления остается сбалансированным
✅ Verification successful

Изменение подтверждено как часть балансировки хирургии

Анализ кода показывает, что добавление targetPart: TargetBodyPart.All в магическом исцелении является намеренным изменением в рамках общей балансировки хирургии:

  1. Изменение согласуется с другими системами исцеления, которые также используют таргетинг частей тела
  2. Комментарий "backmen: surgery" присутствует в нескольких связанных файлах, указывая на целенаправленные изменения
  3. Система хирургии имеет детальную реализацию таргетинга частей тела через TargetBodyPart
  4. Другие системы исцеления (например, дефибриллятор) также используют специфичные части тела для своих эффектов
🏁 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 единиц по голове без возможности уклонения может быть слишком суровым наказанием для игроков.

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

  1. Проверить, не является ли урон чрезмерным для новичков
  2. Рассмотреть возможность масштабирования урона в зависимости от размера объекта
✅ Verification successful

Based on the analysis of the code, I can now provide a final response:

Урон при столкновении с объектами сбалансирован

Фиксированный урон в 5 единиц по голове без возможности уклонения является обоснованным, так как:

  1. Аналогичные системы (ClumsySystem, BonkableComponent) используют схожие значения урона
  2. Параметры canEvade: false и canSever: false необходимы для предотвращения эксплойтов с уклонением и отсечением частей тела
  3. Урон применяется только при попытке встать под объектом, что является осознанным действием игрока
  4. Система включает дополнительный эффект оглушения на 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
Copy link
Contributor

@coderabbitai coderabbitai bot Nov 24, 2024

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

Copy link
Contributor

Choose a reason for hiding this comment

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

Где находится OnGlassClimbed метод? В каком классе. И FleshHeartSystem.cs какой конкретно метод не указывает целевую часть тела

Copy link
Contributor

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

Copy link
Contributor

Choose a reason for hiding this comment

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

@coderabbitai Где находится OnGlassClimbed метод? В каком классе. И FleshHeartSystem.cs какой конкретно метод не указывает целевую часть тела?

Copy link
Contributor

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. Этот метод обрабатывает событие лазания на стеклянный стол. Вот сигнатура метода:

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, чтобы урон корректно применялся к целевой части тела согласно новой логике спецификации урона.

Надеюсь, это проясняет вопрос!

Copy link
Owner

@Rxup Rxup left a comment

Choose a reason for hiding this comment

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

@Roudenn
Copy link
Collaborator Author

Roudenn commented Nov 25, 2024

Требует #944

Copy link
Contributor

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

@Roudenn
Copy link
Collaborator Author

Roudenn commented Nov 30, 2024

#941 (review)

У стола нету частей тела, ему не надо их указывать... Урон уже наносится по ногам того кто пытался взобраться на стол
А про сердце плоти ИИ вообще какой-то бред несёт

@Roudenn Roudenn marked this pull request as ready for review November 30, 2024 08:26
@Roudenn Roudenn requested a review from Rxup November 30, 2024 08:26
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 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

📥 Commits

Reviewing files that changed from the base of the PR and between bfa0ccd and 3eec66d.

📒 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
Copy link
Contributor

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

@Roudenn Roudenn added Fix Я хочу исправить то что работает не так. Ready2Merge PR готов к внесению в репозиторий. Balance Для баланса вселенной. and removed S: Untriaged labels Dec 1, 2024
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (1)
Content.Shared/Body/Part/BodyPartComponent.cs (1)

81-81: Изменение времени пассивного лечения одобрено

Уменьшение интервала между тиками восстановления с 30 до 10 в сочетании с уменьшенным количеством лечения за тик обеспечивает более плавное восстановление.

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

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 3eec66d and 709ec68.

📒 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

@Rxup Rxup merged commit a9b3a2f into Rxup:master Dec 6, 2024
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Balance Для баланса вселенной. Fix Я хочу исправить то что работает не так. Ready2Merge PR готов к внесению в репозиторий. size/M
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants