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

Reading Mode

Глава 3. Свои шаги

В прошлых Главах мы научились писать и изменять текст в стартовом шаге #start. Наш квест работал так:
Игрок подходит к Волшебнику –> открывает квест и видит текст –> нажмает на кнопку –> диалог закрывается

В этой Главе мы научимся делать более продвинутые квесты:
Игрок подходит к Волшебнику –> открывает квест и видит текст –> нажмает на кнопку «Далее» –> видит ещё один текст –> нажимает «Ок» –> диалог закрывается

По сути, <quest> – это книга, а <step> (шаги) – страница в ней. Сейчас у вас всего 2 страницы: Обложка с краткой информацией (#start) и пустая корка (#end). Теперь мы будем учиться добавлять свои страницы меж ними.

Добавляются свои шаги аналогично #start. Давайте сначала попробуем сделать их на базе шаблона

Шаг 1. Свой шаг по шаблону

Откройте MyQuest.xml, с которым работали в прошлых главах

Отступите 1 строчку от шага <start>. И перепишите туда этот шаблон:

<step id="my_first_step">
   <desc>___</desc>

 <option to="#close" text="Ок"/>
</step>
Расположение шаблона в теле квеста

Шаг 2. Разбор шаблона

Теперь разберемся, а что же мы добавили:

  • <step id="my_first_step"> – открывающая часть.
  • id="my_first_step" – имя шага (подсвечено желтым)
  • <desc> – текст, который NPC всегда будет говорить игроку, так как <intro> пока что нет
  • <option to="#close" text="Ок"> – кнопка, закрывающая диалог

Шаг 3. Имя шага

Имя шага пишется в атрибуте id="_"

Есть 5 простых правил именования шагов:

  1. Маленькими буквами. То бишь не MyStep, а my_step
  2. Все слова через «_»: Не mystep, а my_step. Это называется «snake_case»
  3. На английском. Не «мой_шаг», а «my_step». Если английский совсем никак, то пишите транслитом: «moi_shag»
  4. Максимально понятные имена. Чтобы через месяц вы или другой квестодел могли открыть квест и сразу понять по названию, что делает тот или иной шаг.
  5. Название шага заканчивается на «_step». Не «ask_wizard», а «ask_wizard_step»

Плохие имена: «abcd», «test», «shag32»

Хорошие имена: «greeting_step», «ask_wizard_step», «hunt_spider_step»

Шаг 4. Правим кнопку в #start

Сейчас кнопка в #start ведет на #close, то бишь закрывает диалог. Нам же нужно, чтобы кнопка вела на наш новый шаг. Исправим это

Было:

<option to="#close" text="Норм"/>

Стало:

<option to="my_first_step" text="Норм"/>

Заметьте: «#» — это метка системных шагов (#start, #end, #close). У остальных шагов его нет, поэтому пишем просто “my_first_step”, без решётки.

Готово! Теперь кнопка ведет на наш новый шаг

Шаг 5. Меняем текст в текстовых блоках

Осталось адаптировать текст в нашем квесте под новый шаг. В моём случае, Волшебник здоровался и спрашивал «Как дела?», на что игрок отвечал «Норм». Пусть в новом шаге у меня он говорит: «Это хорошо, что хорошо. Пока, Наездник Дракона!», Игрок жмёт кнопку «Пока» и диалог закрывается
У вас же может быть совсем другой “микро-сюжет” квеста с другим текстом, адаптируйте его в соответсвии с новым шагом. Шаг тоже можете назвать по-своему, а не только как my_first_step

Теперь мой шаблонный шаг выглядит так:

<step id="my_first_step">
<desc>Это хорошо, что хорошо. Пока, Наездник Дракона!</desc>

<option to="#close" text="Пока"/>
</step>

Шаг 6. Проверяем

Сохраняемся и перезаходим в мир, чтобы квесты обновились

Результат:

Как видите, после нажатия кнопки «Пока», квест не возвращается обратно на #start, он остается на шаге my_first_step, поэтому при повторном диалоге всегда выводиться «Это хорошо, что хорошо. Пока, Наездник Дракона!». Согласитесь, выходит несуразица. Давайте это исправим, добавив <intro> и немного адаптируем этот шаг

Шаг 7. Добавляем <intro/>

Добавим <intro> и перенесем в него из <desc> наш текст. В <desc> же напишем, например, «Снова ты? Я занаят, не могу говорить. Пока!»

Было:

<step id="my_first_step">
 <desc>Это хорошо, что хорошо. Пока, Наездник Дракона!</desc>

 <option to="#close" text="Пока"/>
</step>


Стало:

<step id="my_first_step">
    <intro>Это хорошо, что хорошо. Пока, Наездник Дракона!</intro>
    <desc>Снова ты? Я занят, не могу говорить. Пока!</desc>

    <option to="#close" text="Пока"/>
</step>

Шаг 8. Снова проверяем

Опять перезаходим в мир и проверяем:

Как видите, теперь Волшебник всего один раз при переходе со #start говорит: «Это хорошо … Дракона!», а дальше, если к нему повторно подходить, он будет говорить, что занят и не может говорить.

Шаг 9. Итоговый код за Главу

<?xml version="1.0" encoding="UTF-8"?>
<quest npc="Wizard" title="Мой Первый Квест">
ㅤ<step id="#start">
ㅤㅤ<intro>Привет, как дела?</intro>
ㅤㅤ<desc>Рад тебя снова видеть! Как дела?</desc>

ㅤㅤ<option to="my_first_step" text="Норм"/>
ㅤ</step>


ㅤ<step id="my_first_step">
ㅤㅤ<intro>Это хорошо, что хорошо. Пока, Наездник Дракона!</intro>
ㅤㅤ<desc>Снова ты? Я занят, не могу говорить. Пока!</desc>

ㅤㅤ<option to="#close" text="Пока"/>
ㅤ</step>
ㅤ

ㅤ<step id="#end"/>
</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