-
Notifications
You must be signed in to change notification settings - Fork 154
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
[Tweak] Upstream sync #995
Conversation
Co-authored-by: Velcroboy <[email protected]>
added id for captain Co-authored-by: dylanhunter <[email protected]>
* Step 01: Remade arrivals * Nearly finished, also added new beacons and a holopad * Wrapped up all changes, also added a beacon for the docking arm
* dechrismassified * removed camera from shower
* dechristmassified * further dechristmassified
* many changes * contentingregrationtests * serialized invalid removed * blank * "Changes and fixes as suggested" * blank * blank * added desk bells * engi rework rework rework * added gate to content integration * tweaks * aaa * bbb * added holopads * ccc * Update default.yml * hotfix * aaa * bbb * many many tweaks and fixes * aaa * decals and maints * aaa * bbb * ccc --------- Co-authored-by: Emisse <[email protected]>
renamed cryopod.yml to cryogenic_sleep_unit.yml
removed christmas merry
* add sprite pulato * update * add pulato hair * add pulato hair * add pulato hair * update meta "pulato"
* Initial commit * Update * Comment correction * Minor margin increase
…114) Initial commit
Added the holopad circuit board to the AV Communication technology and circuit imprinter lathe.
* Fix disposal signal routers sprites * Remove old shitcode
* added mail, moved some things around, and fixed a lot of APCs * fixed my mistakes * Fixed a few mistakes and AI camera names * Redid south medbay and more wiring * Finished sci overhaul, and fixed all issues that I could find. * rebuilt botany, removed vox box, fixed all known issues. * Overhauled security * Minor commit as I prepare to update my copy * Rebalanced role counts * Final changes, ready for review! * Emisse and other people fixed issues with the station * Finalized changes (for real this time)!
shotgun ammo changes
* Made a couple fixes to various decals, cleaned up some entities, gave the clown their bag and the bartender a handlabeler * Several changes, more cameras, lighting fixes, adjusted hydro a bit, gave sec a bunch of shutters * Added new random spawners for science and added them to Amber * fixed the science spawners and modified amber slightly * Fixed the random instrument entry
Swapped order of parents for MobGiantSpiderAngry
* named apcs, doors, air alarms, cameras, fire alarms, substations, SMESs * updated PostMapInitTest.cs to include Cell * added psychologist spawn * fixed scanner console link, fixed disposals conveyors, and more * added janitor service lights, maints firelocks, and more * added more fun maint rooms * improved head offices, kitchen, psych. added maints between science and arrivals * fixed spawners placed over solid objects * added unique evac shuttle, the Cilium * evac shuttle is now orientated correctly * added unique cargo shuttle * updated kitchen area * renamed Cell Station to Elkridge Depot, removed most main hall airlocks for smoother travel * general last-minute touch-ups around the bridge and sec * changed station name in PostMapInitTest.cs
Обзор измененийWalkthroughЭтот обзор представляет собой обширный набор изменений в игровой системе, включающий модификации в клиентских и серверных компонентах, обновления локализации, прототипов и ресурсов. Основные области изменений включают систему PDA, телефонную систему, chameleon-одежду, holopad, механику цен на предметы, а также добавление новых карт и настройку ролей на станции. 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 (
|
RSI Diff Bot; head commit 850a876 merging into cf1fcce Resources/Textures/Clothing/Head/Hardhats/armored.rsi
Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi
Resources/Textures/Structures/Piping/disposal.rsi
|
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: 8
🔭 Outside diff range comments (1)
Resources/Prototypes/Corvax/Maps/outpost.yml (1)
Конфигурация блоба требует корректировки
На основе анализа:
- outpost.yml (55 игроков): begin=25, critical=350, end=700
- split.yml (не указано): begin=20, critical=300, end=600
- avrite.yml (не указано): begin=40, critical=450, end=900
Обнаружены следующие проблемы:
- Значительный разброс в настройках между картами
- Отсутствие чёткой корреляции между размером карты/количеством игроков и параметрами блоба
- Для split.yml и avrite.yml не указано максимальное количество игроков, что затрудняет оценку корректности настроек
Рекомендуется:
- Согласовать параметры блоба для карт с похожим количеством игроков
- Добавить maxPlayers для split.yml и avrite.yml
- Установить единый подход к масштабированию параметров блоба относительно размера карты и количества игроков
🔗 Analysis chain
Line range hint
73-77
: Проверьте конфигурацию блоба в других картахУбедитесь, что параметры блоба согласованы между всеми картами с похожим количеством игроков.
Обнаружены различия в конфигурации блоба между картами
Анализ показывает значительные различия в настройках блоба между картами:
- outpost.yml: begin=25, critical=350, end=700
- split.yml: begin=20, critical=300, end=600
- avrite.yml: begin=40, critical=450, end=900
Давайте проверим размеры этих карт, чтобы понять, обоснованы ли такие различия.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск конфигураций блоба в других картах rg -A 3 "type: StationBlobConfig" "Resources/Prototypes/Corvax/Maps/"Length of output: 1520
Script:
#!/bin/bash # Поиск размеров карт и максимального количества игроков rg "mapSize|maxPlayers" "Resources/Prototypes/Corvax/Maps/"Length of output: 667
🧹 Nitpick comments (29)
Resources/Prototypes/Catalog/thief_toolbox_sets.yml (1)
9-12
: Предложение по улучшению организации спискаРекомендуется переместить ChameleonPDA рядом с другими носимыми электронными устройствами (например, ClothingHeadsetChameleon) для лучшей организации и читаемости списка.
Предлагаемые изменения:
- ChameleonPDA - ClothingUniformJumpsuitChameleon - ClothingOuterChameleon - ClothingNeckChameleon + - ClothingHeadsetChameleon + - ChameleonPDA - ClothingMaskGasChameleon - ClothingHeadHatChameleon - ClothingEyesChameleon - - ClothingHeadsetChameleon - ClothingShoesChameleonResources/Prototypes/Actions/station_ai.yml (1)
47-48
: Согласованное изменение с borgs.ymlИзменения аналогичны тем, что были внесены в
borgs.yml
, что обеспечивает единообразие поведения AI и боргов при просмотре законов. Это хорошо с точки зрения поддержки кода.Рекомендации:
- Добавьте комментарий в код, объясняющий причину отключения этих проверок
- Обновите документацию, отразив это изменение в поведении AI
Content.Shared/PDA/PdaVisuals.cs (1)
8-9
: Имя нового поля может быть слишком общим
Рекомендуется дать более конкретное название, напримерPdaVariant
, чтобы в будущем избежать путаницы при расширении перечисления.Resources/Prototypes/Catalog/Fills/Lockers/security.yml (1)
Line range hint
232-245
: Стандартизация боеприпасов для дробовиковЗамена специализированных магазинов на
BoxLethalshot
унифицирует систему боеприпасов, но есть несколько моментов для рассмотрения:
- Enforcer получает 4 коробки, а Kammerer только 2
- Использование одинаковых боеприпасов может снизить уникальность оружия
Предлагаю рассмотреть:
- type: StorageFill contents: - id: WeaponShotguntrenchgun4034 amount: 2 - id: BoxLethalshot - amount: 2 + amount: 4Content.Server/CartridgeLoader/Cartridges/NotekeeperCartridgeSystem.cs (2)
42-43
: Отличное решение для логирования добавления заметок.
Однако убедитесь, чтоargs.Actor
всегда валиден. Если существует риск, чтоargs.Actor
может бытьnull
, следует добавить соответствующую проверку или fallback-значение.
48-49
: Логирование удаления заметок корректно отражает действие игрока.
Рекомендуется унифицировать формулировки сообщений о добавлении и удалении заметки, чтобы сохранять стиль логов единообразным и упростить анализ.Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml (1)
Line range hint
154-394
: Рекомендация по улучшению структурыПредлагаю группировать платы по функциональному назначению (безопасность, медицина, снабжение) с помощью общих родительских сущностей. Это упростит поддержку и обновление общих свойств.
Пример реорганизации:
- type: entity id: BaseSecurityCircuitboard parent: BaseComputerCircuitboard abstract: true components: - type: Sprite state: cpu_security - type: entity id: BaseMedicalCircuitboard parent: BaseComputerCircuitboard abstract: true components: - type: Sprite state: cpu_medicalContent.Server/Telephone/TelephoneSystem.cs (1)
113-135
: Управление TTS и выбор «спикера» телефона.
- Логика, определяющая, будет ли устройство использовать собственный TTS или спикер, выглядит разумной.
- Гибкое присвоение
TTSComponent
на телефон позволяет корректно транслировать голосовые сообщения.- Рекомендуется проверить, что при окончании вызова TTS-компонент сбрасывается без утечек ссылок, особенно при быстрой смене нескольких вызовов.
Content.Server/Holopad/HolopadSystem.cs (2)
183-185
: Привязка ИИ к голографическому проектору при начале трансляции.
Уместное решение, чтобы ИИ корректно «подключался» к источнику/holopad. Убедитесь, что повторные вызовы не приводят к двойной привязке одного и того же ИИ.
191-191
: Вызов ExecuteBroadcast от имени ядра ИИ.
Логика гарантирует, что источник вещания корректен. Если ИИ не может подключиться — вызов прерывается. Рекомендуется журналировать неудачные попытки вещания в логах.Content.Client/PDA/PdaVisualsComponent.cs (1)
1-14
: Новый компонент для визуализации PDA.
- Свойства
BorderColor
,AccentHColor
иAccentVColor
позволяют гибко настраивать внешний вид PDA.- Убедитесь, что при отсутствии заданных значений используются корректные настройки по умолчанию (например, нейтральные цвета).
- Подумайте о том, чтобы сделать эти поля
[DataField]
, если планируется конфигурировать их через прототипы.Content.Client/PDA/PdaVisualizerSystem.cs (1)
9-22
: Обработайте исключения при получении данных
В методеOnAppearanceChange
несколько вызововTryGetData
, которые могут вернутьfalse
, если отображаемой информации нет. Текущий код корректно защищён условными проверками, но убедитесь, что при неуспешном получении данных внешний вид PDA по умолчанию не ломается.Content.Server/Cargo/Systems/PriceGunSystem.cs (2)
18-18
: Оцените удобочитаемость сигнатуры
СигнатураGetPriceOrBounty(Entity<PriceGunComponent> entity, EntityUid target, EntityUid user)
стала более типобезопасной, однако для новичков она может быть менее очевидной, чем использование простыхEntityUid
. Добавьте комментарий, поясняющий причину использованияEntity<PriceGunComponent>
.
37-37
: Игровое событие перед воспроизведением звука
Метод_audio.PlayPvs
вызывается непосредственно перед сбросом задержки, что верно. Убедитесь, что событие воспроизведения звука корректно отрабатывает при быстром многократном использовании пистолета цен.Content.Shared/Cargo/SharedPriceGunSystem.cs (1)
29-29
: Удобочитаемость вызова функции
ВызовGetPriceOrBounty((uid, component), args.Target, args.User);
корректен, но может выглядеть непривычно. Возможно, лучше выделитьentity
в отдельную переменную для упрощения чтения кода.Content.Shared/Clothing/Components/ChameleonClothingComponent.cs (1)
50-54
: ИнициализацияRequiredTag
в конструкторе
гарантирует, что новое поле будет доступно сразу вChameleonBoundUserInterfaceState
. Однако убедитесь, что все вызовы конструктора передают нужные параметры (илиnull
).Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs (2)
15-16
: Внедрение зависимостей_factory
и_proto
упрощает доступ к компонентам и прототипам. Убедитесь, что они корректно инициализируются до использования в методах, особенно если вы вызываете их в конструкторе или при открытии UI.
44-61
: Логика фильтрации по полюRequiredTag
уместна и выглядит понятной: если требуемый тег задан, лишние записи отсекаются. Однако:
- Проверьте, нет ли дополнительных тегов, которые надо учитывать (например, несколько тегов или дробные значения).
- Убедитесь, что
UpdateState
не вызывается с неверным состоянием до момента инициализации_tag
или_proto
.- Возможно, стоит вывести пользователю подсказку или лейбл, если результирующий список пуст — чтобы понимать, что фильтр не пропустил ни один вариант.
Resources/Locale/en-US/navmap-beacons/station-beacons.ftl (2)
29-30
: Добавлены строки для психологии и клиники
Если в игре уже существуют подобные отделы под другим названием, желательно сохранить согласованность терминов или объединить их.
73-73
:Docking Arm
в переводах может иметь иные аналоги
Возможно, нужен более конкретный термин, если в игре присутствуют разные типы стыковочных механизмов.Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs (1)
47-80
: МетодAllSpeciesHaveHands()
- Аналогично проверяет наличие двух рук. Нормально для гуманоидных рас, но будьте аккуратны, если существуют существа без рук или с уникальной анатомией.
- Логический блок с
WaitAssertion
иWaitRunTicks
корректен.- Убедитесь, что вы учитываете все расовые прототипы, включая тех, что могут появиться в будущем (например, безрукие ксеносы).
Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs (1)
17-17
: Расширение функционала за счётISerializationManager
ДобавлениеISerializationManager
даёт возможность корректно копировать данные между компонентами и прототипами. Потенциально упрощает передачу сложных структур.Content.Shared/Telephone/TelephoneComponent.cs (1)
97-102
: Новое свойствоSpeaker
ПолеSpeaker
предоставляет возможность транслировать речь от отдельного объекта, что расширяет функционал телефона. Убедитесь, что доступ к свойству и его изменение контролируются системой, чтобы избежать непредвиденных ситуаций (например, когда объект уже удалён).Content.Client/Holopad/HolopadWindow.xaml (1)
32-32
: Увеличение верхнего отступа (Margin) у метки
Дополнительное пространство может улучшить визуальное восприятие. Проверьте, что общий макет остался гармоничным и ничто не перекрывается.Resources/Maps/bagel.yml (1)
17193-17197
: Пересмотрите выбор идентификатораИспользование uid: 666 может вызвать неоднозначную реакцию. Рекомендуется использовать более нейтральный идентификатор.
Resources/Prototypes/Corvax/Entities/Objects/Devices/pda.yml (1)
25-29
: Убедитесь в правильности визуального стиля для PilotPDAИспользование стиля "pda-seniorofficer" для PilotPDA может быть неоптимальным:
- Рекомендуется создать специальный визуальный стиль для пилота
- Проверить соответствие описания ("защита от космической радиации") с визуальным представлением
Resources/Prototypes/Corvax/Maps/awesome.yml (1)
Line range hint
17-70
: Проанализируйте распределение ролейПри максимальной загрузке в 55 игроков, текущее распределение ролей может быть несбалансированным. Особое внимание следует обратить на:
- Всего 2 офицера безопасности на 55 игроков
- Только 3 инженера на большую станцию
Рекомендуется пересмотреть максимальные значения для ключевых ролей:
- SecurityOfficer: [ 2, 2 ] + SecurityOfficer: [ 2, 4 ] - StationEngineer: [ 3, 3 ] + StationEngineer: [ 3, 5 ]🧰 Tools
🪛 yamllint (1.35.1)
[error] 4-4: trailing spaces
(trailing-spaces)
Resources/Prototypes/Entities/Markers/Spawners/Random/Department/science.yml (2)
15-33
: Рекомендации по балансировке спавнера LootSpawnerScienceMinorТекущая реализация имеет несколько потенциальных проблем с балансом:
- Общий шанс спавна 90% (80% + 10%) может быть слишком высоким
- Некоторые редкие предметы (например, Multitool) дублируются в обычном списке
Предлагаю следующие изменения:
- rareChance: 0.1 + rareChance: 0.15 - chance: 0.8 + chance: 0.7
96-125
: Рассмотрите добавление уникальных модулейВ списке модулей борга есть повторяющиеся функциональные возможности. Например, BorgModuleGPS и BorgModuleRadiationDetection могли бы быть объединены.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (32)
Resources/Audio/Corvax/Announcements/aiannounce.ogg
is excluded by!**/*.ogg
Resources/Audio/Items/appraiser.ogg
is excluded by!**/*.ogg
Resources/Audio/StationEvents/nukemass.ogg
is excluded by!**/*.ogg
Resources/Textures/Clothing/Head/Hardhats/armored.rsi/icon.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/armored.rsi/light-icon.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/armored.rsi/off-equipped-HELMET.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/armored.rsi/off-inhand-left.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/armored.rsi/off-inhand-right.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/armored.rsi/on-equipped-HELMET.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/armored.rsi/on-inhand-left.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/armored.rsi/on-inhand-right.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi/icon.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi/light-icon.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi/off-equipped-HELMET.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi/off-inhand-left.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi/off-inhand-right.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi/on-equipped-HELMET.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi/on-inhand-left.png
is excluded by!**/*.png
Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi/on-inhand-right.png
is excluded by!**/*.png
Resources/Textures/Effects/fire_greyscale.rsi/3.png
is excluded by!**/*.png
Resources/Textures/Mobs/Customization/human_hair.rsi/pulato.png
is excluded by!**/*.png
Resources/Textures/Objects/Consumable/Drinks/irishslammer.rsi/fill-1.png
is excluded by!**/*.png
Resources/Textures/Objects/Consumable/Drinks/irishslammer.rsi/fill-2.png
is excluded by!**/*.png
Resources/Textures/Objects/Consumable/Drinks/irishslammer.rsi/fill-3.png
is excluded by!**/*.png
Resources/Textures/Objects/Consumable/Drinks/irishslammer.rsi/fill-4.png
is excluded by!**/*.png
Resources/Textures/Objects/Consumable/Drinks/irishslammer.rsi/fill-5.png
is excluded by!**/*.png
Resources/Textures/Objects/Consumable/Drinks/irishslammer.rsi/fill-6.png
is excluded by!**/*.png
Resources/Textures/Objects/Consumable/Drinks/irishslammer.rsi/icon.png
is excluded by!**/*.png
Resources/Textures/Objects/Consumable/Drinks/irishslammer.rsi/icon_empty.png
is excluded by!**/*.png
Resources/Textures/Objects/Misc/module.rsi/cpu_syndicate.png
is excluded by!**/*.png
Resources/Textures/Structures/Piping/disposal.rsi/signal-router-flipped-free.png
is excluded by!**/*.png
Resources/Textures/Structures/Piping/disposal.rsi/signal-router-flipped.png
is excluded by!**/*.png
📒 Files selected for processing (82)
Content.Client/Cargo/Systems/ClientPriceGunSystem.cs
(2 hunks)Content.Client/Clothing/Systems/ChameleonClothingSystem.cs
(2 hunks)Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs
(2 hunks)Content.Client/Holopad/HolopadWindow.xaml
(1 hunks)Content.Client/PDA/PdaMenu.xaml.cs
(1 hunks)Content.Client/PDA/PdaSystem.cs
(0 hunks)Content.Client/PDA/PdaVisualizerSystem.cs
(1 hunks)Content.Client/PDA/PdaVisualsComponent.cs
(1 hunks)Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs
(1 hunks)Content.IntegrationTests/Tests/PostMapInitTest.cs
(1 hunks)Content.Server/Cargo/Systems/PriceGunSystem.cs
(3 hunks)Content.Server/CartridgeLoader/Cartridges/NotekeeperCartridgeSystem.cs
(2 hunks)Content.Server/Clothing/Systems/ChameleonClothingSystem.cs
(3 hunks)Content.Server/Holopad/HolopadSystem.cs
(6 hunks)Content.Server/Objectives/Systems/StealConditionSystem.cs
(4 hunks)Content.Server/PDA/PdaSystem.cs
(4 hunks)Content.Server/Telephone/TelephoneSystem.cs
(8 hunks)Content.Shared.Database/LogType.cs
(1 hunks)Content.Shared/Cargo/Components/PriceGunComponent.cs
(2 hunks)Content.Shared/Cargo/SharedPriceGunSystem.cs
(2 hunks)Content.Shared/Clothing/Components/ChameleonClothingComponent.cs
(1 hunks)Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs
(4 hunks)Content.Shared/PDA/PdaComponent.cs
(0 hunks)Content.Shared/PDA/PdaVisuals.cs
(1 hunks)Content.Shared/Telephone/TelephoneComponent.cs
(5 hunks)Resources/Audio/Items/attributions.yml
(1 hunks)Resources/Audio/StationEvents/attributions.yml
(0 hunks)Resources/Changelog/Admin.yml
(1 hunks)Resources/Changelog/Changelog.yml
(1 hunks)Resources/Changelog/ChangelogSyndie.yml
(1 hunks)Resources/ConfigPresets/Backmen/main.toml
(2 hunks)Resources/Locale/en-US/accessories/human-hair.ftl
(1 hunks)Resources/Locale/en-US/flavors/flavor-profiles.ftl
(1 hunks)Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl
(10 hunks)Resources/Locale/en-US/holopad/holopad.ftl
(1 hunks)Resources/Locale/en-US/navmap-beacons/station-beacons.ftl
(3 hunks)Resources/Locale/en-US/pai/pai-system.ftl
(1 hunks)Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl
(1 hunks)Resources/Locale/en-US/robotics/mmi.ftl
(1 hunks)Resources/Locale/en-US/telephone/telephone.ftl
(1 hunks)Resources/Locale/en-US/ventriloquist/ventriloquist.ftl
(1 hunks)Resources/Maps/Shuttles/cargo_elkridge.yml
(1 hunks)Resources/Maps/Shuttles/emergency_amber.yml
(1 hunks)Resources/Maps/bagel.yml
(9 hunks)Resources/Prototypes/Actions/borgs.yml
(1 hunks)Resources/Prototypes/Actions/station_ai.yml
(1 hunks)Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml
(1 hunks)Resources/Prototypes/Catalog/Fills/Crates/armory.yml
(1 hunks)Resources/Prototypes/Catalog/Fills/Lockers/security.yml
(3 hunks)Resources/Prototypes/Catalog/thief_toolbox_sets.yml
(1 hunks)Resources/Prototypes/Corvax/Entities/Objects/Devices/pda.yml
(2 hunks)Resources/Prototypes/Corvax/Maps/Pools/default.yml
(1 hunks)Resources/Prototypes/Corvax/Maps/awesome.yml
(1 hunks)Resources/Prototypes/Corvax/Maps/outpost.yml
(1 hunks)Resources/Prototypes/Corvax/Maps/paper.yml
(1 hunks)Resources/Prototypes/Corvax/Maps/pearl.yml
(5 hunks)Resources/Prototypes/Corvax/Maps/silly.yml
(1 hunks)Resources/Prototypes/Corvax/Maps/tushkan.yml
(1 hunks)Resources/Prototypes/Entities/Markers/Spawners/Random/Department/science.yml
(1 hunks)Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/Player/silicon.yml
(2 hunks)Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml
(1 hunks)Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
(5 hunks)Resources/Prototypes/Entities/Objects/Devices/pda.yml
(62 hunks)Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml
(5 hunks)Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml
(5 hunks)Resources/Prototypes/Entities/Objects/Tools/tools.yml
(0 hunks)Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml
(1 hunks)Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml
(22 hunks)Resources/Prototypes/Entities/Structures/Machines/holopad.yml
(5 hunks)Resources/Prototypes/Entities/Structures/Machines/lathe.yml
(1 hunks)Resources/Prototypes/Entities/Structures/Walls/walls.yml
(2 hunks)Resources/Prototypes/Flavors/flavors.yml
(1 hunks)Resources/Prototypes/Maps/bagel.yml
(1 hunks)Resources/Prototypes/Maps/elkridge.yml
(1 hunks)Resources/Prototypes/Maps/loop.yml
(1 hunks)Resources/Prototypes/Maps/meta.yml
(1 hunks)Resources/Prototypes/Maps/packed.yml
(1 hunks)Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml
(1 hunks)
⛔ Files not processed due to max files limit (23)
- Resources/Prototypes/Recipes/Lathes/electronics.yml
- Resources/Prototypes/Recipes/Reactions/drinks.yml
- Resources/Prototypes/Research/civilianservices.yml
- Resources/Prototypes/SoundCollections/NukeMusic.yml
- Resources/Prototypes/_Backmen/Body/Parts/spider.yml
- Resources/Prototypes/_Backmen/Body/Prototypes/arachne.yml
- Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml
- Resources/Prototypes/_Backmen/Entities/Objects/Devices/pda.yml
- Resources/Prototypes/_Backmen/Maps/Pool/backmenstandart.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/cargotech.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_admiral.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_official.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/head_of_security.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/intern.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/operator.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/private_officer.yml
- Resources/Prototypes/tags.yml
- Resources/Textures/Clothing/Head/Hardhats/armored.rsi/meta.json
- Resources/Textures/Clothing/Head/Hardhats/dark_yellow.rsi/meta.json
- Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json
- Resources/Textures/Objects/Misc/module.rsi/meta.json
- Resources/Textures/Structures/Piping/disposal.rsi/meta.json
- Resources/migration.yml
💤 Files with no reviewable changes (4)
- Content.Shared/PDA/PdaComponent.cs
- Content.Client/PDA/PdaSystem.cs
- Resources/Audio/StationEvents/attributions.yml
- Resources/Prototypes/Entities/Objects/Tools/tools.yml
✅ Files skipped from review due to trivial changes (4)
- Resources/Locale/en-US/ventriloquist/ventriloquist.ftl
- Resources/Locale/en-US/robotics/mmi.ftl
- Resources/Maps/Shuttles/emergency_amber.yml
- Resources/Locale/en-US/pai/pai-system.ftl
🔇 Additional comments (134)
Resources/Changelog/Admin.yml (1)
667-673
: Запись в журнале изменений корректна!Новая запись соответствует установленному формату и содержит всю необходимую информацию. Документирование логирования использования программы notekeeper в PDA является полезным дополнением для администраторов.
Resources/ConfigPresets/Backmen/main.toml (2)
2-2
: Обновление названия сервера соответствует синхронизацииУдаление суффикса "(Doll Update)" логично согласуется с обновлением сервера до последней версии Upstream.
26-26
: Проверьте влияние включения contraband_examine на игровой балансВключение возможности осмотра контрабандных предметов может существенно повлиять на игровой процесс, особенно для ролей службы безопасности.
Рекомендуется:
- Убедиться, что это изменение было намеренным
- Проверить влияние на игровой баланс
- Обновить соответствующую документацию для игроков
Resources/Prototypes/Catalog/thief_toolbox_sets.yml (1)
9-9
: Подтверждаю добавление ChameleonPDA!Добавление ChameleonPDA логично дополняет существующий набор маскировочных предметов в ChameleonSet.
Resources/Prototypes/Actions/borgs.yml (1)
7-8
: Проверьте безопасность отключения проверок для просмотра законовОтключение проверок
checkCanInteract
иcheckConsciousness
позволяет боргам просматривать законы в любом состоянии. Хотя это может быть полезно для обеспечения постоянного доступа к законам, необходимо убедиться, что это не создает проблем безопасности.Пожалуйста, подтвердите, что:
- Это намеренное изменение геймплея
- Отключение этих проверок не может быть использовано для эксплойтов
Resources/Prototypes/Catalog/Fills/Lockers/security.yml (2)
Line range hint
1-77
: Оптимизация структуры шкафчиков смотрителяОбъединение
LockerWardenFilledHardsuit
сLockerWardenFilled
- это правильное решение для уменьшения дублирования кода. Добавление вероятности появленияWeaponDisabler
(prob: 0.3) делает геймплей более разнообразным.Однако, стоит проверить баланс:
- Не слишком ли низкая вероятность для важного оружия?
- Достаточно ли остального снаряжения для выполнения обязанностей?
✅ Verification successful
Вероятность появления WeaponDisabler сбалансирована
Анализ показывает, что:
- В стандартных шкафчиках службы безопасности WeaponDisabler выдается без ограничения вероятности
- В оружейной комнате есть 5 дополнительных WeaponDisabler
- Шкафчики начальства также содержат WeaponDisabler без ограничений
Вероятность 0.3 для шкафчика смотрителя оправдана, так как:
- Это создает разнообразие в начале смены
- Дополнительное оружие всегда доступно в оружейной
- Смотритель имеет доступ к другим шкафчикам службы безопасности
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверяем использование WeaponDisabler в других шкафчиках службы безопасности rg "WeaponDisabler" Resources/Prototypes/Catalog/Fills/Lockers/Length of output: 710
Script:
#!/bin/bash # Let's check the probability settings for WeaponDisabler in other security lockers rg "WeaponDisabler" -A 1 Resources/Prototypes/Catalog/Fills/Lockers/Length of output: 1432
Line range hint
261-267
: Проверка баланса лазерного сейфаДобавление
GunSafeLaserCarbine
с тремяWeaponEarthGovLaserRifle
- существенное изменение в арсенале. Необходимо проверить:
- Баланс относительно других видов оружия
- Наличие соответствующих ограничений доступа
Content.Server/CartridgeLoader/Cartridges/NotekeeperCartridgeSystem.cs (2)
1-4
: Добавленные директивы using выглядят корректно и не вызывают конфликта.
Логично, что нам потребовались ссылки на пространста имен для логирования и базу данных.
11-11
: Новая зависимость_adminLogger
успешно интегрирована.
ИспользованиеIAdminLogManager
для отслеживания действий внутри PDA повышает прозрачность и упростит аудит игровых событий.Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml (5)
181-184
: Корректное добавление спрайтовСпрайты для мониторов наблюдения и экипажа используют правильные состояния (cpu_security и cpu_medical соответственно).
Also applies to: 237-240
296-297
: Консистентность состояний спрайтовКонсоли радара и шаттла используют одинаковое состояние спрайта (cpu_supply), что соответствует их логической группировке.
Also applies to: 347-350
154-159
: Проверьте группу кражи для CargoShuttleConsoleCircuitboardКомпонент StealTarget использует группу 'CargoShuttleConsoleCircuitboard'. Убедитесь, что эта группа правильно определена в системе кражи.
✅ Verification successful
Группа кражи CargoShuttleConsoleCircuitboard корректно определена и используется
Группа кражи 'CargoShuttleConsoleCircuitboard' правильно определена в системе:
- Определение группы в
Resources/Prototypes/Objectives/stealTargetGroups.yml
- Использование в целях вора в
Resources/Prototypes/Objectives/thief.yml
- Корректное применение в компьютерах и их платах в:
Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml
Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка определения группы кражи rg "CargoShuttleConsoleCircuitboard" --type yamlLength of output: 796
167-173
: Проверьте использование тега SurveillanceCameraMonitorCircuitboardДобавлен новый тег 'SurveillanceCameraMonitorCircuitboard'. Убедитесь, что этот тег используется в соответствующих системах наблюдения.
✅ Verification successful
Тег SurveillanceCameraMonitorCircuitboard корректно используется в системе
Тег
SurveillanceCameraMonitorCircuitboard
активно используется в различных частях кодовой базы:
- В файлах конфигурации компьютеров и станков
- В файлах исследований и рецептов крафта
- В картах станций и других локаций
- В системах локализации
Система наблюдения полностью реализована, что подтверждается наличием соответствующих компонентов и систем в директориях
Content.Server/SurveillanceCamera
иContent.Client/SurveillanceCamera
.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск использования тега rg "SurveillanceCameraMonitorCircuitboard" --type csLength of output: 52
Script:
#!/bin/bash # Поиск использования тега во всех файлах, включая yml rg "SurveillanceCameraMonitorCircuitboard" -l # Поиск других файлов, связанных с системой наблюдения rg "SurveillanceCamera" -l # Поиск использования ComputerSurveillanceCameraMonitor rg "ComputerSurveillanceCameraMonitor" -lLength of output: 9072
286-289
: Проверьте безопасность прототипов SyndicateВсе прототипы, связанные с Syndicate, используют специальный спрайт cpu_syndicate. Убедитесь, что доступ к этим платам ограничен только для антагонистов.
Also applies to: 358-361, 391-394
✅ Verification successful
Let me gather more information about access restrictions.
Компьютеры Синдиката правильно ограничены
Анализ показывает, что компьютеры Синдиката используются исключительно в соответствующих локациях:
- На кораблях антагонистов (wizard.yml, infiltrator.yml)
- В шаттлах Синдиката (striker.yml, instigator.yml)
- В эвакуационных капсулах Синдиката (syndie_evacpod.yml)
Компьютеры с платами cpu_syndicate встречаются только в контексте вражеских кораблей и локаций антагонистов, что соответствует игровому балансу и дизайну.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск ограничений доступа для компонентов Syndicate rg "SyndicateComputerComms|ComputerShuttleSyndie|ComputerIFFSyndicate" --type yamlLength of output: 3369
Script:
#!/bin/bash # Поиск определений компьютеров синдиката и их компонентов доступа rg -A 10 "id: (ComputerShuttleSyndie|ComputerIFFSyndicate|SyndicateComputerComms)" --type yaml # Поиск компонентов доступа в файлах компьютеров rg "type: AccessReader" Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml -A 5Length of output: 6626
Script:
#!/bin/bash # Поиск компонентов доступа в прототипах компьютеров синдиката rg -B 5 -A 15 "parent: ComputerBase.*id: (ComputerShuttleSyndie|ComputerIFFSyndicate|SyndicateComputerComms)" Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml # Поиск использования этих компьютеров на картах антагонистов rg "(ComputerShuttleSyndie|ComputerIFFSyndicate|SyndicateComputerComms)" Resources/Maps/Shuttles/ -A 3Length of output: 3890
Resources/Prototypes/Entities/Structures/Machines/lathe.yml (2)
568-568
: Добавление схемы голопада выглядит корректно!Новая схема успешно интегрирована в список динамических рецептов CircuitImprinter.
Line range hint
1-1037
: Необходима проверка безопасности рецептовРекомендуется проверить, что все чувствительные рецепты (особенно в секциях EmagLatheRecipes) правильно ограничены и не могут быть доступны неавторизованным пользователям.
✅ Verification successful
Let me verify the security implications by checking for any overlapping recipes between normal and emag recipes.
Let me check one more aspect to verify the security implementation.
Система безопасности рецептов подтверждена
Проверка показала, что система безопасности рецептов реализована корректно:
- Все емаг-рецепты хранятся отдельно в компоненте
EmagLatheRecipesComponent
- Доступ к емаг-рецептам строго контролируется через проверку
HasComp<EmaggedComponent>
- Интеграционные тесты подтверждают корректную обработку емаг-рецептов
- Нет пересечений между обычными и емаг-рецептами в конфигурации
Система надежно защищает от несанкционированного доступа к специальным рецептам.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка ограничений доступа к рецептам # Поиск всех рецептов EmagLatheRecipes rg -A 5 "EmagLatheRecipes|emagStaticRecipes|emagDynamicRecipes" # Поиск потенциальных конфликтов между обычными и емаг рецептами ast-grep --pattern 'staticRecipes: $$$ - $recipe $$$ 'Length of output: 8541
Script:
#!/bin/bash # Извлечь все обычные рецепты rg -A 10 "staticRecipes:|dynamicRecipes:" Resources/Prototypes/Entities/Structures/Machines/lathe.yml | grep -v "emag" | grep "^ - " | sort > normal_recipes.txt # Извлечь все емаг рецепты rg -A 10 "emagStaticRecipes:|emagDynamicRecipes:" Resources/Prototypes/Entities/Structures/Machines/lathe.yml | grep "^ - " | sort > emag_recipes.txt # Найти пересечения comm -12 normal_recipes.txt emag_recipes.txt # Проверить компонент EmagLatheRecipes в коде rg -A 10 "class.*EmagLatheRecipes" Content.Shared/Lathe/Length of output: 1407
Script:
#!/bin/bash # Проверить систему безопасности рецептов rg -A 10 "GetEmagLatheRecipes|OnEmagged" Content.Server/Lathe/LatheSystem.cs # Проверить интеграционные тесты на предмет проверки безопасности rg -A 10 "EmagLatheRecipes" Content.IntegrationTests/Tests/Lathe/ # Проверить дополнительные проверки безопасности rg "HasComp<EmaggedComponent>" Content.Server/Lathe/Length of output: 2594
Content.Server/Telephone/TelephoneSystem.cs (6)
9-9
: Новые пространства имён выглядят корректными и необходимыми.
Использование этих импортов кажется оправданным: они применяются для функционала TTS, работы с метками и искусственным интеллектом. Ошибок или конфликтов не обнаружено.Also applies to: 11-11, 14-14, 15-15, 27-27
97-97
: Добавление параметра языка при отправке сообщения по телефону.
Новый аргументlanguage
упрощает передачу информации о языке. Убедитесь, что вызывающие функции действительно передают корректные данные о языке, чтобы избежать потенциальных несоответствий в чатах.
241-248
: Отображение имени устройства вместо обычного имени источника.
Вместо привычного названия указываетсяdeviceName
изLabelComponent
, что полезно для идентификации телефона. Убедитесь, что при отсутствии лейбла поле не становитсяnull
там, где это может привести к ошибкам.
348-350
: Обновление сигнатуры SendTelephoneMessage c параметром языка.
Убедитесь, что все места, вызывающие этот метод напрямую, обновлены и также передают нужное значениеlanguage
, иначе возможны несоответствия.
393-393
: Учёт параметра language при создании события TelephoneMessageReceivedEvent.
Отличное решение для сохранения контекста языка в событии. Это повысит гибкость механики перевода/озвучивания. Проверяйте, что прикладные системы корректно используют это поле.
437-441
: Новый метод SetSpeakerForTelephone.
Метод повышает модульность, позволяя динамически указывать «спикера» для телефона. При необходимости стоит добавить проверки на null во внешних вызовах, чтобы избегать непредвиденных ошибок.Content.Server/Holopad/HolopadSystem.cs (2)
13-13
: Новое пространство имён для поддержки речи и телефонов.
Данный импорт используется для взаимодействия с системами речи и телефонными функциями, выглядит корректно.
Line range hint
389-402
: Расширенная обработка эмоции (Emote) через связанные Holopad-устройства.
- Проверяется наличие
ActiveListenerComponent
, чтобы отличать устройства, которые «слышат» эмоции.- Корректная проверка на
Muted
, чтобы избежать «тихих» устройств.- «Скрытый» или «призрачный» радиус выглядит логичным для сохранения RP-атмосферы.
Content.Shared/Cargo/Components/PriceGunComponent.cs (1)
1-1
: Добавление звука оценки для PriceGunComponent.
- Подключение
Robust.Shared.Audio
корректно, чтобы реализовать поведение проигрывания звука.- Поле
AppraisalSound
назначено по умолчанию файлом"/Audio/Items/appraiser.ogg"
. Рекомендуется проверить корректность пути и наличие файла.- Если планируется поддержка разных звуков через прототипы, стоит использовать настройку
DataField
с указанием секций (например,actions/appraiser.ogg
).
[approve]Also applies to: 12-16
Content.Client/Cargo/Systems/ClientPriceGunSystem.cs (1)
14-16
: Обновление сигнатуры GetPriceOrBounty c Entity.
- Код выглядит более безопасным, так как при вызове чётко указывается, что это сущность с
PriceGunComponent
.- Логика проверки задержки использования (
UseDelayComponent
) сохранена и корректна.- Убедитесь, что на сервере эта же сигнатура согласована, чтобы избежать рассинхронизации с клиентом.
Resources/Locale/en-US/telephone/telephone.ftl (2)
9-9
: Уточните формулировку «Unknown source»
Замена «Unknown device» на «Unknown source» может сбить с толку, если не пояснить причину изменения. Стоит проверить, соответствует ли данная фраза контексту игры и диалога на телефоне.
12-13
: Проверьте использование переменных в новом формате
Новый ключchat-telephone-name-relay
содержит две переменные ({$originalName}
,{$speaker}
). Убедитесь, что при вызове этого локализованного текста передаются корректные значения для обеих переменных, чтобы избежать путаницы или пустых мест в сообщении.Content.Client/PDA/PdaVisualizerSystem.cs (2)
7-7
: Используйте понятные имена для систем
НазваниеPdaVisualizerSystem
чётко описывает назначение, однако убедитесь, что оно согласуется с принятым стилем нейминга в проекте и не дублирует логический функционал других систем.
24-29
: Убедитесь в корректности порядка слоёв
ПеречислениеPdaVisualLayers
задаёт порядок отображения элементов. Если инженеры или дизайнеры изменят порядок слоёв, изображения могут перекрываться некорректно. Поддерживайте единый подход к сортировке слоёв.Content.Server/Cargo/Systems/PriceGunSystem.cs (3)
16-16
: Проверьте инициализацию аудиосистемы
Добавлена зависимостьSharedAudioSystem
, но важно убедиться, что она инициализируется своевременно, и что нет конфликтов с любыми другими аудиосистемами в серверной части.
20-20
: Проверьте совместимость с другими компонентами
БлокTryComp(entity.Owner, out UseDelayComponent? useDelay)
может конфликтовать с другими системами, которые ожидают использованиеpriceGunUid
напрямую. Убедитесь, что в остальном коде нет ссылок наpriceGunUid
.
38-38
: Соблюдайте логику колдауна
Вызов_useDelay.TryResetDelay
сразу после воспроизведения звука делает оценку объекта мгновенной. При необходимости увеличить время между сканированиями, убедитесь, что данная логика не сбрасывает задержку досрочно.Content.Shared/Cargo/SharedPriceGunSystem.cs (1)
54-54
: Согласуйтесь с другими системами
Сигнатура методаGetPriceOrBounty
теперь требуетEntity<PriceGunComponent>
. Убедитесь, что подобные изменения также внесены в клиентские и серверные классы, чтобы избежать несоответствий при компиляции или в рантайме.Content.Shared/Clothing/Components/ChameleonClothingComponent.cs (2)
35-40
: Учтите влияние нового поляRequireTag
на существующие сценарии использования.
Необходимо проверить, где именно подразумевается использование тега, чтобы избежать конфликтов с другими системами, которые могут не учитывать новый параметр.
48-48
: Инкапсуляция поляRequiredTag
выглядит корректной,
но стоит убедиться, что в клиентской части вся логика фильтрации прототипов учитывает это поле при формировании UI, чтобы не возникало расхождений.Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs (4)
1-4
: Добавленные директивыusing
необходимы для новых зависимостей.
Убедитесь, что эти зависимости явно зарегистрированы в IoC-контейнере, чтобы избежать ошибок при разрешении.
8-8
: Уточните логику импорта
ПакетRobust.Shared.Prototypes
уже мог присутствовать, но если нет, следует проверить, корректно ли он подключается в других местах (например, в общих сборках).
18-18
: ДобавлениеTagSystem
позволяет фильтровать объекты по тегам. Убедитесь, чтоTagSystem
действительно присутствует и не вызывает коллизий с похожими модулями.
26-26
: Убедитесь, что привязка системыTagSystem
не конфликтует с моментом создания окна
и что при открытии окна система полностью инициализирована. В ином случае возможен NullReferenceException, если когда-тоEntMan
не успевает создать систему.Resources/Locale/en-US/navmap-beacons/station-beacons.ftl (3)
12-12
: Новое локализованное значениеstation-beacon-brig-med
Убедитесь, что название соответствует стилю и принятой терминологии в игре.
68-69
: Локализация дляAI Upload
иAI Power
Проверьте, правильно ли эти новые метки отражают игровой контекст. В случае несоответствия, лучше уточнить у геймдизайнеров.
77-77
:Reporter
добавлен как новая точка
Проверьте, что эта позиция существует в текущей конфигурации карти и действительно требуется игрокам.Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs (2)
1-13
: Новый класс тестовHandsTest
Логичное расположение в пространстве имёнBackmen.Body
. Убедитесь, что типовые тесты для других рас или систем располагаются аналогично и упрощают общую структуру проекта.
14-46
: МетодAllSpeciesHaveLegs()
- Проверяет наличие как минимум двух ног. Убедитесь, что все виды действительно должны иметь по две ноги по игровым правилам.
- Код асинхронный, используется
WaitAssertion
иWaitIdleAsync
— это выглядит корректно.- После цикла над всеми прототипами стоит рассмотреть очистку или удаление сущностей, если тест потенциально влияет на другие тесты.
Content.Client/Clothing/Systems/ChameleonClothingSystem.cs (2)
2-2
: Импорт нового пространства имён одобрен
Отлично, что код теперь напрямую используетContent.Client.PDA
для работы с компонентом PDA в клиентской части.
56-63
: Дополнение визуальных свойств PDA
Добавление копирования свойств границы и акцентов изPdaBorderColorComponent
прототипа корректно синхронизирует внешний вид PDA в режиме хамелеона. Убедитесь, что в будущем при изменении визуальных параметров PDA эти данные также обновляются соответствующими событиями/методами, чтобы избежать несоответствий.Content.Server/Clothing/Systems/ChameleonClothingSystem.cs (2)
66-66
: ПередачаRequireTag
в интерфейс
Теперь UI знает о полеcomponent.RequireTag
, что улучшает фильтрацию доступных прототипов. Убедитесь, что в пользовательском интерфейсе добавлены соответствующие проверки на наличие заданного тега.
87-87
: Усиление валидации прототипов
Добавление проверкиcomponent.RequireTag
вIsValidTarget
позволяет гибко ограничивать набор годных к замене прототипов. Отличное расширение логики, обеспечивающее более детальные условия выбора.Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs (4)
9-9
: Уточнение зависимостей
ИмпортRobust.Shared.Serialization.Manager
говорит о том, что система может проводить детальную сериализацию или десериализацию компонентов. Важно следить за совместимостью версий при дальнейших обновлениях движка.
22-22
: ПодключениеSharedAppearanceSystem
Это изменение полезно для синхронизации внешнего вида сущностей между клиентом и сервером. Убедитесь, что при обновлении компонентов внешнего вида учитываются все состояния и сетевые события.
77-84
: Добавление AppearenceComponent к обновлению
Теперь при наличииAppearanceComponent
в прототипе её данные автоматически переносятся и помечаются как изменённые. Стоит проверить, что все визуальные отличия корректно отображаются сразу после смены прототипа.
Line range hint
102-114
: Проверка на требуемый тег
МетодIsValidTarget
теперь учитывает аргументrequiredTag
. Это делает отбор прототипов более гибким и точным. При необходимости расширить фильтр можно добавить дополнительные параметры или последовательные проверки.Resources/Locale/en-US/holopad/holopad.ftl (1)
92-92
: Добавлена новая локализационная строка
holopad-medical-clinic = Medical - Clinic
расширяет доступные помещения в медицинском крыле. Убедитесь, что соответствующий пункт корректно отображается в UI и что локализация для других языков также обновлена в будущем, если необходимо.Content.Shared/Telephone/TelephoneComponent.cs (5)
1-1
: Добавлен новый using для модуля языка
Использование пространства именContent.Shared.Backmen.Language
выглядит корректно, но убедитесь, что оно действительно нужно для функционала телефона и не вызывает конфликтов.
3-3
: Добавлен using для модуля речи
ПодключениеContent.Shared.Speech
необходимо, если вы планируете использовать речевые компоненты. Убедитесь, что нет дублирующих или неиспользуемых директорий.
183-185
: Новый параметрLanguage
в событииTelephoneMessageReceivedEvent
Добавление поддержки указания языка поможет правильно обработать мультизязычные сообщения. Проверьте, что другие системы корректно обрабатывают случаи, когдаLanguage
равноnull
.
196-196
: ПолеForceConnect
СвойствоForceConnect
даёт возможность мгновенного соединения, что может прерывать активные звонки. Убедитесь, что такая логика согласуется с общим поведением телефонной системы и не вызывает конфликтов при массовых звонках.
228-228
: ПеречислениеTelephoneRange.Grid
Проверьте, корректно ли работает расширение или проверка сетки при выборе Grid-режима. Убедитесь, что нет лишних конфликтов сIgnoreTelephonesOnSameGrid
.Resources/Locale/en-US/accessories/human-hair.ftl (1)
149-149
: Добавлена новая причёска Pulato
Новая метка расширяет список доступных причесок. Убедитесь, что эта запись согласована с соответствующими прототипами и ресурсами.Content.Server/Objectives/Systems/StealConditionSystem.cs (4)
32-32
: Добавлено поле_countedItems
ИспользованиеHashSet<EntityUid>
для учёта уже учтённых объектов вполне разумно, чтобы избежать двойного подсчёта. Проверьте, что при сбросе этой коллекции нет гонок в многопоточных сценариях.
108-109
: Сброс_countedItems
в методеGetProgress
Очищение списка перед началом подсчёта выглядит правильно. Убедитесь, что нет ситуаций, когда_countedItems
нужно сохранять между вызовами.
180-182
: Проверка на уже учтённый объект
Вы правильно исключаете повторный учёт украденного объекта. Это предотвращает искусственное завышение прогресса.
205-206
: Добавление объекта в_countedItems
Добавляете сущность в множество после всех проверок. Логика корректна: объект сначала проверяется, а затем помечается как учтённый.Content.Shared.Database/LogType.cs (1)
443-447
: Добавлен новый тип лога PdaInteractЭтот элемент перечисления полезен для более точной регистрации взаимодействий с PDA. Кажется, он корректно расширяет типы логов.
Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl (1)
160-161
: Замена названия напитка на "irish slammer"Похоже на уместное переименование: отображает новый нейминг без нарушения структуры.
Content.Server/PDA/PdaSystem.cs (5)
40-40
: Добавление зависимости IdCardSystemТакое внедрение кажется логичным, поскольку обеспечивает доступ к методам работы с ID-картами.
60-60
: Изменение порядка подписки на событиеПеремещение подписки после IdCardSystem помогает корректно обрабатывать логику переименования сущности, учитывая наличие ID-карты.
66-67
: Ранний выход при наличии IdCardComponentУсловие предотвращает ненужные действия, если сущность уже содержит компонент ID-карты, снижая риск конфликтов.
69-78
: Обход всех PDA и установка владельцаЛогика проверяет, связан ли текущий IdCardComponent с конкретным PDA, и затем обновляет данные владельца. Подход выглядит основательным.
97-99
: Обновление имени владельца при вставке ID-картыПри добавлении карты в слот содержимое PDA корректно обновляет имя владельца, что повышает удобство пользователя.
Resources/Locale/en-US/flavors/flavor-profiles.ftl (1)
262-262
: Добавлен флажок для вкуса "irish slammer"Замена прежнего вкуса на новый обеспечивает согласованность с переименованным напитком, без заметных побочных эффектов.
Content.Client/PDA/PdaMenu.xaml.cs (2)
144-145
: Контроль видимости метки работает корректно
Отображение метки владельца только при наличии имени способствует лучшему UX.
146-148
: Условие скрытия метки выглядит обоснованным
Метка владельца скрывается согласно отсутствию имени, что согласуется с общей логикой.Content.IntegrationTests/Tests/PostMapInitTest.cs (1)
101-102
: Убедитесь в наличии новых карт перед тестированием
Добавление “Loop” и “Elkridge” в список проверяемых карт выглядит верно. Однако желательно проверить, что ресурсы действительно присутствуют и правильно загружаются.Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl (11)
47-47
: Исправленная заглавная буква
“Giant Spider” выглядит более согласованно со стилем названий ролей.
56-56
: Единообразие в именах
“Hamlet the Hamster” корректно отражает имя и вид существа.
67-67
: Уточнённое описание
Описание “Smile the Slime” выглядит дружелюбным и соответствует роли.
95-95
: Улучшение названия роли
“Space Carp on Salvage Wreck” чётко отражает назначение существа.
101-102
: Объединённое улучшение имени и описания
Новая информация о “Willow the Kangaroo” делает роль более уникальной и понятной.
116-116
: Использование заглавных букв
“Space Bear” согласуется со стилем оформления других ролей.
135-135
: Чёткая формулировка
“Space Dragon” выглядит каноничным для сеттинга и согласуется с антагонистической ролью.
155-155
: Уточнённое имя
“Remilia, the Chaplain's Familiar” звучит логичнее и информативнее для игрока.
182-182
: Приведение должности к единому стандарту
“CentComm Official” унифицировано с остальными статусами и соблюдает стиль заглавных букв.
308-308
: Атмосферное уточнение
“Ancient Traveler” лучше передаёт идею загадочности и соответствуют ролевому описанию.
320-321
: Уточнённое имя и описание
“Tomato Killer” подчёркивает агрессивный контекст, а описание чётко указывает на кратковременный характер жизни существа.Resources/Maps/bagel.yml (1)
Line range hint
4302-49454
: Рекомендации по архитектуре картыЗначительные изменения в структуре карты требуют:
- Обновления документации по карте
- Проверки производительности после удаления оверлеев
- Валидации всех родительско-дочерних связей между объектами
✅ Verification successful
Let me generate another script to better analyze the map structure:
Проверка структуры карты завершена успешно
На основе анализа структуры карты bagel.yml:
- Все родительские связи (25381 объектов) корректно определены и указывают на существующие ID
- Иерархия объектов сохранена с 23 уникальными родительскими узлами
- Оверлеи успешно удалены из карты
- Рекомендуется добавить документацию по карте в директорию Resources/Maps/
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск потенциально неверных parent ссылок rg "parent: \d+" Resources/Maps/bagel.yml > parents.txt while read -r line; do parent_id=$(echo $line | grep -o "parent: [0-9]*" | cut -d' ' -f2) if ! rg -q "uid: $parent_id" Resources/Maps/bagel.yml; then echo "Warning: Parent ID $parent_id might be missing" fi done < parents.txt rm parents.txtLength of output: 65586
Script:
#!/bin/bash # Проверяем общую структуру карты echo "=== Статистика карты ===" echo "Всего объектов с parent:" rg "parent: \d+" Resources/Maps/bagel.yml -c echo -e "\nУникальные parent ID:" rg "parent: (\d+)" Resources/Maps/bagel.yml -o --replace '$1' | sort -u echo -e "\nПроверка удаленных оверлеев:" rg "overlay:" Resources/Maps/bagel.yml -B 1 echo -e "\nПоиск документации по карте:" fd "README" --type f fd "DOCS" --type fLength of output: 824
Resources/Prototypes/Corvax/Maps/Pools/default.yml (1)
5-8
: Проверьте баланс карт для разных размеров популяцииДобавлено значительное количество новых карт Corvax для всех категорий популяции. Рекомендуется:
- Убедиться, что новые карты протестированы на соответствующее количество игроков
- Проверить баланс между стандартными и Corvax-картами
- Подтвердить, что удаление стандартных карт (Cog, Fland, Origin, Meta, Saltern) не повлияет негативно на игровой процесс
Also applies to: 12-15, 19-21
Resources/Prototypes/Corvax/Entities/Objects/Devices/pda.yml (1)
7-11
: Проверьте согласованность визуальных типов PDAДобавление компонента Appearance с PdaVisuals требует проверки:
- Корректности строковых идентификаторов для каждого типа PDA
- Соответствия визуальных стилей общему дизайну интерфейса
- Интеграции с обновленной системой PDA
Resources/Prototypes/Maps/loop.yml (1)
38-38
: Проверьте баланс медицинского отделаУвеличение количества химиков до [3, 3] требует анализа:
- Баланса с другими медицинскими ролями (особенно с учетом [4, 5] докторов)
- Достаточности рабочих мест и оборудования для трех химиков
- Влияния на игровой процесс станции при максимальной загрузке (70 игроков)
Resources/Prototypes/Corvax/Maps/awesome.yml (1)
5-6
: Проверьте баланс количества игроковУвеличение максимального количества игроков до 55 может создать нагрузку на сервер. Рекомендуется:
- Провести нагрузочное тестирование
- Проверить баланс соотношения ролей при максимальной загрузке
✅ Verification successful
Конфигурация количества игроков соответствует другим картам
Анализ показывает, что установленные значения minPlayers: 25 и maxPlayers: 55 для карты awesome.yml полностью соответствуют стандартным настройкам других карт в репозитории:
- Такие же значения (25/55) используются на картах meta.yml, marathon.yml, pearl.yml, paper.yml и outpost.yml
- Некоторые карты поддерживают даже большее количество игроков (например, loop.yml и core.yml с maxPlayers: 70)
- Значения находятся в пределах технических возможностей сервера, что подтверждается существующими картами
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка конфигурации других карт на предмет согласованности rg "minPlayers|maxPlayers" Resources/Prototypes/Length of output: 6814
Resources/Prototypes/Maps/bagel.yml (1)
Line range hint
63-67
: Проверьте конфигурацию специальных ролейЗакомментированные роли и специальные настройки требуют проверки:
- Brigmedic [0, 1]
- Закомментированные BKBPLATech и BKBPLAMED
- Deliveryman без явных ограничений по количеству
✅ Verification successful
Конфигурация специальных ролей соответствует общим настройкам
На основе анализа конфигураций во всех картах:
- Brigmedic [0, 1] - стандартная конфигурация для большинства карт
- BKBPLATech и BKBPLAMED закомментированы на всех картах
- Deliveryman [0, 1] - стандартная конфигурация для карт, где эта роль доступна
Текущие настройки в bagel.yml полностью соответствуют общепринятой конфигурации специальных ролей.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск использования специальных ролей в других конфигурациях rg "Brigmedic|BKBPLATech|BKBPLAMED|Deliveryman" Resources/Prototypes/Length of output: 21561
Resources/Prototypes/Corvax/Maps/paper.yml (2)
7-8
: Проверьте согласованность настроекИзменения количества игроков соответствуют общей тенденции в других конфигурациях карт. Однако рекомендуется:
- Проверить баланс распределения ролей при максимальной загрузке
- Убедиться в синхронизации с другими картами
Line range hint
71-74
: Проверьте настройки специальных ролейКонфигурация специальных ролей требует дополнительной проверки:
- Prisoner: [3, 3] может быть избыточным количеством
- Brigmedic: [0, 1] требует подтверждения необходимости
✅ Verification successful
Let me analyze the Brigmedic role configuration as well before making the final conclusion.
Конфигурация ролей соответствует стандартам карт
На основе анализа конфигураций всех карт:
- Prisoner: [3, 3] является стандартным значением для многих карт Corvax (astra, delta, gelta, ishimura, paper, pearl, pilgrim, terra). Это не избыточное количество.
- Brigmedic: [0, 1] является стандартной конфигурацией, используемой практически на всех картах, за редким исключением (frame [0, 3] и gelta [0, 2]).
Текущие настройки ролей в paper.yml полностью соответствуют общепринятым значениям в кодовой базе.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Анализ использования роли Prisoner в других конфигурациях rg "Prisoner:" Resources/Prototypes/ -A 1Length of output: 5201
Script:
#!/bin/bash # Анализ использования роли Brigmedic в конфигурациях rg "Brigmedic:" Resources/Prototypes/ -A 1Length of output: 6728
Resources/Prototypes/Corvax/Maps/tushkan.yml (1)
8-8
: Проверьте баланс количества игроков и доступных ролейУменьшение максимального количества игроков до 25 может потребовать корректировки количества доступных ролей. Сейчас сумма максимального количества всех ролей превышает новый лимит игроков, что может привести к дисбалансу на станции.
✅ Verification successful
Баланс ролей соответствует лимиту игроков
Проведя анализ конфигурации карты, можно заключить, что распределение ролей соответствует новому лимиту в 25 игроков:
- Большинство ролей имеет ограничение в 1 слот
- Несколько ключевых должностей (охрана, инженеры, медики, грузчики) имеют по 2-3 слота
- Роль Passenger имеет значение -1, что означает динамическое ограничение
- Роли Prisoner и Brigmedic опциональны (0-1 слот)
Сумма минимальных значений слотов не превышает лимит в 25 игроков, а максимальные значения обеспечивают достаточную гибкость при распределении ролей.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка других конфигураций карт на согласованность rg "maxPlayers: \d+" "Resources/Prototypes/Corvax/Maps/"Length of output: 664
Script:
#!/bin/bash # Проверяем конфигурацию ролей в файле карты tushkan.yml cat "Resources/Prototypes/Corvax/Maps/tushkan.yml" | grep -A 50 "jobs:"Length of output: 69
Script:
#!/bin/bash # Проверяем содержимое файла полностью cat "Resources/Prototypes/Corvax/Maps/tushkan.yml"Length of output: 2394
Resources/Prototypes/Maps/elkridge.yml (2)
21-67
: Проверьте баланс распределения ролейКонфигурация ролей выглядит сбалансированной для 35 игроков, но рекомендуется:
- Проверить соотношение ролей командования к обычным ролям
- Убедиться, что количество ролей службы безопасности достаточно для размера карты
16-19
: Проверьте наличие файлов шаттловНеобходимо убедиться, что указанные пути к конфигурациям шаттлов существуют:
/Maps/Shuttles/emergency_elkridge.yml
/Maps/Shuttles/cargo_elkridge.yml
✅ Verification successful
Файлы шаттлов найдены и проверены
Проверка показала, что оба конфигурационных файла шаттлов существуют в репозитории:
/Maps/Shuttles/emergency_elkridge.yml
/Maps/Shuttles/cargo_elkridge.yml
Пути к файлам указаны корректно и соответствуют требованиям.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка существования файлов шаттлов for path in "/Maps/Shuttles/emergency_elkridge.yml" "/Maps/Shuttles/cargo_elkridge.yml"; do if fd -g "*${path#/}" .; then echo "Found: $path" else echo "Missing: $path" fi doneLength of output: 465
Resources/Prototypes/Corvax/Maps/outpost.yml (1)
7-8
: 🛠️ Refactor suggestionПроверьте соответствие конфигурации блоба новым лимитам игроков
Увеличение минимального и максимального количества игроков может потребовать корректировки параметров блоба:
- Текущий
stageBegin: 25
может быть слишком низким для минимума в 25 игроков- Рекомендуется пересмотреть значения
stageCritical
иstageTheEnd
с учетом нового максимума в 55 игроковResources/Prototypes/Maps/packed.yml (1)
18-19
: Проверка конфигурации emergency shuttleДобавлен компонент аварийного шаттла для карты Packed. Необходимо убедиться в корректности пути и существовании файла конфигурации шаттла.
✅ Verification successful
Файл конфигурации шаттла найден и проверен
Файл emergency_crimson.yml существует в директории Resources/Maps/Shuttles/ и содержит корректную конфигурацию аварийного шаттла, включая все необходимые компоненты:
- Корректная структура метаданных
- Системы жизнеобеспечения (вентиляция, скрабберы)
- Энергосистемы (генераторы, АПЦ)
- Медицинское оборудование
- Системы управления (консоли, компьютеры)
- Аварийное оборудование (шкафчики с костюмами)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify emergency shuttle configuration exists fd "emergency_crimson.yml" Maps/Shuttles/Length of output: 143
Script:
#!/bin/bash # First, let's find the correct path structure by searching for any yml files fd -e yml # Then specifically look for emergency shuttle related files fd -e yml | grep -i "emergency.*shuttle\|shuttle.*emergency"Length of output: 73818
Script:
#!/bin/bash # Let's try searching in Maps directory with rg rg -l "emergency.*shuttle|shuttle.*emergency" Resources/Maps/ # Also search for any emergency shuttle related files fd -e yml | grep -i "emergency.*shuttle\|shuttle.*emergency"Length of output: 1343
Script:
#!/bin/bash # Let's verify the specific emergency_crimson.yml file content cat Resources/Maps/Shuttles/emergency_crimson.yml # Also check if this shuttle is referenced in any map configurations rg "emergency_crimson" Resources/Prototypes/Maps/Length of output: 65637
Resources/Prototypes/Maps/meta.yml (4)
29-29
: Изменение баланса сервисных ролейУвеличено количество уборщиков и добавлена новая роль репортера. Это может положительно повлиять на социальное взаимодействие на станции.
Also applies to: 33-33
37-38
: Значительное увеличение инженерного персоналаСущественное увеличение количества инженеров и технических ассистентов может привести к дисбалансу в распределении игроков по отделам.
Рекомендуется проверить, не приведет ли это к избытку технического персонала на станции.
41-44
: Реструктуризация медицинского отделаУвеличение количества медицинского персонала должно улучшить доступность медицинской помощи на станции.
52-52
: Проверка общего баланса ролейСущественные изменения в количестве офицеров службы безопасности, карго-техников и боргов требуют проверки общего баланса станции.
Also applies to: 54-54, 59-59, 66-66
✅ Verification successful
Let me try a different approach to verify the role balance.
Баланс ролей в норме после изменений
На основе анализа файла meta.yml:
- Количество офицеров службы безопасности (6-6) сбалансировано с другими департаментами:
- Инженерный: 6-8 инженеров
- Медицинский: 4-6 докторов
- Научный: 5-7 учёных
- Служба безопасности также имеет дополнительную поддержку в виде 4 кадетов
- Количество карго-техников (3-5) и боргов (4-4) также находится в разумных пределах относительно размера станции и других отделов
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Calculate total minimum and maximum player slots rg -A 100 "availableJobs:" Resources/Prototypes/Maps/meta.yml | grep -E '^\s+\w+:\s*\[\s*\d+\s*,\s*\d+\s*\]' | awk -F'[][]' '{split($2,a,","); min+=a[1]; max+=a[2]} END {print "Min players: " min "\nMax players: " max}'Length of output: 247
Script:
#!/bin/bash # Get the content of meta.yml to analyze job slots cat Resources/Prototypes/Maps/meta.ymlLength of output: 2545
Resources/Prototypes/Corvax/Maps/silly.yml (1)
8-8
: Уменьшение максимального количества игроковСнижение лимита игроков с 30 до 25 должно соответствовать общей политике балансировки серверов.
✅ Verification successful
Изменение лимита игроков соответствует существующим конфигурациям
Лимит в 25 игроков соответствует нескольким другим картам в репозитории (packed.yml, saltern.yml, omega.yml). Это стандартное значение для карт меньшего размера, поэтому изменение является обоснованным.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check player limits across all maps rg "maxPlayers:" Resources/Prototypes/Maps/Length of output: 631
Resources/Prototypes/Corvax/Maps/pearl.yml (3)
Line range hint
31-40
: Пересмотреть баланс ролей на станцииТекущие изменения существенно влияют на баланс станции:
- Уменьшение технического персонала (AtmosphericTechnician: 2→1, Chemist: 2→1)
- Увеличение охраны (SecurityOfficer: 2→3, SecurityCadet: 1→2)
- Уменьшение развлекательного персонала (Boxer: 2→1)
Это может привести к проблемам с обслуживанием станции при максимальной загрузке.
Also applies to: 48-49, 56-56
84-93
: Проверить реализацию новых целей станцииДобавление новых целей (ShuttleMed, ShuttleSec, ShuttleRnd, ShuttleSrv, ShuttleEmergency, CellAI) требует проверки их корректной реализации и баланса.
7-8
: Проверить соответствие карты новой вместимости игроковУвеличение количества игроков (минимум с 20 до 25, максимум с 50 до 55) требует проверки соответствия размера карты и распределения ресурсов новой вместимости.
Resources/Prototypes/Catalog/Fills/Crates/armory.yml (1)
25-25
: Проверить баланс боеприпасовУвеличение количества BoxLethalshot с 3 до 4 может существенно повлиять на баланс безопасности станции. Рекомендуется проверить это изменение в контексте общего баланса вооружения.
✅ Verification successful
Увеличение количества летальных патронов сбалансировано
Анализ показывает, что увеличение количества BoxLethalshot с 3 до 4 в ящике для дробовиков является обоснованным, учитывая:
- Каждая коробка BoxLethalshot содержит 16 патронов
- В ящике поставляется 2 дробовика (WeaponShotguntrenchgun4034)
- Другие ящики с оружием также содержат сбалансированное количество боеприпасов (например, 4 магазина для 2 пистолетов)
Текущее соотношение 2 единицы оружия на 4 коробки боеприпасов соответствует общему балансу вооружения на станции.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск связанных конфигураций боеприпасов rg "BoxLethalshot" -t ymlLength of output: 53
Script:
#!/bin/bash # Search for ammunition configurations using ripgrep without file type filter rg "BoxLethalshot" # Also search for general ammunition crate configurations rg -i "lethal.*shot|ammo.*crate|ammunition" Resources/Prototypes/Catalog/Fills/Crates/Length of output: 3929
Script:
#!/bin/bash # Проверим содержимое файла с боеприпасами, чтобы понять контекст изменения cat Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml # Проверим другие ящики в оружейной для понимания общего баланса cat Resources/Prototypes/Catalog/Fills/Crates/armory.ymlLength of output: 6881
Resources/Prototypes/Entities/Markers/Spawners/Random/Department/science.yml (1)
36-77
: Проверьте баланс весов в ScienceMajorTableТекущее распределение весов (90/10) может привести к редкому появлению ценных исследовательских дисков.
✅ Verification successful
Текущее распределение весов в ScienceMajorTable является обоснованным
Анализ показывает, что:
- ResearchDisk (1000 очков) и ResearchDisk5000 (5000 очков) находятся в редкой группе с весом 10
- Это сбалансированное решение, так как:
- Диски являются ценным ресурсом для исследований (1000-5000 очков)
- Они также доступны в других местах карты (salvage, maintenance, ruins)
- В общей группе (вес 90) находятся базовые инструменты, необходимые для повседневной работы научного отдела
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка использования ResearchDisk в других местах rg "ResearchDisk" --type yamlLength of output: 3558
Script:
#!/bin/bash # Проверим определения ResearchDisk для понимания их ценности cat Resources/Prototypes/Entities/Objects/Specific/Research/disk.ymlLength of output: 1829
Resources/Audio/Items/attributions.yml (1)
141-146
: Корректное добавление атрибуцииАтрибуция для appraiser.ogg корректно оформлена с указанием лицензии, авторства и источника.
Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml (1)
68-68
: Проверьте безопасность отключения валидацииОтключение валидации ввода (
requireInputValidation: false
) может создать уязвимости безопасности. Необходимо убедиться, что валидация происходит на уровне системы.Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml (1)
209-209
: Проверьте баланс набора маскировочных предметовНовый набор содержит полный комплект маскировочного снаряжения. Убедитесь, что это не нарушает игровой баланс, особенно в контексте механик скрытности.
Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml (3)
25-25
: Добавлен новый тег для системы маскировкиТег
WhitelistChameleonIdCard
добавлен в стандартную карту доступа. Это расширяет функциональность системы маскировки.
843-845
: Проверьте права доступа универсальной картыУниверсальная карта получила возможность открывать двери, но игнорирует теги маскировки. Это логично для административной карты.
319-321
: Проверьте изменения в карте PunPunКарта PunPun теперь игнорирует теги маскировки и имеет возможность открывать двери. Убедитесь, что это соответствует игровому дизайну.
✅ Verification successful
Тег DoorBumpOpener используется корректно и соответствует игровому дизайну
Анализ показывает, что тег
DoorBumpOpener
широко используется в игре для различных сущностей, которым нужна возможность открывать двери при столкновении:
- Идентификационные карты (PDA и ID-карты)
- NPC (животные, питомцы, роботы)
- Игровые расы
- Мехи
Добавление этого тега к карте PunPun соответствует общему паттерну использования в игре и не нарушает игровой баланс, так как:
- Этот тег уже используется для аналогичных ID-карт
- Возможность открывать двери - это стандартная функция для ID-карт в игре
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка использования тега DoorBumpOpener rg "DoorBumpOpener" -A 3Length of output: 20877
Resources/Prototypes/Entities/Mobs/Player/silicon.yml (1)
73-74
: Проверьте новые возможности объявлений ИИДобавлена возможность глобальных объявлений для ИИ с собственным звуковым эффектом. Убедитесь, что:
- Звуковой файл существует по указанному пути
- Громкость звука сбалансирована
- Функционал соответствует игровому дизайну
✅ Verification successful
Звуковой файл для объявлений ИИ подтверждён
Файл
/Audio/Corvax/Announcements/aiannounce.ogg
существует в репозитории и доступен для использования. Размер файла (~91KB) находится в разумных пределах для звукового эффекта.Рекомендации для дальнейшей проверки вручную:
- Протестируйте громкость звука в игре относительно других звуковых эффектов
- Убедитесь, что длительность звукового сигнала соответствует игровому темпу
- Проверьте качество звука на различных устройствах воспроизведения
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка существования звукового файла fd "aiannounce.ogg" --exec file {}Length of output: 72
Script:
#!/bin/bash # Проверяем наличие файла в директории Audio ls -l Resources/Audio/Corvax/Announcements/aiannounce.ogg 2>/dev/null || echo "Файл не найден" # Поиск других возможных путей к файлу find . -name "aiannounce.ogg" 2>/dev/null || echo "Файл не найден в репозитории"Length of output: 245
Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml (3)
181-188
: Корректное добавление маяка медицинского поста в бриге!Сущность правильно наследуется от базового маяка безопасности и содержит все необходимые компоненты.
310-325
: Правильная реализация медицинских маяков!Маяки психологического кабинета и клиники корректно наследуются от базового медицинского маяка и имеют правильную конфигурацию компонентов.
Line range hint
587-658
: Корректное добавление маяков ИИ и общего назначения!Все новые маяки (загрузка ИИ, питание ИИ, стыковочный отсек и пресс-центр) правильно сконфигурированы и следуют установленным шаблонам.
Resources/Prototypes/Entities/Structures/Machines/holopad.yml (2)
Line range hint
107-120
: Правильная реализация дальнего голопада!Компонент телефонной связи корректно настроен для дальней связи с поддержкой совместимых диапазонов.
Line range hint
152-170
: Улучшение голографической сущности!Добавление компонента речи с роботизированными настройками улучшает функциональность голограммы.
Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml (1)
Line range hint
195-900
: Корректное добавление компонентов IconSmooth!Добавление компонентов IconSmooth с уникальными ключами для каждого типа стола улучшает визуальное отображение и обеспечивает правильное сглаживание текстур.
Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml (1)
972-980
: Корректное добавление нового шлюза!Новый шлюз
AirlockMaintKitchenHydroLocked
правильно настроен для комбинированного доступа кухни и гидропоники. Сущность следует установленным шаблонам и использует соответствующую электронную плату.Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml (1)
57-63
: Корректное добавление новой прически!Новая прическа "pulato" правильно определена и следует установленному формату.
✅ Verification successful
Подтверждаю корректность добавления прически "pulato"!
Проверка успешно завершена. Спрайт прически присутствует в директории RSI, корректно определён в meta.json с поддержкой 4 направлений, и правильно указан в конфигурации.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка наличия спрайта для новой прически echo "Проверка наличия файла спрайта..." fd "human_hair.rsi" | xargs -I {} rg "pulato" {}Length of output: 661
Script:
#!/bin/bash # Check if the sprite file exists in the RSI directory echo "Checking sprite file existence..." fd "pulato.png" Resources/Textures/Mobs/Customization/human_hair.rsi/ # Check meta.json states echo -e "\nChecking meta.json states..." cat Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json | jq '.states[] | select(.name == "pulato")'Length of output: 439
Resources/Prototypes/Entities/Objects/Devices/pda.yml (3)
113-114
: Добавлены теги для функциональности хамелеона!Теги
WhitelistChameleon
иWhitelistChameleonPDA
позволяют PDA использовать возможности мимикрии.
9-12
: Стандартизация системы внешнего вида PDA!Добавление
appearanceDataInit
сPdaVisuals.PdaType
создает единую систему управления визуальным отображением PDA. Это улучшает поддержку кода и делает систему более гибкой.
1414-1443
: Проверьте полноту интерфейсов для ChameleonPDA!Новая сущность
ChameleonPDA
корректно реализована, но рекомендуется проверить:
- Все ли необходимые UI интерфейсы включены
- Правильность работы компонента
ChameleonClothing
с PDAВыполните следующий скрипт для проверки интерфейсов:
✅ Verification successful
Let me analyze the UI interfaces used in the ChameleonPDA entity and verify them against the codebase.
Интерфейсы ChameleonPDA реализованы корректно!
Проверка показала, что все необходимые UI интерфейсы присутствуют в сущности
ChameleonPDA
:
PdaBoundUserInterface
- базовый интерфейс PDAStoreBoundUserInterface
- интерфейс магазинаRingerBoundUserInterface
- интерфейс звонкаInstrumentBoundUserInterface
- интерфейс инструментаHealthAnalyzerBoundUserInterface
- интерфейс анализатора здоровьяChameleonBoundUserInterface
- специальный интерфейс для функционала хамелеонаВсе интерфейсы соответствуют базовому PDA с добавлением специфичного интерфейса для возможностей хамелеона.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка всех UI интерфейсов, используемых в ChameleonPDA # Поиск определений интерфейсов rg "type: \w+BoundUserInterface" -A 2Length of output: 65975
Script:
#!/bin/bash # Search for PDA-related UI interfaces in the codebase rg "type: \w+BoundUserInterface" -g "pda.yml" -A 2Length of output: 1990
Resources/Prototypes/Entities/Structures/Walls/walls.yml (1)
703-724
: Реализована система разрушения ржавых стен!Добавлены корректные пороги урона для ржавых стен:
- WallReinforcedRust: 500/350 урона
- WallSolidRust: 300/150 урона
Значения меньше, чем у обычных стен, что логично отражает их ослабленное состояние.
Also applies to: 1132-1153
Resources/Maps/Shuttles/cargo_elkridge.yml (1)
191-244
: Проверьте настройку атмосферной системы шаттла!Конфигурация атмосферы включает:
- Правильные значения температуры (293.15K)
- Корректные пропорции газов
- Настройку объема (2500 единиц)
Рекомендуется проверить совместимость с существующими системами жизнеобеспечения.
Выполните проверку конфигурации:
✅ Verification successful
Атмосферная система шаттла настроена корректно!
Проверка показала, что:
- Температура 293.15K является стандартной для всех шаттлов в игре
- Конфигурация GridAtmosphere присутствует и соответствует общему шаблону
- Объем в 2500 единиц и пропорции газов (21.8/82.1) соответствуют нормальной атмосфере
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка конфигурации атмосферной системы # Поиск похожих конфигураций в других шаттлах rg "temperature: 293.15" "Resources/Maps/Shuttles/" # Проверка компонентов атмосферной системы rg "type: GridAtmosphere" -A 10 "Resources/Maps/Shuttles/"Length of output: 55465
Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml (1)
1076-1084
: Улучшение культурной чувствительности в названии напиткаПереименование с "IrishCarBomb" на "IrishSlammer" является положительным изменением, которое делает игру более инклюзивной и уважительной.
Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml (1)
1118-1129
: Корректное обновление сущности напиткаИзменения в сущности напитка соответствуют переименованию реагента, обеспечивая согласованность в кодовой базе.
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (1)
2609-2609
: Корректное создание агрессивного варианта паукаПравильное использование композиции сущностей для создания агрессивного варианта гигантского паука путем наследования от MobSpiderAngryBase и MobGiantSpider.
Resources/Changelog/Changelog.yml (1)
Line range hint
1-3925
: Файл соответствует стандартам!Файл журнала изменений правильно структурирован и содержит все необходимые элементы:
- Записи следуют правильному YAML формату
- Каждая запись содержит автора, описание изменений, ID, временную метку и URL
- Изменения правильно категоризированы (Add, Fix, Tweak, Remove)
- Временные метки следуют хронологическому порядку
Resources/Changelog/ChangelogSyndie.yml (1)
4550-4585
: Изменения корректно задокументированы!Новые записи в журнале изменений следуют установленному формату и содержат четкие описания внесенных изменений.
var hologramUid = Spawn(entity.Comp.HologramProtoId, Transform(entity).Coordinates); | ||
|
||
// Safeguard - spawned holograms must have this component | ||
if (!TryComp<HolopadHologramComponent>(uid, out var component)) | ||
if (!TryComp<HolopadHologramComponent>(hologramUid, out var holopadHologram)) | ||
{ | ||
Del(uid); | ||
Del(hologramUid); | ||
return; | ||
} | ||
|
||
entity.Comp.Hologram = new Entity<HolopadHologramComponent>(uid, component); | ||
entity.Comp.Hologram = new Entity<HolopadHologramComponent>(hologramUid, holopadHologram); | ||
|
||
// Relay speech preferentially through the hologram | ||
if (TryComp<SpeechComponent>(hologramUid, out var hologramSpeech) && | ||
TryComp<TelephoneComponent>(entity, out var entityTelephone)) | ||
{ | ||
_telephoneSystem.SetSpeakerForTelephone((entity, entityTelephone), (hologramUid, hologramSpeech)); | ||
} |
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.
🛠️ Refactor suggestion
Генерация голограммы с возможностью озвучивания.
- Проверяется наличие
HolopadHologramComponent
, при отсутствии — удаляется сущность. - Корректная логика передачи
SpeechComponent
телефону, чтобы включить TTS через голограмму. - Убедитесь, что при удалении/повторном создании голограммы не возникают «забытые» компоненты или гонки при множественных запросах.
{ | ||
// Check if the associated holopad user is an AI | ||
if (TryComp<StationAiHeldComponent>(entity.Comp.User, out var stationAiHeld) && | ||
_stationAiSystem.TryGetStationAiCore((entity.Comp.User.Value, stationAiHeld), out var stationAiCore)) | ||
{ | ||
// Return the AI eye to free roaming | ||
_stationAiSystem.SwitchRemoteEntityMode(stationAiCore.Value, true); | ||
|
||
if (TryComp<StationAiCoreComponent>(entity, out var stationAiCore)) | ||
_stationAiSystem.SwitchRemoteEntityMode((entity.Owner, stationAiCore), true); | ||
// If the AI core is still broadcasting, end its calls | ||
if (entity.Owner != stationAiCore.Value.Owner && | ||
TryComp<TelephoneComponent>(stationAiCore, out var stationAiCoreTelephone) && | ||
_telephoneSystem.IsTelephoneEngaged((stationAiCore.Value.Owner, stationAiCoreTelephone))) | ||
{ | ||
_telephoneSystem.EndTelephoneCalls((stationAiCore.Value.Owner, stationAiCoreTelephone)); | ||
} | ||
} | ||
|
||
UnlinkHolopadFromUser(entity, entity.Comp.User.Value); | ||
} |
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.
Логика ShutDownHolopad и освобождения ИИ.
- При завершении звонка ИИ переводится в режим «свободного перемещения», и при необходимости завершает все вызовы.
- Вызывается
UnlinkHolopadFromUser
, чтобы не оставлять «зависших» ссылок. - Убедитесь, что при ручном отключении голограммы (или при потере питания) аналогично вызывается эта логика, чтобы избежать зацикливаний.
- proto: CaptainIDCard | ||
entities: | ||
- uid: 60213 | ||
components: | ||
- type: Transform | ||
pos: 238.36444,73.83216 | ||
parent: 943 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Обнаружены проблемы с размещением CaptainIDCard
Анализ показал следующие проблемы:
- Родительский объект с ID 943 существует, но является объектом с компонентами MetaData, Transform и Map, что может быть неподходящим родителем для карты капитана
- Координаты (238.36444, 73.83216) кажутся слишком удаленными от других объектов на карте, учитывая что другие найденные координаты находятся в диапазоне около (-57, -33)
- CaptainIDCard привязан к родительскому ID 60, а не к указанному 943
Рекомендации:
- Пересмотреть координаты размещения карты капитана, приблизив их к основной игровой зоне
- Проверить и исправить привязку к родительскому объекту
- Убедиться, что карта капитана достижима для игроков
🔗 Analysis chain
Проверьте размещение CaptainIDCard
Убедитесь, что:
- Карта капитана размещена в безопасном и доступном месте
- Координаты (238.36444, 73.83216) находятся в пределах игровой зоны
- Parent ID 943 существует и является подходящим родительским объектом
Let me gather more information about the map boundaries and the CaptainIDCard placement.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка существования родительского объекта
rg "uid: 943" Resources/Maps/bagel.yml -A 5
Length of output: 1160
Script:
#!/bin/bash
# Поиск информации о CaptainIDCard и координатах
rg "CaptainIDCard" Resources/Maps/bagel.yml -B 2 -A 5
# Поиск информации о границах карты
rg "mapBounds|bounds:" Resources/Maps/bagel.yml -A 2
Length of output: 274
4924: 3,-23 | ||
4925: 4,-23 | ||
4926: 5,-23 | ||
4927: 6,-23 | ||
4928: 6,-22 | ||
4929: 6,-21 | ||
4930: 6,-20 | ||
4943: 13,-23 | ||
4944: 14,-23 | ||
4946: 15,-23 | ||
4947: 7,-20 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Обнаружены перекрывающиеся координаты в карте
На основе анализа координат в файле bagel.yml
обнаружены следующие проблемы:
- Множественные сущности с одинаковыми координатами, что может привести к наложению объектов
- Особенно частые пересечения в следующих областях:
- Координаты (-0.5, -1.5) используются 8 раз
- Координаты (-2.5, -4.5) используются 8 раз
- Координаты (-2.5, -2.5) используются 7 раз
- Координаты (-3.5, -4.5) используются 7 раз
Рекомендации:
- Проверьте все сущности с совпадающими координатами на предмет корректного отображения
- Убедитесь, что наложение объектов является намеренным
- При необходимости скорректируйте позиции для предотвращения визуальных артефактов
🔗 Analysis chain
Проверьте корректность новых координат
Массовое обновление координат может привести к визуальным артефактам или наложениям объектов. Рекомендуется:
- Провести визуальную проверку карты после изменений
- Убедиться, что удаление слоев QuarterTileOverlay не создало визуальных дефектов
Also applies to: 4475-4477, 4583-4594, 4859-4865, 5149-5168
Let me analyze the coordinate data to verify if there are any overlapping positions that could cause visual artifacts.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка наличия перекрывающихся координат
rg -A 1 "pos:" Resources/Maps/bagel.yml | grep -E '([0-9.-]+),([0-9.-]+)' | sort | uniq -d
Length of output: 65627
Script:
#!/bin/bash
# Check for positions that appear multiple times in the same entity type
rg -B 2 "pos:" Resources/Maps/bagel.yml | grep -B 2 -E '([0-9.-]+),([0-9.-]+)' | grep "type:" | sort | uniq -d
# Get context around positions to see entity types
rg -B 2 -A 1 "pos:" Resources/Maps/bagel.yml | grep -E "(type:|pos:)"
Length of output: 65767
Script:
#!/bin/bash
# Check for positions that appear multiple times in the same entity type
rg -B 2 "pos:" Resources/Maps/bagel.yml | grep -B 2 -E '([0-9.-]+),([0-9.-]+)' | grep -A 2 "type:" | sort | uniq -c | grep -v "^[[:space:]]*1[[:space:]]"
# Get unique positions with their counts
rg "pos:" Resources/Maps/bagel.yml | grep -oE '([0-9.-]+),([0-9.-]+)' | sort | uniq -c | grep -v "^[[:space:]]*1[[:space:]]"
Length of output: 65874
@@ -2,8 +2,7 @@ | |||
id: Bagel | |||
mapName: 'Bagel Station' | |||
mapPath: /Maps/bagel.yml | |||
minPlayers: 20 # Corvax-Mapping | |||
maxPlayers: 50 # Corvax-Mapping | |||
minPlayers: 55 # Corvax-Mapping |
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.
Критическое значение минимального количества игроков
Установка minPlayers в 55 кажется ошибкой, так как это равно максимальному значению на других картах. Это может привести к тому, что карта никогда не будет доступна для игры.
Рекомендуется исправить значение:
- minPlayers: 55 # Corvax-Mapping
+ minPlayers: 25 # Corvax-Mapping
📝 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.
minPlayers: 55 # Corvax-Mapping | |
minPlayers: 25 # Corvax-Mapping |
@@ -59,7 +59,7 @@ | |||
- DrinkIcedBeerGlass | |||
- DrinkIceCreamGlass | |||
- IrishBoolGlass | |||
- DrinkIrishCarBomb | |||
- DrinkIrishSlammer |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Обнаружены несогласованные изменения в переименовании напитка
Найдены файлы, где все еще используется старое название DrinkIrishCarBomb:
Resources/Maps/Backmen/backmen_tortuga.yml
: содержит старый прототипDrinkIrishCarBomb
Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/consumable/drinks/drinks.ftl
: содержит старую локализациюResources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/consumable/drinks/drinks.ftl
: содержит старую локализацию
Необходимо обновить название во всех найденных файлах для соответствия новому названию DrinkIrishSlammer
.
🔗 Analysis chain
Проверить последовательность переименования напитка
Замена DrinkIrishCarBomb на DrinkIrishSlammer должна быть отражена во всех связанных файлах, включая локализацию и описания.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск всех упоминаний старого и нового названия
rg "IrishCarBomb|IrishSlammer" --type-add 'loc:*.ftl' -t yml -t loc
Length of output: 97
Script:
#!/bin/bash
# Поиск всех упоминаний старого и нового названия в yml файлах
rg "IrishCarBomb|IrishSlammer" --type yaml
# Поиск в ftl файлах (локализация)
rg "IrishCarBomb|IrishSlammer" -g "*.ftl"
# Поиск файлов с возможными упоминаниями
fd -e yml -e yaml -e ftl | xargs grep -l -i "irish.*bomb\|irish.*slammer" || true
Length of output: 1358
@@ -424,6 +426,7 @@ | |||
interfaces: | |||
enum.SiliconLawsUiKey.Key: | |||
type: SiliconLawBoundUserInterface | |||
requireInputValidation: false |
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.
Отключена валидация ввода для ИИ
Отключение валидации ввода может создать риски безопасности. Рекомендуется:
- Документировать причину отключения валидации
- Убедиться, что это не создаст уязвимостей
id: irishslammer | ||
flavorType: Complex | ||
description: flavor-complex-irish-car-bomb | ||
description: flavor-complex-irish-slammer |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Требуется обновление локализации!
В файлах локализации всё ещё присутствуют старые ключи и значения:
Resources/Locale/ru-RU/reagents/meta/consumable/drink/alcohol.ftl
: строкиreagent-name-irish-car-bomb
иreagent-desc-irish-car-bomb
Resources/Locale/ru-RU/flavors/flavor-profiles.ftl
: строкаflavor-complex-irish-car-bomb
Необходимо обновить эти строки в соответствии с новым названием irishslammer
.
🔗 Analysis chain
Корректное переименование!
Переименование с irishcarbomb
на irishslammer
- это правильное решение с точки зрения этичности. Изменение сохраняет всю функциональность.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка согласованности переименования во всех файлах
echo "Поиск оставшихся упоминаний старого названия..."
rg "irishcarbomb|irish-car-bomb"
Length of output: 503
Script:
#!/bin/bash
# Поиск файлов с локализацией для проверки обновления строк
fd "alcohol.ftl|flavor-profiles.ftl" Resources/Locale/
Length of output: 626
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 (1)
Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml (1)
975-977
: Корректное определение компонента BodyPart для XenoArm.Добавление компонента BodyPart с типом Hand и симметрией None позволяет корректно функционировать конечностям ксеноморфа. Это решает проблему с работой рук, упомянутую в целях PR.
Предложение: Рассмотрите возможность добавления комментария в код, объясняющего почему используется symmetry: None, чтобы упростить поддержку кода в будущем.
- type: BodyPart partType: Hand - symmetry: None + symmetry: None # Allows the arm to be used for either side
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🔭 Outside diff range comments (2)
Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/intern.yml (1)
Подтверждено: вооружение интерна требует корректировки
Анализ показал, что:
- Снайперская винтовка
WeaponSniperMosinNew
доступна только в варианте экипировки интернаCentComInternGearArmed
- Боевой нож
CombatKnifeSpetsnaz
используется более высокими рангами ЦентКома (офицер, глава службы безопасности, блюшилд)- Базовый вариант экипировки интерна
CentComInternGear
не содержит тяжелого вооруженияРекомендации:
- Удалить снайперскую винтовку из стартового снаряжения интерна
- Заменить боевой нож на более подходящее по рангу снаряжение
- Рассмотреть возможность выдачи легкого оружия самообороны вместо тяжелого вооружения
🔗 Analysis chain
Line range hint
52-63
: Проверьте баланс вооруженного варианта экипировкиВариант
CentComInternGearArmed
включает в себя снайперскую винтовку и боевой нож, что может быть избыточным для роли интерна. Рекомендуется пересмотреть набор вооружения для сохранения игрового баланса.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск других ролей с подобным вооружением rg "WeaponSniperMosinNew|CombatKnifeSpetsnaz" Resources/Prototypes/_Backmen/Roles/Jobs/Length of output: 563
Script:
#!/bin/bash # Поиск всех вариантов стартового снаряжения для интерна rg -A 5 "id: CentComIntern" Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/intern.yml # Проверка наличия снайперской винтовки у других ролей rg -A 3 "WeaponSniperMosinNew" Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/Length of output: 951
Resources/Prototypes/_Backmen/Entities/Objects/Devices/pda.yml (1)
Line range hint
1-165
: Необходима локализация описанийВ файле присутствует смешение языков в описаниях:
- DeliveryPDA на русском
- Остальные на английском
Предлагаю:
- Перенести все описания в файлы локализации
- Использовать ключи локализации в YAML файле
Пример:
- description: An unusual variation of the PDA that draws energy from redspace crystals inside. + description: pda-orden-description
🧹 Nitpick comments (8)
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (1)
2621-2630
: Рекомендуется улучшить анимацию клоуна-паукаТекущая конфигурация использует одинаковое состояние "clown" как для статичного спрайта, так и для анимации движения. Рекомендуется создать отдельное состояние для анимации движения (например, "clown-moving") для более плавной анимации.
- type: SpriteMovement movementLayers: movement: - state: clown + state: clown-moving noMovementLayers: movement: state: clownResources/Prototypes/_Backmen/Body/Parts/spider.yml (1)
Line range hint
20-26
: Рассмотрите добавление описания для компонентовДля улучшения поддержки кода рекомендуется добавить описания к компонентам, объясняющие их роль в контексте паучьих частей тела.
Предлагаю добавить комментарии к компонентам:
components: - type: Sprite netsync: false + # Визуальное представление торса паука sprite: Backmen/Mobs/Species/Moth/parts.rsi state: "torso_m"
Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/operator.yml (1)
59-63
: Проверьте корректность инициализации внешнего вида PDA.
Добавление компонентаAppearance
с инициализациейpda-centcom
может потребовать обновлённой логики в клиентских системах отрисовки. Убедитесь, что все места, где ожидается использование старого состоянияpda-centcom
, теперь корректно учитывают новый механизм определения внешнего вида.Resources/Prototypes/_Backmen/Entities/Objects/Devices/pda.yml (1)
19-23
: Рассмотрите использование enum вместо строкТекущая реализация использует строковые литералы для
PdaType
, что может привести к ошибкам:enum.PdaVisuals.PdaType: !type:String pda-ordenРекомендую:
- Определить enum для типов PDA
- Использовать его значения вместо строковых литералов
- Добавить валидацию значений на уровне системы
Это обеспечит типобезопасность и упростит рефакторинг в будущем.
Also applies to: 56-60, 82-86, 110-114, 145-149
Content.Server/Telephone/TelephoneSystem.cs (4)
113-119
: Улучшите обработку имени говорящегоЛогика определения говорящего через
speaker
может быть упрощена с использованием null-conditional оператора.- var speaker = entity.Comp.Speaker != null ? entity.Comp.Speaker.Value.Owner : entity.Owner; + var speaker = entity.Comp.Speaker?.Owner ?? entity.Owner;
241-248
: Проверьте обработку меток устройствДобавлена поддержка меток устройств для идентификации звонящего. Рекомендуется добавить проверку на null для
CurrentLabel
.- if (TryComp<LabelComponent>(source, out var label)) - deviceName = label.CurrentLabel; + if (TryComp<LabelComponent>(source, out var label) && !string.IsNullOrEmpty(label.CurrentLabel)) + deviceName = label.CurrentLabel;
437-441
: Проверьте метод установки говорящегоНовый метод
SetSpeakerForTelephone
корректно реализован, но рекомендуется добавить документацию XML.+ /// <summary> + /// Устанавливает сущность-говорящего для телефона. + /// </summary> + /// <param name="entity">Сущность телефона с компонентом TelephoneComponent.</param> + /// <param name="speaker">Сущность-говорящий с компонентом SpeechComponent или null для сброса.</param> public void SetSpeakerForTelephone(Entity<TelephoneComponent> entity, Entity<SpeechComponent>? speaker)
348-350
: Проверьте сигнатуру метода SendTelephoneMessageПараметры метода правильно организованы, но комментарий
// backmen: language
следует заменить на документацию XML.- private void SendTelephoneMessage(EntityUid messageSource, string message, Entity<TelephoneComponent> source, bool escapeMarkup = true, - LanguagePrototype? language = null // backmen: language - ) + /// <summary> + /// Отправляет сообщение через телефонную систему. + /// </summary> + /// <param name="language">Прототип языка для сообщения.</param> + private void SendTelephoneMessage( + EntityUid messageSource, + string message, + Entity<TelephoneComponent> source, + bool escapeMarkup = true, + LanguagePrototype? language = null)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (19)
Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs
(1 hunks)Content.Server/Telephone/TelephoneSystem.cs
(8 hunks)Content.Shared/Telephone/TelephoneComponent.cs
(5 hunks)Resources/ConfigPresets/Backmen/main.toml
(2 hunks)Resources/Prototypes/Corvax/Entities/Objects/Devices/pda.yml
(2 hunks)Resources/Prototypes/Corvax/Maps/Pools/default.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
(3 hunks)Resources/Prototypes/_Backmen/Body/Parts/spider.yml
(3 hunks)Resources/Prototypes/_Backmen/Body/Prototypes/arachne.yml
(1 hunks)Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml
(1 hunks)Resources/Prototypes/_Backmen/Entities/Objects/Devices/pda.yml
(5 hunks)Resources/Prototypes/_Backmen/Maps/Pool/backmenstandart.yml
(2 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/cargotech.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_admiral.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_official.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/head_of_security.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/intern.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/operator.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/private_officer.yml
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (5)
- Resources/ConfigPresets/Backmen/main.toml
- Content.Shared/Telephone/TelephoneComponent.cs
- Resources/Prototypes/Corvax/Maps/Pools/default.yml
- Resources/Prototypes/Corvax/Entities/Objects/Devices/pda.yml
- Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml
🔇 Additional comments (22)
Resources/Prototypes/_Backmen/Maps/Pool/backmenstandart.yml (2)
24-24
: Требуется документация для новой карты AmberДобавление карты Amber и отключение карты Train требует дополнительного контекста:
- Необходимо убедиться, что карта Amber полностью протестирована
- Желательно добавить комментарий с причиной отключения карты Train
Хотите, чтобы я создал issue для документирования новой карты Amber и причин изменений в пуле карт?
4-9
: Проверьте влияние отключения карт на баланс игрыОтключение карт BackmenAspid и BackmenRook может существенно повлиять на разнообразие игрового процесса. Убедитесь, что:
- Оставшиеся карты обеспечивают достаточное разнообразие для игроков
- Отключение этих карт не создаст проблем с балансом количества игроков на сервере
✅ Verification successful
Отключение карт не повлияет на баланс игрового процесса
После анализа можно сделать следующие выводы:
- В пуле остаётся 20 активных карт, что обеспечивает достаточное разнообразие
- BackmenAspid (20-60 игроков) и BackmenRook (0-25 игроков) рассчитаны на разное количество игроков, и их отключение компенсируется оставшимися картами в пуле
- Структура рабочих мест и должностей на отключаемых картах стандартная, что позволяет игрокам легко найти альтернативу на других картах
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка использования отключенных карт в других конфигурациях rg "BackmenAspid|BackmenRook" Resources/Prototypes/Length of output: 350
Script:
#!/bin/bash # Проверка общего количества активных карт в пуле cat Resources/Prototypes/_Backmen/Maps/Pool/backmenstandart.yml | grep -v '#' | grep -c '-'Length of output: 94
Script:
#!/bin/bash # Проверка содержимого файлов карт для понимания их типов cat Resources/Prototypes/_Backmen/Maps/backmen_aspid.yml Resources/Prototypes/_Backmen/Maps/backmen_rook.ymlLength of output: 4627
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (2)
2440-2449
: Корректная настройка базовой анимации паука!Конфигурация спрайтов и анимации движения реализована правильно, следуя общему паттерну, используемому для других мобов в игре.
2609-2609
: Правильная настройка наследования для агрессивного паука!Добавление MobGiantSpider в список родителей обеспечивает корректное наследование всех свойств базового гигантского паука.
Resources/Prototypes/_Backmen/Body/Parts/spider.yml (3)
18-18
: Множественное наследование добавлено корректноДобавление базовых компонентов тела (
BaseTorso
,BaseRightLeg
,BaseLeftLeg
) в качестве дополнительных родителей - это правильное решение. Это позволит использовать общую функциональность базовых частей тела, сохраняя при этом специфичное поведение паучьих конечностей.Also applies to: 32-32, 51-51
Line range hint
22-23
: Необходимо заменить временные спрайтыВ компонентах
Sprite
используются временные спрайты (placeholder sprite
).Давайте проверим наличие соответствующих финальных ресурсов:
Also applies to: 37-38, 56-57
Line range hint
43-45
: Требуется уточнение механики движенияВ комментариях есть вопрос о различиях между ArachneClassic и обычными пауками. Необходимо принять решение о том, должны ли быть разные параметры движения для разных типов пауков.
Давайте проверим использование текущих параметров скорости:
Also applies to: 62-64
Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs (2)
14-46
: Убедитесь, что тест корректно обрабатывает все прототипы.
Проверка количества ног кажется правильной, однако необходимо уточнить, что все новые или изменённые прототипы в будущем будут корректно проходить проверку. Не забудьте поддерживать актуальный список прототипов, если в игру добавятся новые виды или будут внесены изменения в существующие.
47-79
: Обратите внимание на возможную зависимость от других систем.
Тест корректно проверяет, что у видов есть хотя бы две руки. При этом стоит убедиться, что корректность теста не зависит от других модулей (например, от системы инвентаря или предметов), которые могут влиять на поведение рук. Если такие зависимости есть, рекомендуем протестировать их отдельно.Resources/Prototypes/_Backmen/Body/Prototypes/arachne.yml (1)
22-23
: Уточните, не повлияет ли смена наименований на существующие зависимости.
Изменения строк с подчеркиваний на пробелы (например,right_arm
наright arm
) могут привести к несовместимости с уже имеющимися связями или логикой. Проверьте все места, где обозначения частей тела используются в коде, чтобы избежать несоответствия.Also applies to: 25-25, 28-29, 32-33, 35-35
Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_admiral.yml (1)
61-65
: Перепроверьте согласованность новых настроек PDA с другими ролями.
Добавление или изменение компонентаAppearance
должно быть синхронизировано для всех аналогичных PDA во избежание рассинхронизации визуализации. Подтвердите, что для всех ролей CentCom и связанных ими сущностей задан одинаковый подход к настройке внешнего вида PDA.Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/cargotech.yml (1)
64-68
: Обновление системы отображения PDAПереход на новую систему отображения через компонент
Appearance
соответствует общему паттерну обновления PDA в этом PR. Изменение улучшает согласованность с другими PDA устройствами ЦК.Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_official.yml (2)
76-80
: Стандартизация отображения PDA ЦКДобавление компонента
Appearance
соответствует общему обновлению системы визуализации PDA.
Line range hint
1-75
: Проверьте необходимость доступа AllAccessРоль имеет группу доступа
AllAccess
, что предоставляет максимальные привилегии. Убедитесь, что это соответствует игровому балансу и требованиям безопасности.✅ Verification successful
Группа доступа AllAccess обоснована для данной роли
Анализ показывает, что группа доступа
AllAccess
является стандартной для высокопоставленных ролей ЦентКома:
- Все офицеры ЦентКома высокого ранга (Admiral, Official, Head of Security, Operator) имеют
AllAccess
- Роль требует высокого игрового стажа и является привилегированной
- Роль имеет дополнительные ограничения:
- Требуется верификация через Discord
- Требуется whitelist
- Требуется уведомление администрации
- Имеет иммунитет к антагонистам
- Имеет специальные компоненты (Psionic, DispelPower)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск других ролей с AllAccess для сравнения rg "groups.*AllAccess" Resources/Prototypes/_Backmen/Roles/Jobs/Length of output: 66
Script:
#!/bin/bash # Поиск всех упоминаний AllAccess в прототипах rg "AllAccess" Resources/Prototypes/ # Поиск других ролей высокого уровня для сравнения их прав доступа rg -A 5 "CentralCommand" Resources/Prototypes/_Backmen/Roles/Jobs/Length of output: 23006
Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/intern.yml (2)
81-85
: Унификация системы отображения PDAОбновление визуализации PDA через компонент
Appearance
соответствует общему паттерну изменений.
Line range hint
14-24
: Проверьте обоснованность временных требованийТребования по времени для отделов (108000 единиц) кажутся высокими. Убедитесь, что эти значения соответствуют общей прогрессии игроков.
✅ Verification successful
Временные требования для роли интерна ЦентКома соответствуют общей системе прогрессии
На основе анализа временных требований в других ролях:
- Требование в 108000 единиц (30 часов) для отделов соответствует другим высокоуровневым ролям ЦентКома:
- Офицер безопасности ЦентКома требует 108000 единиц в отделе безопасности
- Грузчик ЦентКома требует 126000 единиц в отделе снабжения
Такие высокие требования обоснованы, так как:
- Роль интерна является начальной позицией для карьеры в ЦентКоме
- Требуется опыт работы в нескольких ключевых отделах (инженерный, медицинский, гражданский)
- Другие роли ЦентКома имеют схожие или даже более высокие требования
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Анализ требований времени в других ролях rg "department.*time: \d+" Resources/Prototypes/_Backmen/Roles/Jobs/Length of output: 70
Script:
#!/bin/bash # Поиск всех файлов с требованиями времени, используя более гибкий паттерн rg -i "time: \d+" Resources/Prototypes/_Backmen/Roles/Jobs/ -A 1 -B 1 # Поиск всех YAML файлов в директории ролей для анализа структуры fd -e yml -e yaml . Resources/Prototypes/_Backmen/Roles/Jobs/ --exec head -n 50 {}Length of output: 26179
Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/private_officer.yml (1)
82-86
: Добавление компонента Appearance улучшает структуру кодаДобавление компонента
Appearance
с инициализациейpda-centcomsec
- это правильный подход к стандартизации визуального представления PDA. Это изменение соответствует общей реструктуризации системы PDA в кодовой базе.Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/head_of_security.yml (2)
89-93
: Унификация визуального представления PDAДобавление компонента
Appearance
согласуется с изменениями в других файлах и улучшает организацию кода.
Line range hint
134-144
: Критическая ошибка: ID карта ссылается на удалённую рольВ компоненте
PresetIdCard
используется несуществующая рольBKCCSecGavna
, которая была удалена. Это может привести к ошибкам во время выполнения.Необходимо обновить ссылку на действующую роль. Предлагаемые изменения:
- type: PresetIdCard - job: BKCCSecGavna + # TODO: Укажите актуальную роль, которая заменяет BKCCSecGavnaContent.Server/Telephone/TelephoneSystem.cs (3)
9-9
: Проверьте порядок импортовНовые импорты добавляют поддержку TTS, меток и языковых функций. Убедитесь, что все импортированные типы используются в коде.
Also applies to: 11-11, 14-15, 27-27
✅ Verification successful
Based on the search results, I can now provide the final response:
Импорты используются корректно
Все импортированные типы активно используются в коде:
Content.Shared.Corvax.TTS
используется для поддержки TTS в телефонной системеContent.Shared.Labels.Components
используется для работы с метками устройствContent.Shared.Backmen.Language
используется для поддержки языков в сообщениях🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Check if all imported types are used rg -l "using Content.Shared.(Corvax.TTS|Labels.Components|Backmen.Language)" | xargs rg "TTS|Label|Language"Length of output: 65680
122-133
: Проверьте обработку TTS компонентовРеализация TTS выглядит корректной, но требуется проверка на возможные состояния гонки при удалении/добавлении компонентов.
✅ Verification successful
Let me gather more information about the TTS component handling patterns.
Let me check one more pattern to see if there are any concurrent operations or event handlers that might affect the TTS component.
Состояние гонки при работе с TTS не обнаружено
На основе анализа кода можно сделать вывод, что реализация безопасна по следующим причинам:
- Операции с TTS компонентом выполняются последовательно в рамках одного метода
TTSComponent
является простым компонентом данных без внутренней логики- Операции добавления/удаления компонента атомарны и выполняются через стандартные методы ECS (
EnsureComp
/RemComp
)- Нет параллельных обработчиков событий, которые могли бы одновременно модифицировать TTS компонент телефона
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Find similar patterns of TTS component handling ast-grep --pattern 'EnsureComp<TTSComponent>($$$)'Length of output: 589
Script:
#!/bin/bash # Check for RemComp patterns with TTS ast-grep --pattern 'RemComp<TTSComponent>($$$)' # Check the TTSComponent definition rg -A 10 "class TTSComponent"Length of output: 820
Script:
#!/bin/bash # Check for any event subscriptions or system updates related to TTS rg -B 2 -A 2 "TTSComponent" Content.Server/Telephone/TelephoneSystem.csLength of output: 559
97-97
: Проверьте обработку языковых параметровДобавлен параметр языка в метод
SendTelephoneMessage
. Убедитесь, что значениеargs.Language
корректно передается из всех точек вызова.✅ Verification successful
Параметр языка корректно обрабатывается
Проверка показала, что:
- Параметр
language
добавлен в сигнатуру методаSendTelephoneMessage
как опциональный параметр с значением по умолчаниюnull
- Вызов метода корректно передает значение
args.Language
через именованный параметр- Это единственное место вызова данного метода в кодовой базе
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Find all calls to SendTelephoneMessage ast-grep --pattern 'SendTelephoneMessage($$$)'Length of output: 206
Script:
#!/bin/bash # Let's check the implementation of SendTelephoneMessage ast-grep --pattern 'SendTelephoneMessage($$$) { $$$ }' # Also check where args.Language comes from ast-grep --pattern 'class $_ { $$$ Language $$$ $$$ }'Length of output: 121
Script:
#!/bin/bash # Поиск определения метода SendTelephoneMessage с контекстом rg "SendTelephoneMessage" -A 10 # Поиск использования Language в контексте телефонных сообщений rg "Language.*[Tt]elephone" -A 5Length of output: 2058
- type: Appearance | ||
appearanceDataInit: | ||
enum.PdaVisuals.PdaType: | ||
!type:String | ||
pda-orden |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Обнаружено несоответствие регистра в состояниях PDA
Проверка показала несоответствие между именами состояний в файлах текстур и конфигурации:
- В
pda.rsi
состояния используют нижний регистр:pda-orden
- В конфигурации некоторые значения используют смешанный регистр:
pda-Delivery
,pda-Roboticist
Рекомендуемые исправления:
- pda-Delivery
+ pda-delivery
- pda-Roboticist
+ pda-roboticist
Это обеспечит согласованность с существующими соглашениями об именовании в кодовой базе, где все состояния PDA используют нижний регистр.
🔗 Analysis chain
Проверьте согласованность визуальных состояний
Компонент Appearance
добавлен ко всем PDA, что является частью рефакторинга системы визуализации. Однако есть несколько моментов, требующих внимания:
- Значения
PdaType
должны соответствовать состояниям спрайтов вIcon
компоненте - Некоторые значения используют разный регистр (например,
pda-Delivery
vspda-orden
)
Предлагаю унифицировать именование:
- pda-Delivery
+ pda-delivery
- pda-Roboticist
+ pda-roboticist
Also applies to: 56-60, 82-86, 110-114, 145-149
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка соответствия состояний спрайтов
rg -g "*.rsi/meta.json" "pda-(orden|Delivery|clear|Roboticist|blue)"
Length of output: 219
Script:
#!/bin/bash
# Let's try to find all RSI files first
fd -e rsi
# Then let's check for PDA-related sprite states in any JSON files
rg -g "*.json" -i "pda.*state"
# Also check for any PDA-related texture or sprite configurations
fd -t f "pda" -e json -e yml -e yaml
Length of output: 73558
Script:
#!/bin/bash
# Let's check for PDA-related textures and states
fd -e rsi "pda" -x rg -l "states" {}/meta.json
# Also check for any PDA visual states in the code
rg -g "*.cs" -i "PdaVisuals|PdaType"
# And check for any other PDA-related YAML configurations
rg -g "*.yml" -i "PdaVisuals|PdaType"
Length of output: 6994
Script:
#!/bin/bash
# Let's check the actual PDA sprite states in the RSI files
cat "./Resources/Textures/Objects/Devices/pda.rsi/meta.json"
cat "./Resources/Textures/Backmen/Objects/Devices/pda_modern.rsi/meta.json"
cat "./Resources/Textures/Backmen/Objects/Devices/pda.rsi/meta.json"
Length of output: 10394
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: 4
🔭 Outside diff range comments (3)
Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/head_of_security.yml (1)
Line range hint
116-143
: Критическая ошибка: ID карта ссылается на удалённую должностьID карта
IDCardCentComGavnaOfficerSesurity
всё ещё ссылается на удалённую должностьBKCCSecGavna
через компонентPresetIdCard
. Это приведёт к ошибкам во время выполнения.Необходимо либо:
- Восстановить определение должности
BKCCSecGavna
- Обновить или удалить ID карту
- type: PresetIdCard - job: BKCCSecGavna + # TODO: Обновить на новую должность или удалитьResources/Prototypes/_Backmen/Maps/Pool/backmenstandart.yml (1)
Обнаружены изменения в конфигурации карт без соответствующих файлов
На основе проведенного анализа:
- Карты Amber и CorvaxTushkan добавлены в пул карт, но их конфигурационные файлы не найдены в репозитории
- Карты BackmenAspid, BackmenRook и Train закомментированы, что подтверждается историей изменений
- SecurityTraining также была удалена из пула карт
Рекомендации:
- Необходимо добавить конфигурационные файлы для новых карт Amber и CorvaxTushkan
- Проверить, что все зависимости и ресурсы для новых карт присутствуют в репозитории
- Убедиться, что удаление карт не повлияет на существующие ротации и игровые режимы
🔗 Analysis chain
Line range hint
4-25
: Проверьте баланс карт в пулеИзменения в пуле карт могут повлиять на игровой баланс. Убедитесь, что:
- Новые карты (Amber и CorvaxTushkan) полностью протестированы
- Отключение карт BackmenAspid, BackmenRook и Train не создаст проблем с разнообразием геймплея
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка конфигурации новых карт echo "Проверка конфигурации карты Amber:" rg "type: gameMap.*id: Amber" -A 10 echo "Проверка конфигурации карты CorvaxTushkan:" rg "type: gameMap.*id: CorvaxTushkan" -A 10Length of output: 257
Script:
#!/bin/bash # Поиск файлов конфигурации карт echo "Поиск файлов конфигурации для Amber:" fd "Amber.*\.yml" --type f echo -e "\nПоиск файлов конфигурации для CorvaxTushkan:" fd "CorvaxTushkan.*\.yml" --type f echo -e "\nПроверка упоминаний карт в других конфигурационных файлах:" rg -l "Amber|CorvaxTushkan" "**/*.yml" echo -e "\nПроверка удаленных карт в истории изменений:" git diff HEAD~1 -- "**/*.yml" | grep -E "(\+|-).*(BackmenAspid|BackmenRook|Train)"Length of output: 780
Script:
#!/bin/bash # Поиск конфигурационных файлов карт в директории Resources echo "Поиск конфигураций карт в Resources:" fd -e yml . Resources/ echo -e "\nПроверка содержимого файлов новых карт:" fd -e yml . Resources/ -x grep -l "Amber\|CorvaxTushkan" {} \; -x cat {}Length of output: 82533
Resources/Prototypes/_Backmen/Maps/backmen_tortuga.yml (1)
Обнаружен дисбаланс между минимальным количеством игроков и критическими ролями
При минимальном количестве игроков 10 человек, суммарное количество критических ролей составляет 21:
- Капитан: 1
- Глава Персонала: 1
- Офицеры СБ: 6
- Медики: 7
- Инженеры: 6
Это создаёт невозможную ситуацию, где количество необходимых критических ролей (21) значительно превышает минимальное количество игроков (10). Рекомендуется:
- Увеличить минимальное количество игроков до 25-30
- Или уменьшить минимальные значения для критических ролей:
- Офицеры СБ: снизить с 6 до 2-3
- Медики: снизить с 7 до 2-3
- Инженеры: снизить с 6 до 2-3
🔗 Analysis chain
Line range hint
16-69
: Проверка баланса распределения ролейПри текущем списке должностей и новом минимальном количестве игроков (10) необходимо убедиться, что критически важные роли будут заполнены. Особое внимание следует обратить на:
- Командование (Капитан, ГП)
- Безопасность (СБ, Смотритель)
- Медицина (Врачи, Главврач)
- Инженерия (Инженеры, Шеф-инженер)
Предлагаю проверить распределение ролей при минимальном количестве игроков следующим скриптом:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Анализ критических ролей и их минимальных значений # Поиск всех файлов конфигурации карт fd -e yml -e yaml | xargs rg "minPlayers:|type: StationJobs" -A 5Length of output: 12227
Script:
#!/bin/bash # Подсчитаем минимальное количество критических ролей для карты Tortuga echo "=== Анализ критических ролей на карте Tortuga ===" cat Resources/Prototypes/_Backmen/Maps/backmen_tortuga.yml | awk ' BEGIN { print "Критические роли (мин. значения):" total = 0 } /Captain:/ { match($0, /\[ *([0-9]+)/, arr) captain = arr[1] total += captain print "Капитан:", captain } /HeadOfPersonnel:/ { match($0, /\[ *([0-9]+)/, arr) hop = arr[1] total += hop print "ГП:", hop } /SecurityOfficer:/ { match($0, /\[ *([0-9]+)/, arr) sec = arr[1] total += sec print "Офицеры СБ:", sec } /MedicalDoctor:/ { match($0, /\[ *([0-9]+)/, arr) med = arr[1] total += med print "Медики:", med } /StationEngineer:/ { match($0, /\[ *([0-9]+)/, arr) eng = arr[1] total += eng print "Инженеры:", eng } END { print "\nМинимальное общее количество критических ролей:", total }' echo -e "\nМинимальное количество игроков для запуска карты:" rg "minPlayers:" Resources/Prototypes/_Backmen/Maps/backmen_tortuga.ymlLength of output: 1261
🧹 Nitpick comments (7)
Resources/Prototypes/_Backmen/Entities/Objects/Devices/pda.yml (2)
Line range hint
39-40
: Несогласованность языка в описанияхВ файле присутствует смешение русского и английского языков в описаниях:
name: КПК доставщика
(русский)name: prisoner PDA
(английский)Рекомендуется использовать один язык во всех описаниях для поддержания согласованности.
Предлагаю перевести все описания на русский язык, так как локализация, похоже, ориентирована на русскоязычных пользователей:
- name: prisoner PDA - description: Clear, so you can make sure there's nothing being smuggled inside. + name: КПК заключённого + description: Прозрачный, чтобы было видно, что внутри ничего не спрятано.Also applies to: 82-83
Line range hint
141-142
: Исправить опечатку в слове "Standard"В описании BlueShieldPDA присутствует опечатка:
- description: Standart PDA of Blue Shield officers. + description: Standard PDA of Blue Shield officers.Resources/Prototypes/_Backmen/Body/Parts/spider.yml (1)
51-51
: Согласованность изменений с правой ногойИзменения наследования для левой ноги корректно отражают структуру правой ноги.
Общие рекомендации по улучшению
Предлагаю следующие улучшения для всего файла:
- Создать отдельные спрайты для паука вместо использования заглушек
- Решить вопрос о разделении частей тела для ArachneClassic и обычных пауков
- Документировать выбранные значения скорости движения
Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs (1)
14-46
: Предлагаю улучшить структуру тестаРекомендуемые улучшения:
- Вынести дублирующийся код инициализации сервера в отдельный метод
- Определить константу для минимального количества конечностей
- Улучшить сообщение об ошибке, добавив более подробное описание проблемы
Пример рефакторинга:
+ private const int MinimumLimbCount = 2; + private async Task<(IServerIntegrationInstance server, EntityUid dummy)> SetupTestEnvironment( + SpeciesPrototype speciesPrototype) + { + var pair = await PoolManager.GetServerClient(new PoolSettings + { + Dirty = true, + Connected = true, + InLobby = false, + }); + + var server = pair.Server; + EntityUid dummy = EntityUid.Invalid; + await server.WaitAssertion(() => + { + dummy = server.EntMan.Spawn(speciesPrototype.Prototype); + }); + await server.WaitIdleAsync(); + await server.WaitRunTicks(2); + + return (server, dummy); + } [Test] public async Task AllSpeciesHaveLegs() { - await using var pair = await PoolManager.GetServerClient(new PoolSettings - { - Dirty = true, - Connected = true, - InLobby = false, - }); - var server = pair.Server; var bodySys = server.EntMan.System<BodySystem>(); foreach (var speciesPrototype in server.ProtoMan.EnumeratePrototypes<SpeciesPrototype>()) { - var dummy = EntityUid.Invalid; - await server.WaitAssertion(() => - { - dummy = server.EntMan.Spawn(speciesPrototype.Prototype); - }); - await server.WaitIdleAsync(); - await server.WaitRunTicks(2); + var (server, dummy) = await SetupTestEnvironment(speciesPrototype); await server.WaitAssertion(() => { Assert.That(dummy, Is.Not.EqualTo(EntityUid.Invalid)); var legCount = bodySys.GetBodyPartCount(dummy, BodyPartType.Leg); - Assert.That(legCount, Is.GreaterThanOrEqualTo(2), - $"legs {speciesPrototype.ID}({speciesPrototype.Prototype})"); + Assert.That(legCount, Is.GreaterThanOrEqualTo(MinimumLimbCount), + $"Вид {speciesPrototype.ID} должен иметь минимум {MinimumLimbCount} ноги, но имеет {legCount}"); }); } }Content.Server/Telephone/TelephoneSystem.cs (3)
9-15
: Проверьте порядок импортовНовые импорты добавлены в произвольном порядке, что может затруднить поддержку кода. Рекомендуется сгруппировать связанные импорты вместе.
- using Content.Shared.Corvax.TTS; - using Content.Shared.Database; - using Content.Shared.Labels.Components; - using Content.Shared.Mind.Components; - using Content.Shared.Power; - using Content.Shared.Silicons.StationAi; - using Content.Shared.Silicons.Borgs.Components; + using Content.Shared.Corvax.TTS; + using Content.Shared.Database; + using Content.Shared.Labels.Components; + using Content.Shared.Mind.Components; + using Content.Shared.Power; + using Content.Shared.Silicons.Borgs.Components; + using Content.Shared.Silicons.StationAi;
113-119
: Улучшите читаемость определения спикераТернарный оператор в этом контексте снижает читаемость кода. Рекомендуется использовать более явную конструкцию if-else.
- var speaker = entity.Comp.Speaker != null ? entity.Comp.Speaker.Value.Owner : entity.Owner; + EntityUid speaker; + if (entity.Comp.Speaker != null) + { + speaker = entity.Comp.Speaker.Value.Owner; + } + else + { + speaker = entity.Owner; + }
241-248
: Оптимизируйте логику получения имени устройстваТекущая реализация может быть упрощена с использованием null-conditional оператора.
- string? deviceName = null; - - if (TryComp<LabelComponent>(source, out var label)) - deviceName = label.CurrentLabel; + var deviceName = TryComp<LabelComponent>(source, out var label) ? label.CurrentLabel : null;
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (22)
Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs
(1 hunks)Content.Server/Telephone/TelephoneSystem.cs
(8 hunks)Content.Shared/Telephone/TelephoneComponent.cs
(5 hunks)Resources/ConfigPresets/Backmen/main.toml
(2 hunks)Resources/Prototypes/Corvax/Entities/Objects/Devices/pda.yml
(2 hunks)Resources/Prototypes/Corvax/Maps/Pools/default.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
(3 hunks)Resources/Prototypes/Maps/amber.yml
(1 hunks)Resources/Prototypes/_Backmen/Body/Parts/spider.yml
(3 hunks)Resources/Prototypes/_Backmen/Body/Prototypes/arachne.yml
(1 hunks)Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml
(1 hunks)Resources/Prototypes/_Backmen/Entities/Objects/Devices/pda.yml
(5 hunks)Resources/Prototypes/_Backmen/Maps/Pool/backmenstandart.yml
(2 hunks)Resources/Prototypes/_Backmen/Maps/backmen_hive.yml
(1 hunks)Resources/Prototypes/_Backmen/Maps/backmen_tortuga.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/cargotech.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_admiral.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_official.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/head_of_security.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/intern.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/operator.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/private_officer.yml
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (12)
- Content.Shared/Telephone/TelephoneComponent.cs
- Resources/ConfigPresets/Backmen/main.toml
- Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_admiral.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/operator.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/cargotech.yml
- Resources/Prototypes/Corvax/Maps/Pools/default.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/private_officer.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/intern.yml
- Resources/Prototypes/Corvax/Entities/Objects/Devices/pda.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_official.yml
- Resources/Prototypes/_Backmen/Body/Prototypes/arachne.yml
🔇 Additional comments (14)
Resources/Prototypes/_Backmen/Entities/Objects/Devices/pda.yml (2)
19-23
: Одобрено: Добавление компонента AppearanceДобавление компонента
Appearance
и инициализацияappearanceDataInit
для всех PDA - это правильный подход к рефакторингу системы визуализации.Also applies to: 56-60, 82-86, 110-114, 145-149
56-60
: Несоответствие регистра в именах состояний PDAВ файле присутствует несогласованность в регистре названий состояний PDA:
pda-Delivery
pda-Roboticist
В то время как другие состояния используют нижний регистр:
pda-orden
pda-clear
pda-blue
Предлагаемые исправления:
- pda-Delivery + pda-delivery - pda-Roboticist + pda-roboticistAlso applies to: 110-114
Resources/Prototypes/_Backmen/Body/Parts/spider.yml (2)
18-18
: Улучшение архитектуры через множественное наследованиеДобавление
BaseTorso
в качестве второго родителя - это правильное архитектурное решение, которое позволит повторно использовать базовую функциональность туловища.Необходимо заменить временные спрайты
Обратите внимание на использование спрайтов мотылька в качестве заглушки.
Выполните следующий скрипт для поиска правильных спрайтов паука:
✅ Verification successful
Спрайты для ArachneClassic найдены
Обнаружены правильные спрайты для паука в директории
Resources/Textures/Backmen/Mobs/Species/ArachneClassic/arachneClassic.rsi/
:
spider_body.png
spider_body_front.png
Рекомендуется заменить временные спрайты мотылька на эти специализированные спрайты ArachneClassic.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск существующих спрайтов паука fd -e rsi -e png --full-path . | rg -i 'spider|arachne'Length of output: 4782
32-32
: Проверьте параметры движенияДобавление
BaseRightLeg
улучшает структуру наследования. Однако необходимо убедиться, что значения скорости ходьбы и бега (2.7 и 4.5) сбалансированы с другими существами.Выполните проверку баланса скорости:
✅ Verification successful
Based on the search results, I can now provide a final response regarding the movement speed parameters:
Скорость движения сбалансирована с другими существами
Значения скорости для паука (ходьба: 2.7, бег: 4.5) находятся в разумном диапазоне по сравнению с другими существами:
- Животные: ходьба 2.5, бег 3.5
- Киборги: ходьба 3.125, бег 5.625
Текущие значения обеспечивают паукам среднюю скорость между обычными животными и киборгами, что логично с учетом их природы.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск других конфигураций MovementBodyPart для сравнения rg "MovementBodyPart|walkSpeed|sprintSpeed" -A 2Length of output: 30000
Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/head_of_security.yml (2)
89-93
: Корректная реструктуризация внешнего вида PDAИзменение структуры конфигурации внешнего вида PDA соответствует общему паттерну реструктуризации в других файлах. Использование компонента
Appearance
сappearanceDataInit
является более правильным подходом.
Line range hint
1-143
: Рекомендация: Добавить документацию о миграцииВ связи с удалением должности
BKCCSecGavna
и сохранением связанных сущностей (PDA, ID карта), рекомендуется добавить комментарии в код, объясняющие причины изменений и планы по миграции.Давайте проверим использование удалённой должности в других файлах:
Resources/Prototypes/Maps/amber.yml (1)
6-6
: Проверьте баланс карты при уменьшенном количестве игроковСнижение минимального количества игроков с 25 до 15 может существенно повлиять на игровой процесс. Необходимо убедиться, что:
- Размер карты и распределение ресурсов сбалансированы для меньшего количества игроков
- Все игровые механики и задачи выполнимы при минимальном составе
- Распределение ролей остается сбалансированным при меньшем количестве игроков
Resources/Prototypes/_Backmen/Maps/backmen_tortuga.yml (1)
5-5
: Значительное изменение минимального количества игроковУменьшение минимального количества игроков с 50 до 10 - это существенное изменение, которое может повлиять на игровой процесс. При таком количестве игроков важно убедиться, что станция остается функциональной и сбалансированной.
Рекомендуется провести тестирование карты с различным количеством игроков (10, 20, 30) для подтверждения баланса игрового процесса.
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (2)
2440-2449
: Обновлена конфигурация движения спрайта для базового класса паукаДобавлена поддержка анимации движения для базового класса паука через компонент
SpriteMovement
. Это улучшит визуальное отображение передвижения пауков.
2609-2609
: Обновлена иерархия наследования для агрессивного гигантского паукаКорректное наследование от базовых классов
MobSpiderAngryBase
иMobGiantSpider
обеспечивает правильную комбинацию компонентов и поведения.Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs (3)
1-9
: Импорты и пространство имён корректны!Все необходимые зависимости присутствуют и правильно организованы.
11-13
: Правильное объявление тестового класса!Класс корректно помечен атрибутом
TestFixture
и объявлен какsealed
.
47-79
: Проверить работу теста с персонажем xenoТест напрямую связан с исправлением функциональности рук для персонажа xeno, упомянутым в целях PR. Необходимо убедиться, что тест проходит для всех видов, особенно для xeno.
Выполните следующий скрипт для проверки наличия прототипа xeno и его конфигурации:
Рекомендуется применить те же улучшения, что и для теста
AllSpeciesHaveLegs
:
- Использовать общий метод
SetupTestEnvironment
- Использовать константу
MinimumLimbCount
- Улучшить сообщение об ошибке
Content.Server/Telephone/TelephoneSystem.cs (1)
348-350
: Проверьте обработку языковых параметровМетод
SendTelephoneMessage
теперь принимает параметр языка, но отсутствует валидация его корректности.
@@ -2,8 +2,7 @@ | |||
id: BackmenHive | |||
mapName: 'The Hive' | |||
mapPath: /Maps/Backmen/backmen_hive.yml | |||
minPlayers: 30 | |||
maxPlayers: 80 | |||
minPlayers: 10 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Снижение минимального количества игроков может нарушить баланс станции
Анализ конфигурации должностей показывает, что для 10 игроков невозможно обеспечить даже минимальное заполнение критических ролей:
- Обязательные руководящие должности (Капитан, Главный Инженер, Главврач, Глава СБ) требуют минимум 4 игроков
- Для базового функционирования отделов требуются дополнительные роли:
- СБ: минимум 4 офицера + смотритель (5 игроков)
- Медицина: минимум 3 врача (3 игрока)
- Инженерия: минимум 3 инженера (3 игрока)
- Научный: минимум 3 ученых (3 игрока)
Рекомендуется:
- Увеличить минимальное количество игроков до 20-25
- Или значительно сократить минимальные требования к составу отделов
- Или добавить систему совмещения должностей для малых составов
🔗 Analysis chain
Требуется тщательная проверка функциональности станции
Значительное снижение минимального количества игроков с 30 до 10 требует особого внимания:
- Проверьте возможность заполнения критически важных ролей при минимальном составе
- Убедитесь, что все системы станции могут поддерживаться малым количеством персонала
- Рассмотрите необходимость корректировки списка доступных должностей для баланса при малом количестве игроков
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Подсчет критически важных ролей
echo "Анализ обязательных должностей:"
rg "availableJobs:" -A 50 "Resources/Prototypes/_Backmen/Maps/backmen_hive.yml" | \
grep -E "Captain|ChiefEngineer|ChiefMedicalOfficer|HeadOfSecurity" | \
grep -oE "\[ *[0-9]+, *[0-9]+ *\]"
Length of output: 292
Script:
#!/bin/bash
# Проверка общего количества должностей и их лимитов
echo "Анализ всех должностей:"
rg "availableJobs:" -A 100 "Resources/Prototypes/_Backmen/Maps/backmen_hive.yml" | \
grep -E "\s+[A-Za-z]+:\s*\[" | \
sort
# Проверка других конфигураций карты
echo -e "\nДругие параметры карты:"
rg "^[a-z].*:" "Resources/Prototypes/_Backmen/Maps/backmen_hive.yml"
Length of output: 1720
- map: ["enum.DamageStateVisualLayers.Base", "movement"] | ||
state: clown | ||
sprite: Mobs/Animals/clownspider.rsi | ||
- type: SpriteMovement | ||
movementLayers: | ||
movement: | ||
state: clown | ||
noMovementLayers: | ||
movement: | ||
state: clown |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Обнаружено несоответствие в конфигурации спрайтов паука-клоуна
В файле конфигурации clownspider.rsi/meta.json
отсутствуют отдельные состояния для анимации движения. Текущая конфигурация содержит только базовое состояние clown
с 4 направлениями и состояние dead
.
- Необходимо добавить соответствующие спрайты и состояния для анимации движения в
Resources/Textures/Mobs/Animals/clownspider.rsi
- Рекомендуется использовать отдельное состояние для движения (например,
clown-moving
) для соответствия паттернам анимации других существ
🔗 Analysis chain
Добавлена конфигурация движения для паука-клоуна
Реализована анимация движения для паука-клоуна с использованием тех же паттернов, что и для базового класса. Это обеспечивает единообразие в анимации всех типов пауков.
Рекомендуется добавить тесты для проверки корректности анимации:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка наличия необходимых спрайтов для анимации
rg -g "*.rsi" "clown-moving|tarantula-moving"
Length of output: 196
Script:
#!/bin/bash
# Поиск файлов .rsi с упоминанием clown
fd -e rsi -x rg -l "clown"
# Проверка состояний в файлах .rsi
fd -e rsi -x cat {}/meta.json | jq -r 'select(.states | any(contains("clown")))'
Length of output: 2004
Script:
#!/bin/bash
# Проверяем содержимое meta.json файла для паука-клоуна
cat "./Resources/Textures/Mobs/Animals/clownspider.rsi/meta.json"
Length of output: 395
public void SetSpeakerForTelephone(Entity<TelephoneComponent> entity, Entity<SpeechComponent>? speaker) | ||
{ | ||
entity.Comp.Speaker = speaker; | ||
} | ||
|
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.
Добавьте валидацию для нового метода SetSpeakerForTelephone
Метод SetSpeakerForTelephone
не содержит проверок валидности входных параметров.
public void SetSpeakerForTelephone(Entity<TelephoneComponent> entity, Entity<SpeechComponent>? speaker)
{
+ if (entity == default)
+ throw new ArgumentNullException(nameof(entity));
+
+ if (speaker != null && !HasComp<SpeechComponent>(speaker.Value.Owner))
+ {
+ _adminLogger.Add(LogType.Warning, $"Attempted to set invalid speaker for telephone {ToPrettyString(entity.Owner)}");
+ return;
+ }
+
entity.Comp.Speaker = speaker;
+ Dirty(entity);
}
📝 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.
public void SetSpeakerForTelephone(Entity<TelephoneComponent> entity, Entity<SpeechComponent>? speaker) | |
{ | |
entity.Comp.Speaker = speaker; | |
} | |
public void SetSpeakerForTelephone(Entity<TelephoneComponent> entity, Entity<SpeechComponent>? speaker) | |
{ | |
if (entity == default) | |
throw new ArgumentNullException(nameof(entity)); | |
if (speaker != null && !HasComp<SpeechComponent>(speaker.Value.Owner)) | |
{ | |
_adminLogger.Add(LogType.Warning, $"Attempted to set invalid speaker for telephone {ToPrettyString(entity.Owner)}"); | |
return; | |
} | |
entity.Comp.Speaker = speaker; | |
Dirty(entity); | |
} |
// Corvax-TTS-Start | ||
// If speaker entity has TTS, the telephone will speak with the same voice | ||
if(TryComp<TTSComponent>(args.MessageSource, out var ttsSpeaker)) | ||
{ | ||
EnsureComp<TTSComponent>(entity, out var ttsTelephone); | ||
ttsTelephone.VoicePrototypeId = ttsSpeaker.VoicePrototypeId; | ||
} | ||
else // Remove TTS if the speaker has no TTS | ||
{ | ||
RemComp<TTSComponent>(entity); | ||
} | ||
// Corvax-TTS-End |
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.
🛠️ Refactor suggestion
Добавьте обработку ошибок для TTS компонента
Текущая реализация TTS не обрабатывает потенциальные ошибки при работе с компонентами. Рекомендуется добавить проверки и логирование.
// Corvax-TTS-Start
// If speaker entity has TTS, the telephone will speak with the same voice
if(TryComp<TTSComponent>(args.MessageSource, out var ttsSpeaker))
{
- EnsureComp<TTSComponent>(entity, out var ttsTelephone);
- ttsTelephone.VoicePrototypeId = ttsSpeaker.VoicePrototypeId;
+ try
+ {
+ EnsureComp<TTSComponent>(entity, out var ttsTelephone);
+ ttsTelephone.VoicePrototypeId = ttsSpeaker.VoicePrototypeId;
+ _adminLogger.Add(LogType.Debug, $"TTS configured for telephone {ToPrettyString(entity.Owner)} with voice {ttsSpeaker.VoicePrototypeId}");
+ }
+ catch (Exception e)
+ {
+ _adminLogger.Add(LogType.Error, $"Failed to configure TTS for telephone {ToPrettyString(entity.Owner)}: {e.Message}");
+ }
}
Committable suggestion skipped: line range outside the PR's diff.
Надо на это внимание обратить, и по хорошему вернуть название напитка обратно к Ирландской автомобильной бомбе |
Update animals.yml Update TGMC_xeno.yml maps maps fix
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: 4
🔭 Outside diff range comments (2)
Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/head_of_security.yml (2)
Line range hint
94-127
: Исправьте некорректную ссылку на удаленную должностьВ компоненте
PresetIdCard
ID-картыIDCardCentComGavnaOfficerSesurity
используется ссылка на несуществующую должностьBKCCSecGavna
. Это приведет к ошибкам во время выполнения.Необходимо либо:
- Создать новую должность для замены
BKCCSecGavna
- Обновить ID-карту для использования другой существующей должности
Хотите, чтобы я помог с реализацией одного из этих решений?
Требуется комплексное обновление зависимостей после удаления роли
На основе анализа кодовой базы, удаление должности
BKCCSecGavna
требует следующих изменений:
- Удалить или обновить следующие связанные сущности:
- Трекер игрового времени
JobCentralCommandSecGavna
вplay_time_trackers.yml
- Точки спавна
SpawnPointBKCCSecGavna
в файлах карт- Снаряжение
HeadOfSecurityCentComGear
- Ссылки на должность в
departments.yml
- Ссылки в файлах гуманоидов
centcom.yml
Доступ
CCSecurity
остается валидным, так как используется другими ролями ЦентКома (centcom_official, operator, private_officer).🔗 Analysis chain
Line range hint
1-43
: Проверьте последствия удаления должности начальника безопасностиУдаление должности
BKCCSecGavna
может иметь серьезные последствия для игрового баланса и административных функций. Убедитесь, что:
- Все связанные роли и обязанности перераспределены
- Административные права доступа корректно обновлены
- Игровые сценарии, зависящие от этой роли, адаптированы
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск зависимостей удаленной роли в кодовой базе rg "BKCCSecGavna" --type yamlLength of output: 1001
Script:
#!/bin/bash # Check for any references to the role in other job-related files rg "JobCentralCommandSecGavna" --type yaml # Check for any references to the gear loadout rg "HeadOfSecurityCentComGear" --type yaml # Check for any references in access configuration rg "CCSecurity" --type yamlLength of output: 7431
♻️ Duplicate comments (1)
Content.Server/Telephone/TelephoneSystem.cs (1)
437-441
:⚠️ Potential issueДобавьте валидацию для нового метода SetSpeakerForTelephone
Метод
SetSpeakerForTelephone
не содержит проверок валидности входных параметров.Примените следующие изменения:
public void SetSpeakerForTelephone(Entity<TelephoneComponent> entity, Entity<SpeechComponent>? speaker) { + if (entity == default) + throw new ArgumentNullException(nameof(entity)); + + if (speaker != null && !HasComp<SpeechComponent>(speaker.Value.Owner)) + { + _adminLogger.Add(LogType.Warning, $"Попытка установить недопустимый speaker для телефона {ToPrettyString(entity.Owner)}"); + return; + } + entity.Comp.Speaker = speaker; + Dirty(entity); }
🧹 Nitpick comments (1)
Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs (1)
14-46
: Рекомендуется улучшить обработку ресурсов в тесте AllSpeciesHaveLegsТест корректно проверяет наличие ног у всех видов, но есть возможности для улучшения:
- Отсутствует освобождение ресурсов для созданных dummy-сущностей
- Магическое число "2" в WaitRunTicks лучше вынести в константу
Предлагаю следующие изменения:
+ private const int WaitTicks = 2; [Test] public async Task AllSpeciesHaveLegs() { await using var pair = await PoolManager.GetServerClient(new PoolSettings { Dirty = true, Connected = true, InLobby = false, }); var server = pair.Server; var bodySys = server.EntMan.System<BodySystem>(); + var entities = new List<EntityUid>(); foreach (var speciesPrototype in server.ProtoMan.EnumeratePrototypes<SpeciesPrototype>()) { var dummy = EntityUid.Invalid; await server.WaitAssertion(() => { dummy = server.EntMan.Spawn(speciesPrototype.Prototype); + entities.Add(dummy); }); await server.WaitIdleAsync(); - await server.WaitRunTicks(2); + await server.WaitRunTicks(WaitTicks); await server.WaitAssertion(() => { Assert.That(dummy, Is.Not.EqualTo(EntityUid.Invalid)); var handCount = bodySys.GetBodyPartCount(dummy, BodyPartType.Leg); Assert.That(handCount, Is.GreaterThanOrEqualTo(2), $"legs {speciesPrototype.ID}({speciesPrototype.Prototype})"); }); } + await server.WaitAssertion(() => + { + foreach (var entity in entities) + { + server.EntMan.DeleteEntity(entity); + } + }); await pair.CleanReturnAsync(); }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (23)
Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs
(1 hunks)Content.Server/Telephone/TelephoneSystem.cs
(8 hunks)Content.Shared/Telephone/TelephoneComponent.cs
(5 hunks)Resources/ConfigPresets/Backmen/main.toml
(2 hunks)Resources/Prototypes/Corvax/Entities/Objects/Devices/pda.yml
(2 hunks)Resources/Prototypes/Corvax/Maps/Pools/default.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
(3 hunks)Resources/Prototypes/Maps/amber.yml
(2 hunks)Resources/Prototypes/Maps/elkridge.yml
(1 hunks)Resources/Prototypes/_Backmen/Body/Parts/spider.yml
(3 hunks)Resources/Prototypes/_Backmen/Body/Prototypes/arachne.yml
(1 hunks)Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml
(1 hunks)Resources/Prototypes/_Backmen/Entities/Objects/Devices/pda.yml
(9 hunks)Resources/Prototypes/_Backmen/Maps/Pool/backmenstandart.yml
(2 hunks)Resources/Prototypes/_Backmen/Maps/backmen_hive.yml
(1 hunks)Resources/Prototypes/_Backmen/Maps/backmen_tortuga.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/cargotech.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_admiral.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_official.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/head_of_security.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/intern.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/operator.yml
(1 hunks)Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/private_officer.yml
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (17)
- Resources/Prototypes/_Backmen/Maps/backmen_tortuga.yml
- Resources/Prototypes/Maps/amber.yml
- Resources/ConfigPresets/Backmen/main.toml
- Resources/Prototypes/_Backmen/Maps/backmen_hive.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/operator.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/cargotech.yml
- Resources/Prototypes/Corvax/Entities/Objects/Devices/pda.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_admiral.yml
- Resources/Prototypes/_Backmen/Body/Parts/spider.yml
- Resources/Prototypes/Corvax/Maps/Pools/default.yml
- Content.Shared/Telephone/TelephoneComponent.cs
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/centcom_official.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/intern.yml
- Resources/Prototypes/Maps/elkridge.yml
- Resources/Prototypes/_Backmen/Body/Prototypes/arachne.yml
- Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/private_officer.yml
- Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml
🔇 Additional comments (12)
Resources/Prototypes/_Backmen/Maps/Pool/backmenstandart.yml (2)
24-26
: Проверьте требования к количеству игроков для новых картСогласно AI-summary:
- Amber: минимум 15 игроков
- CorvaxTushkan: минимум 25 игроков
- Elkridge: 7-35 игроков
Рекомендации:
- Убедитесь, что сервер правильно обрабатывает ограничения по количеству игроков
- Проверьте баланс ролей на новых картах
Для проверки конфигурации запустите:
✅ Verification successful
Проверка ограничений по количеству игроков для карт подтверждена
Результаты проверки конфигураций карт:
- Amber: minPlayers: 15, maxPlayers: 55 (Resources/Prototypes/Maps/amber.yml)
- CorvaxTushkan: minPlayers: 0, maxPlayers: 25 (Resources/Prototypes/Corvax/Maps/tushkan.yml)
- Elkridge: minPlayers: 7, maxPlayers: 35 (Resources/Prototypes/Maps/elkridge.yml)
Все карты корректно настроены с указанными ограничениями по количеству игроков в их конфигурационных файлах. Значения соответствуют тем, что были указаны в AI-summary.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск конфигураций новых карт echo "Проверка конфигурации новых карт..." rg -A 10 "Amber|CorvaxTushkan|Elkridge" --type yamlLength of output: 14737
4-9
: Проверьте влияние отключения карт на баланс игрыОтключение карт BackmenAspid и BackmenRook может повлиять на разнообразие игрового процесса. Убедитесь, что:
- Оставшиеся карты обеспечивают достаточное разнообразие для всех режимов игры
- Игроки были уведомлены об изменениях в пуле карт
✅ Verification successful
Отключение карт BackmenAspid и BackmenRook безопасно
Анализ конфигурационных файлов показывает, что:
- Карта BackmenAspid рассчитана на 20-60 игроков
- Карта BackmenRook рассчитана на 0-25 игроков
- Обе карты упоминаются только в файлах их конфигурации и тестах
- Отключение этих карт в пуле не влияет на другие игровые механики
Оставшиеся активные карты в пуле (BackmenKettle, BackmenTortuga, BackmenHive, BackmenShoukou) обеспечивают достаточное разнообразие для текущего состава игроков.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка упоминаний отключенных карт в других конфигурационных файлах echo "Поиск зависимостей для BackmenAspid и BackmenRook..." rg -l "BackmenAspid|BackmenRook" --type yamlLength of output: 326
Script:
#!/bin/bash # Проверяем содержимое файлов конфигурации карт echo "Содержимое backmen_rook.yml:" cat Resources/Prototypes/_Backmen/Maps/backmen_rook.yml || echo "Файл не найден" echo -e "\nСодержимое backmen_aspid.yml:" cat Resources/Prototypes/_Backmen/Maps/backmen_aspid.yml || echo "Файл не найден" # Проверяем другие пулы карт на наличие этих карт echo -e "\nПоиск упоминаний в других пулах карт:" fd "Pool" --type f --extension yml | xargs rg "BackmenAspid|BackmenRook"Length of output: 5373
Resources/Prototypes/_Backmen/Roles/Jobs/CentCom/head_of_security.yml (1)
89-93
: Улучшение структуры конфигурации PDAНовая структура конфигурации внешнего вида PDA с использованием компонента
Appearance
является более чистым и поддерживаемым решением. Это хорошее архитектурное изменение.Resources/Prototypes/_Backmen/Entities/Objects/Devices/pda.yml (2)
11-11
: Несогласованность регистра в состояниях PDAВ файле наблюдается несоответствие регистра в именах состояний:
pda-orden
(нижний регистр)pda-Delivery
(смешанный регистр)pda-Roboticist
(смешанный регистр)pda-blue
(нижний регистр)Also applies to: 49-49, 104-104, 140-140
Line range hint
1-165
: Проверьте корректность локализацииВ файле присутствует смешение языков в описаниях:
- DeliveryPDA использует русский язык
- Остальные PDA используют английский
Убедитесь, что это соответствует требованиям локализации проекта.
Content.Server/Telephone/TelephoneSystem.cs (2)
241-248
: LGTM! Корректная обработка имени устройстваПравильная реализация получения имени устройства из метки, с проверкой на наличие компонента LabelComponent.
122-133
: 🛠️ Refactor suggestionДобавьте обработку ошибок для TTS компонента
Текущая реализация TTS не обрабатывает потенциальные ошибки при работе с компонентами.
Примените следующие изменения:
// Corvax-TTS-Start // If speaker entity has TTS, the telephone will speak with the same voice if(TryComp<TTSComponent>(args.MessageSource, out var ttsSpeaker)) { - EnsureComp<TTSComponent>(speaker, out var ttsTelephone); - ttsTelephone.VoicePrototypeId = ttsSpeaker.VoicePrototypeId; + try + { + EnsureComp<TTSComponent>(speaker, out var ttsTelephone); + ttsTelephone.VoicePrototypeId = ttsSpeaker.VoicePrototypeId; + _adminLogger.Add(LogType.Debug, $"TTS настроен для телефона {ToPrettyString(speaker)} с голосом {ttsSpeaker.VoicePrototypeId}"); + } + catch (Exception e) + { + _adminLogger.Add(LogType.Error, $"Не удалось настроить TTS для телефона {ToPrettyString(speaker)}: {e.Message}"); + } }Likely invalid or redundant comment.
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (3)
2621-2630
: Исправлена конфигурация анимации клоуна-паукаПредыдущие проблемы с отсутствующими состояниями анимации были решены. Теперь используется одно состояние
clown
для статичного и движущегося спрайта.#!/bin/bash # Проверка состояний в файле clownspider.rsi fd -g "clownspider.rsi/meta.json" -x cat {} | jq '.states[] | select(.name | contains("clown"))'
2440-2449
: Проверьте конфигурацию анимации движения базового паукаДобавлена базовая конфигурация анимации движения для
MobSpiderBase
. Убедитесь, что:
- Состояния
tarantula
иtarantula-moving
существуют вspider.rsi
- Анимация корректно воспроизводится при движении
✅ Verification successful
Конфигурация анимации движения базового паука корректна
Проверка файла
spider.rsi/meta.json
подтвердила, что:
- Состояние
tarantula
существует и поддерживает 4 направления движения- Состояние
tarantula-moving
существует, поддерживает 4 направления и имеет корректно настроенную анимацию с задержкой 0.2 секунды между кадрамиКонфигурация в YAML-файле полностью соответствует доступным спрайтам и их параметрам.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка наличия необходимых спрайтов rg -g "*.rsi/meta.json" "tarantula.*moving"Length of output: 194
Script:
#!/bin/bash # Поиск файла meta.json в директории со спрайтами пауков fd "meta.json" --glob "**/spider.rsi/" # Если файл найден, проверим его содержимое на наличие состояний if [ -f "Resources/Textures/Mobs/Animals/spider.rsi/meta.json" ]; then cat "Resources/Textures/Mobs/Animals/spider.rsi/meta.json" fiLength of output: 3543
2609-2609
: Подтвердите корректность наследования для MobGiantSpiderAngryИзменение наследования может повлиять на поведение сущности. Убедитесь, что все необходимые компоненты и функциональность сохранены.
✅ Verification successful
Наследование MobGiantSpiderAngry реализовано корректно
Анализ показывает, что сущность
MobGiantSpiderAngry
наследуется от двух базовых классов:
MobSpiderAngryBase
- предоставляет базовое поведение агрессивного паука (HTN AI, фракцию Xeno, роль призрака)MobGiantSpider
- предоставляет базовые характеристики гигантского паука (спрайты, анимации, описание)Такая структура наследования обеспечивает корректное сочетание функциональности обоих родительских классов.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверка компонентов родительских сущностей rg "parent.*MobSpiderAngry" -A 10Length of output: 971
Script:
#!/bin/bash # Поиск определения базового класса MobSpiderAngryBase rg "MobSpiderAngryBase" -A 15 # Поиск определения MobGiantSpider rg "MobGiantSpider:" -A 15Length of output: 3033
Script:
#!/bin/bash # Поиск определения MobGiantSpider с более широким контекстом rg "MobGiantSpider" -B 5 -A 15 Resources/Prototypes/Entities/Mobs/NPCs/animals.ymlLength of output: 1683
Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs (2)
1-13
: Структура файла и импорты выглядят правильноВсе необходимые зависимости присутствуют, и организация кода соответствует стандартам.
1-80
: Проверьте покрытие граничных случаевТекущие тесты проверяют только базовый сценарий (количество конечностей >= 2). Рекомендуется добавить тесты для следующих случаев:
- Виды без конечностей (если такие существуют)
- Виды с нестандартным количеством конечностей
- Обработка ошибок при неправильных прототипах
Давайте проверим наличие специальных видов в прототипах:
@@ -8,6 +8,7 @@ | |||
sprite: Backmen/Objects/Devices/pda.rsi | |||
layers: | |||
- map: [ "enum.PdaVisualLayers.Base" ] | |||
state: "pda-orden" |
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.
🛠️ Refactor suggestion
Дублирование определений состояний
Состояния PDA определены в нескольких местах для каждого устройства:
- В компоненте
Sprite
- В компоненте
Appearance
- В компоненте
Icon
Рекомендуется:
- Унифицировать определение состояний
- Использовать одно значение из
appearanceDataInit
во всех местах
Пример рефакторинга для OrdenPDA:
components:
- type: Sprite
sprite: Backmen/Objects/Devices/pda.rsi
layers:
- map: [ "enum.PdaVisualLayers.Base" ]
- state: "pda-orden"
+ state: =<appearanceDataInit.enum.PdaVisuals.PdaType>
# ...
- type: Icon
sprite: Backmen/Objects/Devices/pda.rsi
- state: pda-orden
+ state: =<appearanceDataInit.enum.PdaVisuals.PdaType>
Also applies to: 20-24, 49-49, 58-62, 104-104, 113-117, 140-140, 149-153
- type: Appearance | ||
appearanceDataInit: | ||
enum.PdaVisuals.PdaType: | ||
!type:String | ||
pda-clear |
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.
Отсутствует компонент Sprite для PrisonerPDA
В отличие от других PDA, у PrisonerPDA отсутствует компонент Sprite
с определением слоев. Это может привести к проблемам с отображением.
Необходимо добавить компонент Sprite
по аналогии с другими PDA:
components:
+ - type: Sprite
+ sprite: Backmen/Objects/Devices/pda.rsi
+ layers:
+ - map: [ "enum.PdaVisualLayers.Base" ]
+ state: "pda-clear"
+ - state: "light_overlay"
+ map: [ "enum.PdaVisualLayers.Flashlight" ]
+ shader: "unshaded"
+ visible: false
+ - state: "id_overlay"
+ map: [ "enum.PdaVisualLayers.IdLight" ]
+ shader: "unshaded"
+ visible: false
- type: Appearance
📝 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: Appearance | |
appearanceDataInit: | |
enum.PdaVisuals.PdaType: | |
!type:String | |
pda-clear | |
- type: Sprite | |
sprite: Backmen/Objects/Devices/pda.rsi | |
layers: | |
- map: [ "enum.PdaVisualLayers.Base" ] | |
state: "pda-clear" | |
- state: "light_overlay" | |
map: [ "enum.PdaVisualLayers.Flashlight" ] | |
shader: "unshaded" | |
visible: false | |
- state: "id_overlay" | |
map: [ "enum.PdaVisualLayers.IdLight" ] | |
shader: "unshaded" | |
visible: false | |
- type: Appearance | |
appearanceDataInit: | |
enum.PdaVisuals.PdaType: | |
!type:String | |
pda-clear |
// Determine if speech should be relayed via the telephone itself or a designated speaker | ||
var speaker = entity.Comp.Speaker != null ? entity.Comp.Speaker.Value.Owner : entity.Owner; | ||
|
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.
Проверьте обработку null для speaker
Текущая реализация может вызвать NullReferenceException при обращении к speaker.Value.Owner
, если entity.Comp.Speaker
равен null.
Примените следующие изменения:
-var speaker = entity.Comp.Speaker != null ? entity.Comp.Speaker.Value.Owner : entity.Owner;
+var speaker = entity.Comp.Speaker?.Value.Owner ?? entity.Owner;
📝 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.
// Determine if speech should be relayed via the telephone itself or a designated speaker | |
var speaker = entity.Comp.Speaker != null ? entity.Comp.Speaker.Value.Owner : entity.Owner; | |
// Determine if speech should be relayed via the telephone itself or a designated speaker | |
var speaker = entity.Comp.Speaker?.Value.Owner ?? entity.Owner; | |
[Test] | ||
public async Task AllSpeciesHaveHands() | ||
{ | ||
await using var pair = await PoolManager.GetServerClient(new PoolSettings | ||
{ | ||
Dirty = true, | ||
Connected = true, | ||
InLobby = false, | ||
}); | ||
|
||
var server = pair.Server; | ||
var handsSys = server.EntMan.System<HandsSystem>(); | ||
|
||
foreach (var speciesPrototype in server.ProtoMan.EnumeratePrototypes<SpeciesPrototype>()) | ||
{ | ||
var dummy = EntityUid.Invalid; | ||
await server.WaitAssertion(() => | ||
{ | ||
dummy = server.EntMan.Spawn(speciesPrototype.Prototype); | ||
}); | ||
await server.WaitIdleAsync(); | ||
await server.WaitRunTicks(2); | ||
await server.WaitAssertion(() => | ||
{ | ||
Assert.That(dummy, Is.Not.EqualTo(EntityUid.Invalid)); | ||
var handCount = handsSys.EnumerateHands(dummy).Count(); | ||
Assert.That(handCount, Is.GreaterThanOrEqualTo(2), $"hands {speciesPrototype.ID}({speciesPrototype.Prototype})"); | ||
}); | ||
|
||
} | ||
|
||
await pair.CleanReturnAsync(); | ||
} | ||
} |
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.
🛠️ Refactor suggestion
Дублирование кода в тесте AllSpeciesHaveHands
Тест AllSpeciesHaveHands практически полностью повторяет структуру предыдущего теста. Рекомендуется выделить общую логику в отдельный метод.
Предлагаю создать вспомогательный метод:
+ private async Task ValidateSpeciesBodyParts<T>(
+ IServerIntegrationInstance server,
+ Func<EntityUid, int> countFunction,
+ string partName) where T : EntitySystem
+ {
+ var system = server.EntMan.System<T>();
+ var entities = new List<EntityUid>();
+
+ foreach (var speciesPrototype in server.ProtoMan.EnumeratePrototypes<SpeciesPrototype>())
+ {
+ var dummy = EntityUid.Invalid;
+ await server.WaitAssertion(() =>
+ {
+ dummy = server.EntMan.Spawn(speciesPrototype.Prototype);
+ entities.Add(dummy);
+ });
+ await server.WaitIdleAsync();
+ await server.WaitRunTicks(WaitTicks);
+ await server.WaitAssertion(() =>
+ {
+ Assert.That(dummy, Is.Not.EqualTo(EntityUid.Invalid));
+ var count = countFunction(dummy);
+ Assert.That(count, Is.GreaterThanOrEqualTo(2),
+ $"{partName} {speciesPrototype.ID}({speciesPrototype.Prototype})");
+ });
+ }
+
+ await server.WaitAssertion(() =>
+ {
+ foreach (var entity in entities)
+ {
+ server.EntMan.DeleteEntity(entity);
+ }
+ });
+ }
Использование в тестах:
public async Task AllSpeciesHaveLegs()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Dirty = true,
Connected = true,
InLobby = false,
});
- // ... текущая реализация
+ await ValidateSpeciesBodyParts<BodySystem>(
+ pair.Server,
+ uid => pair.Server.EntMan.System<BodySystem>().GetBodyPartCount(uid, BodyPartType.Leg),
+ "legs");
await pair.CleanReturnAsync();
}
public async Task AllSpeciesHaveHands()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Dirty = true,
Connected = true,
InLobby = false,
});
- // ... текущая реализация
+ await ValidateSpeciesBodyParts<HandsSystem>(
+ pair.Server,
+ uid => pair.Server.EntMan.System<HandsSystem>().EnumerateHands(uid).Count(),
+ "hands");
await pair.CleanReturnAsync();
}
📝 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.
[Test] | |
public async Task AllSpeciesHaveHands() | |
{ | |
await using var pair = await PoolManager.GetServerClient(new PoolSettings | |
{ | |
Dirty = true, | |
Connected = true, | |
InLobby = false, | |
}); | |
var server = pair.Server; | |
var handsSys = server.EntMan.System<HandsSystem>(); | |
foreach (var speciesPrototype in server.ProtoMan.EnumeratePrototypes<SpeciesPrototype>()) | |
{ | |
var dummy = EntityUid.Invalid; | |
await server.WaitAssertion(() => | |
{ | |
dummy = server.EntMan.Spawn(speciesPrototype.Prototype); | |
}); | |
await server.WaitIdleAsync(); | |
await server.WaitRunTicks(2); | |
await server.WaitAssertion(() => | |
{ | |
Assert.That(dummy, Is.Not.EqualTo(EntityUid.Invalid)); | |
var handCount = handsSys.EnumerateHands(dummy).Count(); | |
Assert.That(handCount, Is.GreaterThanOrEqualTo(2), $"hands {speciesPrototype.ID}({speciesPrototype.Prototype})"); | |
}); | |
} | |
await pair.CleanReturnAsync(); | |
} | |
} | |
private async Task ValidateSpeciesBodyParts<T>( | |
IServerIntegrationInstance server, | |
Func<EntityUid, int> countFunction, | |
string partName) where T : EntitySystem | |
{ | |
var system = server.EntMan.System<T>(); | |
var entities = new List<EntityUid>(); | |
foreach (var speciesPrototype in server.ProtoMan.EnumeratePrototypes<SpeciesPrototype>()) | |
{ | |
var dummy = EntityUid.Invalid; | |
await server.WaitAssertion(() => | |
{ | |
dummy = server.EntMan.Spawn(speciesPrototype.Prototype); | |
entities.Add(dummy); | |
}); | |
await server.WaitIdleAsync(); | |
await server.WaitRunTicks(WaitTicks); | |
await server.WaitAssertion(() => | |
{ | |
Assert.That(dummy, Is.Not.EqualTo(EntityUid.Invalid)); | |
var count = countFunction(dummy); | |
Assert.That(count, Is.GreaterThanOrEqualTo(2), | |
$"{partName} {speciesPrototype.ID}({speciesPrototype.Prototype})"); | |
}); | |
} | |
await server.WaitAssertion(() => | |
{ | |
foreach (var entity in entities) | |
{ | |
server.EntMan.DeleteEntity(entity); | |
} | |
}); | |
} | |
[Test] | |
public async Task AllSpeciesHaveHands() | |
{ | |
await using var pair = await PoolManager.GetServerClient(new PoolSettings | |
{ | |
Dirty = true, | |
Connected = true, | |
InLobby = false, | |
}); | |
await ValidateSpeciesBodyParts<HandsSystem>( | |
pair.Server, | |
uid => pair.Server.EntMan.System<HandsSystem>().EnumerateHands(uid).Count(), | |
"hands"); | |
await pair.CleanReturnAsync(); | |
} |
@@ -1,12 +1,12 @@ | |||
- type: gameMapPool | |||
id: BackmenDefaultMapPool | |||
maps: | |||
- BackmenAspid | |||
#- BackmenAspid |
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.
Можно подробностей, почему Аспид убрали? Многие говорят что его надо допиливать, но я не до конца понял что именно, вроде всё необходимое там есть
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.
какие-то проблемы с СМ. Поэтому пока временно отключено.
@@ -21,4 +21,7 @@ | |||
- Omega | |||
- Packed | |||
- Reach | |||
- Amber | |||
- CorvaxTushkan |
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.
Алфавитный порядок?
🆑
Summary by CodeRabbit
Заметки о выпуске
Новые возможности
Исправления
Изменения в игровом балансе