Skip to content

Conversation

@Gersoon458
Copy link
Contributor

Описание PR

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


Медиа

Список

Example Media Embed

Example Media Embed

Example Media Embed


Изменения

🆑

  • add: Новые спрайты огнестрела (Swebit)
  • add: Дробовик Адъютант добавлен новый боковой контейнер для боезапаса. Открывается на Е, доставать ручками, приоритет заполнения стоит у магазина
  • add: Новые спрайты коробок + новые коробки + их крафты + стейт открытого состояния + рандом на спрайты больших коробок + новые иконки + стандарты размеров инвентаря по размеру спрайта (Все коробки делятся на 3 основных размера, а не как раньше в разнобой, но с вайтлистами)

@github-actions
Copy link
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 21, 2026

RSI Diff Bot; head commit bfaf819 merging into 87907d3
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi

State Old New Status
banana-box Modified
berry-box Modified
box Modified
carp-box Modified
dink-box Modified
pizza-box Modified
spicy-box Modified
stonk-box Modified
teriyaki-box Modified

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/black.rsi

State Old New Status
closed Modified
equipped-BELT Modified
inhand-left Modified
inhand-right Modified
open Modified
trash Modified

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/blue.rsi

State Old New Status
closed Modified
equipped-BELT Modified
inhand-left Modified
inhand-right Modified
open Modified
trash Modified

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/green.rsi

State Old New Status
closed Modified
equipped-BELT Modified
inhand-left Modified
inhand-right Modified
open Modified
trash Modified

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi

State Old New Status
closed Modified
equipped-BELT Modified
inhand-left Modified
inhand-right Modified
open Modified
trash Modified

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/red.rsi

State Old New Status
closed Modified
equipped-BELT Modified
inhand-left Modified
inhand-right Modified
open Modified
trash Modified

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/syndicate.rsi

State Old New Status
closed Modified
equipped-BELT Modified
inhand-left Modified
inhand-right Modified
open Modified
trash Modified

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi

State Old New Status
cig1 Modified
cig2 Modified
cig3 Modified
cig4 Modified
cig5 Modified
cig6 Modified

Resources/Textures/Objects/Specific/Cargo/mail_large.rsi

State Old New Status
broken Modified
icon Modified
inhand-left Modified
inhand-right Modified
postmark Modified
trash Modified

Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi

State Old New Status
base Modified
equipped-BACKPACK Modified
equipped-SUITSTORAGE Modified
icon Modified
inhand-left Modified
inhand-right Modified
mag-unshaded-1 Modified
mag-unshaded-2 Modified
mag-unshaded-3 Modified
mag-unshaded-4 Modified
wielded-inhand-left Modified
wielded-inhand-right Modified

Resources/Textures/Objects/Weapons/Guns/Pistols/mk58.rsi

State Old New Status
base Modified
bolt-open Modified
equipped-BELT Modified
equipped-SUITSTORAGE Modified
icon Modified
inhand-left Modified
inhand-right Modified
mag-0 Modified
base-unshaded Added
mag-unshaded-0 Added

Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi

State Old New Status
base Modified
bolt-open Modified
equipped-BACKPACK Modified
equipped-SUITSTORAGE Modified
icon Modified
inhand-left Modified
inhand-right Modified
mag-0 Modified
wielded-inhand-left Modified
wielded-inhand-right Modified
base-unshaded Added
mag-unshaded-0 Added

Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi

State Old New Status
base Modified
bolt-open Modified
equipped-BACKPACK Modified
equipped-SUITSTORAGE Modified
icon Modified
inhand-left Modified
inhand-right Modified
mag-0 Modified
suppressor Modified
wielded-inhand-left Modified
wielded-inhand-right Modified
base-unshaded Added
mag-unshaded-0 Added

Resources/Textures/Objects/Weapons/Guns/SMGs/wt550.rsi

State Old New Status
base-unshaded Modified
base Modified
equipped-BACKPACK Modified
equipped-SUITSTORAGE Modified
icon Modified
inhand-left Modified
inhand-right Modified
mag-0 Modified
mag-1 Modified
mag-2 Modified
mag-3 Modified
mag-4 Modified
mag-5 Modified
mag-unshaded-0 Modified
mag-unshaded-1 Modified
mag-unshaded-2 Modified
mag-unshaded-3 Modified
mag-unshaded-4 Modified
mag-unshaded-5 Modified
bolt-open Added
mag-6 Added
mag-7 Added
mag-8 Added
mag-unshaded-6 Added
mag-unshaded-7 Added
mag-unshaded-8 Added

Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer.rsi

State Old New Status
bolt-open Modified
equipped-BACKPACK Modified
equipped-SUITSTORAGE Modified
icon Modified
base-unshaded Added
base Added
inhand-left Added
inhand-right Added
mag-unshaded-0 Added
wielded-inhand-left Added
wielded-inhand-right Added

Resources/Textures/Structures/Storage/closet.rsi

State Old New Status
cardboard Modified
cardboard_open Modified
freezer Modified
freezer_door Modified
freezer_icon Modified

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/black.rsi

State Old New Status
icon Removed
closed Added
open Added

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/blue.rsi

State Old New Status
icon Removed
closed Added
open Added

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi

State Old New Status
icon Removed
closed Added
open Added

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/mixed.rsi

State Old New Status
icon Removed
closed Added
open Added

Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/Cartons/red.rsi

State Old New Status
icon Removed
closed Added
open Added

Resources/Textures/_White/Objects/Storage/Boxes.rsi

State Old New Status
boxwide Removed
shellbreach Removed
shellfrag Removed
shelllaser Removed
shellmeteor Removed

Resources/Textures/_White/Objects/Consumable/Food/Baked/donkpocket.rsi

State Old New Status
banana-box Added
banana Added
berry-box Added
berry Added
box Added
carp-box Added
carp Added
dank Added
dink-box Added
dink Added
inhand-left Added
inhand-right Added
pizza-box Added
pizza Added
plain Added
spicy-box Added
spicy Added
stonk-box Added
stonk Added
teriyaki-box Added
teriyaki Added

Resources/Textures/_White/Objects/Storage/boxes.rsi

State Old New Status
box_card Added
box_card_base Added
box_card_eng Added
box_card_eng_open Added
box_card_icon Added
box_card_med Added
box_card_med_open Added
box_card_open Added
box_card_sec Added
box_card_sec_open Added
box_card_small Added
box_card_small_base Added

Edit: diff updated after bfaf819

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 21, 2026

Walkthrough

Переименование AK220→AR31Hydra и массовые локализационные правки; крупный рефактор коробок (_White) с новыми Box* сущностями, Sprite.layers и GenericVisualizer; многочисленные изменения прототипов оружия (имена, спрайты, magazine), meta.json текстур и удаление/перемещение отдельных прототипов и сущностей карты.

Changes

Когорта / Файл(s) Краткое описание (внимание)
Локализации EN
Resources/Locale/en-US/_white/prototypes/catalog/uplink/ammo.ftl, .../uplink/weaponry.ftl
Переименованы ключи ak220→ar31hydra; некоторые значения текста обновлены (Viper→MPr-10 Xyphos и др.). Проверьте соответствие ключей и экспорта.
Локализации RU (много файлов)
Resources/Locale/ru-RU/.../*.ftl
Массовые замены id/names/desc (AK220→AR31Hydra, L6→L9, добавлен DMR-51 и др.). Нужна проверка синхронизации с прототипами.
Прототипы оружия
Resources/Prototypes/**/Weapons/Guns/**, Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/**
Переименования сущностей (AK220→AR31Hydra и др.), смена спрайтов, startingItem/magazine, MagazineVisuals.steps; добавлены gun-поля (modes, fireRate, sound). Проверьте ссылки и asset-пути.
Uplink / Catalog listings
Resources/Prototypes/_White/Catalog/Uplink/*.yml, Resources/Prototypes/Catalog/uplink_catalog.yml
Листинги и иконки обновлены (AK220→AR31Hydra и прочие). Убедитесь, что name/description ссылаются на существующие локали и productEntity существует.
Рефактор коробок _White (добавлен каталог Box*)
Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml, .../Recipes/Crafting/**, Resources/Prototypes/_White/tags.yml
Добавлены BoxMaterialBase, множество Box*Crafted/вариантов, crafting graphs и теги (BoxMaterial/BoxCardboard/BoxPlastic/BoxSteel). Проверить id/графы и совпадение тегов.
Массовый рефактор коробок / Fills
Resources/Prototypes/**/Catalog/Fills/Boxes/*.yml, Resources/Prototypes/_White/Catalog/Fills/Boxes/*.yml
Шаблонные изменения: parent (BoxCardboard→BoxPlastic/BoxSteel/BoxBase), Storage→StorageFill, добавлены Sprite.layers и GenericVisualizer (enum.StorageVisuals.Open.top). Проверьте соответствие состояний спрайтов.
GunCase / Syndicate fills
Resources/Prototypes/_White/Catalog/Fills/GunCase/syndicate.yml
GunCaseSyndicateFilledAK220 → GunCaseSyndicateFilledAR31Hydra; StorageFill содержимое переключено на AR31Hydra-версии.
Briefcases / Inventories / Vending
Resources/Prototypes/Catalog/Fills/Items/briefcases.yml, .../VendingMachines/Inventories/nutri.yml
Briefcase: WeaponSniperHristov → WeaponSniperDMR51Cyclops; BoxAgrichem удалён/закомментирован в инвентарях.
Карты / Map manifests
Resources/Maps/_Lavaland/.../ruin_chemistry.yml, Resources/Maps/_White/WonderBox.yml
Удалён proto BoxAgrichem; в WonderBox — массовое удаление proto/ent групп (игрушки/плюшки), добавлены отдельные Transform-entity; обновлён entityCount/timestamp. Проверьте ссылки на удалённые прото.
Текстуры / meta.json (лицензии, размеры, состояния)
Resources/Textures/**/**/*.rsi/meta.json, Resources/Textures/_White/Objects/Storage/Boxes.rsi/meta.json
Обновлены license/copyright/size; добавлены/переименованы состояния (icon→closed/open, base-unshaded, mag-unshaded-*, большие box_* наборы). Критично: согласовать имена состояний со Sprite.layers.
Sprites / Boxes states catalog
Resources/Textures/_White/Objects/Storage/Boxes.rsi/meta.json
Существенное расширение и переименование состояний (напр. boxwidebox_card и множество новых состояний). Убедиться, что новые состояния используются в прототипах.
Прочие прототипы / parent/Construction/Tags
Resources/Prototypes/Entities/**, Resources/Prototypes/_White/Entities/**
Много parent/Construction/PhysicalComposition/Tag изменений; удалены/добавлены сущности (BoxCardboardSmall удалён, добавлены Box*). Проверить конструкторы, зависимости и теги.
Удаления / мелкие правки
Различные (Resources/Prototypes/**, Resources/Textures/**, Resources/Maps/**)
Удаления прототипов (BoxAgrichem, CardBoxBlack и др.), правки meta.json авторств, изменение состояний. Проверка контекста и ссылок по файлам.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested reviewers

  • Remuchi
  • Spatison
🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title check ❓ Inconclusive Название «Boxes» крайне расплывчато и не раскрывает суть изменений в PR, хотя и связано с основным фокусом. Используйте более описательное название, например: «Resprite weapons and refactor box system into material-based tiers» или «Weapon resprite and box system overhaul».
✅ Passed checks (2 passed)
Check name Status Explanation
Description check ✅ Passed Описание раскрывает основные изменения (респрайт оружия, переделка системы коробок, новые контейнеры для Адъютанта) и связано с изменениями в наборе файлов.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ 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.

❤️ Share

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

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 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 kit
Resources/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: Незначительные грамматические замечания в описании.

В тексте описания есть несколько стилистических моментов:

  1. Пропущена запятая перед придаточным предложением: технологии производства, с которыми...
  2. Конструкция потому, неизвестно звучит неестественно — лучше использовать поэтому неизвестно или из-за чего неизвестно
  3. Написание до-Корпорационных нетипично для русского языка — обычно приставка «до-» пишется слитно: докорпорационных
📝 Предлагаемое исправление
 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
+    - Belt
Resources/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, но прототип оружия зарегистрирован под ID WeaponLightRifleAR31Hydra (в 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 Hydra
Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml (1)

37-62: Миграция BoxHoloparasite на BoxSteel выполнена корректно.

Структура спрайтов и GenericVisualizer соответствуют паттерну PR. Незначительное замечание: в строке 62 отсутствует пробел перед } (box_steel_synd} vs box_steel_synd }), в отличие от строки 91 где форматирование корректно.

🔧 Форматирование (опционально)
-          False: { state: box_steel_synd} # WWDP end
+          False: { state: box_steel_synd } # WWDP end
Resources/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
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 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 -20

Repository: 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 -50

Repository: 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.

Comment on lines 11 to +22
- 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 ]
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 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}")
PY

Repository: 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 -200

Repository: 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.json

Repository: 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 -300

Repository: 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.

Comment on lines 100 to +105
- 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.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Несогласованность именования между родительским и дочерними прототипами.

Родительский прототип WeaponShotgunBulldog переименован в "AD-11 Cerberus", но дочерние прототипы сохраняют старое название:

  • WeaponShotgunBulldogEmpty (строка 217): name: Bulldog
  • WeaponShotgunBulldogHoS (строка 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ное отображение в игре.

Comment on lines +3 to +4
"license": "CC-BY-NC-SA-4.0",
"copyright": "Swebit (@bonquai) for WWhiteDreamProject, 18.01.2026",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Проверьте совместимость 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 и
задокументируйте решение.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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: Опечатка исправлена.

Ранее отмеченная опечатка BoxSteelSmalleCraftedBoxSteelSmallCrafted была исправлена в коммите 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: BoxSteelCrafted
Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml (1)

1-497: Рекомендация по уменьшению дублирования кода (опционально).

Азотные варианты копируют почти полные определения Sprite только для изменения одного слоя (tankbluetankred). Можно рассмотреть использование 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

Comment on lines +13 to +19
- 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
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 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 5

Repository: 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.yml

Repository: 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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@Resources/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).

Comment on lines 11 to 39
"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"
},
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Блокирующая ошибка: отсутствуют 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).

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 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: BoxPlastic
Resources/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

Comment on lines +239 to +242
- type: Storage
maxItemSize: Large
grid:
- 0,0,7,3
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Отсутствует 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.

Suggested change
- 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.

Comment on lines +285 to +288
- type: Storage
maxItemSize: Large
grid:
- 0,0,7,3
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Отсутствует 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.

Suggested change
- 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.

Comment on lines 633 to 654
- 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
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Несоответствие между 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.

Comment on lines +7 to +10
- type: StorageFill
contents:
- id: ShellShotgunMeteor
amount: 16
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

rg -n -C10 -g '*.yml' 'id:\s*BoxMagazine' Resources/Prototypes

Repository: WWhiteDreamProject/wwdpublic

Length of output: 24064


🏁 Script executed:

sed -n '3,30p' Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml

Repository: WWhiteDreamProject/wwdpublic

Length of output: 821


🏁 Script executed:

rg -n -C10 -g '*.yml' 'id:\s*BoxSteel' Resources/Prototypes

Repository: WWhiteDreamProject/wwdpublic

Length of output: 22454


🏁 Script executed:

sed -n '142,170p' Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml

Repository: WWhiteDreamProject/wwdpublic

Length of output: 787


🏁 Script executed:

sed -n '142,240p' Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml

Repository: WWhiteDreamProject/wwdpublic

Length of output: 2326


🏁 Script executed:

rg -n -C15 -g '*.yml' 'id:\s*BoxMaterialBase' Resources/Prototypes/_White

Repository: WWhiteDreamProject/wwdpublic

Length of output: 1583


Вместимость BoxMagazine недостаточна для 16 снарядов.

BoxMagazine наследует от BoxSteelBoxSteelCraftedBoxMaterialBase. У 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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@Resources/Prototypes/_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: Item
Resources/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 box vs box plastic / box steel. Рекомендуется унифицировать формат для всех рецептов.

♻️ Предлагаемое исправление
 - type: construction
-  name: cardboard box
+  name: box cardboard
   id: BoxCardboard

Или альтернативно изменить остальные на формат [material] box.

Also applies to: 13-13, 24-24

Comment on lines +320 to +456
- 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
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# Проверим наличие файла и его содержимое
find . -type f -name "general.yml" | grep -i boxes

Repository: 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 -100

Repository: 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 -40

Repository: 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 -60

Repository: WWhiteDreamProject/wwdpublic

Length of output: 1950


🏁 Script executed:

# Поищем комментарии или документацию в файле
head -50 Resources/Prototypes/_White/Catalog/Fills/Boxes/general.yml

Repository: 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}")
EOF

Repository: 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 -20

Repository: 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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@Resources/Prototypes/_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. Рекомендуется унифицировать размеры для маленьких коробок.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

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. Рекомендуется унифицировать размеры для маленьких коробок.
,

@Valentyi
Copy link
Contributor

Заблудился как-то вояка-контрактник в зоне. Ходит и кричит:
— Людиии! Кто нибууудь, помогиииите!
А в кустах, значит, сталкер сидит и тихо прется.
— Ну да, ну да… Значит на блок-посту по три шкуры драть, так козлы и ублюдки… а как залез в ж*пу — так «Люди, помогите»…

Жду мерж.

@Gersoon458
Copy link
Contributor Author

@Spatison можешь тест перезапустить, как будто бы у меня тут уже нету проблем?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants