Conversation
|
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 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. ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (4)
WalkthroughДобавлены новые предметы в заполнение шкафчиков; расширены реагенты медицины с AdjustTraumas; обновлён HTN для blob/wisp (DrainPsionicCompound); введена поддержка целевых частей тела в эффектах лечения/урона с локализациями; удалены системы/компоненты телескопа и связанные Immersive-типы. Changes
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: Возврат результата
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Poem
🚥 Pre-merge checks | ✅ 1 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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
📒 Files selected for processing (5)
Resources/Prototypes/Catalog/Fills/Lockers/heads.ymlResources/Prototypes/Reagents/medicine.ymlResources/Prototypes/_Backmen/Entities/Mobs/NPCs/blob/blob_mobs.ymlResources/Prototypes/_Backmen/Entities/Mobs/NPCs/glimmer_monsters.ymlResources/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поддерживается системой (определен вTraumaTypeenum). Все параметры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, полностью соответствующие конфигурации в YAMLDrainOperatorопределяет поле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и используется в десятках определений мобов (ксено, карп, астероид и другие). Добавление этого флага к блоб-подам следует установленному паттерну в кодовой базе и не требует дополнительной проверки.
| - !type:TargetHasComponentCon | ||
| component: Psionic | ||
| curve: !type:BoolCurve | ||
| weight: 100.0 # Абсолютный приорите |
There was a problem hiding this comment.
Чрезмерно высокий приоритет псионических целей может нарушить баланс.
Вес 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.
| - !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.
There was a problem hiding this comment.
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
📒 Files selected for processing (13)
Content.Shared/Backmen/EntityEffects/Effects/AdjustTraumas.csContent.Shared/Backmen/EntityEffects/Effects/SuppressPain.csContent.Shared/Damage/Systems/DamageableSystem.API.csContent.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.csContent.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.csResources/Locale/en-US/backmen/guidebook/entity-effects/effects.ftlResources/Locale/en-US/backmen/objectives/conditions/steal-target-groups.ftlResources/Locale/en-US/guidebook/entity-effects/effects.ftlResources/Locale/ru-RU/backmen/guidebook/entity-effects/effects.ftlResources/Locale/ru-RU/backmen/objectives/conditions/steal-target-groups.ftlResources/Locale/ru-RU/guidebook/entity-effects/effects.ftlResources/Prototypes/_Backmen/Objectives/stealTargetGroups.ymlTools/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
There was a problem hiding this comment.
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
📒 Files selected for processing (9)
Content.Shared/Armor/SharedArmorSystem.csContent.Shared/Backmen/Targeting/SharedTargetingSystem.csContent.Shared/Damage/Systems/DamageableSystem.API.csContent.Shared/EntityEffects/Effects/Damage/DistributedHealthChangeEntityEffectSystem.csContent.Shared/EntityEffects/Effects/Damage/EvenHealthChangeEntityEffectSystem.csContent.Shared/EntityEffects/Effects/Damage/HealthChangeEntityEffectSystem.csResources/Locale/en-US/guidebook/entity-effects/effects.ftlResources/Locale/ru-RU/guidebook/entity-effects/effects.ftlResources/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. Это различие отражает разную семантику завершения задачи и не вызывает проблем.
There was a problem hiding this comment.
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
📒 Files selected for processing (24)
Content.Client/Backmen/Telescope/TelescopeSystem.csContent.Server/Backmen/Immersive/ImmersiveComponent.csContent.Server/Backmen/Immersive/ImmersiveSystem.csContent.Server/Backmen/Telescope/TelescopeSystem.csContent.Shared/Armor/ArmorComponent.csContent.Shared/Armor/SharedArmorSystem.csContent.Shared/Backmen/CCVar/CCVars.csContent.Shared/Backmen/Telescope/SharedTelescopeSystem.csContent.Shared/Backmen/Telescope/TelescopeComponent.csContent.Shared/Damage/Systems/DamageableSystem.Events.csContent.Shared/Damage/Systems/DamageableSystem.csResources/Prototypes/Entities/Clothing/Hands/base_clothinghands.ymlResources/Prototypes/Entities/Clothing/Head/base_clothinghead.ymlResources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.ymlResources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.ymlResources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.ymlResources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.ymlResources/Prototypes/Entities/Mobs/Species/base.ymlResources/Prototypes/Entities/Objects/Tools/binoculars.ymlResources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.ymlResources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Energy/energy.ymlResources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Energy/magenergy.ymlResources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/Rifles/rifles.ymlResources/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) корректно отражает полную защиту тела, предоставляемую скафандрами.
| - type: Armor | ||
| modifiers: | ||
| coefficients: | ||
| Blunt: 0.90 | ||
| Slash: 0.90 | ||
| Piercing: 0.95 | ||
| Heat: 0.90 | ||
| Radiation: 0 |
There was a problem hiding this comment.
Отсутствует поле 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.
| - 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.
Summary by CodeRabbit
Новые возможности
Изменения в лечащих эффектах
Игровой баланс / поведение
Изменения предметов/экипировки
Удалено
Локализация
✏️ Tip: You can customize this high-level summary in your review settings.