-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[PORT] RPD #715
[PORT] RPD #715
Conversation
Обзор измененийWalkthroughЭтот обновленный набор изменений привносит значительные улучшения в систему удаленного строительства (RCD) и связанные с ней компоненты. Основные изменения включают введение нового устройства RPD (Remote Prototyper Device), расширение возможностей RCD, переход на использование FixedPoint2 для более точных вычислений зарядов, и добавление новых прототипов для строительства трубопроводов, вентиляции и атмосферных утилит. Changes
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (13)
Content.Client/RCD/RCDConstructionGhostSystem.cs (3)
23-25
: Добавление флага и события для зеркального прототипа
Новые поля (_useMirrorPrototype и FlipConstructionPrototype) расширяют функциональность системы. Убедитесь, что событие FlipConstructionPrototype реально используется в коде и добавьте при необходимости обработчики, чтобы избежать «мертвого» кода.
43-67
: Обработка нажатия на клавишу переворота
Реализация логики Flip корректна: проверяет наличие активного режима размещения, наличие зеркального прототипа и при успешной проверке отправляет сетевое событие. Однако стоит дополнительно обрабатывать ситуации, когда _placementManager.CurrentPermission оказывается недоступен, чтобы избежать редких ошибок Null Reference.
117-127
: Упрощение кода в методе CreatePlacer
Метод корректно сохраняет режим размещения и создаёт новую конфигурацию PlacementInformation. При необходимости можно вынести общий код по очистке и инициализации плейсера в вспомогательную функцию, если планируется дальнейшее расширение логики.Content.Shared/RCD/Systems/RCDSystem.cs (1)
483-489
: Блокировка деактивации тайла в режиме RPD
Если RCD помечен как RPD-устройство, код принудительно возвращает, сообщая игроку об ограничении. Это защищает от нежелательных операций, однако целесообразно разъяснить пользователям, почему RPD режим не даёт деактивировать тайл напрямую.Resources/Locale/ru-RU/rcd/components/rcd-component.ftl (1)
41-44
: Уберите лишние пробелыВ конце следующих строк обнаружены лишние пробелы:
- Строка 41: "Трубопроводы "
- Строка 42: "Атмосферные утилиты "
- Строка 43: "Насосы и клапаны "
- Строка 44: "Вентиляционные отверстия "
-rcd-component-piping = Трубопроводы -rcd-component-atmosphericutility = Атмосферные утилиты -rcd-component-pumps = Насосы и клапаны -rcd-component-vents = Вентиляционные отверстия +rcd-component-piping = Трубопроводы +rcd-component-atmosphericutility = Атмосферные утилиты +rcd-component-pumps = Насосы и клапаны +rcd-component-vents = Вентиляционные отверстияContent.Shared/RCD/Systems/RCDAmmoSystem.cs (1)
47-47
: Требуется форматирование выраженияОтсутствует пробел после запятой в выражении
charges.MaxCharges - charges.Charges,comp.Charges
.Предлагаемое исправление:
- var count = FixedPoint2.Min(charges.MaxCharges - charges.Charges,comp.Charges); + var count = FixedPoint2.Min(charges.MaxCharges - charges.Charges, comp.Charges);Content.Shared/RCD/Components/RCDComponent.cs (1)
45-49
: Рекомендуется добавить документацию о значении по умолчаниюСвойство
UseMirrorPrototype
инициализируется значениемfalse
, но это не отражено в документации. Рекомендуется добавить информацию о значении по умолчанию в XML-документацию./// <summary> /// Indicates if a mirrored version of the construction prototype should be used (if available) + /// Default value is false. /// </summary>
Content.Shared/Charges/Systems/SharedChargesSystem.cs (1)
88-88
: Обновите документацию методовXML-документация для методов
HasInsufficientCharges
иUseCharges
всё ещё ссылается на числовые значения. Следует обновить документацию, чтобы отразить использованиеFixedPoint2
./// <summary> /// Gets the limited charges component and returns true if the number of charges remaining is less than the specified value. + /// The comparison is done using FixedPoint2 arithmetic. /// Will return false if there is no limited charges component. /// </summary>
Also applies to: 100-100
Content.Shared/RCD/RCDPrototype.cs (2)
48-52
: Рассмотрите добавление валидации для MirrorPrototypeСвойство
MirrorPrototype
может содержать недействительный идентификатор прототипа. Рекомендуется добавить валидацию при загрузке прототипа.[DataField, ViewVariables(VVAccess.ReadOnly)] - public string? MirrorPrototype { get; private set; } = string.Empty; + [ValidatePrototypeId<EntityPrototype>] + public string? MirrorPrototype { get; private set; } = string.Empty;
58-58
: Обновите значение Cost по умолчаниюПри изменении типа
Cost
сint
наFixedPoint2
, значение по умолчанию осталось целочисленным. Рекомендуется явно указать тип.- public FixedPoint2 Cost { get; private set; } = 1; + public FixedPoint2 Cost { get; private set; } = FixedPoint2.New(1);Resources/Prototypes/RPD/rpd.yml (1)
1-53
: Рекомендуется пересмотреть стоимость компонентов.Базовые трубы имеют стоимость 0.5, в то время как все остальные компоненты имеют стоимость 1. Предлагаю либо унифицировать стоимость, либо документировать причину различия.
Also applies to: 54-251
Resources/Prototypes/Entities/Objects/Tools/tools.yml (2)
366-366
: Необходимо обеспечить согласованность языка в описанияхОписание RPD на русском языке, в то время как все остальные сущности используют английский язык. Рекомендуется поддерживать единообразие языка во всех описаниях сущностей.
- description: Устройство, используемое для быстрой передачи информации по каналам. + description: A device used for rapid pipe deployment and information transfer.
362-395
: Рекомендуется добавить компонент UserInterfaceRPD наследует большинство компонентов от RCD, но явное определение интерфейса пользователя может быть полезным для специфичной функциональности RPD.
- type: Sprite sprite: Objects/Tools/rpd.rsi + - type: UserInterface + interfaces: + enum.RpdUiKey.Key: + type: RPDMenuBoundUserInterface + - type: ActivatableUI + inHandsOnly: true + key: enum.RpdUiKey.Key
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (21)
Resources/Textures/Interface/Radial/RPD/bend.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/dual_port.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/fourway.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/gas_filter.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/gas_mixer.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/injector.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pneumatic_valve.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/port.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pump_manual_valve.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pump_pressure.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pump_signal_valve.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pump_volume.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/radiator.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/scrub_off.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/straight.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/tjunction.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/vent_off.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/vent_passive.png
is excluded by!**/*.png
Resources/Textures/Objects/Tools/rpd.rsi/icon.png
is excluded by!**/*.png
Resources/Textures/Objects/Tools/rpd.rsi/inhand-left.png
is excluded by!**/*.png
Resources/Textures/Objects/Tools/rpd.rsi/inhand-right.png
is excluded by!**/*.png
📒 Files selected for processing (18)
Content.Client/RCD/RCDConstructionGhostSystem.cs
(3 hunks)Content.Client/RCD/RCDMenu.xaml
(2 hunks)Content.Server/Charges/Systems/ChargesSystem.cs
(2 hunks)Content.Shared/Charges/Components/LimitedChargesComponent.cs
(2 hunks)Content.Shared/Charges/Systems/SharedChargesSystem.cs
(4 hunks)Content.Shared/RCD/Components/RCDAmmoComponent.cs
(2 hunks)Content.Shared/RCD/Components/RCDComponent.cs
(1 hunks)Content.Shared/RCD/Components/RCDDeconstructibleComponent.cs
(3 hunks)Content.Shared/RCD/RCDEvents.cs
(1 hunks)Content.Shared/RCD/RCDPrototype.cs
(2 hunks)Content.Shared/RCD/Systems/RCDAmmoSystem.cs
(2 hunks)Content.Shared/RCD/Systems/RCDSystem.cs
(8 hunks)Resources/Locale/en-US/rcd/components/rcd-component.ftl
(1 hunks)Resources/Locale/ru-RU/rcd/components/rcd-component.ftl
(1 hunks)Resources/Prototypes/Entities/Objects/Tools/tools.yml
(1 hunks)Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml
(1 hunks)Resources/Prototypes/RPD/rpd.yml
(1 hunks)Resources/Textures/Objects/Tools/rpd.rsi/meta.json
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- Resources/Textures/Objects/Tools/rpd.rsi/meta.json
🔇 Additional comments (28)
Content.Client/RCD/RCDConstructionGhostSystem.cs (4)
2-2
: Нет замечаний к подключаемым пространствам имён
Использование новых директив выглядит корректно и не вызывает конфликтов в кодовой базе.
Also applies to: 10-11
26-35
: Инициализация связки команд
Регистрация горячей клавиши для FlipObject делает функциональность системы более удобной. Убедитесь, что это не конфликтует с другими биндами проекта.
37-41
: Освобождение ресурсов при выключении
Хорошо, что проработан порядок отмены биндов команд при завершении системы, чтобы избежать утечек.
106-114
: Пересоздание объекта Placer при изменении прототипа
Проверка параметров и повторное создание Placer оправданы, позволяя своевременно обновлять прототип, когда берётся другое устройство или включается зеркало.
Content.Shared/RCD/Systems/RCDSystem.cs (6)
28-28
: Подключение FixedPoint
Переход к фиксированной точности улучшает надёжность расчётов при работе с затратами и зарядом в RCD.
69-69
: Подписка на событие переворота
Подключение нового события даёт возможность реагировать на изменение прототипа на клиенте.
309-327
: Обработка Flip-события на сервере
Проверка, что игрок действительно держит RCD в активной руке прежде чем выставить UseMirrorPrototype, защищает от читерских вызовов. Реализация корректна и повышает безопасность сетевой синхронизации.
523-530
: Проверка на присутствие целевого объекта в whitelist
Проверка деактивации объекта по whitelist необходима, чтобы исключить нежелательные структурные элементы. Логика корректна, и всплывающее уведомление помогает пользователям понять ограничения.
644-647
: Перепроверка зеркального прототипа
Условие сравнения принимает во внимание и основной, и зеркальный идентификатор. Убедитесь, что проверка не вызывает повторного обновления, когда поля указывают на одну и ту же строку.
686-686
: Замена int на FixedPoint2 в RCDDoAfterEvent
Корректный переход на фиксированную точку для стоимости операции. Это повысит согласованность логики зарядов во всём коде.
Also applies to: 693-693
Content.Shared/RCD/Components/RCDAmmoComponent.cs (1)
16-16
: Изменение типов на FixedPoint2
Переход на FixedPoint2 сделает систему зарядов более предсказуемой при дробных значениях. Избегайте неочевидных конвертаций в других местах кода.
Content.Shared/Charges/Components/LimitedChargesComponent.cs (2)
2-2
: Подключение Content.Shared.FixedPoint
Необходимое пространство имён для использования FixedPoint2. Никаких конфликтов не обнаружено.
17-17
: Рефактор зарядов для более точных вычислений
Использование FixedPoint2 как для максимального, так и для текущего количества зарядов позволит гибко регулировать значения. Следите, чтобы в игровой логике корректно обрабатывалось обнуление или переполнение зарядов.
Also applies to: 24-24
Content.Shared/RCD/RCDEvents.cs (1)
30-40
: Реализация корректна!
Новый класс события RCDConstructionGhostFlipEvent
правильно реализован с необходимыми атрибутами и неизменяемыми полями, что соответствует паттерну других событий в файле.
Content.Shared/RCD/Components/RCDDeconstructibleComponent.cs (2)
16-16
: Улучшение точности расчетов
Изменение типа Cost
с int
на FixedPoint2
позволяет более точно контролировать стоимость деконструкции.
36-40
: Проверьте значение по умолчанию
Новое поле RpdDeconstructable
по умолчанию установлено в false
. Убедитесь, что это желаемое поведение, так как это означает, что все существующие объекты по умолчанию не будут поддерживать деконструкцию через RPD.
#!/bin/bash
# Проверка использования RpdDeconstructable в прототипах
rg -l "RpdDeconstructable|rpd.*=.*true" Resources/Prototypes/
Resources/Locale/en-US/rcd/components/rcd-component.ftl (1)
48-51
: Локализация для новых компонентов трубопровода добавлена корректно!
Новые записи следуют установленным соглашениям об именовании и правильно категоризированы для системы RPD.
Content.Server/Charges/Systems/ChargesSystem.cs (2)
5-5
: Добавлена поддержка FixedPoint2
Подключение нового пространства имен для работы с фиксированной точкой.
Line range hint 41-50
: Улучшена точность расчетов с использованием FixedPoint2
Метод AddCharges
теперь использует FixedPoint2 вместо int для более точных вычислений заряда. Логика обработки перезарядки сохранена и корректно адаптирована под новый тип данных.
#!/bin/bash
# Проверка корректности использования FixedPoint2 в других местах
rg "FixedPoint2" --type cs
Content.Shared/RCD/Systems/RCDAmmoSystem.cs (1)
4-4
: Добавлена поддержка FixedPoint2 для системы боеприпасов RCD
Корректное подключение пространства имен для работы с фиксированной точкой.
Content.Shared/RCD/Components/RCDComponent.cs (1)
51-55
: Проверьте использование IsRpd в связанных системах
Добавление флага IsRpd
может потребовать обновления логики в связанных системах для корректной обработки различий между RCD и RPD.
#!/bin/bash
# Поиск использования IsRpd в системах
rg -l "IsRpd" --type cs
Content.Shared/Charges/Systems/SharedChargesSystem.cs (1)
38-38
: Проверьте корректность преобразования типов при вызовах
Изменение типа с int
на FixedPoint2
может потребовать явного преобразования в местах вызова метода. Убедитесь, что все вызывающие методы корректно обрабатывают новый тип.
#!/bin/bash
# Поиск вызовов AddCharges
ast-grep --pattern 'AddCharges($expr, $value)'
Also applies to: 44-44
Content.Client/RCD/RCDMenu.xaml (2)
30-41
: Корректная реализация новых кнопок меню RPD!
Новые кнопки меню для управления трубопроводами хорошо интегрированы в существующий интерфейс. Структура и стиль соответствуют общему дизайну.
59-70
: Правильная организация контейнеров для новых категорий.
Все новые RadialContainer элементы корректно настроены с одинаковыми параметрами расширения и радиуса.
Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml (1)
22-26
: Проверьте существование эффекта EffectRCDDeconstruct2
Компонент RCDDeconstructable корректно настроен, но необходимо убедиться, что указанный эффект EffectRCDDeconstruct2
существует в системе.
#!/bin/bash
# Проверка наличия эффекта в прототипах
rg -l "EffectRCDDeconstruct2" Resources/Prototypes/Effects/
Resources/Prototypes/Entities/Objects/Tools/tools.yml (3)
368-389
: Проверьте полноту списка доступных прототипов
Текущий список прототипов включает основные типы труб и устройств, но рекомендуется проверить, все ли необходимые прототипы включены в список.
#!/bin/bash
# Поиск дополнительных прототипов труб, которые могут быть добавлены
rg -l "parent: BasePipe" Resources/Prototypes/
Рекомендуется организовать прототипы по категориям (например, базовые трубы, клапаны, насосы) для улучшения поддержки кода в будущем.
390-392
: Проверьте баланс количества зарядов
Увеличение максимального количества зарядов с 30 до 45 требует проверки баланса. Убедитесь, что это изменение соответствует игровому дизайну.
#!/bin/bash
# Поиск других сущностей с компонентом LimitedCharges для сравнения
rg "type: LimitedCharges" Resources/Prototypes/
393-394
: Проверьте наличие спрайта
Убедитесь, что файл Objects/Tools/rpd.rsi
существует и содержит все необходимые состояния спрайта.
#!/bin/bash
# Проверка наличия файла спрайта
fd "rpd.rsi$" Resources/Textures/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
Resources/Prototypes/_SpaceCats/Research/industrial.yml (1)
13-13
: Добавьте пустую строку в конец файлаДля соответствия стандартам YAML необходимо добавить символ новой строки в конец файла.
- AtmosphericTech +
🧰 Tools
🪛 yamllint (1.35.1)
[error] 13-13: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/_SpaceCats/Recipes/Lathes/electronics.yml (1)
18-18
: Добавьте пустую строку в конец файлаДля соответствия стандартам YAML необходимо добавить символ новой строки в конец файла.
Gold: 50 +
🧰 Tools
🪛 yamllint (1.35.1)
[error] 18-18: no new line character at the end of file
(new-line-at-end-of-file)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
Content.Shared/RCD/Systems/RCDSystem.cs
(9 hunks)Resources/Prototypes/Entities/Structures/Machines/lathe.yml
(1 hunks)Resources/Prototypes/_SpaceCats/Recipes/Lathes/electronics.yml
(1 hunks)Resources/Prototypes/_SpaceCats/Research/industrial.yml
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- Content.Shared/RCD/Systems/RCDSystem.cs
🧰 Additional context used
🪛 yamllint (1.35.1)
Resources/Prototypes/_SpaceCats/Recipes/Lathes/electronics.yml
[error] 18-18: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/_SpaceCats/Research/industrial.yml
[error] 13-13: no new line character at the end of file
(new-line-at-end-of-file)
🔇 Additional comments (3)
Resources/Prototypes/Entities/Structures/Machines/lathe.yml (1)
372-372
: Добавление RPD в список рецептов протолата выглядит корректным!
Изменение соответствует целям PR по портированию RPD и правильно размещено в секции динамических рецептов.
Resources/Prototypes/_SpaceCats/Research/industrial.yml (1)
1-13
: Конфигурация технологии RPD выглядит корректно
Параметры технологии (уровень, стоимость, предварительные требования) логически согласованы и соответствуют игровому балансу.
🧰 Tools
🪛 yamllint (1.35.1)
[error] 13-13: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/_SpaceCats/Recipes/Lathes/electronics.yml (1)
11-18
: Баланс материалов для создания RPD выглядит обоснованным
Распределение материалов логично:
- Сталь и стекло как основные компоненты (по 500)
- Умеренное количество пластика (250)
- Небольшое количество золота для электроники (50)
🧰 Tools
🪛 yamllint (1.35.1)
[error] 18-18: no new line character at the end of file
(new-line-at-end-of-file)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (11)
Resources/Prototypes/RPD/rpd.yml (1)
251-251
: Отсутствует символ новой строки в конце файлаДобавьте пустую строку в конец файла для соответствия стандартам YAML.
🧰 Tools
🪛 yamllint (1.35.1)
[error] 251-251: no new line character at the end of file
(new-line-at-end-of-file)
Content.Client/RCD/RCDConstructionGhostSystem.cs (1)
43-67
: Метод HandleFlip обрабатывает переключение зеркального прототипа.
- Проверяется активность PlacementManager и наличие MirrorPrototype.
- Переключается логическое значение _useMirrorPrototype и обновляется Placer, после чего отправляется сетевое событие.
Реализация выглядит корректной, однако стоит убедиться, что сервер всегда проверяет полномочия игрока, чтобы исключить махинации с flipping.Content.Shared/RCD/Systems/RCDSystem.cs (2)
537-537
: Дополнительное условие пропущено в вашем фрагменте.
Строка вероятно относится к ветвлению проверки. Убедитесь, что код закрывает все варианты использования RPD и deconstructable.
648-651
: Условие сверки идентификатора прототипа обновлено
Проверка включает и случай, когда MirrorPrototype тоже должен обновиться. Это гарантирует корректную загрузку прототипов при переключении.Resources/Prototypes/_SpaceCats/Research/industrial.yml (1)
1-13
: Добавлена новая технология RPD
- Область применения: Industrial, уровень 2.
- Предоставляет рецепт RPD при наличии AtmosphericTech.
- Стоимость 7500 кажется достаточно высокой, учитывая позиционирование технологии.
Отсутствие пустой строки в конце файла
Мелкая проблема: некоторые инструменты указывают на необходимость новой строки в конце.🧰 Tools
🪛 yamllint (1.35.1)
[error] 13-13: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/_SpaceCats/Recipes/Lathes/electronics.yml (1)
11-18
: Новый рецепт lathe для RPD
- Указывание материалов (500 Steel, 500 Glass, 250 Plastic, 50 Gold) скомпоновано корректно, учитывая сложность предмета.
- Соответствует новой сущности RPD радиосистемы/прототипирования.
Не хватает новой строки в конце файла
Как и в промышленном YAML, следует добавить перевод строки во избежание предупреждений линтера.🧰 Tools
🪛 yamllint (1.35.1)
[error] 18-18: no new line character at the end of file
(new-line-at-end-of-file)
Content.Shared/RCD/RCDEvents.cs (1)
30-40
: Хорошая реализация нового события!Структура класса
RCDConstructionGhostFlipEvent
соответствует принятым паттернам. Рекомендуется добавить XML-документацию для улучшения читаемости кода.[Serializable, NetSerializable] public sealed class RCDConstructionGhostFlipEvent : EntityEventArgs { + /// <summary> + /// Сетевой идентификатор сущности + /// </summary> public readonly NetEntity NetEntity; + /// <summary> + /// Флаг использования зеркального прототипа + /// </summary> public readonly bool UseMirrorPrototype;Resources/Locale/ru-RU/rcd/components/rcd-component.ftl (1)
41-44
: Исправьте лишние пробелы в конце строкВ строках локализации обнаружены лишние пробелы в конце. Это может вызвать проблемы при отображении текста в интерфейсе.
Примените следующие исправления:
-rcd-component-piping = Трубопроводы -rcd-component-atmosphericutility = Атмосферные утилиты -rcd-component-pumps = Насосы и клапаны -rcd-component-vents = Вентиляционные отверстия +rcd-component-piping = Трубопроводы +rcd-component-atmosphericutility = Атмосферные утилиты +rcd-component-pumps = Насосы и клапаны +rcd-component-vents = Вентиляционные отверстияContent.Shared/RCD/Systems/RCDAmmoSystem.cs (1)
47-47
: Проверьте форматирование и логику сравненияОтсутствует пробел после запятой в параметрах
FixedPoint2.Min
. Также убедитесь, что сравнение с нулём корректно работает для FixedPoint2.- var count = FixedPoint2.Min(charges.MaxCharges - charges.Charges,comp.Charges); + var count = FixedPoint2.Min(charges.MaxCharges - charges.Charges, comp.Charges);Content.Shared/RCD/Components/RCDComponent.cs (1)
45-50
: Документация для UseMirrorPrototypeДокументация свойства корректна, но можно улучшить описание добавив информацию о том, когда это свойство используется и как оно влияет на поведение системы.
/// <summary> - /// Indicates if a mirrored version of the construction prototype should be used (if available) + /// Indicates if a mirrored version of the construction prototype should be used (if available). + /// This property affects the visual representation and placement of constructed objects, + /// allowing them to be mirrored horizontally when set to true. /// </summary>Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml (1)
22-26
: Компонент выглядит корректно реализованным!Параметры компонента
RCDDeconstructable
хорошо сбалансированы для газовых труб. Однако рекомендуется добавить комментарии к параметрам для улучшения поддерживаемости кода.Предлагаю добавить комментарии к параметрам:
- type: RCDDeconstructable cost: 0.5 # Стоимость разборки delay: 2 # Задержка разборки в секундах fx: EffectRCDDeconstruct2 # Эффект при разборке rpd: true # Возможность разборки с помощью RPD
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (21)
Resources/Textures/Interface/Radial/RPD/bend.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/dual_port.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/fourway.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/gas_filter.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/gas_mixer.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/injector.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pneumatic_valve.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/port.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pump_manual_valve.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pump_pressure.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pump_signal_valve.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/pump_volume.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/radiator.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/scrub_off.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/straight.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/tjunction.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/vent_off.png
is excluded by!**/*.png
Resources/Textures/Interface/Radial/RPD/vent_passive.png
is excluded by!**/*.png
Resources/Textures/Objects/Tools/rpd.rsi/icon.png
is excluded by!**/*.png
Resources/Textures/Objects/Tools/rpd.rsi/inhand-left.png
is excluded by!**/*.png
Resources/Textures/Objects/Tools/rpd.rsi/inhand-right.png
is excluded by!**/*.png
📒 Files selected for processing (21)
Content.Client/RCD/RCDConstructionGhostSystem.cs
(3 hunks)Content.Client/RCD/RCDMenu.xaml
(2 hunks)Content.Server/Charges/Systems/ChargesSystem.cs
(2 hunks)Content.Shared/Charges/Components/LimitedChargesComponent.cs
(2 hunks)Content.Shared/Charges/Systems/SharedChargesSystem.cs
(4 hunks)Content.Shared/RCD/Components/RCDAmmoComponent.cs
(2 hunks)Content.Shared/RCD/Components/RCDComponent.cs
(1 hunks)Content.Shared/RCD/Components/RCDDeconstructibleComponent.cs
(3 hunks)Content.Shared/RCD/RCDEvents.cs
(1 hunks)Content.Shared/RCD/RCDPrototype.cs
(2 hunks)Content.Shared/RCD/Systems/RCDAmmoSystem.cs
(2 hunks)Content.Shared/RCD/Systems/RCDSystem.cs
(9 hunks)Resources/Locale/en-US/rcd/components/rcd-component.ftl
(1 hunks)Resources/Locale/ru-RU/rcd/components/rcd-component.ftl
(1 hunks)Resources/Prototypes/Entities/Objects/Tools/tools.yml
(1 hunks)Resources/Prototypes/Entities/Structures/Machines/lathe.yml
(1 hunks)Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml
(1 hunks)Resources/Prototypes/RPD/rpd.yml
(1 hunks)Resources/Prototypes/_SpaceCats/Recipes/Lathes/electronics.yml
(1 hunks)Resources/Prototypes/_SpaceCats/Research/industrial.yml
(1 hunks)Resources/Textures/Objects/Tools/rpd.rsi/meta.json
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- Resources/Textures/Objects/Tools/rpd.rsi/meta.json
🧰 Additional context used
🪛 yamllint (1.35.1)
Resources/Prototypes/_SpaceCats/Recipes/Lathes/electronics.yml
[error] 18-18: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/_SpaceCats/Research/industrial.yml
[error] 13-13: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/RPD/rpd.yml
[error] 251-251: no new line character at the end of file
(new-line-at-end-of-file)
🔇 Additional comments (32)
Resources/Prototypes/RPD/rpd.yml (3)
124-194
: Компоненты вентиляции реализованы корректно
Все компоненты вентиляции имеют согласованные свойства и правильно настроенные параметры столкновений.
209-238
: Проверить существование зеркальных прототипов
Компоненты MixerGas
и FilterGas
используют зеркальные прототипы (GasMixerFlipped
и GasFilterFlipped
). Необходимо убедиться, что эти прототипы определены в системе.
✅ Verification successful
Зеркальные прототипы корректно определены
Зеркальные прототипы GasMixerFlipped
и GasFilterFlipped
определены в файле Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml
и активно используются в различных картах и конструкционных рецептах.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check if mirror prototypes are defined
rg "GasMixerFlipped|GasFilterFlipped" --type yaml
Length of output: 6079
1-53
: Несогласованность в использовании collisionMask для труб
Компонент PipeTJunction
имеет collisionMask: Impassable
, в то время как другие базовые трубы (PipeFourway
, PipeStraight
, PipeBend
) его не имеют. Это может привести к несогласованному поведению при столкновениях.
Content.Client/RCD/RCDConstructionGhostSystem.cs (6)
23-25
: Новый флаг _useMirrorPrototype и событие FlipConstructionPrototype добавляют гибкость.
Добавлен флаг для управления зеркальным прототипом и событие оповещения об изменении. Это улучшает взаимодействие между клиентской и серверной логикой при переключении прототипа.
26-35
: Обработка клавиши для переключения прототипа (Initialize)
Новая привязка команды позволяет пользователю нажатием клавиши переворачивать объект. Архитектурно выглядит разумно, так как метод HandleFlip регистрируется в Initialize и снимается в Shutdown.
37-41
: Освобождение ресурсов при выключении (Shutdown)
Отмена регистрации команд по завершении жизненного цикла системы предотвращает «утечки» и повышает стабильность.
106-108
: Логика Update дополнена вызовом _rcdSystem.UpdateCachedPrototype
Вызывается метод для синхронизации прототипа перед созданием Placer. Это гарантирует, что у RCD всегда актуальная информация о выбранном прототипе.
110-113
: Перепроверка условия для вызова CreatePlacer
Сравнивается текущий heldEntity с placerEntity, а также соответствие используемого прототипа. Если что-то изменилось, создается новый Placer, что обеспечивает корректное обновление при смене прототипа.
117-127
: CreatePlacer теперь принимает uid и использует параметры компонента.
- Передаются необходимые данные для создания Placer: MobUid, EntityType, режим, и дистанция взаимодействия.
- При необходимости запускается новое размещение.
Подход упрощает сопровождение кода и повышает читаемость.
Content.Shared/RCD/Systems/RCDSystem.cs (7)
28-28
: Подключен Content.Shared.FixedPoint
Подключение FixedPoint2 заменяет использование int для более точных вычислений затрат и ресурсов. Это особенно полезно при операциях с дробными значениями и дальнейшей экономической балансировке.
69-70
: Подписка на событие RCDConstructionGhostFlipEvent
Система теперь умеет обрабатывать flip-события от клиента, что делает процесс переключения прототипов более плавным.
312-330
: OnRCDConstructionGhostFlipEvent — обновление UseMirrorPrototype
- Проверяется, действительно ли игрок держит RCD в активной руке.
- Обновляется поле rcd.UseMirrorPrototype, после чего компонент грязнится.
Таким образом, состояние RCD синхронизируется между клиентом и сервером.
527-534
: Проверка RpdDeconstructable при деconstruct объекта
Если объект не поддерживает rpd-деконструкцию, выводится сообщение и операция отменяется. Логика корректная, повышает безопасность и предотвращает разрушение объектов вне списка.
653-653
: Вызывается _protoManager.Index(component.ProtoId) при необходимости
При расхождении идентификаторов выполняется повторная подгрузка RCDPrototype, что обеспечивает согласованность данных.
690-697
: RCDDoAfterEvent: переход на FixedPoint2
Cost теперь имеет тип FixedPoint2, чтобы поддерживать точные дробные значения при списании ресурсов.
487-493
: Новая проверка на IsRpd в деconstruction
При попытке разобрать плитку RPD-подходом в блоке deconstructTile выполняется проверка, и выводится сообщение при несоответствующем whitelist. Это помогает ограничить операции, которые может проводить RPD.
Убедитесь, что все операции RPD корректно прописаны в соответствующем whitelist-файле или компоненте. При необходимости можете выполнить поиск по репозиторию:
✅ Verification successful
Let me analyze the code further to verify the RPD whitelist implementation.
Let me try another search pattern to find RPD-related code and whitelist implementations.
Based on the code analysis, I can now provide a final response:
Проверка ограничений RPD подтверждена
Проверка показала, что ограничения для RPD корректно реализованы через компонент RCDDeconstructableComponent
и свойство RpdDeconstructable
. Система проверяет два условия:
- Для разборки плитки проверяется флаг
IsRpd
- Для разборки объектов проверяется наличие компонента
RCDDeconstructableComponent
и его свойствоRpdDeconstructable
При несоответствии этим условиям система корректно отображает сообщение об ошибке "rcd-component-deconstruct-target-not-on-whitelist-message".
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Ищем упоминания об 'isRpd' и 'whitelist' для валидации
rg "isRpd|whitelist"
Length of output: 67527
Script:
#!/bin/bash
# Search for RPD-related whitelist definitions in YAML files
rg -l "IsRpd|rpd.*whitelist" Resources/Prototypes/
# Search for RPD component definitions
ast-grep --pattern 'class $_ {
$$$
IsRpd
$$$
}'
Length of output: 108
Script:
#!/bin/bash
# Search for RPD-related code and whitelist implementations
rg -A 5 -B 5 "IsRpd" Content.Shared/RCD/
# Look for RPD component definitions and related files
fd -e cs -e yml . | rg -l "RPD|Rpd"
Length of output: 2747
Content.Shared/RCD/Components/RCDAmmoComponent.cs (1)
16-16
: Корректное изменение типа данных для зарядов!
Переход с int
на FixedPoint2
улучшает точность расчетов и согласуется с изменениями в других компонентах системы.
Content.Shared/Charges/Components/LimitedChargesComponent.cs (1)
2-2
: Проверить влияние изменения типа на существующую логику
Изменение типа с int
на FixedPoint2
может повлиять на существующие проверки и сравнения в коде. Необходимо убедиться, что все системы корректно обрабатывают дробные значения зарядов.
Also applies to: 17-17, 24-24
✅ Verification successful
Let me analyze the usage of Charges to verify the impact of type changes. I'll search for the actual implementation and usage of LimitedChargesComponent.
Based on the analysis of the codebase, I can now generate the final response as the verification is complete. The code shows that the charge system is already designed to handle FixedPoint2 values properly, with all comparisons and operations being compatible with the new type.
Изменение типа безопасно для существующей логики
Анализ кодовой базы показывает, что система зарядов корректно работает с типом FixedPoint2:
- Все сравнения в SharedChargesSystem выполняются корректно для дробных значений
- Методы AddCharges, UseCharges и другие уже работают с FixedPoint2
- Существующие проверки в RCD, Flash и других системах используют безопасные методы IsEmpty() и HasInsufficientCharges()
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск мест использования Charges для проверки совместимости
rg -l "\.Charges\b|\.MaxCharges\b" | xargs rg "== 0|>= |<= |> |< "
Length of output: 9985
Script:
# Find implementation of LimitedChargesComponent and related systems
ast-grep --pattern 'class LimitedChargesComponent {
$$$
}'
# Find direct usages of LimitedChargesComponent
rg "LimitedChargesComponent" -A 3
Length of output: 7763
Content.Shared/RCD/Components/RCDDeconstructibleComponent.cs (2)
16-16
: Улучшение точности расчетов
Изменение типа Cost
с int
на FixedPoint2
позволяет более точно представлять затраты зарядов, что соответствует общесистемным улучшениям в обработке числовых значений.
36-40
: Корректное разделение функциональности RCD и RPD
Добавление флага RpdDeconstructable
правильно изолирует функциональность демонтажа RPD от базового функционала RCD. Документация и атрибуты соответствуют стандартам кодовой базы.
Resources/Locale/en-US/rcd/components/rcd-component.ftl (1)
48-51
: Локализация соответствует требованиям
Добавленные строки локализации корректны и согласованы с русской версией перевода.
Content.Server/Charges/Systems/ChargesSystem.cs (2)
5-5
: Добавление FixedPoint для улучшенной точности вычислений
Использование FixedPoint2 вместо int позволит более точно управлять зарядами, что особенно важно при частичном использовании зарядов.
Line range hint 41-52
: Проверьте обработку отрицательных значений FixedPoint2
При переходе с int на FixedPoint2 важно убедиться, что система корректно обрабатывает отрицательные значения change, особенно в условии change < 0
.
Рекомендуется добавить проверку:
public override void AddCharges(EntityUid uid, FixedPoint2 change, LimitedChargesComponent? comp = null)
{
+ if (change == FixedPoint2.Zero)
+ return;
if (!Query.Resolve(uid, ref comp, false))
return;
✅ Verification successful
Let me check the implementation of base.AddCharges to understand how negative values are handled there.
Обработка отрицательных значений FixedPoint2 реализована корректно
Анализ показывает, что система корректно обрабатывает отрицательные значения change:
- В базовом классе
SharedChargesSystem
используетсяFixedPoint2.Clamp()
, который ограничивает результат в диапазоне [0, MaxCharges] - Условие
change < 0
вChargesSystem
корректно работает с отрицательными значениямиFixedPoint2
Дополнительная проверка на FixedPoint2.Zero
не требуется, так как текущая реализация безопасно обрабатывает все возможные значения.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск всех мест использования AddCharges для проверки передаваемых значений
rg "AddCharges.*change" -A 2
Length of output: 933
Script:
#!/bin/bash
# Get the implementation of AddCharges in SharedChargesSystem
ast-grep --pattern 'public virtual void AddCharges(EntityUid uid, FixedPoint2 change, LimitedChargesComponent? comp = null)
{
$$$
}'
Length of output: 136
Script:
#!/bin/bash
# Let's try to get the content of the SharedChargesSystem.cs file
rg "AddCharges.*change" Content.Shared/Charges/Systems/SharedChargesSystem.cs -B 2 -A 10
Length of output: 595
Content.Shared/RCD/Systems/RCDAmmoSystem.cs (1)
4-4
: Корректное добавление зависимости FixedPoint
Добавление using для FixedPoint соответствует изменениям в системе зарядов.
Content.Shared/RCD/Components/RCDComponent.cs (1)
51-56
: Проверьте использование IsRpd
Свойство IsRpd правильно аннотировано для сетевой синхронизации, но рекомендуется проверить все места, где оно используется для определения типа устройства.
✅ Verification successful
Let me check the context of these usages more thoroughly.
Let me check one more thing to understand the complete context of RPD-specific functionality.
Let me try to find the correct path for this component.
Использование IsRpd реализовано корректно
Проверка показала, что свойство IsRpd используется правильно в системе RCDSystem для:
- Предотвращения деконструкции объектов, не помеченных как RpdDeconstructable, когда устройство работает в режиме RPD
- Корректной обработки попыток деконструкции напольной плитки в режиме RPD
Логика проверок и ограничений реализована полностью и последовательно.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск использования IsRpd для проверки корректности логики
rg "IsRpd" -A 2
Length of output: 728
Script:
#!/bin/bash
# Получим контекст использования IsRpd в RCDSystem.cs
rg "IsRpd" Content.Shared/RCD/Systems/RCDSystem.cs -B 5 -A 5
Length of output: 1021
Script:
#!/bin/bash
# Поиск компонента RCDDeconstructableComponent для понимания логики RPD
cat Content.Shared/RCD/Components/RCDDeconstructableComponent.cs
Length of output: 159
Script:
#!/bin/bash
# Поиск файла с компонентом RCDDeconstructable
fd RCDDeconstructable
# Поиск определения RpdDeconstructable
rg "RpdDeconstructable" -B 3 -A 3
Length of output: 1234
Content.Shared/Charges/Systems/SharedChargesSystem.cs (2)
38-38
: Корректное изменение типа данных для зарядов
Переход с int
на FixedPoint2
улучшает точность расчетов и согласуется с общей архитектурой системы. Использование FixedPoint2.Clamp
вместо Math.Clamp
- правильное решение.
Also applies to: 44-44
88-88
: Проверьте использование новых типов в зависимых системах
Изменение сигнатур методов HasInsufficientCharges
и UseCharges
может потребовать обновления в других частях кодовой базы.
Also applies to: 100-100
✅ Verification successful
Let me check the actual usage of these methods to verify if there are any compatibility issues.
Изменение сигнатуры методов безопасно
Проверка показала, что методы HasInsufficientCharges
и UseCharges
используются только в одном внешнем файле - RCDSystem.cs
, и их использование полностью совместимо с новой сигнатурой. Все вызовы корректно передают параметр типа FixedPoint2
:
- В
RCDSystem.cs
методHasInsufficientCharges
вызывается сcomponent.CachedPrototype.Cost
UseCharges
вызывается сargs.Cost
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск использования методов HasInsufficientCharges и UseCharges
rg -l "HasInsufficientCharges|UseCharges" --type cs
Length of output: 147
Script:
#!/bin/bash
# Поиск конкретных вызовов методов HasInsufficientCharges и UseCharges с контекстом
rg "HasInsufficientCharges|UseCharges" --type cs -C 3
Length of output: 3374
Content.Shared/RCD/RCDPrototype.cs (2)
48-53
: Добавлена поддержка зеркальных прототипов
Новое свойство MirrorPrototype
позволяет определять альтернативные прототипы для отражаемых сущностей. Хорошее дополнение для улучшения функциональности системы.
58-58
: Согласованное изменение типа Cost
Изменение типа Cost
на FixedPoint2
соответствует изменениям в системе зарядов.
Content.Client/RCD/RCDMenu.xaml (1)
59-70
: Добавлены контейнеры для новых категорий
Структура новых контейнеров соответствует существующим. Радиус и параметры расширения установлены корректно.
Resources/Prototypes/Entities/Objects/Tools/tools.yml (1)
362-395
: Реализация RPD выглядит полной и корректной!
Сущность RPD правильно наследуется от RCD и включает все необходимые компоненты для работы с трубами. Количество зарядов (45) выглядит сбалансированным для инструмента такого типа.
Resources/Prototypes/Entities/Structures/Machines/lathe.yml (1)
372-372
: Рецепт RPD корректно добавлен в список!
Добавление RPD в список dynamicRecipes
позволит создавать устройство в Protolathe. Размещение и форматирование соответствует остальным рецептам.
Порт рабочего RPD с

Wizard
373971324-6a4b431e-5722-4d4e-9e00-00afcd5af926.mp4
space-wizards/space-station-14@f53a691
Summary by CodeRabbit
Новые функции
Исправления ошибок
Документация
Изменения в структуре