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

Reading Mode

Глава 20. Спецэффекты

За всё это время мы сделали много интересных вещей: от сбора предметов и убийств мобов до анимаций и спавна Арагога, но, кажется, чего-то не хватает. Какой-то изюминки.

Нам все время не хватало спецэффектов. Экран темнеет, Волшебник/Алхимик телепортируются, Журнал мигает, уведомляя о новом задании

В этой Главе мы научимся работе с тремя инстврументами:

  1. <fade/> – Плавная заливка экрана каким-то цветом
  2. <teleport/> – Удаление NPC с эффектом телепортации. Только для Алхимика/Волшебника, остальные NPC просто исчезнут без эффекта
  3. <attention/> – Моргание иконки Журнала

В финале мы из всего этого до конца добьем квест Аарона (WarriorFirstQuest.xml – «Маленькая Проблемка»)

Шаг 1. Плавная заливка экрана <fade/>

Тег <fade/> плавно заливает экран каким-то цветов, затем держит заливку нужно время, а затем постепенно убирает ее. В официальных квестах он используется в стартовом квесте Tutorial, когда игрко только заходит в игру с нового персонажа и в конце перед Битвой с Повелителем Драконов. Мы же можем использовать его где нам угодно

        <fade start="3" delay="1.5" reverse="1">
          <color name="white"/>
        </fade>

 

Где:

Атрибуты

  1. start – За сколько секунд залить экран цветом
  2. delay – Сколько секунд держать заливку
  3. reverse – За сколько секунд убрать заливку

Тег

  1. <color/> – Цвет. Можно в формате r="0.0" g="0.0" b="0.0" a="0.0" (от 0.0 до 1.0) или name="ИмяЦвета" (см. GigaList)

Тег <fade/> ставьтся внутрь шага на уровень с текстовыми блоками, иконками и так далее. Отрабатывает он сразу же, когда игрок переходит на его шаг

Шаг 2. Удаление NPC с эффектом телепортации <teleport />

Данный тег удаляет NPC, с которым разговаривает игрок. Если это Волшебник или Алхимик, то они исчезнут с эффектом телепортации, все остальные — просто моментально пропадут без эффекта

Этот тег используется только внутри опций (кнопки и авто).

Пример:

    <option to="#close" text="ОК">
      <teleport/>
    </option>

 

Шаг 3. Моргание иконки Журнала <attention/>

Заставляет иконку «Журнала Квестов» моргать красным


Этот тег тоже используется только внутри <option>.

Пример:

    <option to="#close" text="ОК">
      <attention/>
    </option>

 

Шаг 4. Добавляем спецэффекты в Квест

Теперь применим всё это на практике. В квесте от Аарона (WarriorFirstQuest.xml – «Маленькая Проблемка») в шаг battle_aragog_step в самый верх добавим <fade/> со следующими значениями атрибутов и белым цветом:

    <step id="battle_aragog_step">
      <fade start="3" delay="1.5" reverse="1">
          <color name="white"/>
      </fade>
      . . .
    </step>

 

Как видите, у нас сначала проноситься надпись «АРАГОГ УЖЕ ЗДЕСЬ», а затем экран заливается белым, скрывая момент появления Арагога.

В шаг after_aragog_step в квесте Аарона добавим тег <attention/>, чтобы после убийства Арагога начинал моргать Журнал, намекая игроку, что туда надо заглянуть

    <step id="after_aragog_step">
        <desc>Пока, и ещё раз спасибо за помощь</desc>

      <option to="#close" text="Ок">
          <spawnmobs value="true"/>
          <attention/>
      </option>
      . . .
    </step>

 

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

  1. Сделайте простой квест, где Алхимик сначал дает игроку задание, а затем телепортируется, после чего иконка Журнала начинает мигать
  2. Добавьте <attention/> и <teleport/> в задания квеста от Волшебника (MyQuest.xml – «Основной Квест»), добавьте туда <fade/> если посчитаете нужным

Заключение

В этой небольшой Главе мы научились трем простым интсрументам. Не смотря на их простоту, они способны добавить немного кинематогрофичности в ваши квесты. Например, какие-то переходы в новые сюжетные Акты, спавн мобов или вспышки во время битвы. В общем, возможных сфер применения вагон и маленькая тележка

Итоговый код Главы

(WarriorFirstQuest.xml – «Маленькая Проблемка»)

<?xml version="1.0" encoding="UTF-8"?>
<quest npc="Warrior" title="Маленькая Проблемка">
    <complete quest="Основной Квест" step="go_to_warrior_step" />

  <step id="#start">
      <desc>Привет, Наездник Дракона. Полагаю, тебя послал Волшебник. \nЧтож у меня есть для тебя небольшое заданьеце</desc>
      <option to="small_problem_step" text="?">
          <journal />
      </option>
    </step>

  <step id="small_problem_step">
      <desc>Видишь ли, у меня тут появилась небольшая проблемка. Говорят, что на дне земных провалов на тамошних деревьях растут самые вкусные яблочки. Я бы и рад туда спуститься, но там сидит огромный паук – Арагог. \nЯ, понимаешь ли, даже мелких паучков страшусь, а тут аж огромный Паучище
        \nВ общем, не мог бы ты мне немножко подсобить с этой маленькой проблемкой? Я готов немно...</desc>

      <rewards type="Display">
          <reward exp="500"/>
          <reward item="Gold Coin" count="30"/>
        </rewards>

      <option to="before_aragog_step" text="Да"/>
    </step>

  <step id="before_aragog_step">
      <desc></desc>
      <label>[FF0000]А-А-А-А! ОН УЖЕ ЗДЕСЬ![-]\n\nКто не спрятался — я не виноват!</label>
      <option to="battle_aragog_step" text="!!!"/>
    </step>

  <step id="battle_aragog_step">
      <fade>
          <color name="white"/>
      </fade>
      <info>

          <label>Убей [FF0000]Арагога[-]</label>
          <kill enemy="GiantSpider" count="1"/>
        </info>

      <label location="HUD">
          [FF0000]АРАГОГ УЖЕ ЗДЕСЬ![-]
          <persist />
          <lerp loop="false" reverse="false" speed="2" start="0" wait="0">
              <from>
                  <scale x="50" y="50"/>
                  <position x="-1300" y="0"/>
                  <rotation angle="0"/>
              </from>
              <to>
                  <scale x="50" y="50"/>
                  <position x="1300" y="0"/>
                  <rotation angle="0"/>
              </to>
          </lerp>
        </label>

      <option auto="#close">
          <clearmobs/>
          <spawnmobs value="false"/>
          <spawn mob="GiantSpider" distance="3"/>
        </option>

      <option auto="after_battle_aragog_step">
          <kill enemy="GiantSpider" count="1"/>
          <spawn mob="Warrior" distance="5" />
        </option>

      <option auto="battle_aragog_step" start="3">
          <delay sec="3" />
          <existmobs name="GiantSpider">
              <inverse/>
          </existmobs>
      </option>
    </step>

  <step id="after_battle_aragog_step">
      <desc>Да ты мне жизнь спас! Так ещё я смогу насладиться тамошними яблочками в провалах!\nДержи, ты заслужил</desc>
     
      <option to="after_aragog_step" text="Ок"/>

      <rewards type="Award">
          <reward exp="500"/>
          <reward item="Gold Coin" count="30"/>
      </rewards>
    </step>

  <step id="after_aragog_step">
        <desc>Пока, и ещё раз спасибо за помощь</desc>

      <option to="#close" text="Ок">
          <spawnmobs value="true"/>
          <attention/>
      </option>

      <info>
          <label>Иди к Волшебнику и проверь, есть ли у него задания</label>
        </info>

      <option auto="before_find_bed_step">
          <complete quest="Основной Квест" step="after_pig_go_warrior"/>
      </option>
    </step>

  <step id="before_find_bed_step">
      <desc>Слу-у-ушай...</desc>
      <option to="find_bed_step" text="Ок"/>
    </step>

  <removestep id="find_bed_step">
      <intro>Можешь найти мне кровать? Да, обычную кровать. Моя что-то в совсем уж печально состоянии</intro>
      <desc>Так ты найдешь кровать?</desc>
        <finish>Спасибо, Наездник Дракона. Эта кровать мне очень пригодиться</finish>

        <remove item="Bed" count="1"/>

      <rewards>
          <reward exp="777"/>
        </rewards>

      <option to="#end" text="Ок"/>
    </removestep>

  <step id="#end">
      <desc>Ну а теперь пока, Наездник Дракона. Был рад повидаться.\nИди к Волшебнику, может, у него есть какое-то задание для тебя</desc>
      <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