-
Nikitos создал
Четвёртый блок порта (docs/TASKS.md §12.9, §6.4). В audm-neko предмет был .tres-ресурсом (item_def.gd + items.gd), а списки хранили только id и штуки; здесь предмет — обычный объект, а контейнер (рюкзак, схрон, тайник) — сетка. * описание предмета: размер в клетках, масса, цена, вид, стопка, слот ношения, броня, медицина, еда, патроны, бонус переноса, иконка и текст документа; * контейнер: add/remove/count/has, find/fits, list/summary, mass/value, wear/unwear, wornList/armorClass, repack/sortByValue, save/load; * раскладка детерминированная (сверху вниз, слева направо), стопки доливаются в существующие — патроны ложатся 60 + 40, а не двумя половинками; * вес: масса лежащего и надетого плюс базовая масса контейнера; ПРЕДЕЛ (capacity) больше не смешивается с бонусом рюкзака — есть carryBonus() и carryLimit(), иначе setCapacity(8) давал 8+бонус; * wear() возвращает имя надетого предмета (раньше возвращал прежний, и успех выглядел как отказ), повторное надевание — не ошибка, unwear() не снимает предмет, если в контейнере нет места; * armorClass('пустой слот') даёт 0, а не класс другой надетой брони. Тесты нашли пять настоящих ошибок: normalizeItem игнорировал stack; пустая стопка оставалась двойником в счёте; capacity() смешивал предел и бонус; wear() возвращал не то; наконец, ctx.log падал без engine — из-за него модульные тесты падали на предупреждении «не влезло». Журнал теперь безопасен вне движка. Проверка: tests/js/items_test.mjs (12 проверок), полный набор qjs и агентских тестов зелёный.68945637