Квестовый журнал: задания и чекпоинты
Диалоги (стадии) — это то, что игрок видит и на что кликает. Но у главы истории есть ещё один слой —
квестовый журнал (missions), который показывает игроку текущие задачи независимо от того, на какой
стадии диалога он находится. Это удобно для заданий вида «принеси 5 шкур кровососа», которые выполняются не
диалогом, а действиями в открытом мире.
Структура
"missions": [
{
"title": "Хабар с Кордона",
"name": "quest_sidorovich_hunt",
"checkpoints": [
{
"title": "Найти схрон возле блокпоста",
"parameter": "схрон_кордон_найден",
"type": "FIND_ITEM",
"condition": { "has": ["схрон_кордон_найден"] },
"actions": { "openNotification": ["Задание", "Схрон найден!"] }
}
]
}
]
title— название задания, которое видит игрок в журнале.name— служебный идентификатор (slug) задания.checkpoints— упорядоченный список этапов; каждый закрывается, когда выполняется егоcondition.
Типы чекпоинтов
| Тип | Смысл | Статус |
|---|---|---|
FIND_ITEM | Этап закрывается, когда у игрока появляется флаг/предмет, указанный в parameter | Подтверждённо используется в реальном контенте — основной рабочий тип |
KILL | Предполагает отслеживание убийств | Присутствует в типах данных, но не встречается в изученном контенте — считайте экспериментальным, уточните поведение у разработчиков перед использованием |
TRAVEL | Предполагает отслеживание перемещения/посещения локации | Так же, как KILL, не встречен в реальных историях — уточняйте перед использованием |
Практический совет
Самый надёжный и проверенный паттерн — вести чекпоинты через тот же флаг, что и диалоги:
- Действие где-то в мире (например, точка на карте или отряд) выдаёт флаг через
addпри выполнении условия. - Чекпоинт типа
FIND_ITEMс тем же именем вparameterавтоматически закрывается. - Диалог в другой стадии проверяет тот же флаг через
has, чтобы показать реакцию NPC.
Так один флаг одновременно двигает и диалог, и журнал заданий — не нужно дублировать логику.
Далее
- Действия — какими командами выдавать флаги/предметы для чекпоинтов.
- Точки на карте — как связать чекпоинт с конкретным местом в мире.