Частые вопросы и ошибки¶
Здесь собраны типичные симптомы и их причины. Большинство проблем оставляет след в логе сервера — мод старается не падать молча, а предупреждать. Если что-то ведёт себя не так, первым делом загляни в лог: чаще всего ответ уже там.
Квест не загружается¶
Симптом. Квеста нет в /quest list static, в логе — ошибка несовместимости версии.
- Не та
version. Еслиversionв файле не равна ожидаемой модом (сейчас3), квест не загрузится вообще. Поставьversion: 3,variant: 1. См. Формат файла квеста. - Неверный путь к файлу. Файл должен лежать строго в
data/<namespace>/quests/<id>.json. Идентификатором квеста станет<namespace>:<id>. - Ошибка синтаксиса JSON. Лишняя запятая, незакрытая скобка — и весь файл не парсится. Проверь файл валидатором JSON.
- Нет обязательного поля. У квеста обязательны
version,variantиtitle; у задачи —title. Без них загрузка падает с ошибкой. - Недопустимое значение enum. Неизвестное
pin_mode, неизвестный тип условия, неизвестныйcriterionуscore, неизвестная кнопка вbuttons— всё это ошибки парсинга. Допустимые значения — в Формат файла квеста и Условия выполнения задачи.
После правки файла перезагрузи датапаки командой
/reload— статические квесты считываются заново.
Поле есть, а эффекта нет¶
Симптом. Квест загрузился, но какое-то поле будто игнорируется.
- Опечатка в имени поля. Любой неизвестный ключ молча игнорируется, а в лог пишется
Unknown key "..." — it will be ignored. Сверь имя с Формат файла квеста — частая причина —requiresвместоrequire,stageвместоstagesи т. п. - Поле на неправильном уровне вложенности. Например,
conditionположили рядом сtasks, а не внутри задачи; илиsuccessне вложили вcondition. Структура — в Формат файла квеста. - Несовпадение
variant. Еслиvariantне равен ожидаемому, квест загрузится, но в лог попадёт предупреждение, и часть новых полей может не примениться. Поставь текущийvariant: 1.
Условие задачи не срабатывает¶
Симптом. Игрок выполнил действие, а задача не завершается сама.
- Задача создана командой. Автопроверка условий доступна только для датапак-квестов. Задачи, добавленные через
quest modify ... tasks add, завершаются только командойquest complete. См. Условия выполнения задачи. - Задача не в активном этапе. Условия проверяются только у задач активного этапа активных квестов. Задача из будущего этапа ещё «спит». См. Активный этап.
- Квест уже завершён. У завершённого квеста состояние заморожено — условия больше не проверяются.
scoreидёт не в ту сторону. Еслиfromбольшеto, условие считается нисходящим (нужно опуститься доto). Если это не то, что нужно, — задайfrom≤toили опусти его (дефолт0).
Если сомневаешься, видит ли система прогресс, — опроси его командой
quest query(см. Интеграция с командами).
Зависимый квест не выдался¶
Симптом. Игрок прошёл предыдущий квест, а следующий по after не появился.
- Зависимость завершена не успехом. Квест по
afterразблокируется, только когда квесты-зависимости завершены успешно (не провалом и не пропуском). - Не выполнен
requireв нужный момент. Условияrequire.tags/require.predicateпроверяются один раз — в момент завершения зависимости. Если тега тогда ещё не было, квест не выдастся задним числом, даже когда тег появится позже. См. Зависимости между квестами. requireбезafter. Блокrequireбезafterигнорируется (в логе — предупреждение). Условия разблокировки работают только в связке с зависимостями.
Зависимости не мешают ручной выдаче:
quest giveвыдаёт квест всегда, независимо отafterиrequire.
Квест не завершается сразу после quest complete¶
Симптом. Функция закрывает последнюю обязательную задачу командой quest complete, а идущая следом в той же функции проверка execute if quest … complete или выдача зависимого квеста ведут себя так, будто квест ещё активен.
- Завершение по команде или кнопке регистрируется на следующем тике. Команда помечает задачу завершённой сразу, но сам квест переходит в
complete(и разблокирует зависимые поafterквесты) только на следующем серверном тике. Поэтому в одной функции «закрой задачу → тут же проверь квест» не сработает. - Что делать. Разнеси по тикам: проверяй статус квеста или выдавай зависимые на следующем тике — из тиковой функции или по событию. Если эффект нужен ровно в момент закрытия — повесь его на хук
on.successобязательной задачи: он срабатывает в тот же тик, что и команда. - Условие этим не страдает. Когда задача завершается своим условием, а не командой, задача и квест уходят в завершённые в один тик. См. Структура квеста.
Книга или закрепление не работают как ожидалось¶
- Клавиша
Jне открывает книгу. Скорее всего включён gameruledoQuestBookItemCheck— тогда нужна книга в инвентаре. См. Предметы. - Игрок не может закрепить задачу из книги. Проверь gamerule
allowManualQuestPin— приfalseручное закрепление молча игнорируется. См. Закрепление. quest pin <taskId>не срабатывает. Закрепить можно только активную задачу (в активном этапе, не выполненную).- Свиток не выдаёт квест. Если квест уже активен/завершён или у свитка нет поля
Quest— он не сработает, причина появится на action-bar. См. Предметы.
Не удаляется задача или квест¶
Симптом. quest modify ... tasks remove или quest remove отказывает.
Нельзя удалить задачу или квест, который хотя бы один игрок отслеживает. Сначала сними квест со всех — quest drop для одного игрока или quest purge для всех (включая офлайн), затем удаляй. См. Справочник команд.
quest query возвращает 0 или ошибку¶
- Запросы
completeиpercentвозвращают ошибку и0для завершённых квестов — данные о прогрессе после завершения не хранятся. stage active ...возвращает ошибку, если у квеста нет активного этапа (например, он завершён).totalработает в любом состоянии — используй его, если нужна стабильная величина.
См. Справочник команд.
См. также¶
- Формат файла квеста — точные имена и типы всех полей.
- Справочник команд — что возвращает и какими ошибками отвечает каждая команда.
- Условия выполнения задачи — когда и какие условия проверяются.
Не нашёл ответа?¶
Если проблема не описана выше — сообщи об этом.