-
Notifications
You must be signed in to change notification settings - Fork 88
Boxes #1044
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
base: master
Are you sure you want to change the base?
Boxes #1044
Conversation
|
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
|
RSI Diff Bot; head commit bfaf819 merging into 87907d3 Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/black.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/blue.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/green.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/red.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/syndicate.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
Resources/Textures/Objects/Specific/Cargo/mail_large.rsi
Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi
Resources/Textures/Objects/Weapons/Guns/Pistols/mk58.rsi
Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi
Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi
Resources/Textures/Objects/Weapons/Guns/SMGs/wt550.rsi
Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer.rsi
Resources/Textures/Structures/Storage/closet.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/black.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/blue.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/mixed.rsi
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/red.rsi
Resources/Textures/_White/Objects/Storage/Boxes.rsi
Resources/Textures/_White/Objects/Consumable/Food/Baked/donkpocket.rsi
Resources/Textures/_White/Objects/Storage/boxes.rsi
|
WalkthroughПереименование AK220→AR31Hydra и массовые локализационные правки; крупный рефактор коробок (_White) с новыми Box* сущностями, Sprite.layers и GenericVisualizer; многочисленные изменения прототипов оружия (имена, спрайты, magazine), meta.json текстур и удаление/перемещение отдельных прототипов и сущностей карты. Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Suggested reviewers
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 11
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (9)
Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml (1)
133-179: Обновите наименования дочерних сущностей в соответствии с переименованием родительского прототипа.Родительский прототип
WeaponSubMachineGunC20rпереименован в "CR-12 Moros", однако дочерние сущности всё ещё используют старое название "C-20r":
WeaponSubMachineGunC20rEmpty: "C-20r sub machine gun"WeaponSubMachineGunC20rHoS: "antique C-20r submachine gun"Это создаёт несогласованность в игре. Рекомендуется переименовать дочерние сущности на "CR-12 Moros (empty)" и "antique CR-12 Moros" соответственно, либо обновить описания, чтобы они упоминали новое имя оружия.
Спрайт
c-12r-moros.rsiкорректно содержит состоянияmag-0,mag-1,mag-2,mag-3, которые соответствуют конфигурацииMagazineVisualsсsteps: 4.Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/general.yml (2)
29-59: Добавьтеsprite: _White/Objects/Storage/boxes.rsiв компонент Sprite.Компонент
Spriteпереопределяется в BoxHolyWater без указания пути к спрайту. При переопределении компонента в потомке родительский компонент полностью заменяется, поэтомуspriteне наследуется. Слоиbox_plastic_base(слой 1) иbox_plastic_sci(слой 4) без явногоsprite:не найдут нужные состояния и не будут отрисованы. Требуется:- type: Sprite sprite: _White/Objects/Storage/boxes.rsi layers:Состояния
box_plastic_sciиbox_plastic_sci_openприсутствуют в файле текстуры, но спрайт не будет найден без указания пути в компоненте.
16-28: Проблема с переполнением ёмкости контейнера.BoxMaintenanceLightbulb попытается разместить 12 ламп в BoxLightbulb (наследуемый от BoxCardboard), который имеет сетку 3×3 = 9 ячеек. Сократите содержимое (например, 4+4 вместо 6+6) или используйте родителя с большей вместимостью (BoxCardboardWide с 7×3 = 21 ячейкой).
Resources/Locale/ru-RU/WWDP_TRANSLATION/prototypes/entities/objects/weapons/guns/lmgs/lmgs.ftl (1)
4-9: Несогласованность наименований между L6 и L6C.Основной пулемёт переименован в «Л9 "Кентавр"», но описание
ent-WeaponLightMachineGunL6Cна строке 9 всё ещё ссылается на «L6 SAW» («L6 SAW для киборгов»). Следует обновить описание для согласованности, например: «Л9 "Кентавр" для киборгов».🔧 Предлагаемое исправление
ent-WeaponLightMachineGunL6C = L6C ROW - .desc = L6 SAW для киборгов. На ходу создаёт патроны калибра .30 винтовочный из встроенного самозарядного фабрикатора боеприпасов. + .desc = Л9 "Кентавр" для киборгов. На ходу создаёт патроны калибра .30 винтовочный из встроенного самозарядного фабрикатора боеприпасов.Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml (1)
2-10: Ссылка на несуществующий файл спрайта.Спрайт
_White/Objects/Weapons/Guns/Ammunition/Magazine/magazineAK220.rsiна строке 10 не существует в репозитории. Необходимо либо создать файл спрайта с правильным путём, либо обновить путь на существующий файл спрайта для магазина AR31 Hydra.Resources/Prototypes/Catalog/Fills/Boxes/syndicate.yml (2)
50-79: Несоответствие родительского класса и визуального стиля.
ThrowingKnivesKitиспользует родительский классBoxCardboard, но визуально оформлен как стальная коробка (box_steel_rib_dark_base,box_steel_synd). Это может привести к несоответствию физического состава материалов и поведения конструирования.Рекомендуется изменить родительский класс на
BoxSteelдля согласованности с визуальным стилем, аналогичноBoxDeathRattleImplants.🐛 Предлагаемое исправление
- type: entity - parent: [BoxCardboard, BaseSyndicateContraband] + parent: [BoxSteel, BaseSyndicateContraband] id: ThrowingKnivesKit name: throwing knives kit
109-138: Аналогичное несоответствие родительского класса и визуального стиля.
CombatBakeryKitтакже используетBoxCardboardкак родительский класс, но стальные спрайты. Для согласованности с визуальным оформлением следует изменить родительский класс.🐛 Предлагаемое исправление
- type: entity - parent: [BoxCardboard, BaseSyndicateContraband] + parent: [BoxSteel, BaseSyndicateContraband] id: CombatBakeryKit name: combat bakery kitResources/Prototypes/Catalog/Fills/Boxes/general.yml (2)
61-80: Отсутствует GenericVisualizer при переопределении Sprite.
BoxLighttubeпереопределяет компонентSpriteродителяBoxLightbulb, но не включаетGenericVisualizer. В SS14 при переопределении компонента родительское определение заменяется полностью. Это приведёт к потере визуального переключения состояний open/closed.Аналогичная проблема присутствует в
BoxLightMixed(линии 82-103) иBoxLighttubeHoliday(линии 105-130).🐛 Предлагаемое исправление для BoxLighttube
- state: box_card map: [ top ] # WWDP end + - type: GenericVisualizer + visuals: + enum.StorageVisuals.Open: + top: + True: { state: box_card_open } + False: { state: box_card } - type: StorageFill
226-248: BoxMRE отсутствует GenericVisualizer.Коробка MRE использует
box_steelдля верхнего слоя, но не имеет GenericVisualizer для переключения наbox_steel_openпри открытии.🐛 Предлагаемое исправление
- state: box_steel map: [ top ] # WWDP end + - type: GenericVisualizer + visuals: + enum.StorageVisuals.Open: + top: + True: { state: box_steel_open } + False: { state: box_steel }
🤖 Fix all issues with AI agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/security.yml`:
- Around line 22-27: В визуализаторе GenericVisualizer измените ссылку на слой:
в блоке visuals → enum.StorageVisuals.Open замените ключ слоя с base на top,
чтобы состояния box_steel_sec_open и box_steel_sec (именованые слои/стейты)
использовали слой top (определённый выше), гарантируя корректное отображение
открытия/закрытия.
In `@Resources/Prototypes/_White/Catalog/Uplink/weaponry.yml`:
- Line 6: The icon sprite paths in weaponry.yml use an incorrect leading
"/Textures/" prefix; update every icon: { sprite: ... } entry (e.g., the sprite
value "/Textures/_White/Objects/Weapons/Guns/Pistols/Xyphos.rsi") to remove the
"/Textures/" segment so they become
"_White/Objects/Weapons/Guns/Pistols/Xyphos.rsi"; apply this change to the
entries at lines noted (6, 157, 199, 213, 227) and any other icon sprite lines
in the file so all RSI paths follow the project convention.
In
`@Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml`:
- Around line 11-22: В директории _White/Objects/Storage/boxes.rsi отсутствует
meta.json, из‑за чего состояния box_steel_rib_base и box_steel_sec не
подхватываются; создайте файл meta.json рядом с PNG‑файлами, перечислив в нём
все спрайт‑состояния (включая box_steel_rib_base и box_steel_sec) с правильными
именами файлов/ключами состояния, чтобы движок распознал эти состояния так же,
как в _White/Objects/Storage/boxes_icon.rsi перечислены bg, shellmeteor,
shellfrag, shelllaser и shellbreach.
In `@Resources/Prototypes/_White/Recipes/Crafting/Graphs/storage/box.yml`:
- Around line 113-125: The entity id in the constructionGraph for id
BoxSteelSmall is misspelled: change the node entry that currently sets entity:
BoxSteelSmalleCrafted to the correct entity id BoxSteelSmallCrafted so the final
crafted entity matches the naming pattern used elsewhere (locate the graph node
named boxsteelsmall and update its entity field).
In `@Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml`:
- Around line 391-407: The GenericVisualizer block (enum.StorageVisuals.Open...)
is incorrectly nested inside the Sprite.layers list; move the entire
GenericVisualizer mapping out of the layers array so that GenericVisualizer is a
sibling of the Sprite component rather than an element of its layers, preserving
the enum.StorageVisuals.Open key and its inner top True/False states; adjust
indentation so Sprite keeps its layers list (including states like
box_plastic_small_base, bg_small, tankblue, box_plastic_small) and
GenericVisualizer appears at the same YAML level as Sprite.
In `@Resources/Prototypes/DeltaV/Catalog/Fills/Boxes/security.yml`:
- Around line 12-15: Normalize the sprite path casing so both occurrences use
the exact same filename case to avoid Linux filesystem mismatches: replace the
mismatched "_White/Objects/Storage/Boxes_icon.rsi" (capital B) with
"_White/Objects/Storage/boxes_icon.rsi" (lowercase b) or vice versa to match the
actual asset filename referenced by the sprite key; ensure the sprite value in
both entries (the two "sprite" strings) is identical and consistent with the
stored asset name.
In `@Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml`:
- Around line 568-572: The tag value "BoxCardBoard" in the Tag block (currently
listed alongside "BoxMaterial" and "Trash") is a typo and should be
"BoxCardboard"; update the tag string "BoxCardBoard" to "BoxCardboard" so
filters and whitelists that expect "BoxCardboard" will match correctly.
In
`@Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cartons.yml`:
- Around line 40-41: Child entities (CigCartonRed, CigCartonBlue,
CigCartonBlack, CigCartonMixed) override the sprite with "state: closed" and
"map: [ box ]", which strips out the layer structure needed by
BaseBagOpenClose/GenericVisualizer to toggle closeLayer and openLayer; revert or
adjust those child Sprite definitions to match the parent's layer structure used
by CigCartonGreen (i.e., include the same named layers and mappings for
closeLayer/openLayer instead of replacing them with a single "box" map) so the
GenericVisualizer can find and toggle the layers.
In `@Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml`:
- Around line 100-105: В прототипе-родителе с id WeaponShotgunBulldog имя было
изменено на "AD-11 Cerberus", но дочерние прототипы WeaponShotgunBulldogEmpty и
WeaponShotgunBulldogHoS всё ещё имеют name: "Bulldog"/"antique Bulldog";
откройте эти дочерние прототипы и обновите их поля name чтобы соответствовать
родителю (например "AD-11 Cerberus" и "antique AD-11 Cerberus") либо приведите
все имена к единому варианту, сохранив konsistentное отображение в игре.
In
`@Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi/meta.json`:
- Around line 11-14: В файле cargo_service.yml исправьте ссылки на
несуществующее состояние "icon" в записях ServiceSmokeables и
ServiceCustomSmokable: заменить state: icon на state: closed, чтобы
соответствовать обновлённым состояниям в meta.json (green.rsi) и обеспечить
корректное отображение иконок грузовых товаров.
In `@Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/meta.json`:
- Around line 3-4: В meta.json указана некоммерческая лицензия в поле "license"
(CC-BY-NC-SA), что может конфликтовать с политикой репозитория; добавьте явную
валидацию и процесс одобрения: пометьте в метаданных (например, добавьте поле
"license_approval": "pending" или "license_approved": false), обновите
документацию/CONTRIBUTING с требованием согласования таких лицензий и создайте
ассигнованный тикет/слэкт-упоминание мейнтейнеров для подтверждения
совместимости перед мерджем; при подтверждении замените флаг на true и
задокументируйте решение.
🟡 Minor comments (14)
Resources/Locale/ru-RU/WWDP_TRANSLATION/prototypes/catalog/fills/backpacks/duffelbag.ftl-16-17 (1)
16-17: Исправьте описание: название уже “Л9 Кентавр”, а в тексте всё ещё “L6”.Сейчас получается несоответствие имени и описания. Обновите описание под новое имя, чтобы избежать путаницы в UI.
🛠️ Предлагаемая правка
-ent-ClothingBackpackDuffelSyndicateFilledLMG = набор "Л9 Кентавр" - .desc = Еще больше дакки: культовый лёгкий пулемет L6 в комплекте с 2 коробами патронов. +ent-ClothingBackpackDuffelSyndicateFilledLMG = набор "Л9 Кентавр" + .desc = Еще больше дакки: культовый лёгкий пулемет Л9 в комплекте с 2 коробами патронов.Resources/Locale/ru-RU/WWDP_TRANSLATION/prototypes/entities/objects/weapons/guns/smgs/smgs.ftl-8-9 (1)
8-9: Незначительные грамматические замечания в описании.В тексте описания есть несколько стилистических моментов:
- Пропущена запятая перед придаточным предложением:
технологии производства, с которыми...- Конструкция
потому, неизвестнозвучит неестественно — лучше использоватьпоэтому неизвестноилииз-за чего неизвестно- Написание
до-Корпорационныхнетипично для русского языка — обычно приставка «до-» пишется слитно:докорпорационных📝 Предлагаемое исправление
ent-WeaponSubMachineGunC20r = СР-12 "Морос" - .desc = Основное огнестрельное оружие любого оперативника Синдиката. Использует технологии производства с которыми Корпорация не знакома - потому, неизвестно, является ли это копией старых до-Корпорационных моделей оружия, или является чем-то абсолютно новым. Невероятно компактен для своей летальности, удобен в использовании и прост для обслуживания. + .desc = Основное огнестрельное оружие любого оперативника Синдиката. Использует технологии производства, с которыми Корпорация не знакома — поэтому неизвестно, является ли это копией старых докорпорационных моделей оружия или чем-то абсолютно новым. Невероятно компактен для своей летальности, удобен в использовании и прост для обслуживания.Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/mixed.rsi/meta.json-11-14 (1)
11-14: Удалите неиспользуемый файлicon.pngИзменения в
meta.jsonподтверждены: оба файлаclosed.pngиopen.pngприсутствуют в директории. Однако файлicon.pngостаётся в папке.rsi, но больше не упоминается в конфигурации. Удалите его, так как он больше не используется после переименования состоянияiconнаclosed.Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml-110-117 (1)
110-117: Несовпадение спрайта при ношении.
Sprite обновлён на Xyphos, но Clothing остаётся из BaseWeaponPistol и всё ещё указывает на viper.rsi — это даст старый спрайт на поясе/в слоте. Переопределите Clothing в этом прототипе.🛠️ Предлагаемое исправление
- type: Sprite sprite: _White/Objects/Weapons/Guns/Pistols/Xyphos.rsi # WWDP edit + - type: Clothing + equipSound: /Audio/_White/Equip/clothingrustle2.ogg # WWDP + sprite: _White/Objects/Weapons/Guns/Pistols/Xyphos.rsi # WWDP edit + quickEquip: false + slots: + - suitStorage + - BeltResources/Prototypes/_White/Recipes/Crafting/crates.yml-68-86 (1)
68-86: Исправьте описание для small‑вариантов.
Line 74-86 и Line 95-97: сейчас указано “A big box...”, хотя это small. Это пользовательский текст и выглядит как опечатка.📝 Возможная правка описаний
- description: A big box for storing things. + description: A small box for storing things.(Применить к BoxCardboardSmall, BoxPlasticSmall, BoxSteelSmall.)
Also applies to: 89-97
Resources/Locale/ru-RU/store/uplink-catalog.ftl-281-281 (1)
281-281: Переименование выполнено, но обнаружена несогласованность.Описание
uplink-sniper-bundle-descобновлено с «Христов» на «ДМР-51 "Циклоп"», однако в этом же файле остались ссылки на старое название:
- Строка 139:
uplink-sniper-ammo-desc— «...для снайперской винтовки Христова»- Строка 142:
uplink-sniper-ammo-shrapnel-desc— «...для снайперской винтовки Христова»Для консистентности локализации эти строки также следует обновить.
🔧 Предлагаемое исправление
uplink-sniper-ammo-name = Коробка патронов (.60 антиматериальные) -uplink-sniper-ammo-desc = Коробка с 30 патронами для снайперской винтовки Христова. +uplink-sniper-ammo-desc = Коробка с 30 патронами для снайперской винтовки ДМР-51 «Циклоп». uplink-sniper-ammo-shrapnel-name = Коробка с патронами (.60 шрапнель) -uplink-sniper-ammo-shrapnel-desc = Коробка с 10 патронами для снайперской винтовки Христова. Для тех случаев, когда враг находится поблизости. +uplink-sniper-ammo-shrapnel-desc = Коробка с 10 патронами для снайперской винтовки ДМР-51 «Циклоп». Для тех случаев, когда враг находится поблизости.Resources/Locale/ru-RU/WWDP_TRANSLATION/_MainS/entity.ftl-1797-1798 (1)
1797-1798: Исправить согласование и тип кавычек в названии/описании.
Сейчас есть ошибка согласования (“миномёта которые”) и прямые кавычки выбиваются из стиля файла.🛠️ Возможная правка
-ent-WeaponLauncherChinaLakeBorg = M80 "Геракл" - .desc = Старинное оружие массового поражения, которое используется штурмовыми отрядами наёмников. Корпорация не хочет признавать существование этого оружия, у пользователей есть лишь догадки о происхождении этого могущественного объекта. Бытует мнение, что это глубокая модификация миномёта которые когда-то были интегрированы в боевые экзоскелеты. Рекомендуется использовать осторожно, проявляя уважение и первобытный страх. Имеет встроенный репликатор, который медленно создаёт боеприпасы. +ent-WeaponLauncherChinaLakeBorg = M80 «Геракл» + .desc = Старинное оружие массового поражения, которое используется штурмовыми отрядами наёмников. Корпорация не хочет признавать существование этого оружия, у пользователей есть лишь догадки о происхождении этого могущественного объекта. Бытует мнение, что это глубокая модификация миномётов, которые когда-то были интегрированы в боевые экзоскелеты. Рекомендуется использовать осторожно, проявляя уважение и первобытный страх. Имеет встроенный репликатор, который медленно создаёт боеприпасы.Resources/Locale/ru-RU/WWDP_TRANSLATION/_MainS/entity.ftl-17132-17133 (1)
17132-17133: Уточнить, является ли различие в ключахent-WeaponLightAR31Hydraиent-WeaponLightRifleAR31Hydraнамеренным.В файле используется ключ
ent-WeaponLightAR31Hydra, но прототип оружия зарегистрирован под IDWeaponLightRifleAR31Hydra(в Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Rifles/rifle.yml). Убедитесь, что это намеренное разделение на две записи, либо рассмотрите создание follow-up issue для унификации ключей.Относительно кавычек: в файле используются обе стили (прямые и французские), консистентности нет. Если требуется уточнить стиль, это лучше решить отдельно.
Resources/Locale/ru-RU/WWDP_TRANSLATION/prototypes/entities/objects/weapons/guns/pistols/pistols.ftl-5-7 (1)
5-7: Несогласованность описаний между вариантами Гадюки.Описания
WeaponPistolViperиWeaponPistolViperEmptyобновлены с новым лором, однако связанные сущности (WeaponPistolViperSecurityна строке 43,WeaponPistolViperWoodна строке 47,WeaponPistolViperWoodSecurityна строке 51) сохраняют старое короткое описание «Небольшой и легко скрываемый пистолет...».Рекомендуется обновить описания всех вариантов Гадюки для согласованности, добавив специфичные суффиксы (СБ, дерево) к общему новому лору.
Also applies to: 39-41
Resources/Locale/ru-RU/WWDP_TRANSLATION/weapons/ranged/snipers.ftl-1-3 (1)
1-3: Несогласованность рода прилагательных в описании.В строке 2 смешаны формы прилагательных разного рода: «Высокоточное, дальнобойное» (средний род) и «достаточно компактная» (женский род). Если описывается оружие/винтовка, следует использовать согласованную форму.
Предлагаемое исправление
- .desc = Модификация АР-31 "Гидры" в марксманскую винтовку. Высокоточное, дальнобойное - и достаточно компактная. Широкое распространение этой модификации и эффект на средний менеджмент вынудило Корпорацию переместить бюрократические функции в космос. + .desc = Модификация АР-31 "Гидры" в марксманскую винтовку. Высокоточная, дальнобойная и достаточно компактная. Широкое распространение этой модификации и эффект на средний менеджмент вынудило Корпорацию переместить бюрократические функции в космос.Resources/Locale/ru-RU/WWDP_TRANSLATION/prototypes/entities/objects/weapons/guns/launchers/launchers.ftl-4-5 (1)
4-5: Исправьте согласование: “миномёта которые” → “миномётов, которые”.Вариант правки
- .desc = Старинное оружие массового поражения, которое используется штурмовыми отрядами наёмников. Корпорация не хочет признавать существование этого оружия, у пользователей есть лишь догадки о происхождении этого могущественного объекта. Бытует мнение, что это глубокая модификация миномёта которые когда-то были интегрированы в боевые экзоскелеты. Рекомендуется использовать осторожно, проявляя уважение и первобытный страх. + .desc = Старинное оружие массового поражения, которое используется штурмовыми отрядами наёмников. Корпорация не хочет признавать существование этого оружия, у пользователей есть лишь догадки о происхождении этого могущественного объекта. Бытует мнение, что это глубокая модификация миномётов, которые когда-то были интегрированы в боевые экзоскелеты. Рекомендуется использовать осторожно, проявляя уважение и первобытный страх.Resources/Locale/ru-RU/WWDP_TRANSLATION/prototypes/entities/objects/weapons/guns/shotguns/shotguns.ftl-5-6 (1)
5-6: Грамматика: “после десятки инцидентов” → “после десятков/десяти инцидентов”.Сейчас формулировка звучит ошибочно. Лучше “после десятков инцидентов” (или “после десяти инцидентов”, если нужно точное число).
Вариант правки (для всех трёх описаний)
- .desc = Автоматический дробовик с барабанным магазином. Переклассифицировано как "оружие массового поражения" после десятки инцидентов "лаборацидов", после чего ими перестали снабжать охранные департаменты на станциях Корпорации. Неизвестным образом, крупные излишки этого оружия попали в широкое пользование Синдикатом. + .desc = Автоматический дробовик с барабанным магазином. Переклассифицировано как "оружие массового поражения" после десятков инцидентов "лаборацидов", после чего ими перестали снабжать охранные департаменты на станциях Корпорации. Неизвестным образом, крупные излишки этого оружия попали в широкое пользование Синдикатом.Also applies to: 53-58
Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml-24-49 (1)
24-49: Несоответствие между описанием и количеством предметов.Описание указывает "Dispenses 30 sterile swabs", но StorageFill содержит 32 предмета. Обновите описание в соответствии с фактическим количеством:
Предлагаемое исправление
- description: Dispenses 30 sterile swabs, extremely useful for botany. + description: Dispenses 32 sterile swabs, extremely useful for botany.Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml-633-710 (1)
633-710: Отсутствует GenericVisualizer при переопределении Sprite.
BoxLightMixedWide,BoxLighttubeWideиBoxLighttubeWideHolidayпереопределяют компонент Sprite родителя, но не включают GenericVisualizer. Это приведёт к потере анимации открытия/закрытия.🐛 Предлагаемое исправление для BoxLightMixedWide
- state: box_card_wide map: [ top ] + - type: GenericVisualizer + visuals: + enum.StorageVisuals.Open: + top: + True: { state: box_card_wide_open } + False: { state: box_card_wide } - type: StorageFill🐛 Предлагаемое исправление для BoxLighttubeWide и BoxLighttubeWideHoliday
- state: box_card_wide_eng map: [ top ] + - type: GenericVisualizer + visuals: + enum.StorageVisuals.Open: + top: + True: { state: box_card_wide_eng_open } + False: { state: box_card_wide_eng } - type: StorageFill
🧹 Nitpick comments (6)
Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml (1)
130-131: LGTM!Смещение штампа корректно адаптировано под меньший размер спрайта письма.
Небольшое замечание по стилю: в
PackageDeliveryиспользуются маркеры# WWDP edit start/# WWDP edit end, а здесь просто# WWDP edit. Для единообразия можно унифицировать формат комментариев, но это не критично.Resources/Locale/ru-RU/WWDP_TRANSLATION/prototypes/entities/objects/weapons/guns/smgs/smgs.ftl (1)
24-29: Описание дублируется в трёх сущностях — это приемлемо, но требует синхронизации.Идентичное описание для
C20r,C20rEmptyиC20rHoS— логично для вариантов одного оружия. Однако при исправлении грамматики (см. выше) потребуется обновить все три вхождения.Resources/Prototypes/_White/Catalog/Fills/GunCase/syndicate.yml (1)
72-73: Непоследовательное форматирование в суффиксе.Суффикс
AR 31Hydraимеет пробел между «AR» и «31», тогда как идентификатор используетAR31Hydraслитно. Для согласованности рекомендуется использовать единый формат, например «AR31 Hydra» или «AR-31 Hydra».Предлагаемое исправление
id: GunCaseSyndicateFilledAR31Hydra - suffix: Syndicate, AR 31Hydra + suffix: Syndicate, AR31 HydraResources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml (1)
37-62: Миграция BoxHoloparasite на BoxSteel выполнена корректно.Структура спрайтов и GenericVisualizer соответствуют паттерну PR. Незначительное замечание: в строке 62 отсутствует пробел перед
}(box_steel_synd}vsbox_steel_synd }), в отличие от строки 91 где форматирование корректно.🔧 Форматирование (опционально)
- False: { state: box_steel_synd} # WWDP end + False: { state: box_steel_synd } # WWDP endResources/Prototypes/Catalog/Fills/Boxes/security.yml (1)
29-55: Возможное несоответствие стиля коробки.
BoxPrisonerHeadsetиспользуетbox_plastic_chem(химический стиль) для верхнего слоя, тогда как это предмет охраны. Возможно, следует использоватьbox_plastic_secдля согласованности с другими коробками охраны (handcuff, sechud, ziptie, forensic).♻️ Предлагаемое исправление
- - state: box_plastic_chem + - state: box_plastic_sec map: [ top ] - type: GenericVisualizer visuals: enum.StorageVisuals.Open: top: - True: { state: box_plastic_chem_open } - False: { state: box_plastic_chem } + True: { state: box_plastic_sec_open } + False: { state: box_plastic_sec }Resources/Prototypes/Catalog/Fills/Boxes/general.yml (1)
1-22: Несогласованное использование GenericVisualizer.Несколько коробок с card-based визуалами (
BoxMousetrap,BoxPDA,BoxID,BoxHeadset,BoxFlare,BoxTrashbag,BoxEncryptionKeyPassenger,BoxCandle,BoxDarts,BoxEnvelope) определяют слойtopсmap: [ top ], но не включаютGenericVisualizerдля анимации открытия/закрытия.В то же время аналогичные коробки (
BoxLightbulb,BoxMesonScanners,BoxInflatable,BoxEncryptionKeyEngineering/Medical/Security) имеют GenericVisualizer.Рекомендуется добавить GenericVisualizer ко всем коробкам с
topслоем для единообразного поведения.Also applies to: 132-196, 303-367, 526-622
| description: uplink-gun-case-viper-desc | ||
| productEntity: GunCaseSyndicateFilledViper | ||
| icon: { sprite: /Textures/Objects/Weapons/Guns/Pistols/viper.rsi, state: icon } | ||
| icon: { sprite: /Textures/_White/Objects/Weapons/Guns/Pistols/Xyphos.rsi, state: icon } # WWDP edit |
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.
🧩 Analysis chain
🏁 Script executed:
# Check the structure of weapon RSI directories
find Textures/_White/Objects/Weapons/Guns -type f -name "*.rsi" 2>/dev/null | head -20Repository: WWhiteDreamProject/wwdpublic
Length of output: 200
🏁 Script executed:
# Check how sprite paths are formatted in other yml files
rg "sprite:" Resources/Prototypes/_White/Catalog/ -A 1 -B 1 | head -50Repository: WWhiteDreamProject/wwdpublic
Length of output: 3816
🏁 Script executed:
# Look at the weaponry.yml file to see all the icon references
sed -n '1,250p' Resources/Prototypes/_White/Catalog/Uplink/weaponry.yml | grep -A 1 "icon:"Repository: WWhiteDreamProject/wwdpublic
Length of output: 1785
Пути к спрайтам используют неправильный формат с префиксом /Textures/.
Согласно установленному соглашению проекта (видно в ship_weapons.yml и других файлах Catalog), пути к RSI-файлам должны опускать папку Textures. Текущий формат /Textures/_White/Objects/Weapons/Guns/{Category}/{weapon}.rsi неправилен.
Необходимо исправить пути на: _White/Objects/Weapons/Guns/{Category}/{weapon}.rsi (без префикса /Textures/).
Это касается всех отмеченных строк: 6, 157, 199, 213, 227 и других записей с иконками в файле.
🤖 Prompt for AI Agents
In `@Resources/Prototypes/_White/Catalog/Uplink/weaponry.yml` at line 6, The icon
sprite paths in weaponry.yml use an incorrect leading "/Textures/" prefix;
update every icon: { sprite: ... } entry (e.g., the sprite value
"/Textures/_White/Objects/Weapons/Guns/Pistols/Xyphos.rsi") to remove the
"/Textures/" segment so they become
"_White/Objects/Weapons/Guns/Pistols/Xyphos.rsi"; apply this change to the
entries at lines noted (6, 157, 199, 213, 227) and any other icon sprite lines
in the file so all RSI paths follow the project convention.
| - type: Sprite | ||
| sprite: _White/Objects/Storage/Boxes.rsi | ||
| sprite: _White/Objects/Storage/boxes.rsi | ||
| layers: | ||
| - state: boxwide | ||
| - state: box_steel_rib_base | ||
| - state: bg | ||
| map: [ paper ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: shellmeteor | ||
| map: [ label ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: box_steel_sec | ||
| map: [ top ] |
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.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Найти все meta.json файлы для boxes.rsi и boxes_icon.rsi
echo "=== Ищу meta.json для boxes.rsi и boxes_icon.rsi ==="
find Resources -name "meta.json" | grep -E "(boxes\.rsi|boxes_icon\.rsi)" || echo "Не найдены"
# Проверить структуру директорий
echo "=== Структура Resources/Prototypes/_White/Objects/Storage ==="
find Resources/Prototypes/_White/Objects/Storage -type d 2>/dev/null | head -20
# Найти все .rsi файлы в Resources
echo "=== Все .rsi файлы в Resources ==="
find Resources -name "*.rsi" -type d 2>/dev/null | grep -i box || echo "Не найдены box*.rsi"Repository: WWhiteDreamProject/wwdpublic
Length of output: 513
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== Содержимое shotgun.yml (строки 1-100) ==="
head -100 Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml
echo ""
echo "=== Состояния в Resources/Textures/Objects/Storage/boxes.rsi/meta.json ==="
python3 <<'PY'
import json
try:
with open("Resources/Textures/Objects/Storage/boxes.rsi/meta.json", "r") as f:
data = json.load(f)
states = [s["name"] for s in data.get("states", [])]
print(f"Найдено {len(states)} состояний:")
for state in sorted(states):
print(f" - {state}")
except Exception as e:
print(f"Ошибка: {e}")
PY
echo ""
echo "=== Состояния в Resources/Textures/_White/Objects/Storage/boxes_icon.rsi/meta.json ==="
python3 <<'PY'
import json
try:
with open("Resources/Textures/_White/Objects/Storage/boxes_icon.rsi/meta.json", "r") as f:
data = json.load(f)
states = [s["name"] for s in data.get("states", [])]
print(f"Найдено {len(states)} состояний:")
for state in sorted(states):
print(f" - {state}")
except Exception as e:
print(f"Ошибка: {e}")
PYRepository: WWhiteDreamProject/wwdpublic
Length of output: 158
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== Содержимое shotgun.yml (первые 95 строк) ==="
cat -n Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml | head -95
echo ""
echo "=== Проверка наличия boxes.rsi в _White ==="
ls -la Resources/Textures/_White/Objects/Storage/ | grep -i box
echo ""
echo "=== meta.json из базовой boxes.rsi (сырой текст) ==="
cat Resources/Textures/Objects/Storage/boxes.rsi/meta.json | head -200Repository: WWhiteDreamProject/wwdpublic
Length of output: 7846
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== meta.json из _White boxes.rsi (первые 500 символов) ==="
head -c 500 Resources/Textures/_White/Objects/Storage/boxes.rsi/meta.json
echo ""
echo ""
echo "=== meta.json из _White boxes_icon.rsi (первые 1000 символов) ==="
head -c 1000 Resources/Textures/_White/Objects/Storage/boxes_icon.rsi/meta.jsonRepository: WWhiteDreamProject/wwdpublic
Length of output: 269
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== Содержимое _White boxes.rsi ==="
ls -la Resources/Textures/_White/Objects/Storage/boxes.rsi/ 2>&1 || echo "Директория недоступна"
echo ""
echo "=== Содержимое _White boxes_icon.rsi ==="
ls -la Resources/Textures/_White/Objects/Storage/boxes_icon.rsi/ | head -20
echo ""
echo "=== Проверка meta.json в boxes_icon.rsi ==="
cat Resources/Textures/_White/Objects/Storage/boxes_icon.rsi/meta.json | head -300Repository: WWhiteDreamProject/wwdpublic
Length of output: 12938
В _White/Objects/Storage/boxes.rsi отсутствует файл meta.json.
Хотя PNG-файлы для состояний box_steel_rib_base и box_steel_sec физически присутствуют в директории, без meta.json они не будут загружены как валидные спрайт-состояния. Требуется создать meta.json с описанием всех состояний в этой директории.
В _White/Objects/Storage/boxes_icon.rsi состояния bg, shellmeteor, shellfrag, shelllaser и shellbreach присутствуют корректно.
🤖 Prompt for AI Agents
In
`@Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml`
around lines 11 - 22, В директории _White/Objects/Storage/boxes.rsi отсутствует
meta.json, из‑за чего состояния box_steel_rib_base и box_steel_sec не
подхватываются; создайте файл meta.json рядом с PNG‑файлами, перечислив в нём
все спрайт‑состояния (включая box_steel_rib_base и box_steel_sec) с правильными
именами файлов/ключами состояния, чтобы движок распознал эти состояния так же,
как в _White/Objects/Storage/boxes_icon.rsi перечислены bg, shellmeteor,
shellfrag, shelllaser и shellbreach.
Resources/Prototypes/_White/Recipes/Crafting/Graphs/storage/box.yml
Outdated
Show resolved
Hide resolved
Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml
Show resolved
Hide resolved
Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cartons.yml
Outdated
Show resolved
Hide resolved
| - type: entity | ||
| name: Bulldog | ||
| name: AD-11 Cerberus # WWDP edit | ||
| # Don't parent to BaseWeaponShotgun because it differs significantly | ||
| parent: [BaseItem, BaseGunWieldable, BaseSyndicateContraband] | ||
| id: WeaponShotgunBulldog | ||
| description: It's a magazine-fed shotgun designed for close quarters combat. Uses .50 shotgun shells. | ||
| description: An automatic shotgun with a drum magazine. Reclassified as a ‘weapon of mass destruction’ after dozens of ‘labor-cides,’ after which they ceased to be supplied to security departments at Corporation stations. In an unknown manner, large surpluses of this weapon fell into widespread use by the Syndicate. |
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.
Несогласованность именования между родительским и дочерними прототипами.
Родительский прототип WeaponShotgunBulldog переименован в "AD-11 Cerberus", но дочерние прототипы сохраняют старое название:
WeaponShotgunBulldogEmpty(строка 217):name: BulldogWeaponShotgunBulldogHoS(строка 235):name: antique Bulldog
Это создаёт несоответствие в игре, где базовый вариант показывает "AD-11 Cerberus", а пустой и HoS варианты — "Bulldog".
🔧 Предлагаемое исправление
- type: entity
- name: Bulldog
+ name: AD-11 Cerberus
parent: [WeaponShotgunBulldog]
id: WeaponShotgunBulldogEmpty
- description: It's a magazine-fed shotgun designed for close quarters combat. Uses .50 shotgun shells.
+ description: An automatic shotgun with a drum magazine. Uses .50 shotgun shells. - type: entity
- name: antique Bulldog
+ name: antique AD-11 Cerberus
parent: WeaponShotgunBulldog
id: WeaponShotgunBulldogHoS🤖 Prompt for AI Agents
In `@Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml`
around lines 100 - 105, В прототипе-родителе с id WeaponShotgunBulldog имя было
изменено на "AD-11 Cerberus", но дочерние прототипы WeaponShotgunBulldogEmpty и
WeaponShotgunBulldogHoS всё ещё имеют name: "Bulldog"/"antique Bulldog";
откройте эти дочерние прототипы и обновите их поля name чтобы соответствовать
родителю (например "AD-11 Cerberus" и "antique AD-11 Cerberus") либо приведите
все имена к единому варианту, сохранив konsistentное отображение в игре.
Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi/meta.json
Show resolved
Hide resolved
| "license": "CC-BY-NC-SA-4.0", | ||
| "copyright": "Swebit (@bonquai) for WWhiteDreamProject, 18.01.2026", |
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.
Проверьте совместимость CC‑BY‑NC‑SA с политикой проекта.
Line 3–4: переход на некоммерческую лицензию может конфликтовать с общей лицензией/правилами распространения ассетов в репозитории. Нужна явная валидация у мейнтейнеров или в документации лицензирования ассетов.
🤖 Prompt for AI Agents
In `@Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/meta.json`
around lines 3 - 4, В meta.json указана некоммерческая лицензия в поле "license"
(CC-BY-NC-SA), что может конфликтовать с политикой репозитория; добавьте явную
валидацию и процесс одобрения: пометьте в метаданных (например, добавьте поле
"license_approval": "pending" или "license_approved": false), обновите
документацию/CONTRIBUTING с требованием согласования таких лицензий и создайте
ассигнованный тикет/слэкт-упоминание мейнтейнеров для подтверждения
совместимости перед мерджем; при подтверждении замените флаг на true и
задокументируйте решение.
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
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml (2)
397-426: Отсутствует тегBoxCardboardпри использованииBoxMaterialBase.
FoodContainerEggиFoodBoxPizzaтакже используютBoxMaterialBaseкак родителя и явно добавляют тегBoxCardboard. Здесь тег отсутствует, что может нарушить whitelist-фильтрацию.🛠️ Предлагаемое исправление
- type: StorageFill contents: - id: FoodDonkpocket amount: 6 + - type: Tag # WWDP edit + tags: + - BoxCardboard - type: Construction # WWDP edit start graph: BoxCardboard node: boxcardboard
8-76: Добавьте тегBoxCardboardв компонентTagсущностиFoodBoxDonut.
FoodContainerEgg(строки 161-163) иFoodBoxPizza(строки 249-251) явно добавляют тегBoxCardboard, ноFoodBoxDonut— нет. Сущность использует Construction с графикомBoxCardboard, но без соответствующего тега она не будет совпадать с фильтрами и whitelist'ами, которые ожидают этот тег. Это создаёт логическую несогласованность с остальными коробками.Необходимое изменение
- type: Tag tags: - BoxCardboard
🤖 Fix all issues with AI agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/security.yml`:
- Around line 13-19: The YAML for the box uses the state "flashbang" but the
contents are barrier grenades; update the visual mapping by either changing the
state in this file from "flashbang" to a new or existing state that represents
barrier grenades (e.g., "barrier" or "barrier_grenade") or add a new state entry
with that name inside the sprite resource "boxes_icon.rsi"; specifically modify
the state list (currently containing "box_steel_rib_base", "bg", "flashbang") so
the sprite state matches a barrier-grenade state, and if you choose to add the
state, add the corresponding image/frame definition in boxes_icon.rsi.
♻️ Duplicate comments (1)
Resources/Prototypes/_White/Recipes/Crafting/Graphs/storage/box.yml (1)
113-125: Опечатка исправлена.Ранее отмеченная опечатка
BoxSteelSmalleCrafted→BoxSteelSmallCraftedбыла исправлена в коммите 00d4198.
🧹 Nitpick comments (3)
Resources/Prototypes/_White/Recipes/Crafting/Graphs/storage/box.yml (1)
1-125: Непоследовательный стиль отступов в YAML.В файле используются разные стили отступов:
BoxCardboardи графы Wide/Small (строки 1-13, 43-125) используют прямой отступ списка подgraph:BoxPlasticиBoxSteel(строки 15-41) используют дополнительный уровень отступаФункционально это не влияет на работу, но для единообразия рекомендуется привести к одному стилю.
♻️ Предлагаемое исправление для BoxPlastic и BoxSteel
- type: constructionGraph id: BoxPlastic start: start graph: - - node: start - edges: - - to: boxplastic - steps: - - material: Plastic - amount: 1 - doAfter: 4 - - node: boxplastic - entity: BoxPlasticCrafted + - node: start + edges: + - to: boxplastic + steps: + - material: Plastic + amount: 1 + doAfter: 4 + - node: boxplastic + entity: BoxPlasticCrafted - type: constructionGraph id: BoxSteel start: start graph: - - node: start - edges: - - to: boxsteel - steps: - - material: Steel - amount: 1 - doAfter: 4 - - node: boxsteel - entity: BoxSteelCrafted + - node: start + edges: + - to: boxsteel + steps: + - material: Steel + amount: 1 + doAfter: 4 + - node: boxsteel + entity: BoxSteelCraftedResources/Prototypes/Catalog/Fills/Boxes/emergency.yml (1)
1-497: Рекомендация по уменьшению дублирования кода (опционально).Азотные варианты копируют почти полные определения
Spriteтолько для изменения одного слоя (tankblue→tankred). Можно рассмотреть использование YAML-якорей или вынос общих слоёв в базовые прототипы для упрощения поддержки. Это не блокирующее замечание — текущая структура функциональна.Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml (1)
249-259: Дублирующийся комментарий# WWDP edit start.Комментарий
# WWDP edit startна строке 252 избыточен — блок WWDP-изменений уже начался на строке 249. Рекомендуется удалить дублирующийся маркер для ясности.♻️ Предлагаемое исправление
- type: Tag # WWDP edit start tags: - BoxCardboard - - type: Construction # WWDP edit start + - type: Construction graph: BoxCardboard node: boxcardboard containers: - entity_storage - type: PhysicalComposition materialComposition: Cardboard: 100 # WWDP end
| - state: box_steel_rib_base | ||
| - state: bg | ||
| map: [ paper ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: flashbang | ||
| map: [ label ] | ||
| sprite: _White/Objects/Storage/boxes_icon.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.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find boxes_icon.rsi and extract available states from meta.json
fd "boxes_icon\.rsi" -t d -x sh -c '
if [ -f "$1/meta.json" ]; then
echo "=== Available states in $1 ==="
jq -r ".states[]? | .name" "$1/meta.json" 2>/dev/null | sort
fi
' sh {}Repository: WWhiteDreamProject/wwdpublic
Length of output: 704
🏁 Script executed:
#!/bin/bash
# Get the full security.yml file to see entity context
cat -n Resources/Prototypes/_White/Catalog/Fills/Boxes/security.yml | head -40
echo "---"
echo "Searching for barrier grenade references in prototypes:"
rg "barrier.*grenade|barriergrenade" -i Resources/Prototypes/ --max-count 5Repository: WWhiteDreamProject/wwdpublic
Length of output: 1454
🏁 Script executed:
#!/bin/bash
# Search for grenade box entities and their label configurations
rg "BoxGrenade|name:.*grenade.*box" -A 15 Resources/Prototypes/_White/Catalog/Fills/Boxes/ | grep -A 15 "label"Repository: WWhiteDreamProject/wwdpublic
Length of output: 266
🏁 Script executed:
#!/bin/bash
# Search for all grenade-related box entities across the Fills/Boxes directory
echo "=== All grenade box entities ==="
rg "type: entity" -A 20 Resources/Prototypes/_White/Catalog/Fills/Boxes/ | grep -B 2 -A 18 "grenade"
echo ""
echo "=== Flashbang grenade definition ==="
rg "id: GrenadeBarrier|id: GrenadeFlash" -B 2 -A 10 Resources/Prototypes/_White/Entities/Objects/Weapons/Throwable/grenades.ymlRepository: WWhiteDreamProject/wwdpublic
Length of output: 2359
Визуальное несоответствие иконки для коробки с барьерными гранатами.
Коробка содержит барьерные гранаты, но использует иконку flashbang (для флэшбэнг гранат). В boxes_icon.rsi нет отдельного state для барьерных гранат, поэтому необходимо либо:
- Принять текущее обозначение как условное,
- Либо добавить новый state
barrierилиbarrier_grenadeвboxes_icon.rsiдля более точного отображения содержимого.
🤖 Prompt for AI Agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/security.yml` around lines 13
- 19, The YAML for the box uses the state "flashbang" but the contents are
barrier grenades; update the visual mapping by either changing the state in this
file from "flashbang" to a new or existing state that represents barrier
grenades (e.g., "barrier" or "barrier_grenade") or add a new state entry with
that name inside the sprite resource "boxes_icon.rsi"; specifically modify the
state list (currently containing "box_steel_rib_base", "bg", "flashbang") so the
sprite state matches a barrier-grenade state, and if you choose to add the
state, add the corresponding image/frame definition in boxes_icon.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: 1
🤖 Fix all issues with AI agents
In `@Resources/Textures/_White/Objects/Storage/Boxes.rsi/meta.json`:
- Around line 11-39: The metadata declares new sprite states (e.g., "box_card",
"box_card_open", "box_card_base", "box_card_icon", "box_card_eng",
"box_card_eng_open", "box_card_med", "box_card_med_open", "box_card_sec",
"box_card_sec_open" and others in the 41–333 range) but the matching PNG files
are missing or misnamed, causing RSI Validator failures; fix by either adding
correctly named PNGs into the textures directory to match each declared state
name or by removing/renaming the state entries in meta.json so every state
exactly matches an existing *.png filename (ensure exact name and extension
matching for each state like the "box_card*" entries).
| "name": "box_card" | ||
| }, | ||
| { | ||
| "name": "shellmeteor" | ||
| "name": "box_card_open" | ||
| }, | ||
| { | ||
| "name": "shellfrag" | ||
| "name": "box_card_base" | ||
| }, | ||
| { | ||
| "name": "shelllaser" | ||
| "name": "box_card_icon" | ||
| }, | ||
| { | ||
| "name": "shellbreach" | ||
| "name": "box_card_eng" | ||
| }, | ||
| { | ||
| "name": "box_card_eng_open" | ||
| }, | ||
| { | ||
| "name": "box_card_med" | ||
| }, | ||
| { | ||
| "name": "box_card_med_open" | ||
| }, | ||
| { | ||
| "name": "box_card_sec" | ||
| }, | ||
| { | ||
| "name": "box_card_sec_open" | ||
| }, |
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.
Блокирующая ошибка: отсутствуют PNG для объявленных состояний.
RSI Validator падает на box_card* (и др.) — новые состояния объявлены в states, но соответствующих *.png файлов нет или имена не совпадают. Добавьте файлы в Resources/Textures/_White/Objects/Storage/Boxes.rsi/ либо откатите/переименуйте состояния так, чтобы они соответствовали реальным PNG.
Also applies to: 41-333
🤖 Prompt for AI Agents
In `@Resources/Textures/_White/Objects/Storage/Boxes.rsi/meta.json` around lines
11 - 39, The metadata declares new sprite states (e.g., "box_card",
"box_card_open", "box_card_base", "box_card_icon", "box_card_eng",
"box_card_eng_open", "box_card_med", "box_card_med_open", "box_card_sec",
"box_card_sec_open" and others in the 41–333 range) but the matching PNG files
are missing or misnamed, causing RSI Validator failures; fix by either adding
correctly named PNGs into the textures directory to match each declared state
name or by removing/renaming the state entries in meta.json so every state
exactly matches an existing *.png filename (ensure exact name and extension
matching for each state like the "box_card*" entries).
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: 6
🤖 Fix all issues with AI agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml`:
- Around line 285-288: В компоненте Storage (в блоке для BoxSteelWideCrafted и
других соответствующих коробок) отсутствует свойство blacklist: добавьте в
определение компонента Storage поле blacklist с тегом BoxMaterial (как в
BoxCardboardWideCrafted) чтобы исключить материалы коробок; найдите определения
Storage и конкретно BoxSteelWideCrafted и добавьте blacklist: - BoxMaterial
внутри компонента Storage.
- Around line 633-654: BoxLightMixedWide sets the top sprite state to
box_card_wide but doesn't override the parent's GenericVisualizer, causing
open/close to switch to the wrong sprites; add a GenericVisualizer component to
BoxLightMixedWide that maps the open/closed/idle states for the top layer to the
same keys the parent uses (e.g., box_card_wide_eng and box_card_wide_eng_open)
so the StorageFill open/close behavior uses the correct sprites; reference the
entity name BoxLightMixedWide, parent BoxLightbulbWide, the top layer and the
GenericVisualizer component when implementing the change.
- Around line 239-242: Add a blacklist to the Storage component of the
BoxPlasticWideCrafted prototype to match the other wide boxes: update the
Storage component in BoxPlasticWideCrafted to include a "blacklist" entry that
forbids items with the tag "BoxMaterial" (same as the blacklist used in
BoxCardboardWideCrafted), ensuring plastic wide boxes cannot contain other
boxes; keep the existing maxItemSize and grid values unchanged.
In
`@Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml`:
- Around line 12-13: Issue: sprite path casing is incorrect—replace
"_White/Objects/Storage/Boxes.rsi" with "_White/Objects/Storage/boxes.rsi".
Locate the four occurrences of the exact string
"_White/Objects/Storage/Boxes.rsi" in the shotgun.yml (search for the sprite
entry and any other lines referencing that path) and change them to
"_White/Objects/Storage/boxes.rsi" so casing matches the actual filename; keep
the rest of the paths (e.g., boxes_icon.rsi) unchanged.
- Around line 7-10: В yaml для shotgun.yml в блоке StorageFill вы указываете
amount: 16, но BoxMagazine наследует BoxSteel → BoxSteelCrafted →
BoxMaterialBase, где Storage.grid = [0,0,3,3] (3×3 = 9 слотов), поэтому 16 не
вмещается; исправьте либо amount на 9 или меньше (например amount: 9), либо
переопределите Storage.grid в определении BoxMagazine (увеличив размер сетки)
чтобы вместить 16 ShellShotgunMeteor; обновите соответствующее поле Storage или
StorageFill в сущности BoxMagazine/shotgun.yml.
In `@Resources/Prototypes/_White/Recipes/Crafting/crates.yml`:
- Around line 67-98: Update the description field for the three small box
constructions so it correctly reads "A small box for storing things." instead of
"A big box for storing things." — locate the entries for name: box cardboard
small (id: BoxCardboardSmall, graph: BoxCardboardSmall), name: box plastic small
(id: BoxPlasticSmall, graph: BoxPlasticSmall), and name: box steel small (id:
BoxSteelSmall, graph: BoxSteelSmall) and change each description value to "A
small box for storing things.".
♻️ Duplicate comments (2)
Resources/Textures/_White/Objects/Storage/Boxes.rsi/meta.json (1)
9-333: Критическая ошибка: отсутствуют PNG-файлы для всех объявленных состояний.RSI Validator сообщает об ошибках для каждого из ~100+ состояний, объявленных в этом файле. Ни один из PNG-файлов (
box_card.png,box_plastic.png,box_steel.pngи т.д.) не найден в директории RSI.Необходимо добавить все соответствующие PNG-файлы в
Resources/Textures/_White/Objects/Storage/Boxes.rsi/или удалить/исправить несоответствующие записи состояний.Проверим, существуют ли PNG-файлы где-либо в репозитории:
#!/bin/bash # Description: Check if any box_*.png files exist in the repository echo "=== Searching for box PNG files in Boxes.rsi directory ===" fd -e png . "Resources/Textures/_White/Objects/Storage/Boxes.rsi" 2>/dev/null || echo "Directory not found or empty" echo "" echo "=== Searching for box_card.png anywhere in repository ===" fd "box_card.png" --type f 2>/dev/null | head -20 echo "" echo "=== Listing contents of Boxes.rsi directory ===" ls -la "Resources/Textures/_White/Objects/Storage/Boxes.rsi/" 2>/dev/null || echo "Directory not found"Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml (1)
14-22: Спрайт‑состояния могут не грузиться без meta.json в _White/Objects/Storage/boxes.rsi.Если
meta.jsonвсё ещё отсутствует, состоянияbox_steel_rib_baseиbox_steel_secне будут доступны, и коробки останутся без базового/верхнего слоя. Пожалуйста, убедитесь, чтоmeta.jsonдобавлен и перечисляет эти состояния.
🧹 Nitpick comments (2)
Resources/Prototypes/_White/Recipes/Crafting/crates.yml (1)
1-32: Несогласованный порядок слов в названиях.Первая коробка называется
cardboard box(строка 2), а остальные —box plasticиbox steel(строки 13, 24). Рекомендуется привести к единому стилю для консистентности.♻️ Предлагаемое исправление
- type: construction - name: cardboard box + name: box cardboard id: BoxCardboardЛибо, наоборот, переименовать остальные:
- type: construction - name: box plastic + name: plastic box id: BoxPlasticResources/Prototypes/_White/Catalog/Fills/Boxes/general.yml (1)
693-710: Можно упростить StorageFill с помощьюamount.Вместо 16 отдельных записей для чередующихся лампочек можно использовать
amountдля каждого типа. Если порядок не важен для геймплея, это улучшит читаемость.♻️ Предлагаемый рефакторинг
- type: StorageFill contents: - - id: LightTubeCrystalRed - - id: LightTubeCrystalGreen - - id: LightTubeCrystalRed - - id: LightTubeCrystalGreen - - id: LightTubeCrystalRed - - id: LightTubeCrystalGreen - - id: LightTubeCrystalRed - - id: LightTubeCrystalGreen - - id: LightTubeCrystalRed - - id: LightTubeCrystalGreen - - id: LightTubeCrystalRed - - id: LightTubeCrystalGreen - - id: LightTubeCrystalRed - - id: LightTubeCrystalGreen - - id: LightTubeCrystalRed - - id: LightTubeCrystalGreen + - id: LightTubeCrystalRed + amount: 8 + - id: LightTubeCrystalGreen + amount: 8
| - type: Storage | ||
| maxItemSize: Large | ||
| grid: | ||
| - 0,0,7,3 |
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.
Отсутствует blacklist в компоненте Storage.
В BoxCardboardWideCrafted (строка 192-194) явно указан blacklist с тегом BoxMaterial, но в BoxPlasticWideCrafted он отсутствует. Это позволит хранить коробки внутри пластиковых широких коробок, что противоречит логике остальных прототипов.
🔧 Предлагаемое исправление
- type: Storage
maxItemSize: Large
+ blacklist:
+ tags:
+ - BoxMaterial
grid:
- 0,0,7,3📝 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: Storage | |
| maxItemSize: Large | |
| grid: | |
| - 0,0,7,3 | |
| - type: Storage | |
| maxItemSize: Large | |
| blacklist: | |
| tags: | |
| - BoxMaterial | |
| grid: | |
| - 0,0,7,3 |
🤖 Prompt for AI Agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml` around lines 239
- 242, Add a blacklist to the Storage component of the BoxPlasticWideCrafted
prototype to match the other wide boxes: update the Storage component in
BoxPlasticWideCrafted to include a "blacklist" entry that forbids items with the
tag "BoxMaterial" (same as the blacklist used in BoxCardboardWideCrafted),
ensuring plastic wide boxes cannot contain other boxes; keep the existing
maxItemSize and grid values unchanged.
| - type: Storage | ||
| maxItemSize: Large | ||
| grid: | ||
| - 0,0,7,3 |
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.
Отсутствует blacklist в компоненте Storage.
Аналогичная проблема в BoxSteelWideCrafted — отсутствует blacklist с тегом BoxMaterial, который есть в BoxCardboardWideCrafted.
🔧 Предлагаемое исправление
- type: Storage
maxItemSize: Large
+ blacklist:
+ tags:
+ - BoxMaterial
grid:
- 0,0,7,3📝 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: Storage | |
| maxItemSize: Large | |
| grid: | |
| - 0,0,7,3 | |
| - type: Storage | |
| maxItemSize: Large | |
| blacklist: | |
| tags: | |
| - BoxMaterial | |
| grid: | |
| - 0,0,7,3 |
🤖 Prompt for AI Agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml` around lines 285
- 288, В компоненте Storage (в блоке для BoxSteelWideCrafted и других
соответствующих коробок) отсутствует свойство blacklist: добавьте в определение
компонента Storage поле blacklist с тегом BoxMaterial (как в
BoxCardboardWideCrafted) чтобы исключить материалы коробок; найдите определения
Storage и конкретно BoxSteelWideCrafted и добавьте blacklist: - BoxMaterial
внутри компонента Storage.
| - type: entity | ||
| name: mixed lights box | ||
| parent: BoxLightbulbWide | ||
| id: BoxLightMixedWide | ||
| components: | ||
| - type: Sprite | ||
| layers: | ||
| - state: box_card_wide_base | ||
| - state: bg | ||
| map: [ paper ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: lightmixed | ||
| map: [ label ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: box_card_wide | ||
| map: [ top ] | ||
| - type: StorageFill | ||
| contents: | ||
| - id: LightTube | ||
| amount: 8 | ||
| - id: LightBulb | ||
| amount: 8 |
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 и унаследованным GenericVisualizer.
BoxLightMixedWide устанавливает начальное состояние слоя top как box_card_wide (строка 647), но не переопределяет GenericVisualizer. Родительский BoxLightbulbWide использует состояния box_card_wide_eng / box_card_wide_eng_open. При открытии/закрытии хранилища визуализатор будет переключаться на неправильные спрайты.
🐛 Предлагаемое исправление — добавить GenericVisualizer
- state: box_card_wide
map: [ top ]
+ - type: GenericVisualizer
+ visuals:
+ enum.StorageVisuals.Open:
+ top:
+ True: { state: box_card_wide_open }
+ False: { state: box_card_wide }
- type: StorageFill
contents:🤖 Prompt for AI Agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml` around lines 633
- 654, BoxLightMixedWide sets the top sprite state to box_card_wide but doesn't
override the parent's GenericVisualizer, causing open/close to switch to the
wrong sprites; add a GenericVisualizer component to BoxLightMixedWide that maps
the open/closed/idle states for the top layer to the same keys the parent uses
(e.g., box_card_wide_eng and box_card_wide_eng_open) so the StorageFill
open/close behavior uses the correct sprites; reference the entity name
BoxLightMixedWide, parent BoxLightbulbWide, the top layer and the
GenericVisualizer component when implementing the change.
| - type: StorageFill | ||
| contents: | ||
| - id: ShellShotgunMeteor | ||
| amount: 16 |
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.
🧩 Analysis chain
🏁 Script executed:
rg -n -C10 -g '*.yml' 'id:\s*BoxMagazine' Resources/PrototypesRepository: WWhiteDreamProject/wwdpublic
Length of output: 24064
🏁 Script executed:
sed -n '3,30p' Resources/Prototypes/Catalog/Fills/Boxes/ammunition.ymlRepository: WWhiteDreamProject/wwdpublic
Length of output: 821
🏁 Script executed:
rg -n -C10 -g '*.yml' 'id:\s*BoxSteel' Resources/PrototypesRepository: WWhiteDreamProject/wwdpublic
Length of output: 22454
🏁 Script executed:
sed -n '142,170p' Resources/Prototypes/_White/Catalog/Fills/Boxes/general.ymlRepository: WWhiteDreamProject/wwdpublic
Length of output: 787
🏁 Script executed:
sed -n '142,240p' Resources/Prototypes/_White/Catalog/Fills/Boxes/general.ymlRepository: WWhiteDreamProject/wwdpublic
Length of output: 2326
🏁 Script executed:
rg -n -C15 -g '*.yml' 'id:\s*BoxMaterialBase' Resources/Prototypes/_WhiteRepository: WWhiteDreamProject/wwdpublic
Length of output: 1583
Вместимость BoxMagazine недостаточна для 16 снарядов.
BoxMagazine наследует от BoxSteel → BoxSteelCrafted → BoxMaterialBase. У BoxMaterialBase в Storage сетка 3×3 (grid: [0,0,3,3]), то есть 9 слотов. StorageFill с amount: 16 превышает эту ёмкость — 7 предметов не поместятся. Исправьте amount на 9 или меньше, либо переопределите Storage.grid в BoxMagazine если требуется больше слотов.
🤖 Prompt for AI Agents
In
`@Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml`
around lines 7 - 10, В yaml для shotgun.yml в блоке StorageFill вы указываете
amount: 16, но BoxMagazine наследует BoxSteel → BoxSteelCrafted →
BoxMaterialBase, где Storage.grid = [0,0,3,3] (3×3 = 9 слотов), поэтому 16 не
вмещается; исправьте либо amount на 9 или меньше (например amount: 9), либо
переопределите Storage.grid в определении BoxMagazine (увеличив размер сетки)
чтобы вместить 16 ShellShotgunMeteor; обновите соответствующее поле Storage или
StorageFill в сущности BoxMagazine/shotgun.yml.
Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml
Outdated
Show resolved
Hide resolved
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
🤖 Fix all issues with AI agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml`:
- Around line 320-456: The three small box entities (BoxCardboardSmallCrafted,
BoxPlasticSmallCrafted, BoxSteelSmallCrafted) have inconsistent Item.size and
Storage.maxItemSize values; pick a single pair and apply it to all three (e.g.,
Item.size: Normal and Storage.maxItemSize: Small) by updating the Item component
and the Storage component in each entity to the chosen values so they match the
unified sizing logic used for wide boxes.
♻️ Duplicate comments (5)
Resources/Prototypes/_White/Recipes/Crafting/crates.yml (1)
67-98: Некорректное описание для маленьких коробок.Все три маленькие коробки имеют описание
"A big box for storing things.", хотя должно быть"A small box for storing things.".🐛 Предлагаемое исправление
- type: construction name: box cardboard small id: BoxCardboardSmall graph: BoxCardboardSmall startNode: start targetNode: boxcardboardsmall category: construction-category-storage - description: A big box for storing things. + description: A small box for storing things. icon: { sprite: _White/Objects/Storage/boxes.rsi, state: box_card_small_icon } objectType: Item - type: construction name: box plastic small id: BoxPlasticSmall graph: BoxPlasticSmall startNode: start targetNode: boxplasticsmall category: construction-category-storage - description: A big box for storing things. + description: A small box for storing things. icon: { sprite: _White/Objects/Storage/boxes.rsi, state: box_plastic_small_icon } objectType: Item - type: construction name: box steel small id: BoxSteelSmall graph: BoxSteelSmall startNode: start targetNode: boxsteelsmall category: construction-category-storage - description: A big box for storing things. + description: A small box for storing things. icon: { sprite: _White/Objects/Storage/boxes.rsi, state: box_steel_small_icon } objectType: ItemResources/Prototypes/_White/Catalog/Fills/Boxes/general.yml (3)
239-242: Отсутствуетblacklistв компоненте Storage.В
BoxPlasticWideCraftedне указан blacklist с тегомBoxMaterial, который присутствует вBoxCardboardWideCrafted(строки 192-194). Это позволит хранить коробки внутри пластиковых широких коробок.🔧 Предлагаемое исправление
- type: Storage maxItemSize: Large + blacklist: + tags: + - BoxMaterial grid: - 0,0,7,3
285-288: Отсутствуетblacklistв компоненте Storage.Аналогичная проблема в
BoxSteelWideCrafted— отсутствует blacklist с тегомBoxMaterial.🔧 Предлагаемое исправление
- type: Storage maxItemSize: Large + blacklist: + tags: + - BoxMaterial grid: - 0,0,7,3
633-654: Несоответствие между Sprite и унаследованным GenericVisualizer.
BoxLightMixedWideустанавливает состояние слояtopкакbox_card_wide(строка 647), но не переопределяетGenericVisualizer. РодительскийBoxLightbulbWideиспользует состоянияbox_card_wide_eng/box_card_wide_eng_open. При открытии/закрытии визуализатор будет переключаться на неправильные спрайты.🐛 Предлагаемое исправление — добавить GenericVisualizer
- state: box_card_wide map: [ top ] + - type: GenericVisualizer + visuals: + enum.StorageVisuals.Open: + top: + True: { state: box_card_wide_open } + False: { state: box_card_wide } - type: StorageFill contents:Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml (1)
7-10: Проверьте вместимость: 16 патронов могут не помещаться в BoxMagazine.Если BoxMagazine всё ещё наследует сетку 3×3 (9 слотов), 7 снарядов не поместятся и выпадут. Это уже отмечалось ранее; нужно либо уменьшить
amount, либо увеличитьStorage.grid/размер для этих коробок (или сделать отдельного родителя под 16 слотов).🛠️ Вариант: уменьшить количество до 9 (применить ко всем четырём коробкам)
- - id: ShellShotgunMeteor - amount: 16 + - id: ShellShotgunMeteor + amount: 9
🧹 Nitpick comments (1)
Resources/Prototypes/_White/Recipes/Crafting/crates.yml (1)
2-2: Непоследовательное именование рецептов.Порядок слов в названиях отличается:
cardboard boxvsbox plastic/box steel. Рекомендуется унифицировать формат для всех рецептов.♻️ Предлагаемое исправление
- type: construction - name: cardboard box + name: box cardboard id: BoxCardboardИли альтернативно изменить остальные на формат
[material] box.Also applies to: 13-13, 24-24
| - type: entity | ||
| name: small cardboard box | ||
| parent: BoxMaterialBase | ||
| id: BoxCardboardSmallCrafted | ||
| suffix: No paper | ||
| description: A small cardboard box for storing things. | ||
| components: | ||
| - type: Item | ||
| size: Large | ||
| shape: | ||
| - 0,0,1,1 | ||
| - type: Storage | ||
| maxItemSize: Normal | ||
| grid: | ||
| - 0,0,2,2 | ||
| - type: Sprite | ||
| sprite: _White/Objects/Storage/boxes.rsi | ||
| layers: | ||
| - state: box_card_small_base | ||
| - state: bg_small | ||
| map: [ paper ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: icon | ||
| map: [ label ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: box_card_small | ||
| map: [ top ] | ||
| - type: GenericVisualizer | ||
| visuals: | ||
| enum.StorageVisuals.Open: | ||
| top: | ||
| True: { state: box_card_small_open } | ||
| False: { state: box_card_small } | ||
| - type: Tag | ||
| tags: | ||
| - BoxCardboard | ||
| - BoxMaterial | ||
| - type: Construction | ||
| graph: BoxCardboardSmall | ||
| node: boxcardboardsmall | ||
| containers: | ||
| - entity_storage | ||
| - type: PhysicalComposition | ||
| materialComposition: | ||
| Cardboard: 100 | ||
|
|
||
| - type: entity | ||
| name: small plastic box | ||
| parent: BoxMaterialBase | ||
| id: BoxPlasticSmallCrafted | ||
| suffix: No paper | ||
| description: A small plastic box for storing things. | ||
| components: | ||
| - type: Item | ||
| size: Normal | ||
| shape: | ||
| - 0,0,1,1 | ||
| - type: Storage | ||
| maxItemSize: Small | ||
| grid: | ||
| - 0,0,2,2 | ||
| - type: Sprite | ||
| sprite: _White/Objects/Storage/boxes.rsi | ||
| layers: | ||
| - state: box_plastic_small_base | ||
| - state: bg_small | ||
| map: [ paper ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: icon | ||
| map: [ label ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: box_plastic_small | ||
| map: [ top ] | ||
| - type: GenericVisualizer | ||
| visuals: | ||
| enum.StorageVisuals.Open: | ||
| top: | ||
| True: { state: box_plastic_small_open } | ||
| False: { state: box_plastic_small } | ||
| - type: Tag | ||
| tags: | ||
| - BoxPlastic | ||
| - BoxMaterial | ||
| - type: Construction | ||
| graph: BoxPlasticSmall | ||
| node: boxplasticsmall | ||
| containers: | ||
| - entity_storage | ||
| - type: PhysicalComposition | ||
| materialComposition: | ||
| Plastic: 100 | ||
|
|
||
| - type: entity | ||
| name: small steel box | ||
| parent: BoxMaterialBase | ||
| id: BoxSteelSmallCrafted | ||
| suffix: No paper | ||
| description: A small steel box for storing things. | ||
| components: | ||
| - type: Item | ||
| size: Large | ||
| shape: | ||
| - 0,0,1,1 | ||
| - type: Storage | ||
| maxItemSize: Small | ||
| grid: | ||
| - 0,0,2,2 | ||
| - type: Sprite | ||
| sprite: _White/Objects/Storage/boxes.rsi | ||
| layers: | ||
| - state: box_steel_small_base | ||
| - state: bg_small | ||
| map: [ paper ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: icon | ||
| map: [ label ] | ||
| sprite: _White/Objects/Storage/boxes_icon.rsi | ||
| - state: box_steel_small | ||
| map: [ top ] | ||
| - type: GenericVisualizer | ||
| visuals: | ||
| enum.StorageVisuals.Open: | ||
| top: | ||
| True: { state: box_steel_small_open } | ||
| False: { state: box_steel_small } | ||
| - type: Tag | ||
| tags: | ||
| - BoxSteel | ||
| - BoxMaterial | ||
| - type: Construction | ||
| graph: BoxSteelSmall | ||
| node: boxsteelsmall | ||
| containers: | ||
| - entity_storage | ||
| - type: PhysicalComposition | ||
| materialComposition: | ||
| Steel: 100 |
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.
🧩 Analysis chain
🏁 Script executed:
# Проверим наличие файла и его содержимое
find . -type f -name "general.yml" | grep -i boxesRepository: WWhiteDreamProject/wwdpublic
Length of output: 317
🏁 Script executed:
# Если файл найден, проверим его размер
wc -l Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml 2>/dev/null || echo "File not found at exact path"Repository: WWhiteDreamProject/wwdpublic
Length of output: 135
🏁 Script executed:
# Проверим содержимое указанных строк (320-456)
sed -n '320,456p' Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml 2>/dev/null | head -100Repository: WWhiteDreamProject/wwdpublic
Length of output: 2428
🏁 Script executed:
# Также поищем эти сущности в файле для проверки
rg -n "BoxCardboardSmallCrafted|BoxPlasticSmallCrafted|BoxSteelSmallCrafted" --type yaml Resources/Prototypes/_White/Catalog/Fills/Boxes/Repository: WWhiteDreamProject/wwdpublic
Length of output: 641
🏁 Script executed:
# Получим полные определения всех трёх сущностей
sed -n '323,368p' Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | grep -E "(id:|type: Item|size:|type: Storage|maxItemSize:)"Repository: WWhiteDreamProject/wwdpublic
Length of output: 185
🏁 Script executed:
# Проверим другие маленькие коробки и их размеры
rg -A 30 "name: small.*box" Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | grep -E "(name:|id:|type: Item|size:|type: Storage|maxItemSize:)" | head -40Repository: WWhiteDreamProject/wwdpublic
Length of output: 484
🏁 Script executed:
# Проверим большие коробки для сравнения паттернов
rg -A 30 "name: .*box" Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | grep -E "(name:|id:|Item|size:|Storage|maxItemSize:)" | head -60Repository: WWhiteDreamProject/wwdpublic
Length of output: 1950
🏁 Script executed:
# Поищем комментарии или документацию в файле
head -50 Resources/Prototypes/_White/Catalog/Fills/Boxes/general.ymlRepository: WWhiteDreamProject/wwdpublic
Length of output: 1082
🏁 Script executed:
# Получим размеры обычных (не small, не wide) коробок
rg -B 2 -A 20 "id: BoxCardboardCrafted$" Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | grep -E "(id:|type: Item|size:|type: Storage|maxItemSize:)"Repository: WWhiteDreamProject/wwdpublic
Length of output: 97
🏁 Script executed:
# Аналогично для пластиковой и стальной обычной коробки
rg -B 2 -A 20 "id: BoxPlasticCrafted$" Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | grep -E "(id:|type: Item|size:|type: Storage|maxItemSize:)"Repository: WWhiteDreamProject/wwdpublic
Length of output: 95
🏁 Script executed:
# И для стальной
rg -B 2 -A 20 "id: BoxSteelCrafted$" Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | grep -E "(id:|type: Item|size:|type: Storage|maxItemSize:)"Repository: WWhiteDreamProject/wwdpublic
Length of output: 93
🏁 Script executed:
# Создадим полную таблицу всех размеров коробок для наглядности
python3 << 'EOF'
import re
import subprocess
result = subprocess.run(['cat', 'Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml'],
capture_output=True, text=True)
content = result.stdout
# Find all entities with their properties
entities = {}
current_entity = None
lines = content.split('\n')
for i, line in enumerate(lines):
if re.match(r'^\s*-\s*type:\s*entity', line):
# Start of new entity
current_entity = {'line': i+1}
elif current_entity is not None:
if re.match(r'^\s*id:\s*', line):
current_entity['id'] = line.split('id:')[1].strip()
entities[current_entity['id']] = current_entity
elif re.match(r'^\s*-\s*type:\s*Item', line):
# Look for size in next few lines
for j in range(i, min(i+5, len(lines))):
if re.search(r'size:\s*', lines[j]):
size = lines[j].split('size:')[1].strip()
current_entity['item_size'] = size
break
elif re.match(r'^\s*-\s*type:\s*Storage', line):
# Look for maxItemSize in next few lines
for j in range(i, min(i+5, len(lines))):
if re.search(r'maxItemSize:\s*', lines[j]):
max_size = lines[j].split('maxItemSize:')[1].strip()
current_entity['storage_max'] = max_size
break
# Filter and display box entities
box_entities = {k: v for k, v in entities.items() if 'Box' in k and 'Crafted' in k}
print("Entity ID | Item.size | Storage.maxItemSize")
print("----------------------------------------")
for eid in sorted(box_entities.keys()):
e = box_entities[eid]
item_sz = e.get('item_size', 'N/A')
storage_sz = e.get('storage_max', 'N/A')
print(f"{eid:<30} | {item_sz:<10} | {storage_sz}")
EOFRepository: WWhiteDreamProject/wwdpublic
Length of output: 158
🏁 Script executed:
# Попробуем более простой подход - получим точные строки для каждой small box
sed -n '323,368p' Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | grep -E "id:|size:|maxItemSize:"Repository: WWhiteDreamProject/wwdpublic
Length of output: 152
🏁 Script executed:
# И для пластиковой
sed -n '369,414p' Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | grep -E "id:|size:|maxItemSize:"Repository: WWhiteDreamProject/wwdpublic
Length of output: 150
🏁 Script executed:
# И для стальной
sed -n '415,461p' Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | grep -E "id:|size:|maxItemSize:"Repository: WWhiteDreamProject/wwdpublic
Length of output: 166
🏁 Script executed:
# Проверим, есть ли какие-то комментарии или документация о различиях материалов
rg -B5 -A5 "small plastic box" Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml | head -20Repository: WWhiteDreamProject/wwdpublic
Length of output: 389
Несогласованные размеры маленьких коробок.
Маленькие коробки имеют разные параметры Item.size и Storage.maxItemSize:
| Сущность | Item.size | Storage.maxItemSize |
|---|---|---|
| BoxCardboardSmallCrafted | Large | Normal |
| BoxPlasticSmallCrafted | Normal | Small |
| BoxSteelSmallCrafted | Large | Small |
Для сравнения, большие коробки (wide boxes) унифицированы: все имеют Item.size=Huge и Storage.maxItemSize=Large независимо от материала. Рекомендуется унифицировать размеры для всех маленьких коробок согласно единой логике.
🤖 Prompt for AI Agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml` around lines 320
- 456, The three small box entities (BoxCardboardSmallCrafted,
BoxPlasticSmallCrafted, BoxSteelSmallCrafted) have inconsistent Item.size and
Storage.maxItemSize values; pick a single pair and apply it to all three (e.g.,
Item.size: Normal and Storage.maxItemSize: Small) by updating the Item component
and the Storage component in each entity to the chosen values so they match the
unified sizing logic used for wide boxes.
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
🤖 Fix all issues with AI agents
In `@Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml`:
- Around line 712-722: The entity with type "entity" and name "maintenance
lightbulb box" has a typo in its id: change the id value from
"BoxMaintenanceLightbulbWie" to "BoxMaintenanceLightbulbWide" so it matches the
parent "BoxLightbulbWide" and the intended naming convention; update the id
field in that entity definition accordingly.
♻️ Duplicate comments (3)
Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml (3)
239-242: Отсутствуетblacklistв компоненте Storage.В
BoxPlasticWideCraftedотсутствуетblacklistс тегомBoxMaterial, который присутствует вBoxCardboardWideCrafted. Это позволяет хранить коробки внутри пластиковых широких коробок.🔧 Предлагаемое исправление
- type: Storage maxItemSize: Large + blacklist: + tags: + - BoxMaterial grid: - 0,0,7,3
285-288: Отсутствуетblacklistв компоненте Storage.Аналогично
BoxPlasticWideCrafted, вBoxSteelWideCraftedотсутствуетblacklistс тегомBoxMaterial.🔧 Предлагаемое исправление
- type: Storage maxItemSize: Large + blacklist: + tags: + - BoxMaterial grid: - 0,0,7,3
320-456: Несогласованные размеры маленьких коробок.Маленькие коробки имеют различные параметры
Item.sizeиStorage.maxItemSize:
Сущность Item.size Storage.maxItemSize BoxCardboardSmallCrafted Large Normal BoxPlasticSmallCrafted Normal Small BoxSteelSmallCrafted Large Small Для сравнения, широкие коробки унифицированы: все имеют
Item.size: HugeиStorage.maxItemSize: Large. Рекомендуется унифицировать размеры для маленьких коробок.
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
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml (1)
9-76: Добавьте материал‑теги к коробкам без явных Tag‑компонентов.После смены parent на BoxBase/BoxMaterialBase у FoodBoxDonut и FoodBoxNugget отсутствуют теги
BoxMaterialиBoxCardboard, а у FoodBoxDonkpocket отсутствует тегBoxCardboard(несмотря на наследованиеBoxMaterialот BoxMaterialBase). Без этих тегов коробки будут несовместимы с системами фильтрации по материалам и могут быть исключены из крафта и других проверок, в отличие от FoodContainerEgg, FoodBoxPizza и HappyHonk, которые корректно определяют эти теги.🛠️ Исправление (добавить Tag‑компоненты)
- type: ItemCounter count: tags: [Donut] composite: true layerStates: - box1 - pink-box2 - box3 - pink-box4 - box5 - pink-box6 + - type: Tag + tags: + - BoxMaterial + - BoxCardboard - type: Appearance- type: ItemCounter count: tags: [Nugget] composite: true layerStates: - box1 - box2 - box3 - box4 - box5 - box6 + - type: Tag + tags: + - BoxMaterial + - BoxCardboard - type: Appearance- type: StorageFill contents: - id: FoodDonkpocket amount: 6 + - type: Tag + tags: + - BoxCardboard - type: Construction graph: BoxCardboard node: boxcardboard
♻️ Duplicate comments (3)
Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml (3)
240-243: Отсутствуетblacklistв компоненте Storage.В
BoxCardboardWideCrafted(строки 193-195) явно указан blacklist с тегомBoxMaterial, но вBoxPlasticWideCraftedон отсутствует, что позволит хранить коробки внутри пластиковых широких коробок.🔧 Предлагаемое исправление
- type: Storage maxItemSize: Large + blacklist: + tags: + - BoxMaterial grid: - 0,0,7,3,
286-289: Отсутствуетblacklistв компоненте Storage.Аналогичная проблема в
BoxSteelWideCrafted— отсутствует blacklist с тегомBoxMaterial.🔧 Предлагаемое исправление
- type: Storage maxItemSize: Large + blacklist: + tags: + - BoxMaterial grid: - 0,0,7,3,
321-458: Несогласованные размеры маленьких коробок.Размеры маленьких коробок различаются в зависимости от материала:
Сущность Item.size Storage.maxItemSize BoxCardboardSmallCrafted Large Normal BoxPlasticSmallCrafted Normal Small BoxSteelSmallCrafted Large Small Для сравнения, широкие коробки унифицированы: все имеют
Item.size=HugeиStorage.maxItemSize=Large. Рекомендуется унифицировать размеры для маленьких коробок.
,
|
Заблудился как-то вояка-контрактник в зоне. Ходит и кричит: Жду мерж. |
|
@Spatison можешь тест перезапустить, как будто бы у меня тут уже нету проблем? |















































































































































































































































































































Описание PR
Респрайт пушек (замена ак220 + добавление нового прототипа рескина христова для синдиката, христов переквалифицирован в хз что (по тз))
Респрайт коробок, разделение на 9 типов по материалу и размеру, внесено в крафты, но не в переводы
Медиа
Список
Изменения
🆑