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

Быстрый старт

Соберём первый квест — «Побег»: обязательное задание «Найти и опустить рычаг» и дополнительное «Узнать, что стало с выжившими». Квест здесь — не галочка в списке: он проходит этапы и может завершиться успехом или провалом.

Сделать это можно двумя путями — оба дают один и тот же квест:

  • Командами — быстро попробовать прямо в игре, не создавая файлов. Такой квест (динамический) сохраняется внутри мира и существует только вместе с ним.
  • Через датапак — когда квест станет частью контента. Датапак можно положить в мир, а при необходимости отцепить и распространять отдельно — как самостоятельный набор квестов.

Начни с команд, если хочешь просто пощупать систему.


Путь 1. Квест командами

Команды InkQuest требуют прав оператора (уровень 2+). На одиночном мире для этого включи читы.

Создаём квест и две его задачи — обязательную (required) и дополнительную (optional):

/quest new example:escape "Побег"
/quest modify example:escape tasks add required push_the_lever "Найти и опустить рычаг, открывающий люк"
/quest modify example:escape tasks add optional look_for_survivors "Узнать, что стало с выжившими"

Выдаём квест игроку и закрепляем его в HUD:

/quest give PlayerName example:escape
/quest pin PlayerName example:escape

После выдачи игрок увидит подсказку о новом квесте, а закреплённый квест появится в HUD на экране. Полный список квестов открывается клавишей J — подробнее в Интерфейс игрока.

Чтобы завершить задачи, можно спрятать на карте командные блоки с такими командами:

/quest complete PlayerName example:escape task push_the_lever success
/quest complete PlayerName example:escape task look_for_survivors success

Задачи, добавленные командой, завершаются только командой quest complete. Чтобы задача срабатывала сама — например, по очкам scoreboard или по minecraft-predicate — нужен датапак-квест (см. ниже и Условия выполнения задачи).


Путь 2. Тот же квест в датапаке

Статический квест описывается в JSON и живёт в датапаке — его можно держать вместе с миром или распространять отдельно. В отличие от командного, его задачи могут завершаться сами — по заданным условиям. Положи файлы в датапак мира:

<мир>/datapacks/example/
├── pack.mcmeta
└── data/example/quests/escape.json

pack.mcmeta — служебный файл датапака (pack_format: 15 соответствует Minecraft 1.20.1):

{
    "pack": {
        "pack_format": 15,
        "description": "Example quests"
    }
}

escape.json — сам квест. Имя файла (escape) и папка (example) вместе дают идентификатор example:escape:

{
    "version": 3,
    "variant": 1,
    "title": "Побег",
    "description": "Здесь больше нельзя оставаться, но как же выбраться?",
    "tasks": {
        "push_the_lever": {
            "title": "Найти и опустить рычаг, открывающий люк",
            "description": "Когда один из стражей выходил, мне удалось услышать щелчок в дальней части комнаты"
        },
        "look_for_survivors": {
            "title": "Узнать, что стало с выжившими",
            "description": "Нужно обыскать камеры, может, удастся найти ещё кого-нибудь, кому удалось спастись"
        }
    },
    "stages": [
        ["push_the_lever", "look_for_survivors"]
    ]
}

Несколько вещей о структуре:

  • version и variant — обязательные. Они защищают от загрузки в несовместимой версии мода; текущие значения — version: 3, variant: 1. Разбор — в Формат файла квеста.
  • stages — список этапов, каждый этап — список ID задач. Первая задача в этапе обязательная, остальные — дополнительные. Здесь один этап: push_the_lever ведёт прогресс, look_for_survivors идёт сбоку.

Загрузи датапак командой /reload и убедись, что квест считался:

/quest list static

Если example:escape есть в списке — всё готово; дальше квест выдаётся той же командой quest give. Если его нет — загляни в лог сервера и в Частые вопросы и ошибки.

Не всякий квест должен быть «заданием с прогрессом». Можно сделать квест-заметку без задач — страницу дневника, слух, фрагмент лора — или ивент с общим прогрессом. Готовые рецепты — в Паттерны квестов.


Что дальше

Квест из примера — самый простой случай. Дальше документация расходится по интересам: