5.5 KiB
Quests Engine — задания, их шаги и журнал
Quests Engine ведёт счёт задачам игрока. У задания есть название и нумерованный список шагов; сценарии берут его в работу, переводят на следующий шаг, отмечают тегами и завершают. Панель Журнал показывает задания, которые взял игрок, а их состояние игра сохраняет.
Его используют Cthangover (пробуждение в прологе и старый дом) и RPG Plus (лесные задания).
Журнал
Открывается иконкой журнала на панели инструментов. Пока игрок не взял ни одного задания, журнал пуст:
В RPG Plus первое задание даёт староста деревни. Спросите его, куда идти:
После ответа задание появляется в журнале:
- Активные — список заданий в работе, Завершённые — законченных. Ещё не начатые задания не появляются никогда.
- Правая страница показывает выбранное задание: выполненные шаги зачёркнуты, текущий отмечен, а будущие скрыты — журнал не раскрывает сюжет заранее.
- Заработанные заданием теги показаны под записью маленькими золотыми метками.
Описание задания
Задания — это JSON-файлы вида quest в папке quests/ мода. Вот задание с картинок (из RPG Plus):
{
"Kind": "quest",
"Items": [
{
"Id": "woodland_ward",
"Name": "rpg_plus/quest/ward/name",
"StatusToDescription": {
"0": "rpg_plus/quest/ward/0",
"1": "rpg_plus/quest/ward/1",
"2": "rpg_plus/quest/ward/2",
"3": "rpg_plus/quest/ward/3",
"4": "rpg_plus/quest/ward/4"
}
}
]
}
Name и каждый шаг — ключи перевода. Числа — это шаги задания: на шаге 1 текст 1 показан как текущий, а 0 — зачёркнутым; на картинке это «Запись II из V».
Как сценарий двигает задание
Ответ старосты в RPG Plus запускает задание и ставит его на шаг 1:
action quest.set_status quest_id=woodland_ward status=Progress
action quest.set_data_status quest_id=woodland_ward level=1
quest.set_status— состояние задания:NotStarted,Progress(активно) илиEnd(завершено).quest.set_data_status— текущий шаг,level— его номер.quest.add_tag/quest.remove_tagсtag=…— запомнить случившееся, например, какой предмет игрок взял первым.quest.send_notification— показывает игроку уведомление о задании; само по себе изменение задания уведомления не даёт.
Как проверить задание
Проверки задания работают везде, где игра принимает условие: в when, в условиях ответов, условиях сцен и событиях карты.
when "woodland_ward.DataStatus >= 2" -> :lantern
<quest>.IsActive— задание в работе;<quest>.Status—0не начато,1в работе,2завершено;<quest>.DataStatus— текущий шаг;<quest>.hasTag("tag"),<quest>.notHasTag("tag")— так Cthangover выбирает, какой сценарий сцены играть, напримерAwakeningQuest.hasTag("book_taken").
Если что-то пошло не так
- Задания нет в журнале. Его состояние должно быть
Progress(илиEndдля вкладки завершённых); одной установки шага мало. - Журнал показывает ключ вместо текста. Добавьте ключ шага в файлы
localeмода. - Условие всегда ложно. Идентификатор задания написан иначе, чем
Idв файле задания; в логе будет предупреждение о неизвестном задании.


