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

Reading Mode

Часть 11. Составные шаги

В прошлых частях мы собирали каждое задание вручную: делали шаг с описанием, добавляли блок журнала, отслеживали выполнение и т.д. Очевидный плюс: у нас есть полный контроль и огромные возможности для кастомизации наших шагов, но когда нужно делать очень много однотипных шагов (чисто убийство, чисто сбор…), такой подход становится слишком неудобным.

К счастью, разработчик позаботился об этом и создал элегантное решение — составные шаги. Это заранее заготовленные супер-шаги, которые объединяют в себе выдачу задания, проверку условий и выдачу награды с текстовыми блоками (intro, desc, finish). Это позволит сделать код намного более читаемым, а также существенно упростит создание однотипных заданий.

Таблица

Составной шагПояснение
<killstep>Задания на убийство
<craftstep>Задания на крафт
<collectstep>Задания на сбор ресурсов
<removestep>Задания на сбор ресурсов для NPC (удаляются из инвентаря)
<consumestep>Задание на поедание еды игроков или питомцем

Принцип работы

Разберем на примере <killstep>:

<killstep id="hunt">
  <intro>Убей 3 пауков!</intro>
  <desc>Пауки ещё живы.</desc>
  <finish>Молодец! Держи награду.</finish>
  <kill enemy="Spider" count="3"/>
  <option text="Ок" to="#end"/>
</killstep>

1. <killstep> </killstep> — открывающая и закрывающая часть шага
2. <intro> — вступительное первое сообщение
3. <desc> — сообщения при повторном разговоре с NPC
4. <finish> — финальное сообщение перед выдачей награды
5. <kill enemy="Spider" count="3"/> — задание на убийство 3 пауков + вывод задания в Журнал Квестов. Можно писать сразу несколько <kill> в одном <killstep>. Заменяет <info> и авто-опцию, отслеживающую убийства
6. <option> — кнопка-переход на другой шаг (В данном случае, завершение квеста)

Составные шаги можно соединять в цепочки, как и обычные шаги.
Пример: <killstep> –> <collectstep> –> <removestep>

Важно
1. В составные шаги можно писать только условия одного подходящего вида (<kill> в <killstep>, <remove> в <removestep>). Сочетать, например, теги <kill> и <craft> в <killstep> НЕЛЬЗЯ! Если хотите несколько разных условий в одном шаге, то собирайте его самостоятельно по старинке.
2. Если вы хотите, чтобы всегда один и тот же текст с помощью <desc>, то используйте конструкцию:
<desc><intro>Ваш текст</intro></desc>
Просто писать <desc> без <intro> в составных шагах НЕЛЬЗЯ!
3. В составных шагах можно писать только ОДИН <option> и ТОЛЬКО с атрибутом «to». Авто-опции и несколько кнопок не работают
4. Переход на следующий шаг у <option> сработает только после завершения составного шага (диалог с текстом из finish). Пример:

<killstep id="hunt">
  <intro>Убей 3 пауков!</intro>
  <desc>Пауки ещё живы.</desc>
  <finish>Молодец! Держи награду.</finish>
  <kill enemy="Spider" count="3"/>
  <option text="Ок" to="hunter_step"/>
</killstep>

То есть кнопка Ок:
1. В Первом диалоге (intro): Текст из Intro + кнопка Ок переводит на выполнение квеста (добавляет в журнал задание и проверяет выполнение)
2. В Повторном диалоге (desc): Текст из desc + Кнопка ОК будет просто закрывать диалоговое окно
3. В Финальном диалоге (finish): Текст из finish + Кнопка ОК будет переводить на указанный нами шаг (в этом примере — hunter_step)

Пояснение

Дальше очень кратко будут перечислены составные шаги и их синтаксис. Отличаются друг от друга только названием (<killstep>, <craftstep> и т.д.) и тегами-условиями внутри (<kill>, <craft> и т.д.)

Убийство

<killstep id="spider_kill_step">
  <intro>Убей парочку пауков!</intro>
  <desc>Пауки ещё живы.</desc>
  <finish>Молодец! Держи награду.</finish>
  <kill enemy="Spider" count="2"/>
  <option text="ОК" to="#end"/>
</killstep>

Крафт

<craftstep id="craft_tools_step">
  <intro>Скрафти топор и факел на верстаке.</intro>
  <desc>Тебе ещё нужно скрафтить инструменты.</desc>
  <finish>Отлично! Теперь ты готов к работе.</finish>
  <craft name="Axe" type="Table"/>
  <craft name="Tourch" type="Table"/>
  <option text="Далее" to="#end"/>
</craftstep>

Сбор

<collectstep id="gather_step">
  <intro>Принеси мне 10 яблок и 5 костей.</intro>
  <desc>Ещё не всё собрано.</desc>
  <finish>Спасибо! Ты очень помог.</finish>
  <collect item="Apple" count="10"/>
  <collect item="Bone" count="5"/>
  <option text="Ага" to="#end"/>
</collectstep>

Передача

<removestep id="help_step">
  <intro>Мне нечего есть, дай, пожалуйста, 5 булок хлеба</intro>
  <desc>Ты мне дашь хлеб?</desc>
  <finish>Благодарю! Ты очень щедр.</finish>
  <remove item="Bread" count="5"/>
  <option text="Кушай" to="#end"/>
</removestep>

Поедание

<consumestep id="feed">
  <desc><intro>Съешь 2 хлеба и скорми 1 яблоко своему дракону</intro></desc>
  <finish>Отлично! Теперь вы сыты.</finish>
  <consume target="Player" item="Bread" count="2"/>
  <consume target="Drako" item="Apple" count="1"/>
  <option text="Все" to="#end"/>
</consumestep>
3
0

Leave a Reply