Создание Своих Квестов для Игры

Reading Mode

Часть 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. То бишь, пока игрок не завершил ни один из этих квестов, оба видны в списке. Но стоит выполнить один – второй исчезает навсегда.

3
0

Leave a Reply