WarCraft 3: Триггерные Заклинания

» Раздел: Триггеры и объекты

Автор оригинала: linkmaster23

Триггерные Заклинания

Примеры-иллюстрации(не в том смысле,что картинки :)) к статье я выложу в архиве в конце этого сообщения.
От переводчика: Это перевод статьи с 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-й части! :)

Триггерные заклинания. 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'ы.

Просмотров: 35 740

» Лучшие комментарии


_2D_ #1 - 12 лет назад 2
Где можно взять учебник по встроенному языку WC?
Seth Rose #2 - 11 лет назад 2
Нормальная статья, кое в чом мне она помогла!
DarkNik #3 - 11 лет назад 3
Да, очень хорошая статья.
Quacker #4 - 11 лет назад 2
Респект.
GMAN #5 - 11 лет назад 2
Airstrike-Это круто! Я когда-то тоже долбился с подобной вещью.
Риспект
Neikls #6 - 10 лет назад -3
Я ваще не понемаю зачем парится с массивами, спеллами просто нужно зайти в "дополнительно" и там редактор войск, объектов, заклинаний и главное там всё так просто и по русски!
Quattro2007 #7 - 10 лет назад 3
О все норм понятно)И лучше чем jass)
RAiT #8 - 9 лет назад 2
Я почти нечего в статье не понял, но айр страйк реально крутая спсобность получилась
Manhant #9 - 9 лет назад 2
тяжело это понять но способность точно крутая получилась
PeaceMaker #10 - 9 лет назад 2
Великолепная статейка =) я врубился еще больше в триггеры =)
rusk #11 - 9 лет назад 2
надобы эту статейку записать в mp3 ! а то заманаешся читать ! а так статья оч даже хорошая респект !
Zord #12 - 9 лет назад 2
Народ, подскажите как зделать чтобы юнита относила назад?Ну как в доте у Barathrum.Ну спел - Greater Bash.Плиз подскажите как ето делать.ЧЕРЕЗ ТРИГЕРЫ МОЖНО И КАК.В JASS ненадо.
Zahanc #13 - 9 лет назад 1
Neikls, внимательно почитай раздел "Зачем это все надо".
ZxZ666 #14 - 9 лет назад 0
Не тупите такой спелл пишется за 10 минут,а людьми типа ADOLF'а где то за 2
И ваще гуи хня жасс кулл,хотя его и сложновато учить
Ethernet #15 - 8 лет назад 2
Мало что понял,а автор ничто не хочет обьяснять в выше написанной статье. Лентяй одним словом
Serious07 #16 - 8 лет назад 2
Способность косая если много разщ применять.=)
YagamI LighT #17 - 8 лет назад 2
PROSTA SHOPA YA LOH V ANGLISKOM A BEZ NEVO CHELOVEK S IQ MENbSHE CHEM 250 HREN SHTO POYMET V CHORTAVUH TRIGERAH
SageOne #18 - 8 лет назад 2
ЯГАМИ, найди русский Волд Эдиторъ
JamesBlack #19 - 8 лет назад 2
Господи, это вообще люди говорят или это слова троллей, которых под пытками и мучениями заставляют учить параллельно русский и английский??? (я про некоторые комменты)
Voland #20 - 8 лет назад 3
JamesBlack верно говорит! Если хотите написать комментарий, определитесь, кому он нужен - вам самим или всем, кто будет читать статью? Если вам, то не стоит вообще писать, если всем - то пишите нормально! Задолбался разбираться в комментариях, написанных абы как!!!!
А статья отличная, очень помогла.
GDrago #21 - 8 лет назад 3
Спасибо огромное, наконец понял что такое массивы :D
MaKoPoH #22 - 7 лет назад 3
способность то норм тока когда много раз делаешь она лагает ваще ужасно точнее не лагает а эти вертолёты не убираются
фанТом 13 #23 - 5 лет назад -1
как это понять
Темак #24 - 5 лет назад 3
фанТом 13:
как это понять
а это как понять?
фанТом 13 #25 - 5 лет назад 1
я суть статьи непонел
Стратег #26 - 4 года назад 0
Хм... А что означает "Целая А"? Что это вообще за число такое? Я никогда его не понимал:). Решил вот хоть раз в жизни про триггеры статьи прочитать. Ну а способность по-моему так себе, в мультиплеере вообще бесполезна.
Fhneh228 #27 - 4 года назад 0
а если можно скиньте это на руском))
SomeFire #28 - 4 года назад 1
Эм... что-то твоя нелогичность начинает напрягать. Скачай пример, открой, посмотри, научись читать, прочти - если у тебя чисто русские триггеры, то они будут на привычном тебе промте. А вообще, гугл в помощь.
Dwanx4 #29 - 4 года назад 1
Ребят, подскажите, как сделать чардж у бары своими руками?
Bornikkeny #30 - 4 года назад 1
Статья в принципе нормальная, но скриншотов не хватает. Каты они для кода, тут нужны скрины, а новички ликуют ;D