Часть 9. Полноценное Квестовое Ветвление
До настоящего времени мы создавали примитивные одиночные текстовые квесты. Но настоящая магия начинается, когда несколько квестов от разных NPC с разными заданиями начинают связываться друг с другом воедино: один открывает второй, блокирует третий, проверяет, говорили ли Вы с определённым NPC и т.д.
Базой для этого служат четыре тега:<complete> — условие доступности квеста.<speak> — проверка факта разговора с NPC.<start quest="..."> — принудительный запуск или изменение состояния другого квеста.<daily> — ежедневные квесты
<complete> — Открыть Если
Позволяет создавать цепочку квестов, которые открываются друг за другом.
Размещается после <quest …>, перед всеми <step> (перед #start в том числе) или внутри <option>.
Квест не откроется, пока игрок не достигнет заданного шага (по умолчанию — #end) или нужного количества перепрохождений.
| Атрибут | Значение |
|---|---|
| quest | Название Квеста Обязательный. Указывает после какого квеста откроется этот |
| step | Название Шага Необязательный. Если не указан: step="#end", то бишь после полного завершения квестаПояснение: Позволяет открывать этот квест после того, как игрок достиг определенного шага в указанном квесте |
| count | Число повторений Обязательный (в дейликах и проверках) при построении цепочки из квестов, писать его не нужно Пояснение: Прогрессия выполнения. Подсчитывает сколько раз этот квест запускался. Подходит для ежедневных квестов Пример: Внутри шага #start создаем несколько опций с <complete> и разными count. В самом первом (базовой) опции указывать count не надо, т.к на старте мы выполнили этот квест 0 раз.К примеру, сделаем переключатель сложности квеста: <step id="#start"><option auto="hard_step"><complete count="6"/><journal/></option><option auto="normal_step"><complete count="5"/><journal/></option><option auto="easy_step"><journal/></option></step>Это создаёт три ветки: 1. easy_step – Первые 4 выполнения, квест на легкой сложности2. normal_step – 5-е и 6-е выполнение, квест на средней сложности3. hard_step – 7-е выполнение и дальше, квест на сложной сложности |
Важно
Можно указывать сразу несколько <complete> подряд. Квест откроется, когда ВСЕ перечисленные квесты дойдут до указанных шагов
Пример
<complete quest="Вступление" />
<complete quest="Помощь Пауле" step="after_talking_step"/>
Пояснение
Квест откроется только, если квест «Вступление» дошел до шага «#end» (ставится по умолчанию, так как step отсутствует) И если квест «Помощь Пауле» дошел до шага «after_talking_step»
Можно использовать в более сложных технических квестах-свитчах с блокировками и открытием других путей. Рассмотрим чуть позже
<speak> — Поговори с NPC
Используется внутри <option> как условие. Он проверяет, общался ли игрок с указанным NPC.
Важно
1. Тег <speak> НЕ начинает диалог автоматически. Он просто фиксирует факт разговора с указанным NPC
2. Не отображается в <info>. Решение: С помощью <label> напишите текст в духе: «Поговори с [Имя NPC]»
Применение: Волшебник просит поговорить с Тедом. Игрок идет и говорит с ним, после чего авто-опция срабатывает и квест отправляется дальше
Пример авто-опции:
<option auto="return_to_wizard" start="0" check="0.5">
<speak npc="Viking" />
</option>
В <info>:
<info>
<label>Поговори с Тедом</label>
</info>
<start> — Запуск квеста
Этот тег тоже помещается внутри <option> (ручной или автоматический) и немедленно запускает квест, или переводит на нужный шаг
| Атрибут | Значение |
|---|---|
| quest | Название Квеста Обязательный. Указывает какой квест запустить |
| step | Название Шага Необязательный. Если не указан: step="#start", то бишь самое начало квестаПозволяет перейти в квесте на нужный шаг |
Где можно применить
1. Моментальный переход на следующий квест, после завершения текущего
<option to="#end" text="В бой!">
<start quest="Волна 1" />
<close />
</option>
2. Перезапуск квеста. Например, после смерти
Обработчик смерти в шаге «battle_step»
<step id="battle_step">
….
<option auto="player_dead">
<death />
</option>
….
</step>
Шаг после смерти:
<step id="player_dead">
<option auto="#start">
<clearmobs />
</option>
</step>
3. Сдвинуть основной квест, после выполнения побочного задания
<start quest="Мой квест: Главный Квест" step="shadow_hunter_speak_step" />
<daily /> — ежедневный квест
Ежедневный квест можно выполнять раз в сутки. После завершения, он пропадает до следующего дня.
Как использовать
Просто добавьте тег <daily /> в начало квеста (после <quest …> и перед всеми <step>):
<quest npc="Viking" title="Ежедневный квест: Тест">
<daily/>
...
<step id="#start">
…
</quest>
Прогрессия
В нужном шаге создаете несколько опций с разными <complete count="N-раз">, где N — количество запусков выполненных квестов. В самом первом (базовой) опции указывать count не надо, т.к на старте мы выполнили 0 квестов.
Рассмотрим на примере:
<step id="#start">
<option auto="dragon_lord_battle_step">
<complete count="10"/>
<journal/>
</option>
<option auto="normal_battle_step">
<complete count="6"/>
<journal/>
</option>
<option auto="trainig_step">
<journal/>
</option>
</step>
Где:
1. training_step – Первые 5 выполнений, игрок проходит простенькие тренировки
2. normal_battle_step – с 6-го по 9-е выполнение, игрок сражается в обычных битвах
3. dragon_lord_battle_step – 10-е выполнение и дальше, игрок сражается с Повелителем Драконов
Важно
Соблюдайте порядок выполнения, размещайте <option> с <complete count=…> в порядке убывания (от большего count к меньшему), так как игра проверяет условия сверху вниз
Практика: Развилка с Блокировками
Переменных в кастомных квестах не существует. Частично их можно заменить с помощью квестов-переключателей
1. Создадим систему из трёх квестов: 2 конкурирующих-сюжетных и 1 технический.

2. В Switch.xml пишем:

Это технический квест-переключатель. NPC может быть любой, он тут нужен только для того, чтобы квест работал. Если игрок в квест зайдет, то он сразу же завершится. Это нужно, чтобы квест пропал из списка доступных для диалога у NPC. Как вариант, можно в вашем моде сделать один входной квест-вступление, который скрытно, сразу после запуска, с помощью <start quest=…> пройдется по скрытым счетчикам, чтобы они все перешли на шаг #end и исчезли из списка квестов.
3. Наброски квестов Аарона и Теда:


У Switch есть шаг «locked». Оба эти квеста открываются, если скрытый Switch дошел до #end. Если Switch переведем на шаг «locked», то квесты исчезнут. Перевод на «locked» происходит тогда, когда один из Путей (Тед, Аарон) доходят до шага #end. То бишь, пока игрок не завершил ни один из этих квестов, оба видны в списке. Но стоит выполнить один – второй исчезает навсегда.