Глава 10. Журнал
Задания, авто-опции и счетчики – это, конечно, хорошо, но в голове игрок всё сразу не удержит. Надо бы куда-то всё это записать, чтобы не забыть. Благо, в игре для этого есть Журнал Квестов и кастомные квесты могут с ним спокойно работать.
Шаг 1. Создаём запись в журнале
Создадим запись в нашем Журнале, для этого будем использовать одиночный тег <journal/>. Этот тег обязательно нужно добавить в кнопку/авто-опцию перед началом задания или в самом начале квеста.
В нашем случае, добавим <journal/> в кнопку «Да» шага good_mood_step:
<step id="good_mood_step"><intro>Это хорошо, что хорошо. У меня есть одно плёвое заданьеце для тебя. Готов ли его выполнить?</intro><desc>Снова ты? Моё предложение всё ещё актуально. Готов приступить?</desc><option to="spider_hunt_step" text="Да"> <!-- Здесь раньше был />, а не > --><journal/></option><option to="#start" text="Назад"/></step>
Заметьте, что «/» ставится перед правой угловой скобкой, а не после левой
Как видите, теперь кнопка выглядит схоже с авто-опцией. У нее появились вложенные внутрь условия и закрывающая часть </option>. После нажатия кнопки теперь будет добавляться запись в журнал

Шаг 2. Меняем Журнал
Мало добавить просто запись. От неё нет смысла, если она пустая.
Для редактирвоания содержимого Журнала цели используется блок <info> </info>, который ставиться внутри <step> под текстовыми блоками и кнопками, но над авто-опциями
<step id="spider_hunt_step"><desc>Хорошо. Попробуй убить парочку пауков для разминки</desc><option to="#close" text="Ок"/><info></info><option auto="after_hunt_step"><kill enemy="Spider" count="2"/></option></step>
Сам блок info – это просто текст в Журнале и ничего больше. Он ни на что не влияет, весь функционал – в опциях (кнопки и авто-опции)
Шаг 3. Добавляем Цель
Теперь нужно добавить саму Цель в Журнал. Для этого внутрь блока <info> добавим тег <kill> с атрибутами (enemy, count) из авто-опции
Главное, чтобы Цели в Журнале совпадали с Целями в авто-опциях. В конце главы проверим, что будет, если они не будут совпадать.
<step id="spider_hunt_step"><desc>Хорошо. Попробуй убить парочку пауков для разминки</desc><option to="#close" text="Ок"/><info><kill enemy="Spider" count="2"/></info><option auto="after_hunt_step"><kill enemy="Spider" count="2"/></option></step>
Шаг 4. Проверяем
Всё работает. Аналогично можно добавлять другие цели
Шаг 5. Текстовые блоки и множество <info/>
Как вы видели, после автоматического перехода на следующий шаг after_hunt_step из Журанала пропадают все Цели и мы получаем опять пустую запись. Давайте добавим в Журнал шага after_hunt_step текст, чтобы напомнить игроку, что нужно вернуться к Волшебнику.
Для добавления текста в Журнал, используется только <label>. Другие текстовые блоки (<intro>, <desc>…) не будут работать.
<step id="after_hunt_step"><desc>Отлично! Ты справился</desc><option to="#end" text="Ок"/><info><label>Вернись к Волшебнику и скажи, что ты убил всех пауков</label></info></step>
Шаг 6. Снова проверяем
Тоже работает. Как видите, после убийства всех пауков, Задание на убийство заменяется на текст
Что если Цели не совпадут
Как мы помним, Цели в Журнале должны совпадать с Целями в авто-опциях. Сейчас мы проверим, что будет, если это правило нарушить и как это сломает квест
Цель в авто-опции больше, чем в журнале
В авто-опции: <kill enemy="Spider" count="20"/>
В Блоке info: <kill enemy="Spider" count="2"/>
Как видите, счетчик в Журнале просто идёт дальше: 2/2, 3/2, 4/2 и так далее, пока не наберется 20/20 в счетчике у авто-опции, которая затем перейдет на следующий шаг
Цель в авто-опции меньше, чем в журнале
Теперь проверим обратную ситацию
В авто-опции: <kill enemy="Spider" count="2"/>
В Блоке info: <kill enemy="Spider" count="20"/>
Как видите, когда в счетчике авто-опции набирается 2/2 убийств пауков она всё равно переходит на следующий шаг, игнорируя счетчик в info. То бишь эти два теста подтверждают тот факт, что info — это просто блок с информацией и ничего больше. Вся соль в <option>
Задания на закрепление:
- Измените квест так, чтобы Волшебник просил убить Арагога (
GiantSpider), а не двух Пауков. Не забудьте обновить<kill>и в<info>, и в авто-опции - Сделайте простой квест для Теда (Viking), в котором он попросит игрока в рамках одного шага убить и трёх Страйкеров (
Striker), и одну Чупакабру (Chupacabra)
Заключение.
В этой Главе мы научились добавлять запись своего квеста в Журнал, а также прикреплять к этой записи Задания и выводить туда текст. В следующих главах подробнее разберем несколько интересных лайфхаков и изучим возможности кастомизировать
С некоторыми особенными тегами-условиями ознакомимся позже. Все остальные в Таблице Тегов-условий
Итоговый код Главы
<?xml version="1.0" encoding="UTF-8"?><quest npc="Wizard" title="Мой Первый Квест"><step id="#start"><intro>Привет, как дела?</intro><desc>Рад тебя снова видеть! Как дела?</desc><option to="bad_mood_step" text="Плохо"/><option to="good_mood_step" text="Норм"/></step><!-- Хорошее настроение --><step id="good_mood_step"><intro>Это хорошо, что хорошо. У меня есть одно плёвое заданьеце для тебя. Готов ли его выполнить?</intro><desc>Снова ты? Моё предложение всё ещё актуально. Готов приступить?</desc><option to="spider_hunt_step" text="Да"><journal/></option><option to="#start" text="Назад"/></step><step id="spider_hunt_step"><desc>Хорошо. Попробуй убить парочку пауков для разминки</desc><option to="#close" text="Ок"/><info><kill enemy="Spider" count="2"/></info><option auto="after_hunt_step"><kill enemy="Spider" count="2"/></option></step><step id="after_hunt_step"><desc>Отлично! Ты справился</desc>
<option to="#end" text="Ок"/><info><label>Вернись к Волшебнику и скажи, что ты убил всех пауков</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="#end_dark_side" text=":("/><option to="#start" text="Назад"/></step><step id="#end_dark_side"><desc>Я... я тебя понимаю, Наездник Дракона. Крепись, я верю в тебя, а теперь прощай!</desc><option to="#start" text="Назад"/><option to="#close" text=". . ."/></step></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 только что обновил, просто изначально забыл добавить
Из нюансов: У них пока что нет своего портрета, поэтому будет видно просто имя