Skip to content

Comments

hotfix 10.01.2026#1416

Merged
KayzelW merged 10 commits intomasterfrom
hotfix-100126
Jan 10, 2026
Merged

hotfix 10.01.2026#1416
KayzelW merged 10 commits intomasterfrom
hotfix-100126

Conversation

@Rxup
Copy link
Owner

@Rxup Rxup commented Jan 10, 2026

Summary by CodeRabbit

  • Новые возможности

    • В шкафчики экипажа добавлены несколько новых плат/предметов.
  • Изменения в лечащих эффектах

    • Лекарства теперь могут восстанавливать травмы костей и органов; эффекты поддерживают указание целевых частей тела и отображаются в гайдбуке.
  • Игровой баланс / поведение

    • Поведение монстров обновлено: скорректированы обзор, приоритеты целей и боевые манёвры; добавлена механика истощения психики.
  • Изменения предметов/экипировки

    • Обновлённое покрытие брони у ряда шлемов, курток и обуви.
  • Удалено

    • Убраны функция «иммерсивного» прицела/телескопа и связанные механики.
  • Локализация

    • Добавлены и обновлены строки гайдбука на en/ru.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 10, 2026

Warning

Rate limit exceeded

@KayzelW has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 9 minutes and 41 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 540ec75 and 63bb59e.

⛔ Files ignored due to path filters (3)
  • Resources/Audio/Backmen/Items/weapons/Rifle/pickup1.ogg is excluded by !**/*.ogg
  • Resources/Audio/Backmen/Items/weapons/Rifle/pickup2.ogg is excluded by !**/*.ogg
  • Resources/Audio/Backmen/Items/weapons/Rifle/pickup3.ogg is excluded by !**/*.ogg
📒 Files selected for processing (4)
  • Resources/Prototypes/Entities/Objects/Devices/pda.yml
  • Resources/Prototypes/Entities/Objects/Tools/glowstick.yml
  • Resources/Prototypes/Entities/Objects/Tools/toolbox.yml
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Snipers/snipers.yml

Walkthrough

Добавлены новые предметы в заполнение шкафчиков; расширены реагенты медицины с AdjustTraumas; обновлён HTN для blob/wisp (DrainPsionicCompound); введена поддержка целевых частей тела в эффектах лечения/урона с локализациями; удалены системы/компоненты телескопа и связанные Immersive-типы.

Changes

Когорта / Файл(ы) Сводка
Наполнение шкафчиков
Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
Добавлены ID: LavalandShuttleConsoleCircuitboard, DiagnoserMachineCircuitboard, VaccinatorMachineCircuitboard.
Реагенты медицины
Resources/Prototypes/Reagents/medicine.yml
Добавлены многочисленные блоки AdjustTraumas для исцеления BoneDamage и OrganDamage в ряде реагентов.
Blob HTN
Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/blob/blob_mobs.yml
В blackboard MobBlobPod добавлено поле NavSmash: !type:Bool = true.
Glimmer / Wisp HTN
Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/glimmer_monsters.yml
Добавлены навигационные флаги и VisionRadius; введён DrainPsionicCompound (PickDrainTargetOperator → MoveToOperator → DrainOperator); обновлён таргетинг сервис NearbyGunWispTargets и параметры WispGunCombatCompound.
HTN root
Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/root.yml
Удалено объявление DrainPsionicCompound (перемещено в glimmer_monsters.yml).
Guidebook — AdjustTraumas
Content.Shared/Backmen/EntityEffects/Effects/AdjustTraumas.cs
Реализован EntityEffectGuidebookText с локализацией описаний AdjustTraumas (traumaType, amount, probability).
Guidebook — SuppressPain
Content.Shared/Backmen/EntityEffects/Effects/SuppressPain.cs
Переключён локализационный ключ на entity-effect-guidebook-suppress-pain и добавлены аргументы (chance, amount, time, maximumSuppression).
Damageable API
Content.Shared/Damage/Systems/DamageableSystem.API.cs
ChangeDamage получил параметры partMultiplier и targetPart; HealEvenly и HealDistributed получили те же параметры и передают их в ChangeDamage.
Эффекты изменения здоровья
Content.Shared/EntityEffects/Effects/Damage/*.cs
В HealthChange, EvenHealthChange, DistributedHealthChange добавлено поле TargetPart (TargetBodyPart); эффекты передают targetPart/partMultiplier при применении; guidebook-описания расширены для отображения целевой части.
Форматирование целевых частей
Content.Shared/Backmen/Targeting/SharedTargetingSystem.cs
Добавлен FormatTargetBodyPartForGuidebook(TargetBodyPart) для локализации/форматирования списка частей тела.
Локализации (en-US, ru-RU)
Resources/Locale/*/backmen/guidebook/entity-effects/effects.ftl
Resources/Locale/*/guidebook/entity-effects/effects.ftl
Добавлены строки для AdjustTraumas, SuppressPain, типов травм и маппинга частей тела; шаблоны guidebook расширены для вывода { $targetPart }.
Тelescope / Immersive — удаление
Content.Client/Backmen/Telescope/TelescopeSystem.cs
Content.Server/Backmen/Telescope/TelescopeSystem.cs
Content.Shared/Backmen/Telescope/*
Content.Server/Backmen/Immersive/ImmersiveSystem.cs
Content.Server/Backmen/Immersive/ImmersiveComponent.cs
Content.Shared/Backmen/CCVar/CCVars.cs
Полностью удалены системы и типы, связанные с Telescope и Immersive (SharedTelescopeSystem, TelescopeComponent, EyeOffsetChangedEvent, серверный/клиентский TelescopeSystem, ImmersiveSystem/Component и CVar ImmersiveEnabled).
Armor coverage & компоненты одежды
Content.Shared/Armor/SharedArmorSystem.cs
Content.Shared/Armor/ArmorComponent.cs
Resources/Prototypes/Entities/Clothing/*
В OnDamageModify добавлена предварительная проверка покрытия части; ArmorComponent изменён для наследования от Robust Component и поле coverage помечено AlwaysPushInheritance; в прототипах одежды добавлены/изменены блоки Armor.coverage (голова, туловище, ноги, ступни и т.п.), некоторые удалены в других местах.
Damageable — события/вызовы
Content.Shared/Damage/Systems/DamageableSystem.Events.cs
В обработке облучения ChangeDamage теперь вызывается с targetPart: TargetBodyPart.All.
Удалены вспомогательные скрипты / пустые строки
Tools/ss14_ru/analyze_report.py
Resources/Locale/*/backmen/objectives/conditions/steal-target-groups.ftl
Resources/Prototypes/_Backmen/Objectives/stealTargetGroups.yml
Удалён скрипт Tools/ss14_ru/analyze_report.py; добавлены/удалены завершающие пустые строки в перечисленных файлах.
Моб/виды
Resources/Prototypes/Entities/Mobs/Species/base.yml
Удалён компонент Immersive из базовой Humanoid species appearance.
Прочие прототипы оружия/биноклей
Resources/Prototypes/Entities/Objects/Weapons/**
Resources/Prototypes/Entities/Objects/Tools/binoculars.yml
Удалены вхождения Telescope из ряда оружий и биноклей.

Sequence Diagram(s)

sequenceDiagram
  participant Wisp as Wisp HTN
  participant Service as NearbyGunWispTargets
  participant World as World/Movement
  participant Drain as DrainOperator
  participant Target as Target Entity

  Wisp->>Service: Запросить цели (учитывая Psionic)
  Service-->>Wisp: Вернуть лучшую цель (TargetCoordinates, DrainTarget)
  Wisp->>World: MoveToOperator -> движение к TargetCoordinates
  World-->>Wisp: Прибыл
  Wisp->>Drain: DrainOperator(drainKey=DrainTarget)
  Drain-->>Target: Применить psionic drain
  Drain-->>Wisp: Возврат результата
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 В шкафчике блестят платы, в реагентах — целый лес,
Висп идёт по следу, забирает свет на дне;
Чиним кости, лечим органы — целые части в цене,
Я, кролик, копаю радость, код шепчет: "всё в порядке".

🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 41.18% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive Заголовок PR содержит дату и использует неинформативный термин 'hotfix', не раскрывая суть основных изменений в кодовой базе. Рекомендуется использовать более описательный заголовок, который отражает главные изменения, например: 'Add targeting support for health effects and armor coverage' или 'Implement trauma healing and body part targeting system'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch hotfix-100126

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

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

🤖 Fix all issues with AI agents
In @Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/glimmer_monsters.yml:
- Around line 229-232: TargetHasComponentCon with component "Psionic" uses
weight 100.0 which gives absolute priority; change the weight to a balanced
value (recommend 5.0–10.0) in the TargetHasComponentCon entry (the curve is the
BoolCurve) so psionic targets are deprioritized from absolute highest
priority—update the weight from 100.0 to a value in that range and keep the rest
of the entry intact.
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between c2cbc90 and 08333b8.

📒 Files selected for processing (5)
  • Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
  • Resources/Prototypes/Reagents/medicine.yml
  • Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/blob/blob_mobs.yml
  • Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/glimmer_monsters.yml
  • Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/root.yml
💤 Files with no reviewable changes (1)
  • Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/root.yml
⏰ Context from checks skipped due to timeout of 300000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Test Packaging
🔇 Additional comments (15)
Resources/Prototypes/Reagents/medicine.yml (8)

210-234: Хорошая реализация криогенного лечения травм.

Условное лечение травм при низкой температуре соответствует механике Cryoxadone. Обратите внимание:

  • Лечение органов исключает мозг и глаза (возможно, намеренно)
  • Значения лечения (-2 для костей, -1 для органов) достаточно сильные для криотерапии

699-705: LGTM! Сбалансированное усиление мощного препарата.

Добавление лечения костных травм (-1.5) для PolypyryliumOligomers логично, учитывая его статус одного из самых мощных brute-хилеров. Значение корректно масштабировано относительно Bicaridine.


898-914: Хорошо сбалансированное универсальное лечение.

Добавление слабого лечения обоих типов травм (-0.6 для костей, -0.5 для органов) соответствует роли Tricordrazine как универсального базового медикамента. Значения корректно занижены относительно специализированных препаратов.


954-973: LGTM! Соответствует статусу редкого универсального медикамента.

Omnizine получает самые высокие значения лечения травм (-1.8 для костей, -1.2 для органов) и лечит все типы органов, включая мозг и глаза. Это соответствует его описанию как самого универсального и редкого медикамента.


1260-1260: Проверьте форматирование строк с типами урона.

Строки 1260 и 1277 имеют измененное форматирование (добавлены пробелы после значений). Убедитесь, что это не ошибка слияния и YAML корректно парсится.

Also applies to: 1277-1277


1261-1267: Отличное соответствие специализации препарата!

Bruizine как основной препарат против тупого урона логично получает лечение BoneDamage (-1.2). Название препарата и его механика идеально соответствуют лечению ушибов и костных травм.


894-894: Требуется ручная проверка форматирования YAML.

Строка 894 содержит Poison: -0.5. Убедитесь, что:

  • Отступ соответствует правилам структуры YAML (соответствует другим свойствам на том же уровне)
  • YAML-файл корректно распарсивается без ошибок синтаксиса

153-159: Конфигурация полностью корректна.

Тип травмы BoneDamage поддерживается системой (определен в TraumaType enum). Все параметры AdjustTraumas (amount, identifier, targetBodyParts, targetOrgans) корректно реализованы и правильно использованы в конфигурации. Логика добавления лечения костных травм для Bicaridine как основного brute-хилера обоснована.

Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/glimmer_monsters.yml (4)

162-164: Удаление поведения простоя повышает агрессивность.

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

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


205-205: Изменение поведения при обнаружении цели.

Изменение stopOnLineOfSight с true на false заставляет визпов продолжать движение к цели даже при наличии прямой видимости. Это может привести к тому, что визпы будут излишне сближаться с целями вместо атаки с дистанции.

Убедитесь, что это намеренное изменение и не ломает дальнобойную тактику визпов.


250-266: Операторы PickDrainTargetOperator и DrainOperator корректно реализованы.

Оба оператора присутствуют в кодовой базе и поддерживают все необходимые параметры:

  • PickDrainTargetOperator определяет поля rangeKey, targetKey и drainKey, полностью соответствующие конфигурации в YAML
  • DrainOperator определяет поле drainKey для получения цели из blackboard
  • Компонент DrainPsionicCompound успешно перемещён из root.yml в glimmer_monsters.yml без дублирования

115-133: Конфигурация навигации соответствует стандартному паттерну для агрессивных мобов.

Все четыре флага навигации (NavClimb, NavInteract, NavPry, NavSmash) и значения радиуса зрения (VisionRadius: 16, AggroVisionRadius: 20) идентичны конфигурации других враждебных сущностей, в частности мобам Gutter (MobBaseMachine). Это не уникальное усиление визпов, а последовательное применение одного паттерна для агрессивных боевых сущностей с необходимостью продвинутой навигации.

Likely an incorrect or invalid review comment.

Resources/Prototypes/Catalog/Fills/Lockers/heads.yml (2)

241-242: Проверьте существование идентификаторов сущностей DiagnoserMachineCircuitboard и VaccinatorMachineCircuitboard.

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


15-15: Идентификатор сущности подтвержден.

Сущность LavalandShuttleConsoleCircuitboard определена в Resources/Prototypes/_Lavaland/Entities/Objects/Devices/computer.yml и доступна для использования.

Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/blob/blob_mobs.yml (1)

51-52: NavSmash уже является установленным и работающим функционалом.

Флаг NavSmash — это хорошо известная и широко используемая функция в системе навигации мобов. Она должным образом реализована в PathfindingSystem и используется в десятках определений мобов (ксено, карп, астероид и другие). Добавление этого флага к блоб-подам следует установленному паттерну в кодовой базе и не требует дополнительной проверки.

Comment on lines 229 to 232
- !type:TargetHasComponentCon
component: Psionic
curve: !type:BoolCurve
weight: 100.0 # Абсолютный приорите
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Чрезмерно высокий приоритет псионических целей может нарушить баланс.

Вес 100.0 для TargetHasComponentCon с компонентом Psionic создаёт абсолютный приоритет псионических целей. Это означает, что визпы будут игнорировать ближайшие или более опасные угрозы ради преследования псионических персонажей.

Потенциальные проблемы:

  • Псионические игроки станут непропорционально уязвимы
  • Визпы могут игнорировать защитников, фокусируясь на одной цели
  • Может создать фрустрирующий опыт для игроков с псионикой

Рекомендуется снизить вес до 5-10 для сбалансированного приоритета.

♻️ Предлагаемое исправление баланса
   - !type:TargetHasComponentCon
     component: Psionic
     curve: !type:BoolCurve
-    weight: 100.0  # Абсолютный приоритет
+    weight: 5.0  # Высокий, но сбалансированный приоритет
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- !type:TargetHasComponentCon
component: Psionic
curve: !type:BoolCurve
weight: 100.0 # Абсолютный приорите
- !type:TargetHasComponentCon
component: Psionic
curve: !type:BoolCurve
weight: 5.0 # Высокий, но сбалансированный приоритет
🤖 Prompt for AI Agents
In @Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/glimmer_monsters.yml around
lines 229 - 232, TargetHasComponentCon with component "Psionic" uses weight
100.0 which gives absolute priority; change the weight to a balanced value
(recommend 5.0–10.0) in the TargetHasComponentCon entry (the curve is the
BoolCurve) so psionic targets are deprioritized from absolute highest
priority—update the weight from 100.0 to a value in that range and keep the rest
of the entry intact.

@github-actions github-actions bot added the Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation label Jan 10, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (4)
Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs (2)

113-174: Дублирование кода: FormatTargetBodyPart идентичен методу в EvenHealthChangeEntityEffectSystem.cs.

Метод полностью дублирует логику из EvenHealthChangeEntityEffectSystem.cs. Рекомендуется вынести его в общий утилитарный класс (например, TargetBodyPartFormatter или расширить SharedTargetingSystem).

Также на строке 142 проверка (int)targetPart != (int)(TargetBodyPart.All) избыточна — метод вызывается только когда TargetPart != TargetBodyPart.All (строка 100).

♻️ Предлагаемый рефакторинг

Создайте общий статический метод в SharedTargetingSystem или отдельном хелпере:

// В SharedTargetingSystem или новом классе TargetBodyPartLocalization
public static string FormatTargetBodyPart(TargetBodyPart targetPart)
{
    // ... общая реализация
}

Затем используйте его в обоих файлах:

-    private static string FormatTargetBodyPart(TargetBodyPart targetPart)
-    {
-        // ... 60+ строк дублированного кода
-    }
+    // Используйте SharedTargetingSystem.FormatTargetBodyPart(targetPart)
+    // или TargetBodyPartLocalization.Format(targetPart)

140-142: Избыточная проверка на TargetBodyPart.All.

Проверка (int)targetPart != (int)(TargetBodyPart.All) в строке 142 не нужна, так как FormatTargetBodyPart вызывается только когда TargetPart != TargetBodyPart.All (строка 100).

♻️ Упрощение условия
         foreach (var part in validParts)
         {
-            if (targetPart.HasFlag(part) && (int)targetPart != (int)(TargetBodyPart.All))
+            if (targetPart.HasFlag(part))
             {
Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs (1)

105-166: Дублирование: метод идентичен FormatTargetBodyPart в HealthChangeEntityEffectSystem.cs.

Как указано в обзоре HealthChangeEntityEffectSystem.cs, этот метод полностью дублирует логику. Рекомендуется вынести его в общий утилитарный класс для соблюдения принципа DRY.

Также строка 134 содержит избыточную проверку (int)targetPart != (int)(TargetBodyPart.All).

Content.Shared/Damage/Systems/DamageableSystem.API.cs (1)

227-235: XML-документация параметров неполная.

Описания параметров partMultiplier и targetPart пусты. Рекомендуется добавить краткое описание для улучшения документации API.

📝 Предлагаемое улучшение документации
-    /// <param name="partMultiplier"></param>
-    /// <param name="targetPart"></param>
+    /// <param name="partMultiplier">Множитель урона для части тела (по умолчанию 1.0)</param>
+    /// <param name="targetPart">Целевая часть тела для применения лечения (по умолчанию null — все части)</param>
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 08333b8 and f9de8dd.

📒 Files selected for processing (13)
  • Content.Shared/Backmen/EntityEffects/Effects/AdjustTraumas.cs
  • Content.Shared/Backmen/EntityEffects/Effects/SuppressPain.cs
  • Content.Shared/Damage/Systems/DamageableSystem.API.cs
  • Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs
  • Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs
  • Resources/Locale/en-US/backmen/guidebook/entity-effects/effects.ftl
  • Resources/Locale/en-US/backmen/objectives/conditions/steal-target-groups.ftl
  • Resources/Locale/en-US/guidebook/entity-effects/effects.ftl
  • Resources/Locale/ru-RU/backmen/guidebook/entity-effects/effects.ftl
  • Resources/Locale/ru-RU/backmen/objectives/conditions/steal-target-groups.ftl
  • Resources/Locale/ru-RU/guidebook/entity-effects/effects.ftl
  • Resources/Prototypes/_Backmen/Objectives/stealTargetGroups.yml
  • Tools/ss14_ru/analyze_report.py
💤 Files with no reviewable changes (1)
  • Tools/ss14_ru/analyze_report.py
✅ Files skipped from review due to trivial changes (3)
  • Resources/Locale/ru-RU/backmen/objectives/conditions/steal-target-groups.ftl
  • Resources/Locale/en-US/backmen/objectives/conditions/steal-target-groups.ftl
  • Resources/Prototypes/_Backmen/Objectives/stealTargetGroups.yml
🧰 Additional context used
🧬 Code graph analysis (3)
Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs (2)
Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs (2)
  • Effect (21-27)
  • FormatTargetBodyPart (105-166)
Content.Shared/Localizations/ContentLocalizationManager.cs (2)
  • ContentLocalizationManager (8-274)
  • FormatList (119-128)
Content.Shared/Backmen/EntityEffects/Effects/AdjustTraumas.cs (3)
Content.Shared/Backmen/EntityEffects/Effects/SuppressPain.cs (1)
  • EntityEffectGuidebookText (70-76)
Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs (1)
  • EntityEffectGuidebookText (48-103)
Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs (1)
  • EntityEffectGuidebookText (55-111)
Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs (3)
Content.Shared/Backmen/EntityEffects/Effects/AdjustTraumas.cs (1)
  • Effect (43-77)
Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs (1)
  • Effect (22-37)
Content.Shared/Localizations/ContentLocalizationManager.cs (2)
  • ContentLocalizationManager (8-274)
  • FormatList (119-128)
⏰ Context from checks skipped due to timeout of 300000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Test Packaging
🔇 Additional comments (11)
Content.Shared/Backmen/EntityEffects/Effects/SuppressPain.cs (1)

70-76: LGTM! Корректное обновление локализации.

Изменение ключа локализации с reagent-effect-guidebook-suppress-pain на entity-effect-guidebook-suppress-pain соответствует общему подходу к эффектам сущностей. Добавленные параметры форматирования (chance, amount, time, maximumSuppression) правильно передаются и совпадают с определениями в файлах локализации.

Content.Shared/Backmen/EntityEffects/Effects/AdjustTraumas.cs (1)

308-326: LGTM! Корректная реализация текста для справочника.

Метод EntityEffectGuidebookText теперь правильно генерирует локализованный текст для эффектов травм. Использование switch-выражения для сопоставления типов травм с ключами локализации является идиоматичным подходом, и все основные типы травм (BoneDamage, OrganDamage, VeinsDamage, NerveDamage, Dismemberment) корректно обрабатываются. Параметры форматирования соответствуют определениям в файлах локализации.

Resources/Locale/ru-RU/backmen/guidebook/entity-effects/effects.ftl (1)

1-51: LGTM! Качественная русская локализация.

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

Resources/Locale/en-US/backmen/guidebook/entity-effects/effects.ftl (1)

1-49: LGTM! Корректная английская локализация.

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

Resources/Locale/ru-RU/guidebook/entity-effects/effects.ftl (2)

89-92: Проверьте обработку пустой строки в условном блоке.

Добавлен условный блок для отображения целевой части тела. Синтаксис Fluent использует [""] для пустой строки, но стоит проверить, что при передаче пустой строки из кода (например, targetPart ?? "") этот случай корректно обрабатывается. В некоторых версиях Fluent пустая строка может не совпадать с литералом [""].

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


107-110: Проверьте обработку пустой строки в условном блоке.

Аналогично блоку выше (строки 89-92), здесь также используется обработка пустой строки [""] в условном блоке для целевой части тела. Рекомендуется убедиться, что синтаксис Fluent корректно обрабатывает пустые строки в вашей версии библиотеки локализации.

Если возникнут проблемы, рассмотрите использование явного значения вместо пустой строки.

Resources/Locale/en-US/guidebook/entity-effects/effects.ftl (2)

100-103: LGTM!

Условная логика для отображения целевой части тела корректна. Паттерн [""] правильно обрабатывает пустую строку, а *[other] добавляет суффикс " on {targetPart}" при наличии значения.


117-120: LGTM!

Аналогичная логика для even-health-change — консистентна с изменениями выше.

Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs (1)

28-36: LGTM!

Передача параметров partMultiplier и targetPart в TryChangeDamage корректна и соответствует обновлённой сигнатуре метода в DamageableSystem.API.cs.

Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs (1)

21-27: LGTM!

Интеграция TargetPart в вызов HealEvenly выполнена корректно.

Content.Shared/Damage/Systems/DamageableSystem.API.cs (1)

244-244: LGTM!

Оба вызова ChangeDamage корректно передают новые параметры partMultiplier и targetPart, обеспечивая консистентное поведение для обоих путей выполнения в HealEvenly.

Also applies to: 290-290

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (7)
Resources/Locale/ru-RU/guidebook/entity-effects/effects.ftl (2)

89-92: Проверьте двойной пробел перед "на".

В строке 91 присутствует двойной пробел перед "на": *[other] на {$targetPart}. Если это не намеренное форматирование для выравнивания, следует использовать один пробел.

Помимо этого, логика корректна: при значении "All" ничего не отображается, в остальных случаях добавляется указание на часть тела. Русская локализация грамматически правильна.

♻️ Предлагаемое исправление (если двойной пробел не является намеренным)
     } { $targetPart ->
        [All]{""}
-      *[other]  на {$targetPart}
+      *[other] на {$targetPart}
     }

108-111: Та же проблема с двойным пробелом.

Этот блок идентичен предыдущему добавлению (строки 89-92), что обеспечивает хорошую согласованность между health-change и even-health-change. Однако здесь присутствует та же проблема с двойным пробелом в строке 110.

Если двойной пробел в строках 89-92 будет исправлен, следует исправить и здесь для согласованности.

♻️ Предлагаемое исправление (для согласованности)
     } { $targetPart ->
        [All]{""}
-      *[other]  на {$targetPart}
+      *[other] на {$targetPart}
     }
Content.Shared/Backmen/Targeting/SharedTargetingSystem.cs (2)

4-4: Проверьте использование импорта.

Импорт Robust.Shared.Utility не используется в видимом коде этого файла.

♻️ Предлагаемое исправление
-using Robust.Shared.Utility;

69-133: Отличная реализация форматирования частей тела для справочника!

Метод корректно обрабатывает различные случаи: null для All, композитные значения, отдельные флаги и fallback. Логика с использованием HasFlag и форматирования списка через ContentLocalizationManager.FormatList выглядит правильно.

Небольшое замечание: проверка (int)targetPart != (int)(TargetBodyPart.All) на строке 101 избыточна, так как случай All уже обработан в начале метода (строка 71-72).

♻️ Опциональное улучшение

Можно удалить избыточную проверку:

-        if (targetPart.HasFlag(part) && (int)targetPart != (int)(TargetBodyPart.All))
+        if (targetPart.HasFlag(part))
Content.Shared/EntityEffects/Effects/Damage/DistributedHealthChangeEntityEffectSystem.cs (1)

97-105: Консистентная реализация текста справочника.

Код генерации текста справочника идентичен другим health change эффектам, что обеспечивает единообразие пользовательского интерфейса.

Небольшое наблюдение: логика генерации guidebook текста дублируется между HealthChange, DistributedHealthChange и EvenHealthChange (форматирование targetPart). В будущем это можно было бы вынести в общий helper-метод, но для текущего hotfix это приемлемо.

Content.Shared/Damage/Systems/DamageableSystem.API.cs (2)

2-2: Удалите неиспользуемый импорт System.Net.Sockets.

Этот namespace предназначен для сетевых операций с сокетами и не имеет отношения к системе урона. Вероятно, это случайный импорт.

♻️ Предлагаемое исправление
 using System.Linq;
-using System.Net.Sockets;
 using Content.Shared.Backmen.Surgery.Consciousness.Components;

228-229: Добавьте описания для новых параметров в XML-документации.

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

📝 Предлагаемое исправление
-    /// <param name="partMultiplier"></param>
-    /// <param name="targetPart"></param>
+    /// <param name="partMultiplier">Множитель урона/исцеления для целевой части тела</param>
+    /// <param name="targetPart">Целевая часть тела для применения эффекта</param>
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between f9de8dd and 528545f.

📒 Files selected for processing (9)
  • Content.Shared/Armor/SharedArmorSystem.cs
  • Content.Shared/Backmen/Targeting/SharedTargetingSystem.cs
  • Content.Shared/Damage/Systems/DamageableSystem.API.cs
  • Content.Shared/EntityEffects/Effects/Damage/DistributedHealthChangeEntityEffectSystem.cs
  • Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs
  • Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs
  • Resources/Locale/en-US/guidebook/entity-effects/effects.ftl
  • Resources/Locale/ru-RU/guidebook/entity-effects/effects.ftl
  • Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/glimmer_monsters.yml
🚧 Files skipped from review as they are similar to previous changes (1)
  • Resources/Locale/en-US/guidebook/entity-effects/effects.ftl
🧰 Additional context used
🧬 Code graph analysis (5)
Content.Shared/Backmen/Targeting/SharedTargetingSystem.cs (1)
Content.Shared/Localizations/ContentLocalizationManager.cs (2)
  • ContentLocalizationManager (8-274)
  • FormatList (119-128)
Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs (3)
Content.Shared/EntityEffects/Effects/Damage/DistributedHealthChangeEntityEffectSystem.cs (1)
  • Effect (21-33)
Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs (1)
  • Effect (20-26)
Content.Shared/Backmen/Targeting/SharedTargetingSystem.cs (3)
  • TargetBodyPart (14-32)
  • SharedTargetingSystem (9-134)
  • FormatTargetBodyPartForGuidebook (69-133)
Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs (4)
Content.Shared/EntityEffects/Effects/Damage/DistributedHealthChangeEntityEffectSystem.cs (1)
  • Effect (21-33)
Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs (1)
  • Effect (21-36)
Content.Shared/Backmen/Targeting/SharedTargetingSystem.cs (3)
  • TargetBodyPart (14-32)
  • SharedTargetingSystem (9-134)
  • FormatTargetBodyPartForGuidebook (69-133)
Content.Shared/Localizations/ContentLocalizationManager.cs (2)
  • ContentLocalizationManager (8-274)
  • FormatList (119-128)
Content.Shared/EntityEffects/Effects/Damage/DistributedHealthChangeEntityEffectSystem.cs (4)
Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs (1)
  • Effect (20-26)
Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs (1)
  • Effect (21-36)
Content.Shared/Backmen/Targeting/SharedTargetingSystem.cs (3)
  • TargetBodyPart (14-32)
  • SharedTargetingSystem (9-134)
  • FormatTargetBodyPartForGuidebook (69-133)
Content.Shared/Localizations/ContentLocalizationManager.cs (2)
  • ContentLocalizationManager (8-274)
  • FormatList (119-128)
Content.Shared/Damage/Systems/DamageableSystem.API.cs (1)
Content.Shared/Backmen/Targeting/SharedTargetingSystem.cs (1)
  • TargetBodyPart (14-32)
⏰ Context from checks skipped due to timeout of 300000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Test Packaging
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (ubuntu-latest)
🔇 Additional comments (22)
Content.Shared/Armor/SharedArmorSystem.cs (1)

52-66: Правильная реализация проверки покрытия брони для целевых частей тела.

Добавленная логика корректно проверяет, покрывает ли броня целевую часть тела перед применением модификаторов урона. Ранний выход (early exit) на строке 58 оптимизирует производительность.

Отладочные логи на строках 57 и 66 могут быть многословными в production-среде, но это приемлемо для debug-сборок.

Content.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.cs (3)

1-1: Корректное добавление поддержки целевых частей тела.

Импорт и новое поле TargetPart с дефолтным значением All логичны и обеспечивают обратную совместимость.

Also applies to: 51-52


27-36: Правильная передача параметров целевой части тела.

Вызов TryChangeDamage корректно обновлён с новыми параметрами. Использование именованных параметров (interruptsDoAfters:, ignoreGlobalModifiers:, partMultiplier:, targetPart:) повышает читаемость кода. Игнорирование выходного параметра через out _ допустимо, если значение не требуется.


96-105: Корректная интеграция целевой части тела в текст справочника.

Использование SharedTargetingSystem.FormatTargetBodyPartForGuidebook для форматирования и fallback на "All" через null-coalescing оператор выглядит правильно и согласованно с другими файлами в PR.

Content.Shared/EntityEffects/Effects/Damage/DistributedHealthChangeEntityEffectSystem.cs (2)

1-1: Согласованное добавление поддержки целевых частей тела.

Импорт и поле TargetPart реализованы идентично другим health change системам, что обеспечивает консистентность API.

Also applies to: 51-52


25-32: Правильное использование именованных параметров в HealDistributed.

Вызов метода с явными именованными параметрами (origin:, partMultiplier:, targetPart:) повышает ясность кода и корректно передаёт целевую часть тела для распределённого исцеления.

Content.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.cs (3)

1-1: Корректная интеграция целевых частей тела в EvenHealthChange.

Добавление импорта и поля TargetPart соответствует паттерну, используемому в других health change эффектах.

Also applies to: 44-45


24-24: Правильное использование параметра targetPart в HealEvenly.

Именованный параметр targetPart: корректно передаёт целевую часть тела в метод исцеления.


88-97: Консистентная реализация guidebook текста с поддержкой целевых частей.

Генерация текста справочника правильно использует FormatTargetBodyPartForGuidebook и следует тому же паттерну, что и другие health change эффекты. Маркеры // start-backmen и // end-backmen помогают идентифицировать кастомные изменения.

Content.Shared/Damage/Systems/DamageableSystem.API.cs (6)

105-119: LGTM!

Параметры partMultiplier и targetPart корректно добавлены в сигнатуру и передаются в вызов ChangeDamage. Значения по умолчанию обеспечивают обратную совместимость.


159-160: Убедитесь, что порядок применения partMultiplier соответствует замыслу.

Множитель partMultiplier применяется до расчёта сопротивлений (resistances). Это означает, что если partMultiplier = 0.5, урон сначала уменьшится вдвое, а затем к уменьшенному урону применятся сопротивления.

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


186-194: LGTM!

Событие HandleCustomDamage корректно интегрировано для обработки урона с учётом целевой части тела. Паттерн с ранним возвратом при Handled соответствует существующей архитектуре.


245-245: LGTM!

Параметры partMultiplier и targetPart корректно передаются во всех ветках метода HealEvenly. Использование именованных аргументов повышает читаемость кода.

Also applies to: 291-291


307-309: LGTM!

Сигнатура HealDistributed корректно расширена новыми параметрами. Отсутствие XML-документации для новых параметров — та же проблема, что и в HealEvenly.


318-318: LGTM!

Оба вызова ChangeDamage в HealDistributed корректно передают новые параметры с использованием именованных аргументов.

Also applies to: 330-330

Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/glimmer_monsters.yml (7)

115-122: LGTM: добавлены навигационные возможности

Добавление навигационных флагов (NavClimb, NavInteract, NavPry, NavSmash) корректно расширяет возможности передвижения виспа.


129-132: LGTM: настройки радиусов зрения

Значения VisionRadius (16) и AggroVisionRadius (20) выглядят логично и сбалансированно.


162-164: Подтвердите намеренное изменение поведения

Закомментирован IdleCompound в пользу DrainPsionicCompound. Это значит, что висп теперь будет постоянно пытаться осушать псионические цели вместо простаивания. Убедитесь, что это изменение соответствует игровому балансу и задуманному поведению.


198-206: Проверьте изменение stopOnLineOfSight

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


219-222: LGTM: обновлён прото сервиса

Изменение proto на NearbyGunWispTargets согласуется с новым определением запроса ниже.


224-244: Несоответствие с описанием: отсутствует фильтрация по компоненту Psionic

В AI-сводке указано, что добавлен TargetHasComponentCon с компонентом Psionic, но в коде этого нет. Поскольку PR вводит механику осушения псионических целей (DrainPsionicCompound), отсутствие явной фильтрации по компоненту Psionic может привести к неправильному выбору целей.

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

Возможное исправление
 - type: utilityQuery
   id: NearbyGunWispTargets
   query:
   - !type:NearbyHostilesQuery
   considerations:
   - !type:TargetIsAliveOrSoftCritCon
     curve: !type:BoolCurve
   - !type:TargetIsCritCon
     curve: !type:InverseBoolCurve
   - !type:TargetIsStunnedCon
     curve: !type:InverseBoolCurve
   - !type:TurretTargetingCon
     curve: !type:BoolCurve
   - !type:TargetDistanceCon
     curve: !type:PresetCurve
       preset: TargetDistance
   - !type:TargetHealthCon
     curve: !type:PresetCurve
       preset: TargetHealth
   - !type:TargetInLOSOrCurrentCon
     curve: !type:BoolCurve
+  - !type:TargetHasComponentCon
+    component: Psionic
+    curve: !type:BoolCurve
+    weight: 100.0

246-262: Операторы PickDrainTargetOperator и DrainOperator существуют в кодовой базе

Оба оператора (PickDrainTargetOperator и DrainOperator) правильно реализованы в файлах Content.Server/Backmen/NPC/HTN/PrimitiveTasks/Operators/Specific/. Настройка pathfindInPlanning: false обоснована — она используется в сочетании с shutdownState: TaskFinished, в то время как другие MoveToOperator с shutdownState: PlanFinished используют pathfindInPlanning: true. Это различие отражает разную семантику завершения задачи и не вызывает проблем.

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

🤖 Fix all issues with AI agents
In @Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml:
- Around line 495-502: The Armor component override for the chief engineer
helmet is missing the coverage field; update the Armor entry in the hardsuit
helmet YAML to include coverage (same shape as parent) explicitly (e.g.,
coverage: [Head]) so it matches ClothingHeadHardsuitBase; reference the Armor
component override in this file and ensure the ArmorCoverage field (which has
AlwaysPushInheritance in ArmorComponent.cs) is set to the explicit coverage list
to keep consistency with other helmets.
🧹 Nitpick comments (2)
Content.Shared/Armor/ArmorComponent.cs (2)

1-1: Неиспользуемый импорт System.ComponentModel.

Директива using System.ComponentModel; добавлена, но не используется в файле. Атрибут AlwaysPushInheritance относится к пространству имён Robust, а не к System.ComponentModel.

🔧 Предлагаемое исправление
-using System.ComponentModel;

5-7: Дублирующийся импорт Content.Shared.Damage.

Импорт Content.Shared.Damage присутствует дважды — на строках 5 и 7.

🔧 Предлагаемое исправление
 using Content.Shared.FixedPoint;
-using Content.Shared.Damage;
 using Content.Shared.Inventory;
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 528545f and 540ec75.

📒 Files selected for processing (24)
  • Content.Client/Backmen/Telescope/TelescopeSystem.cs
  • Content.Server/Backmen/Immersive/ImmersiveComponent.cs
  • Content.Server/Backmen/Immersive/ImmersiveSystem.cs
  • Content.Server/Backmen/Telescope/TelescopeSystem.cs
  • Content.Shared/Armor/ArmorComponent.cs
  • Content.Shared/Armor/SharedArmorSystem.cs
  • Content.Shared/Backmen/CCVar/CCVars.cs
  • Content.Shared/Backmen/Telescope/SharedTelescopeSystem.cs
  • Content.Shared/Backmen/Telescope/TelescopeComponent.cs
  • Content.Shared/Damage/Systems/DamageableSystem.Events.cs
  • Content.Shared/Damage/Systems/DamageableSystem.cs
  • Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml
  • Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml
  • Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml
  • Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml
  • Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml
  • Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml
  • Resources/Prototypes/Entities/Mobs/Species/base.yml
  • Resources/Prototypes/Entities/Objects/Tools/binoculars.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Energy/energy.yml
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Energy/magenergy.yml
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Rifles/rifles.yml
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Snipers/snipers.yml
💤 Files with no reviewable changes (16)
  • Resources/Prototypes/Entities/Mobs/Species/base.yml
  • Content.Shared/Backmen/Telescope/TelescopeComponent.cs
  • Resources/Prototypes/Entities/Objects/Tools/binoculars.yml
  • Content.Server/Backmen/Immersive/ImmersiveComponent.cs
  • Content.Shared/Backmen/CCVar/CCVars.cs
  • Content.Server/Backmen/Immersive/ImmersiveSystem.cs
  • Content.Shared/Backmen/Telescope/SharedTelescopeSystem.cs
  • Content.Shared/Damage/Systems/DamageableSystem.cs
  • Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml
  • Content.Server/Backmen/Telescope/TelescopeSystem.cs
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Energy/energy.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml
  • Content.Client/Backmen/Telescope/TelescopeSystem.cs
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Snipers/snipers.yml
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Energy/magenergy.yml
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Rifles/rifles.yml
🚧 Files skipped from review as they are similar to previous changes (1)
  • Content.Shared/Armor/SharedArmorSystem.cs
⏰ Context from checks skipped due to timeout of 300000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Test Packaging
🔇 Additional comments (8)
Content.Shared/Damage/Systems/DamageableSystem.Events.cs (1)

174-174: Правильное использование TargetBodyPart.All для радиационного урона.

Добавление параметра targetPart: TargetBodyPart.All логично для радиационного урона, который должен затрагивать всё тело, а не конкретную часть. Параметр targetPart является необязательным в сигнатуре ChangeDamage, поэтому изменение согласуется с дизайном API и соответствует аналогичным вызовам в кодовой базе (например, в BkmMagicSystem).

Content.Shared/Armor/ArmorComponent.cs (2)

18-18: Явное наследование от Robust.Shared.GameObjects.Component.

Указание полного пути Robust.Shared.GameObjects.Component нетипично для кодовой базы. Обычно компоненты наследуют просто Component.

Убедитесь, что это изменение необходимо для разрешения конфликта имён или есть другая причина для явного указания полного пути.


53-54: LGTM!

Добавление атрибута AlwaysPushInheritance к полю ArmorCoverage корректно обеспечит наследование значений покрытия брони в производных прототипах.

Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml (1)

6-8: LGTM!

Добавление компонента Armor с покрытием Foot в базовый класс обуви согласуется с общей стратегией расширения покрытия брони в данном PR.

Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml (1)

181-182: LGTM!

Добавление coverage: Head к компоненту Armor в базовом классе шлемов скафандров логично и соответствует общему паттерну изменений в PR.

Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml (1)

37-38: LGTM!

Изменение комментария для стандартизации написания ("armor" вместо "armour").

Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml (2)

6-9: LGTM!

Добавление компонента Armor с покрытием Chest и Groin в базовый класс верхней одежды соответствует логике расширения системы покрытия брони.


135-141: LGTM!

Расширенный список покрытия для базового класса скафандров (Chest, Groin, Arm, Hand, Leg, Foot) корректно отражает полную защиту тела, предоставляемую скафандрами.

Comment on lines +495 to +502
- type: Armor
modifiers:
coefficients:
Blunt: 0.90
Slash: 0.90
Piercing: 0.95
Heat: 0.90
Radiation: 0
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Отсутствует поле coverage в компоненте Armor.

Шлем главного инженера переопределяет компонент Armor родительского класса ClothingHeadHardsuitBase, но не включает поле coverage. В родительском классе определено coverage: [Head].

Хотя в ArmorComponent.cs добавлен атрибут AlwaysPushInheritance для поля ArmorCoverage, рекомендуется явно указать coverage для согласованности с другими шлемами в файле.

🔧 Предлагаемое исправление
   - type: Armor
     modifiers:
       coefficients:
         Blunt: 0.90
         Slash: 0.90
         Piercing: 0.95
         Heat: 0.90
         Radiation: 0
+    coverage: # backmen: armor coverage
+    - Head
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- type: Armor
modifiers:
coefficients:
Blunt: 0.90
Slash: 0.90
Piercing: 0.95
Heat: 0.90
Radiation: 0
- type: Armor
modifiers:
coefficients:
Blunt: 0.90
Slash: 0.90
Piercing: 0.95
Heat: 0.90
Radiation: 0
coverage: # backmen: armor coverage
- Head
🤖 Prompt for AI Agents
In @Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml around
lines 495 - 502, The Armor component override for the chief engineer helmet is
missing the coverage field; update the Armor entry in the hardsuit helmet YAML
to include coverage (same shape as parent) explicitly (e.g., coverage: [Head])
so it matches ClothingHeadHardsuitBase; reference the Armor component override
in this file and ensure the ArmorCoverage field (which has AlwaysPushInheritance
in ArmorComponent.cs) is set to the explicit coverage list to keep consistency
with other helmets.

@KayzelW KayzelW merged commit 69603ed into master Jan 10, 2026
10 of 11 checks passed
@KayzelW KayzelW deleted the hotfix-100126 branch January 10, 2026 18:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Changes: Audio Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation No C# Нету кода. S: Untriaged size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants