WarCraft 3: Как сделать тригерное заклинание?

База примеров на GUI
Все знают что варовские заклинания всем надоели. Хотите как-нибудь украсить свой спел, но не знаете как. Да и вообще хотите узнать как сделать триггерное заклинание?
Вам сюда.
Пожалуй начну эту подстатью с объяснения, что такое триггерный спел, а позже подойдем и к примерам, так как они друг от друга неразрывны.

Теория

В своей основе все заклинания делятся на 2 типа:
  1. Используемые мгновенно
  2. Указываемые на цель
В первом варианте нажал на кнопку и заклинание активировалось.
Во втором помимо нажатия на кнопку, надо указать на цель и только после этого заклинание активировалось.
Но все триггерные заклинания объединяет одно - это "Дамми Спелл" или "Пустышка". Спелл при использовании которого ничего не происходит, объяснять как делать "дамми" спелы не буду вы и так это знаете. Теперь перейдем к Теоритическим примерам.
.

Теоритические Примеры

И так мы захотели спел для этого посмотрим в триггеры, а точнее на события которые нам нужны Ведь без понимания что делают события мы не сможем сделать приличный спелл:
> -Боевая единица - A unit Начинает направлять способность
> -Боевая единица - A unit Начинает применять способность
> -Боевая единица - A unit Прекращает применение способности
> -Боевая единица - A unit Приводит способность в действие
> -Боевая единица - A unit Завершает применение способности
> -Боевая единица - A unit Приобретает способность
> -Время - Every 10.00 seconds of game time
Начнем вгрызаться в знания.
=== События
> -Боевая единица - A unit Начинает направлять способность
Это событие относится к заклинаниям 2го типа. Вы нажимаете спелл, и пока вы не укажите место применения заклинания триггер не сработает.
> -Боевая единица - A unit Начинает применять способность
Это событие относится к заклинаниям 1го типа. Вы только нажали кнопку спелла, а триггер уже срабатывает.
Так же можно и отнести ко 2му типу, пока вы выбираете цель, триггер работает.
> -Боевая единица - A unit Прекращает применение способности
Принадлежит как к заклинаниям 1го типа так и 2го. Вы нажали на спелл и начали искать цель но не нашли и отменили. Или же вы уже используете спел по типа "Звездопад" и по какой-то вашей причине его отменили. В обоих случаях триггер срабатывает.
> -Боевая единица - A unit Приводит способность в действие
Это событие У заклинаний 1го типа. У заклинаний бывает указано "время подготовки" как тока подготовка закончится триггер сработает.
У заклинаний 2го типа. Указал на цель, триггер сработал.
Помимо выше перечисленных условий иногда будем использовать:
> -Время - Every 10.00 seconds of game time
Это событие запускает триггер каждый раз через указанное нами время
Событие
> -Боевая единица - A unit Приобретает способность
Даже в объяснении не нуждается.
Теперь.
=== Условия
Мы же не хотим чтобы триггер срабатывал при любом заклинании, для этого в условии надо указать:
> -(Ability being cast) равно "Дамми Спелл"
Идем дальше.
=== Действия
Спелы так же надо разделить на действия и их уже 3:
  1. Действие вокруг чего-то
  2. Действие от чего-то до чего-то
  3. Действие на чем-то
Не забываем что, чтобы они были нужны уже переменные, а действия я покажу через триггеры эффектов.
Первое означает что при активации заклинания, все или часть действий будут вокруг юнита или точки. И выглядеть это будет примерно так:
> ??Действие??
> -Set "переменная Точка1" = (Position of (Triggering unit))
> -For each (integral "переменная Целочисленная") from 1 to 20, do (Actions)
> --Цикл - действия:
> ---Set "переменная Точка2" = ("переменная Точка1" offset by 500.00 towards (18.00 x (Real("переменная Целочисленная"))) degrees)
Второе означает что между юнитом и юнитом, или точкой и точкой, или юнитом и точкой, будет какое-то действие. И выглядеть это будет примерно так:
> ??Действие??
> -Set "переменная Точка1" = (Position of (Triggering unit))
> -Set "переменная Точка2" = (Position of (Target unit of ability being cast))
> -Set "переменная Реальная" = (Distance between "переменная Точка1" and "переменная Точка2")
> -For each (integral "переменная Целочисленная") from 1 to 10, do (Actions)
> --Цикл - действия:
> ---Set "переменная Точка3" = ("переменная Точка1" offset by (("переменная Реальная"/10) x (Real("переменная Целочисленная")) towards (Angle from "переменная Точка1" and "переменная Точка2") degrees)
И третье это просто действие на юните\точке, а вид у него таков:
> -Спецэффект - Create a special effect attach to the original\head\chest of (Triggering unit) using Abilities\Spells\Human\ReviveHuman\ReviveHuman.mdl
Ну вроде основы я разъяснил, остальное это производные от выше написанного и почти всех триггеров содержащихся в "WE".
Перейдем к наши вожделенным примерам.

Примеры

И так определимся со спелом а они бывают, видов:
  1. Вызов
  2. Аура
  3. Мгновенное заклинание
  4. Направляемое
  5. Кастуемое определенное время
  6. Пассивка
Основные используемые объекты заклинаний:
"Дамми Спелл" - пустое заклинание при использовании которого ничего не происходит.

-+=Вызов=+-

Это заклинание при котором появляется миньон, один или боле, на время или постоянно. Так же надо пояснить что миньоны могут появляться как в заклинании "Джайны" "Дух Воды", то есть 1 миньон у нас есть и еще не исчез, а мы уже призвали второго. Для создания нам потребуется создать Миньона, "Дамми Спелл",
Дополнительно используемые объекты заклинаний "Вызов":
"Миньон" - юнит которого вы призываете себе на помощь.
Разделим его на 3 типа
а) Миньон не пропадает, но при повторном касте он заменяется
б) Миньон на время, но при повторном касте он заменяется
в) Миньон на время, но при повторном касте появляется второй миньон

а) Миньон не пропадает, но при повторном касте он заменяется


> ??Событие:??
> -Боевая единица - A unit Начинает применять способность
> ??Условие:??
> -(Ability being cast) равно "Дамми Спелл"
> ??Действие:??
> -Отряд - Pick every unit in (Units owned by (Triggering unit)) of type "Миньон" and do (Actions)
> --Цикл - действия:
> ---Боевая единица - Remove (Picked unit) from game
> -Боевая единица - Create 1 "Миньон" for (Triggering player) at (Position of (Triggering unit)) facing Стандартная ориентация зданий degrees

б) Миньон на время, но при повторном касте он заменяетcя

После некоторых экспериментов, это заклинание состоит из 1го тригера а не из 2х как раньше.

> ??Событие:??
> -Боевая единица - A unit Начинает применять способность
> ??Условие:??
> -(Ability being cast) равно "Дамми Спелл"
> ??Действие:??
> -Отряд - Pick every unit in (Units owned by (Triggering unit)) of type "Миньон" and do (Actions)
> --Цикл - действия:
> ---Боевая единица - Remove (Picked unit) from game
> -Боевая единица - Create 1 "Миньон" for (Triggering player) at (Position of (Triggering unit)) facing Стандартная ориентация зданий degrees
> -Боевая единица - Add a 10.00 seconds Общий expiration timer to (Last created unit)

Все, теперь у нас при касте появляется юнит на 10 сек, по истечении которых он исчезает. И при повторном касте тоже исчезает но появляется другой.

в) Миньон на время, но при повторном касте появляется второй миньон

Вот и 3й пример, работает как заклинание "Дух Воды"

> ??Событие:??
> -Боевая единица - A unit Начинает применять способность
> ??Условие:??
> -(Ability being cast) равно "Дамми Спелл"
> ??Действие:??
> -Боевая единица - Create 1 "Миньон" for (Triggering player) at (Position of (Triggering unit)) facing Стандартная ориентация зданий degrees
> -Боевая единица - Add a 5.00 seconds Общий expiration timer to (Last created unit)

При первом касте появляется миньон на 5 сек. по истечении которых он исчезает. При повторном касте первый миньон не исчезает, но появляется второй миньон на 5 сек.


Аура

С аурой проще так как основная часть работы лежит в "РО". И как всегда НО, когда переходим на триггер тут уже все становится хоть и не неимоверно, но не менее сложно.
Итак 2 вида аур:
а) Аура Жизни
б) Аура Маны

а) Аура Жизни

Аура действует на дружественных юнитов, повышает им максимальное значение ХП на 500 ед. и от владельца ауры к юнитам на которых она действует идет эффект. Сделал я ее на основе "Доспехи Веры". И еще одну способность на основе предмета увеличивающее жизни "Аура увеличения жизни".
Создаем 1 триггер который запишет юнита изучившего способность "Доспехи Веры" в переменную массив:

> ??Событие:??
> -Боевая единица - A unit Приобретает способность
> ??Условие:??
> -(Ability being cast) равно "Доспехи Веры"
> ??Действие:??
> -Set "переменная Боевая единица(массив)"[(Player number of (Triggering unit))] = (Triggering unit)

Первое готово теперь 2е. Это само действие триггерного заклинание при воздействии на юнита. На русский язык "способность подействовала на юнит - триггер сработал".

> ??Событие:??
> -Время - Every 10.00 seconds of game time
> ??Условие:??
> ??Действие:??
> -For each (Integer A) from 1 to 12, fo (Actions)
> --Цикл - действия:
> ---Отряд - Pick every unit in (Units owned by (Player (Integer A))) and do (Actions)
> ----Цикл - действия:
> -----If\Then\Else, multiple function
> ------Если - условие:
> -------((Picked unit) has baff "Доспехи Веры") равно Да
> ------То - Действие:
> -------Боевая единица - Add "Аура увеличения жизни" to (Picked unit)
> -------Set "переменная Точка1" = (Position of "переменная Боева единица(массив)"[(Player number of (Picked unit))])
> -------Set "переменная Точка2" = (Position of (Picked unit))
> -------Set "переменная Реальная" = (Distance between "переменная Точка1" and "переменная Точка2")
> -------For each (integral "переменная Целочисленная") from 1 to 10, do (Actions)
> --------Цикл - действия:
> ---------Set "переменная Точка3" = ("переменная Точка1" offset by (("переменная Реальная"/10) x (Real("переменная Целочисленная")) towards (Angle from "переменная Точка1" and "переменная Точка2") degrees)
> ---------Спецэффект - Create a special effect attach to the "переменная Точка3" of (Triggering unit) using Abilities\Weapons\VengeanceMissile\VengeanceMissile.mdl
> ---------Спецэффект - Destroy (Last created special effect)
> ------Иначе - Действие:
> -------Боевая единица - Remove "Аура увеличения жизни" from (Picked unit)

б) Аура Маны

И простенькая аура на увеличения маны на 250 ед. созданная на основе "Чародейская Аура". У Юнитов на которых она действует будет свой эффект. Дополнительное что мы создадим это "Аура увеличения маны"
Вся аура состоит из 1го триггера6

> ??Событие:??
> -Время - Every 10.00 seconds of game time
> ??Условие:??
> ??Действие:??
> -For each (Integer A) from 1 to 12, fo (Actions)
> --Цикл - действия:
> ---Отряд - Pick every unit in (Units owned by (Player (Integer A))) and do (Actions)
> ----Цикл - действия:
> -----If\Then\Else, multiple function
> ------Если - условие:
> -------((Picked unit) has baff "Чародейская Аура") равно Да
> ------То - Действие:
> -------Боевая единица - Add "Аура увеличения маны" to (Picked unit)
> ---------For each (integral "переменная Целочисленная") from 1 to 10, do (Actions)
> ----------Цикл - действия:
> -----------Set "переменная Точка3" = ((Position of (Picked unit)) offset by 100 towards 120.00 x (Real("переменная Целочисленная"))) degrees)
> -----------Спецэффект - Create a special effect attach to the "переменная Точка3" of (Triggering unit) using Abilities\Spells\Orc\LightningBolt\LightningBoltMissile.mdl
> -----------Спецэффект - Destroy (Last created special effect)
> ------Иначе - Действие:
> -------Боевая единица - Remove "Аура увеличения маны" from (Picked unit)

для аур выкладываю два примера в одной карте.


Мгновенное заклинание

Сделаем простое заклинание "Громовая Поступь" как у «Кэрна» но с другим эффектом:

> ??Событие:??
> -Боевая единица - A unit Начинает применять способность
> ??Условие:??
> -(Ability being cast) равно "Громовая Поступь"
> ??Действие:??
> -Wait 0.05 seconds
> -Set "переменная Точка1" = (Position of (Triggering unit))
> -For each (integral "переменная Целочисленная") from 1 to 10, do (Actions)
> --Цикл - действия:
> ---Set "переменная Точка2" = ("переменная Точка1" offset by 250.00 towards (36.00 x (Real("переменная Целочисленная"))) degrees)
> -Спецэффект - Create a special effect attach to the "переменная Точка2" of (Triggering unit) using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
> -Спецэффект - Destroy (Last created special effect)

Как видно необязательно делать урон и радиус урона триггерно, достаточно воспользоваться стандартными спеллами и всего лишь добавить другой эффект.


Направляемое

Изменим стандартный "Молот Бурь". Будет эффект от кастующего до атакованного юнита и вокруг атакованного юнита.

> ??Событие:??
> -Боевая единица - A unit Начинает применять способность
> ??Условие:??
> -(Ability being cast) равно "Молот Бурь"
> ??Действие:??
> -Set "переменная Точка1" = (Position of (Target unit of ability being cast))
> -Set "переменная Точка2" = (Position of (Triggering unit))
> -Set "переменная Точка3" = (Position of (Target unit of ability being cast))
> -Set "переменная Реальная" = (Distance between "переменная Точка2" and "переменная Точка3")
> -For each (integral "переменная Целочисленная") from 1 to 10, do (Actions)
> --Цикл - действия:
> ---Set "переменная Точка4" = ("переменная Точка2" offset by (("переменная Реальная"/10) x (Real("переменная Целочисленная")) towards (Angle from "переменная Точка2" and "переменная Точка3") degrees)
> -Спецэффект - Create a special effect attach to the "переменная Точка4" of (Triggering unit) using Abilities\Weapons\VengeanceMissile\VengeanceMissile.mdl
> -Спецэффект - Destroy (Last created special effect)
> -Wait 0.05 seconds
> -For each (integral "переменная Целочисленная") from 1 to 9, do (Actions)
> --Цикл - действия:
> ---Set "переменная Точка4" = ("переменная Точка1" offset by 200.00 towards (40.00 x (Real("переменная Целочисленная"))) degrees)
> -Спецэффект - Create a special effect attach to the "переменная Точка4" of (Triggering unit) using Abilities\Weapons\Bolt\BoltImpact.mdl
> -Спецэффект - Destroy (Last created special effect)



Кастуемое определенное время

Пассивка

И так пассивно заклинание это проще простого для этого нам потребуется создать:
  1. придумать пассивку
  2. дамми спел
  3. спеллы из которых она будет состоять
в моем случае создадим пассивку при которой нам будет даваться вампиризм и + к атаке.


Просмотров: 14 793

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


Sergant1000 #1 - 4 года назад 1
Добавил пример написания аур, и карту к ним.
map_maiker #2 - 4 года назад 0
чтото я спать хочу))теме +,хорошая стать
автор,допиши статью
Sergant1000 #3 - 4 года назад (отредактировано ) 1
Изменил триггер "б) Миньон на время, но при повторном касте он заменяетcя" в описании заклинания "Вызов" и добавил "в) Миньон на время, но при повторном касте появляется второй". Так же изменен пример.
Daro #4 - 4 года назад 0
Sergant1000, научи спец эффекты циклом создавать мне не понятно
Sergant1000 #5 - 4 года назад (отредактировано ) 0
Daro, ты имешь ввиду этот отрезок?
-For each (integral "переменная Целочисленная") from 1 to 10, do (Actions)
--Цикл - действия:
---Set "переменная Точка2" = ("переменная Точка1" offset by 250.00 towards (36.00 x (Real("переменная Целочисленная"))) degrees)
-Спецэффект - Create a special effect attach to the "переменная Точка2" of (Triggering unit) using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
-Спецэффект - Destroy (Last created special effect)
xDanteZx #6 - 4 года назад 0
Добавь пассивки, пожалуйста!
Sergant1000 #7 - 4 года назад 0
xDanteZx, окей, добавлю.
xDanteZx #8 - 4 года назад 0
Sergant1000, добавишь еще бафф-способность, типа "Рев"? Тоже очень надо
Даже лучше совмести "Рев" и "Кровожадность"
Dwanx4 #9 - 4 года назад 0
Скажи, а как сделать так, допустим, что при том же самом молоте бурь, кастующий мгновенно перемещался к цели, на которую направил молот, или же перемещался после того, как молот ударит по цели?
SomeFire #10 - 4 года назад 2
Dwanx4, unit - move instantly. Если после удара - сначала ждешь нужное время.
Sergant1000 #11 - 4 года назад 1
Dwanx4, чтобы так сделать нужно использовать наработку "отлов урона по юниту" так как при использовании события юнит атакован, урон еще не нанесен а юнит уже телепортируется. и в действие поставить то что написал SomeFire,
MrSlap #12 - 4 года назад 0
А если нужно создать способность на основе, например, тёмной стаи, или волны силы, чтобы если юнит попадает под волну, то на него навешивается определенный эффект(Бафф)?
Sergant1000 #13 - 4 года назад 0
делаешь в способности условие при котором если юнит получил повреждение то повесить на него дебаф или создать рядом или в зоне действия юнитов с конкретным де баффом
MrSlap #14 - 4 года назад 0
Sergant1000, так урон наносить не нужно - вот в чём штука. Например: представь способность: Волна разочарования - все, кто попал в область воздействия - засыпают. Или FusRoDah - все кто попал под волну сносятся на десяток метров назад.
Как снести персонажа, положим, я бы смог придумать. А вот как определить, кто попал под эффект волны...
Разве что создать региончик небольшой, двигать его по направлению к указанной точке, а там уже проверять, если в регионе кто-то оказался, то с ним случается конфуз.)
xDanteZx #15 - 4 года назад 0
MrSlap:
Sergant1000, так урон наносить не нужно
Так выставь урон на 0
А все кто попал под эффект волны, определит сам варик
MrSlap #16 - 4 года назад 0
xDanteZx, может я совсем дурак, или просто плохо искал, но мне так и не удалось найти условия, которое бы заставило триггер воздействовать на цели попавшие под эффект волны.
nvc123 #17 - 4 года назад 1
берёшь точку куда направлена волна берёшь юнита который кастует волну и высчитываешь регион поражения волной потом на всех юнитов которые попали в регион вешаешь сон или что те там надо
Sergant1000 #18 - 4 года назад 0
берёшь точку куда направлена волна берёшь юнита который кастует волну и высчитываешь регион поражения волной потом на всех юнитов которые попали в регион вешаешь сон или что те там надо
самый оптимальный вариант
Sergant1000 #19 - 4 года назад 0
добавил пассивку
deadend #20 - 4 года назад 3
а можно ведь как-нибудь добавить к пассивке(например смертельный удар) нестандартную модель?
3 комментария удалено
nvc123 #24 - 4 года назад 2
мы непоняли что ты имееш ввиду под нестандартной моделью
deadend #25 - 4 года назад 0
импортированный эффект или любой другой обычный эффект
например эффект огненного столба ну или эффект осветительного заряда поставить можно?
nvc123 #26 - 4 года назад 0
тоесть чтобы эфект был у юнита у котрого пасивка?
native AddSpecialEffectTarget takes string modelName, widget targetWidget, string attachPointName returns effect
добавление эфекта к любому обьекту типа widget
Sergant1000 #27 - 4 года назад 0
nvc123, Здесь обсуждаются варианты решения проблемы через ГУИ, джасс не предлагать либо в ЛС. Не нарушайте правил раздела xgm.guru/p/wc3/gui-examples
deadend, Да можно, эффекты ставятся любые в зависимомти от вашей фантазии.
nvc123 #28 - 4 года назад (отредактировано ) 0
ок тогда просто AddSpecialEffect
вроде так в гуи называется
а вобще названия нативок в гуи и джаз почти одинаковые а так как в гуи есть поиск текста а в джаз function list то искать гуи функции по названию этой функции на джазе или наоборот несложно
Sergant1000 #29 - 4 года назад 0
nvc123, молодец, хлопаем в ладоши. А теперь объесни это тем кто редактор только взял в руки.
nvc123 #30 - 4 года назад 0
лень выкладовать скрин
лан ловите
сюда пишите и он вам показывает что нашол
прикреплены файлы
Sergant1000 #31 - 4 года назад (отредактировано ) 0
nvc123 - объясню доступным языком. Этот топик "Как сделать тригерное заклинание?" для обсуждения заклинания и все с ними связанными на ГУИ xgm.guru/p/wc3/gui-examples . Я понимаю, освоил джазз и крут от своей Нев.....ности. Но данная тема "База примеров на GUI" созданна для в основ ном ориентируясь на новичков, для тех кто может и кто хочет. По это му прошу не засорять тему без связными сообщениями.
Dwanx4 #32 - 4 года назад 0
Снова вопрос.
Поставил, что все юниты вокруг (500 метров) получают спецэффект оглушение, но эфект остается на многих юнитах даже после того как я прописал обратное действие. (Эффект снимается только с одного)
Как сделать так, чтобы эффект снимался со всех, на кого я поставил этот эффект.
Sergant1000 #33 - 4 года назад 0
сложно без примера твоих действий.
Dwanx4 #34 - 4 года назад 0
Вот скрин
прикреплены файлы
Sergant1000 #35 - 4 года назад 0
ты в своем триггере указал выбрать всех юнитов и удалить последний созданный эффект. вот и ошибка. чтобы удалять эффект со множества юнитов его нужно добавлять в переменную и удалять эффект в переменной иначе ни как.
Dwanx4 #36 - 4 года назад 0
Хм, а как мне это лучше сделать?
Если можно, то еще вопрос, как сделать, что бы скилл был активен только ночью?
И как сделать, что бы при смерти какого либо героя вокруг, шло прибавление к силе?
Как сделать, что бы из боевых единиц, передвинутых моментально с помощью триггера, не было зданий?
Buulichkaa #37 - 4 года назад 0
Dwanx4, ставишь условие на проверку времени внутриигровых суток. Создаешь триггер с событием умирающий юнит и проверяешь если этот юнит в нужном радиусе от твоего то делаешь с ним че там тебе надо. Последний вопрос не понял)
Dwanx4 #38 - 4 года назад 0
1е Черт, а как это сделать?
2е понял, спасибо.
3е кидаю скрин
Вопрос, в чем ошибка) Знаю, что оккупировал данный топик, но вопросов очень много =(
это к 3му
(новый скрин почему-то не прикрепляется...)
прикреплены файлы
Buulichkaa #39 - 4 года назад 0
у тебя условие неправильное вообще -_- нужно делать действия с юнитом целью*, а событие ставить на приводит способность в действие* и сравнивать - применяемая способность* = какая там тебе нужна.
Dwanx4 #40 - 4 года назад (отредактировано ) 0
Так ведь это пассивка... Мол если у атакованного юнита (хотелось бы сделать, что бы у юнита в радиусе) здоровье ниже 25% то у героя врубался этот скил (восстановление)
Слушай, а вот так правильно?
прикреплены файлы