XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Желтая пресса: обучающие статьи
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
Markiz

offline
Опыт: 11,432
Активность:
Триггерные заклинания, Basics and Advanced
Триггерные Заклинания

Ссылка на оригинал
Все права на статью принадлежат Linkmaster23, все права на перевод - Markiz'у.
Примеры-иллюстрации(не в том смысле,что картинки :)) к статье я выложу в архиве в конце этого сообщения.
[От переводчика: Это перевод статьи с wc3campaigns, посвященный такому важному аспекту гемплея,как заклинания (в дальнейшем - "спеллы"),точнее: спеллы созданные/активируемые при помощи триггеров]
Зачем это все надо

В "движок" Варкрафта входят разные стандартные спеллы. А в редакторе объектов можно изменять параметры их. Но принципиально их таким образом не изменить. Если нам нужно создать какой-то полностью новый спелл, то нам приходят на помощь триггеры или JASS.
[Примечание: про триггеры вы можете почитать в статьях Сергея и RaZ'а,а про язык JASS - в статьях Cacodemon'a]
Данное руководство будет разделено на две части для удобства прочтения и написания. Итак:
Часть 1. Основы Основ.

В любом деле есть что-то что обязательно знать тому, кто этим занимается. Это правило действует и на триггерные спеллы.
Сейчас мы будем говорить про триггеры,а точнее, про:
События(Events)
В триггерных спеллах будут чаще всего использоваться так называемые
Unit - Generic Unit Events
Эти события относятся ко всем юнитам которые подходят под условие события (говорю слегка путано, но сейчас вы поймете, что я имел в виду).
Самые важные из них для нас это:
Цитата:
Unit - A unit Begins casting an ability
Unit - A unit Stops casting an ability
Unit - A unit Starts the effect of an ability
Unit - A unit Finishes casting an ability

У них у некоторых достаточно сходное действие, но автор предпочитает именно
Цитата:
Unit - A unit Begins casting an ability

Это событие запускает триггер,когда вы выбрали заклинание и цель (если нужно). Пока вы только начинаете заниматься триггерными спеллами, советую вам тоже им пользоваться.
ОК, теперь перейдем к следующей секции.
Условия(Conditions)
Здесь будет совсем просто, обычно следует пользоваться только этими условиями:
Цитата:
Unit-type of Unit equal to Unit-Type
Unit Equal to Unit(Var)
Ability being cast Equal to Ability

Теперь поясню значения выделенных слов:
Unit - как правило либо Casting Unit (Маг) либо Target of Ability being Cast (Жертва заклинания)
Unit-Type - если вы хотите сделать заклинание, которое может сделать не один юнит,а много однотипных юнитов (например вы хотите создать новую расу магов), то вместо Unit-Type вставляйте тип требуемого юнита
Ability - тип заклинания,может быть как выбран в списке, так и задан переменной
Перейдем к следующему разделу:
Действия(Actions)
[Примечание: Автор много расписывал что делают те или иные действия, но я не буду повторять статьи о триггерах (см. выше) и буду такие моменты пропускать]
В первую очередь вам понадобятся действия-условия(If/Then/Else).
Чаще всего это будут главные ваши помощники (например проверки на расу), а также главная головная боль :)
Далее вам понадобятся циклы (For each integer ## do actions), например:
Цитата:
For each (Integer A) from 1 to 5, do (Actions)
Loop - Actions
Unit - Create 1 Footman for Player 1 (Red) at (Center of (Playable map area)) facing Default building facing degrees

"А почему бы не создать сразу пять пехотинцев сразу, одним действием" - спросите вы.
У этого способа есть одно очень важное преимущество: простота работы с массивами! Ведь как вы будете получать информацию о уже созданных пехотинцах без них?
Мы подошли к следующему подразделу:
Переменные+Mассивы
[Примечание: я решил слегка видоизменить пример (для наглядности), кроме того, сам пример можно найти ниже
Итак, что мы собираемся сделать:
При колдовании заклинания создать пять пехотинцев,занести их в массив,а затем 3 из 5 убить :).
Это простейший пример того,для чего нужны массивы и переменные.
Заготовка для такого триггера должна быть примерно такой:
Код:
Create Footmen
    Events
        Unit - A unit Begins casting an ability
    Conditions
        (Ability being cast) Equal to (==) Создать пехотинцев 
    Actions
  {Наши действия}

Что тут делается думаю объяснять не нужно. Теперь еще немного подготовительной работы. Создадим массив из unit'ов размером в 5 человек, назовем его George. Хорошо. Для начала этих пресловутых пехотинцев надо создать. Кроме того их сразу же нужно заносить в массив,пока ссылка на Last Created Unit указывает на действительно требуемый юнит.То есть мы это будем делать примерно так:
Код:
For each (Integer A) from 1 to 5, do (Actions)
    Loop - Actions
        Unit - Create 1 Footman for Player 1 (Red) at (Center of (Playable map area)) facing Default building facing (270.0) degrees
        Set George[(Integer A)] = (Last created unit)

Теперь, хотите - верьте, хотите - нет, у нас в массиве "лежат" те пехотинцы, которых мы создали. Теперь давайте,чтобы удостовериться в этом убьем их, причем не с 1 по 3,а с 3 по 5:
Код:
For each (Integer A) from 3 to 5, do (Unit - Kill George[(Integer A)])

Вот и все! :)
Первый триггерный спелл создан:
Код:
Create Footmen
    Events
        Unit - A unit Begins casting an ability
    Conditions
        (Ability being cast) Equal to (==) Создать Пехотинцев 
    Actions
        For each (Integer A) from 1 to 5, do (Actions)
            Loop - Actions
                Unit - Create 1 Footman for Player 1 (Red) at (Center of (Playable map area)) facing Default building facing (270.0) degrees
                Set George[(Integer A)] = (Last created unit)
        For each (Integer A) from 3 to 5, do (Unit - Kill George[(Integer A)])

Заметьте, если делать то же самое,но не циклом, то получится 10 действий, а тут 2 действия,но повторенные 5 раз. Удобно, не правда ли :)
Если вам пока трудно освоиться, то для вас чуть ниже лежит архив с картой-примером. Наслаждайтесь и ждите 2-й части! :)

Markiz добавил:
Триггерные заклинания. Advanced
Продолжение Руководства (Ссылка)
[Примечание: данный текст является переводом лишь наполовину,в частности, во второй части были затронуты лишь Dummy-спеллы,я решил исправить это досадное недоразумение]
Итак,в этой части мы создадим нечто уже более серьезное,а именно: заклинание Airstrike.
Но в начале еще немного теории.
Dummy Спеллы

Что же такое Dummy спеллы? По-русски - это пустышки, то есть спеллы которые не имеют эффекта. :)
Существуют следующие типы заклинаний по целям:
  • Без цели (War Stomp,Thunder Clap,...)
  • С одиночной целью (Storm Bolt,Frost Nova,...)
  • AOE,то есть с некой площадью эффекта (Flame Strike, Silence,...)
  • Авто-кастовые (Heal, Slow,...)
  • С целью - землей (Shockwave, Blink,...)
Чтобы создать пустышку нужно взять спелл подходящий по типу,т.к. его в редакторе объектов изменить будет нельзя и обнулить большинство его хар-к (время действия[Внимание: любое время обнуляется числом 0.01,а не 0.00], урон,итд). Затем, после создания спелла мы "навешиваем" на него триггер.
В событии следует взять:
Цитата:
Unit - A unit Begins casting an ability

а в условии:
Цитата:
(Ability being cast) Equal to Пустышка

Затем просто создаем необходимые действия.
[Здесь статья заканчивается...]
Мы же пойдем дальше, мы создадим геройский спелл, сила действия которого будет изменяться с каждым уровнем способности. Для отслеживания уровня способности героя мы будем использовать еще одну числовую переменную.
В качестве примера сложной триггерной способности я предлагаю сделанный мною когда-то Airstrike:
При кастовании способности появляется N вертолетов (N зависит от уровня способности),которые будут кружиться и бомбить землюпод собой, а по истечении действия заклинания взорвуться.
Детали я описывать не буду, но суть заключается в следующем:
Мы создаем вертолеты, задаем в массиве точек позиции круга, по которым они будут двигаться,зададим в массиве эти вертолеты,а затем в цикле будем заставлять их делать "Attack Ground" и "Move"(По кругу). Кроме того, чтобы знать какой вертолет должен двигаться в какую позицию,мы им зададим Custom Value и вычислять номер точки в массиве, в которую надо двигаться.
Для начала попробуйте сделать данную способность сами, ну а уж затем смотрите пример.
ВНИМАНИЕ! В примере плохо настроены cooldown'ы
Прикрепленные файлы
Тип файла: rar Examples.rar (14.5 Кбайт, 3053 просмотров )

Отредактировано Markiz, 29.01.2005 в 18:54.
Старый 05.08.2004, 12:38

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 07:32.