Глава 6. Завершение квестов #end
Мы научились создавать минимально рабочий квест с одним полноценным шагом #start. Все это время до этого мы оставляли шаг #end пустым в сокращенном виде: <step id="#end"/>
В прошлых главах мы использовали #close для закрытия диалогового окна. Сам квест при этом не завершался и к нему можно было всегда вернуться.
В этой главе мы разберемся с встроенным шагом #end, который все это время был пустым. Всё потому что переход на шаг #end засчитывает квест пройденным, а значит, когда мы перейдем на этот шаг, квест завершиться и исчезнет у NPC, поэтому приходилось бы либо переимновывать title у квеста, либо создавать каждый раз нового персонажа.
Теперь из прошлых глав мы знаем, как откатывать прогресс по квестам без создания нового персонажа, поэтому настало время сделать #end таким же полноценным шагом, как и #start. Приступим
Отличия #close и #end
| Шаг | Что делает | Тип | Прогресс и квест |
| #close | Просто закрывает окно диалога | Скрытый шаг, нельзя настроить под себя | Квест остается, прогресс сохраняется. Просто закрывается диалоговое окно |
| #end | Переход на него засчитывает квест выполненным | Полноценный, настраиваемый шаг | После перехода на этот шаг, квест засчитывается пройденным и исчезает у NPC |
Грубо говоря:#close – закрыть книгу с закладкой, чтобы потом продолжить чтение#end – сжечь эту книгу
Как работает #end
Когда вы переходите на этот шаг (например, через кнопку), происходит следующее:
- Выполняется всё то, что вы укажете внутри шага
#end - Игра помечает квест, как выполненный и убирает его у NPC
Как тестировать
Теперь вы знаете, что при переходе на #end квест завершается и исчезает. Как же их тестировать? Есть 3 способа:
- Для каждого нового теста делать нового персонажа
- Переимновать квест в
title. Былоtitle="Мой Квест", сталоtitle="Мой Квест 2". Можно просто пробелы поставить:title="Мой Квест " - Третий способ описан в Главе 5, Шаг 1. «О Тестах»
Шаг 1. Примитивное завершение квеста
Откройте MyQuest.xml. В шаге my_first_step переделайте кнопку «Пока»: поменяйте c to="#close" на to="#end"
Было:
ㅤ<step id="my_first_step">ㅤㅤ<intro>Это хорошо, что хорошо. Пока, Наездник Дракона!</intro>ㅤㅤ<desc>Снова ты? Я занят, не могу говорить. Пока!</desc>ㅤ <option to="#close" text="Пока"/>ㅤ</step>
Стало:
ㅤ<step id="my_first_step">ㅤㅤ<intro>Это хорошо, что хорошо. Пока, Наездник Дракона!</intro>ㅤㅤ<desc>Снова ты? Я занят, не могу говорить. Пока!</desc>ㅤ <option to="#end" text="Пока"/>ㅤ</step>
Шаг 2. Проверяем
Как видите, после нажатия кнопки «Пока», квест молча завершился. Остался только Tutorial, который автоматически запустился, когда повторно заговорили с Волшебником. Автоматически он начался, потому что Tutorial остался единственным у Волшебника
Шаг 3. Собираем шаг #end
Теперь настало время собрать свой шаг #end. Сборка ничем не отличается от любого другого шага.
- Добавляем текст с помощью
<desc>. В<intro>нет смысла, так как игрок, который дошел до шага#end, к NPC уже повторно не сможет подойти - Делаем кнопку закрытия диалога с помощью
<option to="#close" text="Пока"/>
Код:
<step id="#end">ㅤ<desc>Прощай, Наездник Дракона!</desc>ㅤ<option to="#close" text="Пока"/></step>
Готово. Проверяем
Шаг 4. Проверка нового #end
Тоже работает, теперь Волшебник прощается и квест успешно завершается
Важно
Никогда не делайте кнопку назад с шага #end, если в квесте есть задания на убийство мобов (рассмотрим в следующих главах). Возврат на предыдущие шаги ломает внутренние счетчики квеста. Крайне желательно, чтобы #end у вас всегда был завершающим и окончательным шагом
Отличный гайд, но осталось несколько вопросов:
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 только что обновил, просто изначально забыл добавить
Из нюансов: У них пока что нет своего портрета, поэтому будет видно просто имя