Глава 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 простых правил именования шагов:
- Маленькими буквами. То бишь не
MyStep, аmy_step - Все слова через «_»: Не
mystep, аmy_step. Это называется «snake_case» - На английском. Не «
мой_шаг», а «my_step». Если английский совсем никак, то пишите транслитом: «moi_shag» - Максимально понятные имена. Чтобы через месяц вы или другой квестодел могли открыть квест и сразу понять по названию, что делает тот или иной шаг.
- Название шага заканчивается на «
_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>
Отличный гайд, но осталось несколько вопросов:
1) Куда делся раздел с кастомным магазином из прошлой версии руководства. В 13.5.0? Его больше нельзя кастомизировать?
2) У Фуза в 13.5.0 есть свой магазин, следовательно, они тоже стали квестовыми НПС и для них можно делать кастомные квесты. Или нельзя?
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 только что обновил, просто изначально забыл добавить
Из нюансов: У них пока что нет своего портрета, поэтому будет видно просто имя