• Nikitos's avatar
    Порт предметов и инвентаря из audm-neko: $.items и $.inv
    · 68945637
    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