-
Nikitos создал
Второй блок порта (docs/TASKS.md §12.8, §6.2). В audm-neko задание было .tres-ресурсом (QuestDef + QuestObjective + QuestBook, 744 строки); здесь это обычный объект, который описывается кодом или пачкой из JSON, а ядро остаётся чистым и проверяется без движка. * цели шести видов (fetch, kill, haul, extract, spare, object) с фильтром по карте и своей подписью; события рейда onKill/onExtract/onSpare/onObject/onFetch помечают цели и возвращают список готовых к сдаче заданий; * статусы locked/available/active/ready/done и правила открытия: after (все), after_any (любое — развилка), excludes (взаимоисключение), requires_flags/requires_scenes, merciful_branch (ветка по числу флагов); * главное правило оригинала перенесено дословно: ВЗЯТОЕ задание не пропадает из журнала, даже если ветка-близнец сдана раньше; * accept/turnIn ставят флаги сценок ($.story.flags), turnIn возвращает награду (деньги, предметы, доверие) — раздаёт её игра; * save/load состояния, line() — строка журнала с прогрессом, forGiver() — список выдающего, loadFile() — пачка заданий из JSON. Тест поймал настоящую ошибку трактовки: у haul `count` — это ПОРОГ стоимости рюкзака, а не число повторов, поэтому прогресс уходил в 1500/1000 и задание не становилось готовым. Теперь зачёт хранится отдельной отметкой. Проверка: tests/js/quest_test.mjs (17 проверок: условия открытия, прогресс, события, награда, сейв), полный набор qjs и агентских тестов зелёный.
043a6894