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

Reading Mode

Глава 16. Квестовое ветвление

До сих пор мы делали квесты-одиночки. Квест выполнил – Квест исчез. Никакой цепочки квестов. Скучно, откровенно говоря. В офциальных квестах есть полноценная сюжетная линия с дополнительными ветками. Чем же мы хуже?

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

Для этого нам понадобятся 4 новых тега:

  1. <start>
  2. <complete>
  3. <speak>
  4. <daily/>

Текущий квест – квест, из которого игрок куда-то переходит

Целевой квест – квест, на который игрок должен перейти

Шаг 1. <speak/> – Поговори с NPC

Используется внутри <option> как условие. Он проверяет, общался ли игрок с указанным NPC.

<speak npc="Имя NPC" />

Важно

  • 1. Тег <speak> НЕ начинает диалог автоматически. Он просто фиксирует факт разговора с указанным NPC
  • 2. Не отображается в <info>. Решение: С помощью <label> напишите текст в духе: «Поговори с [Имя NPC]»

Применение: Волшебник просит поговорить с Тедом. Игрок идет и говорит с ним, после чего авто-опция срабатывает и квест Волшебника отправляется дальше

Пример авто-опции:

<option auto="return_to_wizard_step">
<speak npc="Viking" />
</option>

В <info>:

<info>
 <label>Поговори с Тедом</label>
</info>

На самом деле, очень мало мест, где можно применить этот тег. Ему побарабану: выполнял игрок какой-то квест у NPC, к которому игрока отправили, или нет. Игрок может просто открыть диалоговое окно с целевым NPC и тут же закрыть.

Намного практичнее использовать тег <complete>, который уже проверяет именно факт выполнения конкретного квеста, а не просто говорил с NPC или нет. Его рассмотрим и применим в нашем Квесте ниже

Шаг 2. <complete/> – Выполнил ли квест

Тег <complete/> проверяет факт прохождения квеста (до #end/#end_dark_side), достижения какого-то конкретного шага или прохождения какого-то квеста N-раз

<complete quest="ИмяКвеста" step="ИмяШага"/>
<complete count="СколькоРаз"/>

Последняя запись работает только с ежедневными квестами (рассмотрим чуть позже). То бишь теги count и quest/step взаимосиключающие, комбинировать нельзя

Важно: Регистр Важен! «Мой Квест» и «Мой квест» – это два разных квеста!

Его можно ставить:

  • В начало квеста перед всеми <step>. Когда нужно, чтобы этот квест появлялся в меню у NPC только после того, как игрок достигнет в целевом квесте определенного шага.
<?xml version="1.0" encoding="UTF-8"?>
<quest npc="FemaleWarrior" title="Последняя Встреча">
  <complete quest="Разговор с Тедом" step="#end"/>
  <step id="#start">
      <desc>Привет, Наездник Дракона. Это наша последняя встреча!</desc>
      <option to="why_question_step" text="???"/>
    </step>
. . .

 

В данном примере, текущий квест «Последняя Встреча» появиться в списке Квестов на выбор у Паулы (FemaleWarrior) только после того, как игрок дойдет до шага #end в квесте «Разговор с Тедом». До этих пор, квест будет скрыт от игрока.

  • В авто-опции в качестве «пинка» для перехода на следующий шаг. Для этого в авто-опцию текущиего квеста добавляете <complete/>. Как только целевой квест дойдет до нужного шага, авто-опция как бы «пнёт» текущий квест дальше
  • В качестве счетчика количества прохождения квеста для ежедневных квестов

Шаг 3. <complete/> и Наш Квест

Сначала реализуем простую систему: нужно закончить текущий основной (MyQuest.xml), чтобы открыть новый квест. Потом попробуем сделать систему взаимных «пинков» от нового квеста к основному.

Приступим

Теперь мы создадим цепочку из 2 квестов: Квест Волшебника и Квест Аарона

Добавим в MyQuest.xml примитивный шаг go_to_warrior_step:

    <step id="go_to_warrior_step">
      <desc>На этом пока что всё. Мне нечего тебе поручить. Сходи к Аарону, может быть, у него есть что-то для тебя</desc>
      <option to="#close" text="Ок"/>
    </step>

 

Также для удобства переименуем наш основной квест из «Мой Первый Квест» в «Основной квест» и отредачим after_hunt_step, чтоыб кнопка «Ок» вела на наш новый шаг:

    <step id="after_hunt_step">
      <desc>Отлично! Ты справился</desc>
     . . .
      <option to="spider_hunt_step" text="Уйти"/>
        <option to="go_to_warrior_step" text="Ок">
           . . .
      </option>
     . . .
    </step>

Теперь создадим новый файл WarriorFirstQuest.xml. В итоге должно получиться 2 файла: MyQuest.xml и WarriorFirstQuest.xml.

Допустим, у Аарона квест будет называться «Маленькая Проблемка», в котором он просит грохнуть Арагога. Значит, в WarriorFirstQuest.xml пишем:

<?xml version="1.0" encoding="UTF-8"?>
<quest npc="Warrior" title="Маленькая Проблемка">
    <complete quest="Основной Квест" step="go_to_warrior_step" />
    <step id="#start">
      <desc>Привет, Наездник Дракона. Полагаю, тебя послал Волшебник. \nЧтож у меня есть для тебя небольшое заданьеце</desc>
      <option to="small_problem_step" text="?">
          <journal />
      </option>
  </step>

  <killstep id="small_problem_step">
      <intro>Видишь ли, у меня тут появилась небольшая проблемка. Говорят, что на дне земных провалов на тамошних деревьях растут самые вкусные яблочки. Я бы и рад туда спуститься, но там сидит огромный паук – Арагог. \nЯ, понимаешь ли, даже мелких паучков страшусь, а тут аж огромный Паучище
      \nВ общем, не мог бы ты мне немножко подсобить с этой маленькой проблемкой? Я готов немного приплатить за это.
      </intro>
      <desc>Так ты поможешь или нет?</desc>
      <finish>Спасибо. Наконец я смогу без опаски спуститься в те провалы и насладиться тамошними яблочками</finish>

      <kill enemy="GiantSpider" count="1"/>

      <rewards>
          <reward exp="500"/>
          <reward item="Gold Coin" count="30"/>
      </rewards>

      <option to="after_aragog_step" text="Ок"/>
  </killstep>

  <step id="after_aragog_step">
      <desc>Пока, и ещё раз спасибо за помощь</desc>
      <option to="#close" text="Ок"/>
  </step>

  <step id="#end"/>
</quest>

Важно: Регистр Важен! «Мой Квест» и «Мой квест» – это два разных квеста!

В чем суть: Пока игрок не дошел в «Основном квесте» до шага go_to_warrior_step, квест Аарона «Маленькая Проблемка» будет скрыт, как будто его нет. Как только игрок доходит до шага go_to_warrior_step, квест Аарона разблокируется.

Разберем сам код в квесте Аарона:

  1. Обязательно в первую кнопку в шаге #start добавляем тег <journal />, чтобы создать запись в Журнале
  2. Шаг small_problem_step – это обычный шаблонный шаг killstep. Работу шаблонных шагов разбирали ранее
  3. Обязательно также добавляем шаг-прокладку after_aragog_step, чтобы игрок мог перейти на него с шаблонного шага

Проверяем:

Готово. Все работает

Шаг 4. Система «пинков»

Усложним взаимодействие между нашими квестами. Пусть теперь выполнение задания у Аарона будет открывать новое задание у Волшебника, а затем наоброт

Настроим Квест Волшебника (MyQuest.xml – «Основной Квест»)

Для начала добавим блок info в шаг go_to_warrior_step у Волшебника, чтобы после выполненяи его задания у нас в Журнале не оставалась пустая метка:

    <step id="go_to_warrior_step">
      <desc>На этом пока что всё. Мне нечего тебе поручить. Сходи к Аарону, может быть, у него есть что-то для тебя</desc>
        <option to="#close" text="Ок"/>

      <info>
        <label>Выполни поручение от Аарона</label>
      </info>
    </step>

 

Добавим авто-опцию с <complete/>. Она будет «пинать» на шаг-прокладку перед новым заданием от Волшебника, когда игрок выполнит задание от Аарона на убийство Арагога (after_aragog_step)

    <step id="go_to_warrior_step">
     . . .
      <option auto="before_find_pig_spawner_step">
          <complete quest="Маленькая Проблемка" step="after_aragog_step" />
      </option>
    </step>

Теперь сделаем само задание и шаг-прокладку. Допустим, Волшебник будет просить принести спавнер Свиньи (data="56" из «Мобы» в GigaList). Шаг назовем find_pig_spawner_step

    <step id="go_to_warrior_step">
  . . .
  </step>
    <step id="before_find_pig_spawner_step">
    <desc>Всё таки у меня есть для тебя поручение</desc>
    <option to="find_bed_step" text="Ок"/>
  </step>
    <removestep id="find_pig_spawner_step">
    <intro>Всё таки у меня есть для тебя поручение. Собери-ка мне спавнер Свиньи</intro>
     <desc>Так ты будешь собирать?</desc>
     <finish>О, а вот и мой спавнер</finish>

     <remove item="Antique Spawner" data="56" count="1" />

     <rewards>
        <reward exp="500"/>
     </rewards>

     <option to="after_pig_go_warrior" text="Ок"/>
  </removestep>

  <step id="#end">
  . . .
  </step>

Также добавим ещё один шаг-прокладку, куда будет переводить игрока после выполнения removestep. Пусть это будет after_pig_go_warrior

    <removestep id="find_pig_spawner_step">
    . . .
  </removestep>

<step id="after_pig_go_warrior">

    <desc>Спасибо, Наездник Дракона, а теперь сходи опять к Аарону. У него опять есть для тебя какое-то задание</desc>
    <option to="#close" text="Ок"/>

    <info>
        <label>Иди к Аарону ([FFFF00]опять[-])</label>
    </info>
  </step>

  <step id="#end">
  . . .
  </step>

Настроим Квест Аарона (WarriorFirstQuest.xml – «Маленькая Проблемка»)

В шаг after_aragog_step добавим авто-опцию, которая «пнёт» квест Аарона после достижения шага after_pig_go_warrior в квесте Волшеюника. То бишь после выполения задания на поиск спавнера свиньи.

    <step id="after_aragog_step">
      <desc>Пока, и ещё раз спасибо за помощь</desc>
      <option to="#close" text="Ок"/>

      <option auto="find_bed_step">
        <complete quest="Основной Квест" step="after_pig_go_warrior"/>
      </option>
    </step>

Создадим задание, допустим, на поиск кровати и шаг-прокладку перед ним. Игрок должен найти и принести кровать для Аарона

    <step id="after_aragog_step">
      . . .
    </step>

    <step id="before_find_bed_step">
    <desc>Слу-у-ушай...</desc>
    <option to="find_bed_step" text="Ок"/>
  </step>
    <removestep id="find_bed_step">
    <intro>Слу-у-ушай. Можешь найти мне кровать? Да, обычную кровать. Моя что-то в совсем уж печально состоянии</intro>
    <desc>Так ты найдешь кровать?</desc>
    <finish>Спасибо, Наездник Дракона. Эта кровать мне очень пригодиться</finish>

    <remove item="Bed" count="1"/>

    <rewards>
      <reward exp="777"/>
    </rewards>

    <option to="#end" text="ОК"/>
  </removestep>

  <step id="#end"/>

Теперь настроим #end, чтобы полностью убрать этот квест у Аарона после выполнения

  • Было:
    <step id="#end"/>
  • Стало:
    <step id="#end">
      <desc>Ну а теперь пока, Наездник Дракона. Был рад повидаться.\nИди к Волшебнику, может, у него есть какое-то задание для тебя</desc>
      <option to="#close" text="Пока"/>
    </step>

 

Проверяем

Зачем добавлять шаги-прокладки?

Это нужно, чтобы задание не запускалось сразу, а ждало игрока. Если их не добавлять, то у вас задания будут самостоятельно (без игрока) запускаться и сразу же добавлять Цель задания в Журнал или выводить label на экран, хотя игрок даже не успел поговорить с нужным NPC

Шаг 5. <start/> – Мгновенный запуск квеста

Тег <start> используется как действие. Он мгновено запускает другой квест с определенного шага

Его кладут внутрь опции (авто или кнопки).

Весь тег целиком выглядит так:

<start quest="ИмяКвеста"/>

То бишь этот тег буквально говорит: Начни квест X с шага Y

Важно! В quest должен быть указан точный title нужного квеста со всеми пробелами

Пример использования:

В наборе квестов для карты Random Layer Challenge (https://vk.ru/topic-37328711_35729729?post=34211) используется этот тег. Рассмотрим подробнее.

В квесте «Последняя Просьба» (LastRequest.xml) есть шаги begin и #end

    <step id="begin">

      <info>
          <label>Исполни последнюю просьбу Болтливого Скелета и покончи с [FF0000]Тираном[-]</label>
          <kill enemy="DragonLord" count="1"/>
        </info>

      <option auto="#end">
          <kill enemy="DragonLord" count="1"/>
      </option>
  </step>

  <step id="#end">
      <option auto="#close">
          <start quest="Победа"/>
      </option>
    </step>

 

В шаге begin есть авто-опция, которая отслеживает убийство Повелителя Драконов (DragonLord). После его смерти, игрока перебросит на шаг #end, в котором есть только одна авто-опция. Нет ни кнопок, ни диалогов. Она мгновенно запускает квест «Победа» (Win.xml) на шаге #start и, чтобы избежать пустого экрана, закрывает диалоговое окно через #close.

После чего мгновенно без подтверждений открывается диалоговое окно на шаге #start у квеста «Победа».

Видео-демонстрация (Youtube): https://www.youtube.com/watch?v=eLtJ56-l8BA&t=2267s

Запоминаем: Тег <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>

Шаг 6. <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 квестов для Теда (Viking). Второй квест открывается только после выполнения первого. В первом он просит принести 3 топора, во втором – убить Ледяного Дракона
  2. Создайте ежедневное задание с прогрессией для Паулы (FemaleWarrior). 1-3 день: убей 3 паука; 3-5 день: убей 3 тигра; 5-7 день: убей Гидру, 8+: убей Мати

Заключение

Теперь ваши квесты перестали быть разрозненными квестами. С этого момента, вы умеете объединять их в Наборы и логические сюжетные цепочки. Можно выстравивать полноценные сюжетные кампании, делать «умные» ежедневки и многое другое

Итоговый код Главы

MyQuest.xml – «Основной Квест»

<?xml version="1.0" encoding="UTF-8"?>
<quest npc="Wizard" title="Основной Квест">

<step id="#start">
<intro>Привет, [FFAA00]как дела[-]?</intro>
<desc>[FFAA00]Рад[-] тебя снова видеть! Как дела?</desc>

<option to="bad_mood_step" text="[FF0000]Плохо[-]"/>
<option to="good_mood_step" text="[00FF00]Норм[-]">
<journal/>
</option>
</step>

<!-- Хорошее настроение -->
<step id="good_mood_step">
<intro>Это хорошо, что хорошо.
У меня есть одно плёвое заданьеце для тебя.
Готов ли его выполнить?</intro>
<desc>Снова ты?\nМоё предложение всё ещё актуально.\nГотов приступить?</desc>

<option to="spider_hunt_step" text="Да">
<journal/>
</option>
<option to="#start" text="Назад"/>
</step>

<step id="spider_hunt_step">
<desc>Хорошо. Попробуй убить парочку пауков для разминки. Также принеси мне яблочко, а то я уж больно проголодался</desc>
<item name="Apple" count="1"/>

<option to="#close" text="Ок"/>

<rewards type="Award">
<reward exp="300"/>
<row>
<reward item="Axe" count="5"/>
<reward recipe="Sunshard Paula" type="Table"/>
</row>
</rewards>

<label location="HUD">
<persist/>
<position x="-200" y="-300"/>
<scale x="24" y="24"/>
[FFAA00]Цель:[-] 2 паука и яблоко
</label>

<info>
<kill enemy="Spider" count="2"/>
<collect item="Apple" count="1"/>
<label>Яблоко: </label>
<item name="Apple" count="1"/>
</info>

<option auto="after_hunt_step">
<kill enemy="Spider" count="2"/>
<collect item="Apple" count="1"/>
<notify>[00FF00]Задание выполнено![-] \nВернись к Волшебнику!</notify>
</option>
</step>

<step id="after_hunt_step">
<desc>Отлично! Ты справился</desc>

<rewards type="Display">
<reward exp="300"/>
<row>
<reward item="Axe" count="5"/>
<reward recipe="Sunshard Paula" type="Table"/>
</row>
</rewards>

<option to="spider_hunt_step" text="Уйти"/>
<option to="go_to_warrior_step" text="Ок">
<remove item="Apple" count="1"/>

<reward exp="300"/>
<reward item="Axe" count="5"/>
<reward recipe="Sunshard Paula" type="Table"/>
</option>

<info>
<label>Вернись к Волшебнику и скажи, что ты убил всех пауков</label>
</info>
</step>

<step id="go_to_warrior_step">
<desc>На этом пока что всё. Мне нечего тебе поручить. Сходи к Аарону, может быть, у него есть что-то для тебя</desc>
<option to="#close" text="Ок"/>

<info>
<label>Выполни поручение от Аарона</label>
</info>

<option auto="before_find_pig_spawner_step">
<complete quest="Маленькая Проблемка" step="after_aragog_step" />
</option>
</step>

<step id="before_find_pig_spawner_step">
<desc>Всё таки у меня есть для тебя поручение</desc>
<option to="find_pig_spawner_step" text="Ок"/>
</step>

<removestep id="find_pig_spawner_step">
<intro>Собери-ка мне спавнер Свиньи</intro>
<desc>Так ты будешь собирать?</desc>
<finish>О, а вот и мой спавнер</finish>

<remove item="Antique Spawner" data="56" count="1" />

<rewards>
<reward exp="500"/>
</rewards>

<option to="after_pig_go_warrior" text="Ок"/>
</removestep>

<step id="after_pig_go_warrior">
<desc>Спасибо, Наездник Дракона, а теперь сходи опять к Аарону. У него опять есть для тебя какое-то задание</desc>
<option to="#close" text="Ок"/>

<info>
<label>Иди к Аарону ([FFFF00]опять[-])</label>
</info>
</step>

<step id="#end">
<desc>Прощай, Наездник Дракона! Рад был повидаться</desc>

<option to="#start" text="Назад"/>
<option to="#close" text="Пока"/>
</step>

<!-- Плохое настроение -->
<step id="bad_mood_step">
<intro>Очень жаль! Крепись там</intro>
<desc>Понимаю, что тебе сейчас не хорошо, крепись там!</desc>

<option to="brew_health_potion_step" text=":(">
<journal/>
</option>
<option to="#start" text="Назад">
<reward item="Health Potion" count="1000"/>
</option>
</step>

<step id="brew_health_potion_step">
<desc>Могу предложить тебе сварить Зелье Здоровья. Это должно помочь поднять тебе настроение.</desc>
<option to="#close" text="Понял"/>

<label>Вот рецепт:</label>
<recipe name="Health Potion" type="Cauldron" />
<label>
<scale x="1000" y="8"/>
[FFFF00]_[-]
</label>

<row>
<label>Скрафти Котел</label>
<item name="Cauldron" count="0"/>
<label>и помести:</label>
</row>
<row>
<item name="Lilia Flower" count="1"/>
<item name="water" count="1"/>
<item name="Energy" count="1"/>
</row>

<info>
<label>Свари Зелье Здоровья по рецепту: </label>
<recipe name="Health Potion" type="Cauldron" />
<label>После приготовления, подойди к Волшебнику!</label> <!-- -->
<label></label>
<label>Для приготовления потребуются: </label>
<item name="Cauldron" count="1"/>
<item name="Lilia Flower" count="1"/>
<item name="water" count="1"/>
<item name="Energy" count="1"/>
</info>

<option auto="return_to_wizard_step">
<collect item="Health Potion" count="1"/> <!-- -->
</option>
</step>

<step id="return_to_wizard_step">
<desc>Отлично! Вижу, что ты справился</desc>

<option to="consume_health_potion_step" text="Ок"/>

<label location="HUD">
<persist/>
<position x="-200" y="-300"/>
<scale x="24" y="24"/>
[FFAA00]Цель:[-] Отнести зелья Волшебнику
</label>

<info>
<label>Вернись к Волшебнику и скажи, что ты сварил Зелье</label>
</info>
</step>

<consumestep id="consume_health_potion_step">
<intro>Теперь выпей это Зелье! Тебе сразу же полегчает</intro>
<desc>Давай пей. Чего ты ждёшь?</desc>
<finish>Вот видишь. Я прямо вижу, как ты стал здоровее выглядеть!</finish>

<consume target="Player" item="Health Potion" count="1"/>

<rewards>
<reward exp="50"/>
</rewards>

<option to="#end_dark_side" text="Ок"/>
</consumestep>

<step id="#end_dark_side">
<desc>Пока, Наездник Дракона. Был рад повидаться!</desc>

<option to="#start" text="Назад"/>
<option to="#close" text=". . ."/>
</step>
</quest>

WarriorFirstQuest.xml – «Маленькая Проблемка»

<?xml version="1.0" encoding="UTF-8"?>
<quest npc="Warrior" title="Маленькая Проблемка">
  <complete quest="Основной Квест" step="go_to_warrior_step" />

  <step id="#start">
      <desc>Привет, Наездник Дракона. Полагаю, тебя послал Волшебник. \nЧтож у меня есть для тебя небольшое заданьеце</desc>
      <option to="small_problem_step" text="?">
          <journal />
      </option>
  </step>

  <killstep id="small_problem_step">
      <intro>Видишь ли, у меня тут появилась небольшая проблемка. Говорят, что на дне земных провалов на тамошних деревьях растут самые вкусные яблочки. Я бы и рад туда спуститься, но там сидит огромный паук – Арагог. \nЯ, понимаешь ли, даже мелких паучков страшусь, а тут аж огромный Паучище
      \nВ общем, не мог бы ты мне немножко подсобить с этой маленькой проблемкой? Я готов немного приплатить за это.
      </intro>
      <desc>Так ты поможешь или нет?</desc>
        <finish>Спасибо. Наконец я смогу без опаски спуститься в те провалы и насладиться тамошними яблочками</finish>

        <kill enemy="GiantSpider" count="1"/>

      <rewards>
          <reward exp="500"/>
          <reward item="Gold Coin" count="30"/>
        </rewards>

      <option to="after_aragog_step" text="Ок"/>
    </killstep>

  <step id="after_aragog_step">
        <desc>Пока, и ещё раз спасибо за помощь</desc>

      <option to="#close" text="Ок"/>

      <info>
          <label>Иди к Волшебнику и проверь, есть ли у него задания</label>
        </info>

      <option auto="before_find_bed_step">
          <complete quest="Основной Квест" step="after_pig_go_warrior"/>
      </option>
    </step>

  <step id="before_find_bed_step">
      <desc>Слу-у-ушай...</desc>
      <option to="find_bed_step" text="Ок"/>
    </step>

  <removestep id="find_bed_step">
      <intro>Можешь найти мне кровать? Да, обычную кровать. Моя что-то в совсем уж печально состоянии</intro>
      <desc>Так ты найдешь кровать?</desc>
        <finish>Спасибо, Наездник Дракона. Эта кровать мне очень пригодиться</finish>

      <remove item="Bed" count="1"/>

      <rewards>
          <reward exp="777"/>
        </rewards>

      <option to="#end" text="Ок"/>
    </removestep>

  <step id="#end">
      <desc>Ну а теперь пока, Наездник Дракона. Был рад повидаться.\nИди к Волшебнику, может, у него есть какое-то задание для тебя</desc>
      <option to="#close" text="Пока"/>
  </step>
</quest>

 

2
0

Comments

  1. Northern_77
    Northern_77

    Отличный гайд, но осталось несколько вопросов:
    1) Куда делся раздел с кастомным магазином из прошлой версии руководства. В 13.5.0? Его больше нельзя кастомизировать?
    2) У Фуза в 13.5.0 есть свой магазин, следовательно, они тоже стали квестовыми НПС и для них можно делать кастомные квесты. Или нельзя?

    1
    0
    • Da-Damych
      Da-Damych

      1) Кастомные магазины полностью убраны (даже для Алхимика, Фуза и Крестьян). Теперь игра не будет подгружать квесты, содержащие в коде тег <store>

      В логах будет писать:
      Skipped custom quest ‘ИмяКвеста’ from file [Путь до XML-файла квеста]: NPC stores are not allowed in custom quests
      UnityEngine.DebugLogHandler:Internal_Log(LogType, LogOption, String, Object)
      UnityEngine.Logger:Log(LogType, Object)
      UnityEngine.Debug:LogWarning(Object)
      QuestManager:AddUserQuests(XmlSerializer, String)
      d__77:MoveNext()
      UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

      2) Да, для Фуза можно теперь тоже делать квесты. Список Квестовых NPC только что обновил, просто изначально забыл добавить
      Из нюансов: У них пока что нет своего портрета, поэтому будет видно просто имя

      1
      0

Leave a Reply