Этап 1. Свои Квесты и Шаги
Глава 2. Первый квест с нуля
Шаблон редактровать мы научились. Теперь пора бы и такой же квест с нуля собрать
Шаг 1. Отображения расширений файлов
Для начала включим отображение расширений файлов в Проводнике.
Расширения файлов — это окончание файла с точкой: .txt, .pdf, .docx, .png и т.д.
Windows 10:
Верхняя часть окна Проводника

Windows 11:
Верхняя часть окна Проводника

Android
Используйте MT Manager. Там отображение расширений файлов и включено по-умолчанию
Шаг 2. Создаем пустой XML
Windows
- ПКМ по пустой области –> Создать –> Текстовый Документ
- Переименуйте (вместе с расширением
.txt) наMyQuest.xml - Если cпросит про смену расширения, жмите «Да»
Обязательно убедитесь, что у вас получился именно MyQuest.xml, а не MyQuest.xml.txt. Если получился с .txt на конце, то просто переименуйте повторно, убрав .txt из конца

Android
В MT Manager уже встроен XML-редактор, поэтому рекомендуется использовать его



Шаг 3. Первая строка
В самом начале каждого XML файла обязательно ставьте декларацию:
<?xml version="1.0" encoding="UTF-8"?>
Декаларация – это своеборазный “паспорт” файла, который говорит: «Я – XML-файл версии 1.0 с текстом в UTF-8». Просто копируйте и вставляйте её в начало каждого квеста
Шаг 4. Тело квеста
Добавим тело квеста (она же главная коробка): <quest>. Внутри этой “коробки” лежит весь квест.
Состоит “Главкоробка” из двух частей:
<quest npc="Wizard" title="Мой Квест">
и</quest>
Между этими двумя частями располагается сам квест
Разберем и напишем первую строку:
<quest npc="Wizard" title="Мой Квест">
quest – Откырвающая часть (тег). Начало “Главкоробки”
npc – Системное имя NPC, к которому привяжется этот квест. В моём случае, это Wizard (Волшебник). См. Имена NPC
title – Название квеста. Как будет отображаться в Журнале или при выборе квеста в диалоговом окне. В моём случае, это «Мой Квест»
Теперь вторую строку:
</quest>
</quest> – Это “крышка” Главкоробки (закрывающий тег). Она означает, что квест закончился и дальше в XML файле ничего не будет
Шаг 5. Базовый шаг #start
У каждого квеста есть начальная и конечная точка. В случае Block Story, начальной точкой является шаг #start, а конечной – #end.
Так как все шаги-теги (коробки), должны находиться внутри Тела Квеста (Главкоробка <quest>), то поместим #start внутрь <quest>:
- Переходим на новую строку и нажимаем 1 раз клавишу Tab (слева от Q). На Android в XMl-редакторе эта кнопка называется также
- Пишем:
<step id="#start"> - Опять новая строка, 1 раз Tab и пишем “крышку” нашей коробки:
</step> - Оставляем одну пустую строку и на второй новой строке пишем:
<step id="#end"/>. Обратите внимание, что в конце должен быть «/», т.к. это пустой тег (пустая коробка) в 1 строку. Вместо<step id="#end"></step>, мы пишем “сокращенный” вариант:<step id="#end"/>
Должно получиться так:
<?xml version="1.0" encoding="UTF-8"?><quest npc="Wizard" title="Мой Первый Квест">ㅤ<step id="#start">ㅤ</step>ㅤ<step id="#end"/></quest>
Шаг 6. Текстовые блоки
Тобишь у нас выходит эдакая Матрёшка. В тег-коробки <quest> лежит тег-коробка <step>, а внутри <step> лежат еще теги-коробки. Давайте их тоже поставим:
- Разместим
<intro>и<. На этот раз ставим 2 раза Tab, так мы как-бы показываем, что/intro><intro>лежит внутри<step>, который лежит внутри<quest> - Пишем между
<intro>и<наш “текст первого разговора”. У меня это будет: «Привет, как дела?»/intro> - Теперь пишем
<desc>и<. Аналогично, новая строка + 2 раза Tab. Добавляем текст, у меня: «Рад тебя снова видеть! Как дела?»/desc>
Должно получиться так:
<?xml version="1.0" encoding="UTF-8"?><quest npc="Wizard" title="Мой Первый Квест">ㅤ<step id="#start">ㅤㅤ<intro>Привет, как дела?</intro>ㅤㅤ<desc>Рад тебя снова видеть! Как дела?</desc>ㅤ</step>ㅤ<step id="#end"/></quest>
Напомню, что текст вы можете писать какой угодно, а не копировать мой 1 в 1
Шаг 7. Добавим Кнопку
Теперь осталось добавить кнопку, чтобы игрок мог закрыть диалог. Мы же не хотим чтобы получился вот такой незакрываемый диалог:

Как мы помним из Главы 1:
<option> – кнопка
to – куда ведет эта кнопка
text – текст на этой кнопке
#close — закрыть диалоговое окно
Это кнопка, значит пишем в одну строку с «/» перед >
Оставим пустую строку между текстовыми блоком <desc> и кнопкой
ㅤ
Теперь напишем нашу кнопку:
<option to="#close" text="Норм"/>
У меня на кнопке будет написано: «Норм», после нажатия на кнопку диалог закроется (с помощью #close)
Шаг 8. Сверяемся
Теперь давайте сверимся.
Тщательно проверьте, чтобы у вас не была пропущена или поставлена не там, где надо какая-нибудь скобочка, кавычка или символ
ㅤ
Код:
<?xml version="1.0" encoding="UTF-8"?><quest npc="Wizard" title="Мой Первый Квест"><step id="#start"><intro>Привет, как дела?</intro><desc>Рад тебя снова видеть! Как дела?</desc><option to="#close" text="Норм"/></step><step id="#end"/></quest>
Шаг 9. Проверка работоспособоности
Настало время проверить квест. Забрасываем его в папку Quests (Документы –> Block Story –> Quests) и перезапускаем игру, либо перезаходим в мир, чтобы кастомные квесты обновились
Проверяем:


Всё работает. Ваш первый квест с нуля готов!
Теперь попробуйте сменить NPC с Волшебника (Wizard) на Паулу (FemaleWarrior) или Теда (Viking). Затем перезайдите в мир и проверьте, что квест теперь привязан к другому NPC
Зачем нужны Tab’ы и отступы?
Игра Табы и отступы не видит, ей абсолютно всё равно можно всё хоть в одну строчку написать, НО Табы и отступы нужны ВАМ и остальным квестоделам для лучшей читабельности
Если всё сломалось
- Проверьте, что квест точно находиться в папке Quests (Документы –> Block Story –> Quests)
- Проверьте, что вы не поставили лишний символ где-то в коде
- Проверьте, что вы не удалили кавычки у атрибутов (
text="_",npc="_"и т.д.) - Проверьте, что вы правильно поставили «/» у закрывющих тегов (крышек от коробок). Сначала «/» и только потом тег.
Заключение
Поздравляю, теперь вы умеете самостоятельно составлять свои собственные квесты с нуля. В дальнейших главах мы будем обкатывать уже имеющиеся и получать новые знания
Отличный гайд, но осталось несколько вопросов:
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 только что обновил, просто изначально забыл добавить
Из нюансов: У них пока что нет своего портрета, поэтому будет видно просто имя