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

Reading Mode

Глава 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>

Задания на закрепление:

  1. Измените квест так, чтобы Волшебник просил убить Арагога (GiantSpider), а не двух Пауков. Не забудьте обновить <kill> и в <info>, и в авто-опции
  2. Сделайте простой квест для Теда (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>

 

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