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

Квест-заметка (страница дневника)

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

В InkQuest для этого подходит обычный квест без задач (или с одной декоративной задачей). Никаких новых полей в JSON.


Зачем нужен этот паттерн

  • Лор без принуждения. Записка не должна гореть в HUD и требовать действий — она просто лежит в книге, пока игрок не захочет перечитать.
  • Дешёвый способ дать сюжет. Любую найденную улику можно превратить в квест-заметку за минуту: один JSON + одна команда quest give.
  • Архив прочитанного. Если хочется, чтобы после прочтения запись ушла в «завершённые» — добавь одну пропускаемую задачу.

Шаг 1. Создаём заметку без задач

Положи файл в data/<namespace>/quests/strange_sign.json:

{
  "version": 3,
  "variant": 0,
  "title": "Странный знак на скале",
  "description": "На отвесной стене вырезан символ — четыре полумесяца, сходящиеся в центре. Кто-то ставит метки в этих горах. Возможно, я здесь не один.",
  "tasks": {},
  "stages": []
}

Это всё. Поля tasks и stages пустые — у квеста нет ни одной задачи и ни одного этапа.


Шаг 2. Выдаём игроку

Через команду:

/quest give @s story:strange_sign

Или, что удобнее для записок, — через свиток квеста. Игрок поднимает свиток (физически — это записка), ПКМ выдаёт ему квест и сразу открывает в книге.


Шаг 3. Что увидит игрок

  • В книге квестов: квест появится в разделе «Активные» с указанным заголовком и описанием.
  • В HUD: ничего. У квеста нет задач — закреплять нечего.
  • В разделе «Завершённые»: ничего. Квест без обязательных задач никогда не завершается автоматически — нет ничего, по чему система могла бы вычислить итог.

Запись будет лежать в активных вечно, пока её не уберут вручную:

/quest drop @s story:strange_sign

Проверка

После quest give у себя в книге (по клавише J): 1. Квест есть в разделе «Активные»? ✅ 2. У него нет ни одной задачи внутри (детали пустые)? ✅ 3. В HUD ничего не появилось? ✅

Если квест случайно попал в HUD — у тебя где-то осталась задача в tasks. Убери её или этап stages.


Вариант с архивом: прочитанная запись

Если хочешь, чтобы после взаимодействия запись уходила в «завершённые», добавь одну задачу без условия — её придётся закрывать вручную через команду или кнопку.

{
  "version": 3,
  "variant": 0,
  "title": "Письмо отца",
  "description": "Сложенный лист пергамента с восковой печатью. Слова дрожат перед глазами.",
  "tasks": {
    "read": {
      "title": "Прочитать письмо",
      "description": "Открыть глаза навстречу правде."
    }
  },
  "stages": [["read"]]
}

Чтобы пометить запись прочитанной — вызови команду в командном блоке у таблички, в on.success advancement или из кнопки в книге:

/quest complete @s story:fathers_letter task read skip

Квест уйдёт в «завершённые» со статусом success — задача помечается как пропущенная (skipped), но сам квест всегда завершается успехом (или провалом), не пропуском. Через /quest test можно отдельно проверить статус задачи (skipped) или квеста (succeeded).


Расширения

Кнопка «Прочитано» прямо в книге

Чтобы игрок мог закрыть запись из квестовой книги без помощи командного блока — добавь задаче поле buttons:

"read": {
  "title": "Прочитать письмо",
  "buttons": ["skip"]
}

В книге под задачей появится кнопка «Skip». Клик — задача завершается, квест уходит в архив.

Закрытие по событию мира

Если запись должна закрыться, только когда игрок дойдёт до места или поговорит с NPC — повесь условие predicate:

"read": {
  "title": "Прочитать письмо",
  "condition": {
    "success": { "type": "predicate", "predicate": "story:read_letter" }
  }
}

data/story/predicates/read_letter.json — проверка, что игрок находится в комнате с письмом (координаты в нужном диапазоне):

{
  "condition": "minecraft:entity_properties",
  "entity": "this",
  "predicate": {
    "location": {
      "position": {
        "x": { "min": 120, "max": 124 },
        "z": { "min": -8, "max": -4 }
      }
    }
  }
}

Как только игрок зайдёт в зону (120..124, *, -8..-4) — условие сработает, задача завершится, квест уйдёт в архив сам.

Аналогично можно проверять предмет в инвентаре, биом, время суток — см. полный список условий в Minecraft Wiki: Predicate.

Серия записок в одну тему

Если по одной локации разбросана серия записок («Дневник старого траппера, часть 1», «…часть 2», «…часть 3») — заведи на каждую отдельный квест-заметку и свяжи их через Цепочка квестов. Каждая следующая часть появится в книге только после прочтения предыдущей.

Заметка, которая запоминает выбор

Записка может не просто «появиться», а зафиксировать факт прочтения как тег:

"read": {
  "title": "Прочитать письмо",
  "buttons": ["success"],
  "on": {
    "success": { "tags": ["story.read_fathers_letter"] }
  }
}

После прочтения у игрока появится scoreboard-тег story.read_fathers_letter. Дальнейшие квесты могут проверить этот тег через require.tags и открыться только тем, кто читал письмо — см. Развилка и память выбора.


Какой вариант когда

Запись… Вариант
остаётся актуальной — это улика, цель, ориентир Без задач (шаг 1)
должна «закрыться» сразу после прочтения и уйти в архив С пропускаемой задачей + команда quest complete или кнопка
должна закрыться по событию мира — игрок дошёл, поговорил, нашёл С пропускаемой задачей + условие predicate

См. также