Часть 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>