Перейти к содержанию

Частые вопросы и ошибки

Здесь собраны типичные симптомы и их причины. Большинство проблем оставляет след в логе сервера — мод старается не падать молча, а предупреждать. Если что-то ведёт себя не так, первым делом загляни в лог: чаще всего ответ уже там.


Квест не загружается

Симптом. Квеста нет в /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). Если это не то, что нужно, — задай fromto или опусти его (дефолт 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 не открывает книгу. Скорее всего включён gamerule doQuestBookItemCheck — тогда нужна книга в инвентаре. См. Предметы.
  • Игрок не может закрепить задачу из книги. Проверь 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 работает в любом состоянии — используй его, если нужна стабильная величина.

См. Справочник команд.


См. также


Не нашёл ответа?

Если проблема не описана выше — сообщи об этом.