-
Nikitos создал
Шестой блок порта (docs/TASKS.md §12.10, §6.6). В audm-neko стволы жили в одной базе (WeaponDB.DB), а состояние — в BaseWeaponV2: магазин, темп, перезарядка по стилю, отдача, разброс и навесное, которое меняет характеристики. * база стволов и навесного с загрузкой из JSON; поля ствола: урон, темп, магазин, перезарядка, разброс, отдача, падение урона, пробитие, дробь, режимы огня, стиль перезарядки, слоты; * ствол в руках: fire() с причиной отказа (cooldown / reloading / empty / single), reload()/cancelReload(), tick() для темпа, перезарядки и остывания отдачи и перегрева, cycleMode(), save()/load2(); * навесное: множители и добавки, слоты, замена с возвратом прежнего мода, пересчёт характеристик; магазин — МНОЖИТЕЛЬ (ammo 1.5 из 30 даёт 45), дробь — добавка; * перезарядка дробовика — по одному патрону со своим таймером: прежняя версия пыталась дополнить остаток в том же кадре, и при длинном кадре патроны терялись, при коротком — не заряжались вовсе; * баллистика: затухание урона по расстоянию с полом 40%, пробитие снимает класс брони (результат идёт в $.combat.hit), разброс от перегрева; * $.weapons.give(узел, id)/of/fire/tickAll — ствол в руках узла. Тест нашёл настоящий баг: db.get() искал только стволы, поэтому навесное не находилось и не устанавливалось (attach всегда отвечал «нет навесного»). Проверка: tests/js/weapons_test.mjs (22 проверки: темп, режимы, магазин, перезарядка по патрону, навесное, затухание, пробитие, сейв), полный набор qjs и агентских тестов зелёный.
c9341736