Сейчас 22:07:44 Пятница, 19 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » [CТАТЬЯ] Основы триггерных спеллов
[CТАТЬЯ] Основы триггерных спеллов
FkoFFДата: Воскресенье, 06 Декабря 2009, 10:41:31 | Сообщение # 1
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Небольшое вступление.

В редакторе карт конечно же, есть готовые спеллы варкрафта, которые можно менять. Но изменить их координально можно только с помощью триггеров.

С чего начать. Для начала, что бы сделать спелл - вам нужно понять что вы конкретно хотите. Вплоть до того что взять бумажечку и поэтапно нарисовать действия и реакцию. Можно даже без спецеффектов.

Что следует знать начинающему картостроителю? Надо знать какие спеллы существуют и что такое думми.

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

А теперь виды спеллов.
Спеллы типа цель-юнит, их много и они очень разнообразны. Есть те которые дают баффы, есть те которые просто наносят урон.
Спеллы типа цель-АоЕ, это разряд спеллов которые используют как цель - местность вокруг точки каста. (элементарный пример - Буран верховного мага альянса)
Спеллы типа цель-точка. Это разряд спеллов которые как цель используют любую точку на земле. Чаще всего это просто направление от кастующего юнита в точку каста. Яркий представитель - Волна силы.
Спеллы типа цель-отсутсвует. Это спеллы, для использования которых просто достаточно нажать кнопку и произойдет эффект. Яркие представители - москиты, рев.

Есть всего один спелл, который сразу затрагивает все виды целей. Спелл называется "канал", спелл изначально является Channel спеллом, но если установить "следовать в течении времени" на 0, то спелл будет кастоваться как обычный спелл. Единственный его минус - все обсолютно эффекты и действия придется исполнять триггерно, но это - в недалеком будущем - уже не проблема.

Перед тем как перейдем непосредственно к созданию первого триггерного спелла, следует ознакомится с следующим аспектом:

Переменные. Переменные это панацея, без переменных жизнь была бы адом и невозможно было бы в этом аду жить. Собственно переменные бывают разных видов (таймеры, логические, целочисленные, реальные, боевые единицы, да все что угодно).
Смысл переменной в том что значение переменной можно дать любое, значение любого объекта, даже того, который на карте появится только через определенное время игры. Тоесть мы можем, к примеру, задать значение переменной юнита босса, который появляется на нашей карте только в самом конце игры.

Ну для примера разберем следующее. Ваша идея: вы кастуете заклятье на соперника и в последствии, каждый кто будет атаковать цель - будет получать прирост к скорости атаки с каждым ударом.
Теперь действия. Вам нужно выбрать заклинание наводящееся на юнита. желательно с "buff" эффектом. Берем. ну допустим, заклинание "Духовное пламя", называем его Deadmark. Делаем с ним следующие манипуляции:
1. удаляем все какие есть эффекты заклинания (бонус к атаке, бонус к защите)
2. в вкладке "разрешенные цели" выбираем нужные варианты. К примеру "герой; враг"
3. ставим нужную дальность заклинания (радиус действия), так же выставляем одинаковые значения для Длительность воздействия - герой и Длительность воздействия - юнит.
4.1: запоминаем значение строчки "заклинание" у способности.
4.2 Заходим в раздел редактора объектов "заклинания\эффекты" и создаем заклинание на основе того что мы видели у нашего спелла (в данном случае Духовное Пламя).
4.3: меняем у заклинания название, спецеффект, иконку, описание. Ставим имя эдентичное с именем нашего спелла, в нашем случае это Deadmark.
4.4: у нашего спелла меняем содержимое строки "заклинание" на свежеиспеченное заклинание "Deadmark"
В итоге у вас получиться духовное пламя которое можно скастовать только на противника и оно не будет давать никаких эффектов.

Теперь самая, пожалуй, сложная часть этого процесса - формулировка триггера. Тут кто на что горазд. Кто то будет модифицировать статы атакующего юнита, кто то добавит умение "перчатки скорости" с возрастающим эффектом. Собственно этот вариант мы и рассмотрим.

Для этого варианта нам так же потребуется заклинание предмета "Перчатки скорости".
Причем уровней у неё должно быть к примеру 11. Первый уровень ставим значение 0, все дальшейшие уровни ставим столько, сколько мы хотим что бы давало бонус к скорости атаки после каждого удара. называем это умение к примеру AA_IAS_FOR_SPELL

Теперь триггерная составляющая спелла:

Заходим в редактор триггеров. Создаем триггер под названием Deadmark.

Ставим событие: Generic unit event, приводит способность в действие (очень советую запомнить эту функцию, одна из самых частоиспользуемых функций для создания спеллов)

Условия:
Ability comparison: ability being cast равно Deadmark (тот самый спелл на основе духовного пламяни)

Действия:
Set variable (задать значение переменной) ;; Set [переменная типа юнит, с названием к примеру Pray] ;; Set pray = target of ability being cast
#####
Этим действием мы заставили запомнить цель нашего заклинания под кодовым названием Pray.
#####
Turn on [trigger №2] (он будет представлен ниже)
wait к примеру 10 секунд.
Set pray = нет боевой единицы
Turn off [trigger №2]
Отряд - Pick every unit in (entire map) and do multiplie actions:
If/then/else:
if:
Integer comparison: Level of ability AA_IAS_FOR_SPELL for picked unit не равно 0
Then:
Боевая единица - Set level of ability AA_IAS_FOR_SPELL for picked unit to 1
Else:
do nothing
######
Все то, что написанно после Отряд - pick every unit = это удаление ускорителя.
Почему не удаление спросите вы, а потому что если каждый раз добавлять способность заного = игрок, владелец персонажа, которому добавляется заклинание - будет притормаживать на 1 секунду (примерно), поэтому лучше просто поставить уровень способности на 1, эффект всеравно эдентичен.
######

Теперь мы закончили с первым триггером. Собственно это только фундамент спелла. Теперь нужно создать триггер который будет повышать скорость атаки атакующему юниту.

Trigger №2
событие: Generic unit event - Generic unit атакован
######
очень советую запомнить это событие, ибо нету события "юнит атакует", поэтому для любых пассивных скиллов, реагирующих на вашу атаку - придется использовать это событие
######
Conditions:
####
нам надо что бы триггер работал только в случае, когда атакуют юнита, которого мы пометили спеллом.
####
Boolean comparison: ((Attacking unit) is Герой) равно "да"
Unit comparison: (Attacked unit) равно Pray
Actions:
#####
Наша задача не допустить возможных ошибок в триггере, иначе весь спелл полетит на смарку
#####
If/then/else do multiplie functions:
If:
Integer comparison: Level of ability AA_IAS_FOR_SPELL for Attacking unit равно 0
then:
Боевая единица - add ability to unit - add AA_IAS_FOR_SPELL to attacking unit
else:
If\Then\Else
If:
Integer comparison: Level of AA_IAS_FOR_SPELL for attacking unit меньше или равно 10
Then:
Боевая единица - increase level of ability for unit - increase level of AA_IAS_FOR_SPELL for attacking unit
Else:
Do nothing
#####
вышеописанные события при условии что у атакующего юнита нету способности - добавят её, а если она уже есть - повысят её уровень на 1.
#####

Теперь, что бы небыло конфузов, надо создать еще один триггер, которые обнулит уровень AA_IAS_FOR_SPELL если маркированный юнит умирает, а так же если герой, с спеллом AA_IAS_FOR_SPELL атакует не маркированного юнита - способность так же обнулялась.

Trigger №3:
События:
Generic unit атакован
Generic unit умирает
Conditions:
OR (multiplie functions)
Boolean comparison: Unit has specific buff - Attacked unit has Deadmark не равно "ДА"
Unitcomparison: Dying unit = Pray
Actions:
If then else:
If:
Boolean comparison: Attacked unit has deadmark не равно "ДА"
Integer comparison: Level of AA_IAS_FOR_SPELL for attacking unit больше или равно 2
then:
Set level of AA_IAS_FOR_SPELL for attacking unit to 1
else:
If\Then\else:
If:
Dying unit = pray
then:
Pick every unit entire map and do actions:
If\then\else
If: Level of AA_IAS_FOR_SPELL for picked unit не равно 0
Then: set level of AA_IAS_FOR_SPELL for picked unit to 1
Else: do nothing

#########
Теперь у нас есть практически чистое заклинание, которое не будет давать сбоев. Но это только один вариант, с достаточно сложным спеллом. Обычно спеллы проще и умещаются в 1-2 триггера. Но вам, юнный мапмейкер, не нужны гайды по простым спеллам, они то, простые спеллы, итак не плохо получаются.

Но в любом случае вот вам небольшая справка:

Что делать когда:

Вам нужно запретить использование заклинания если не выполнены какие либо условия (ну допустим заклинание которое будет работать только если количество противников рядом больше 5)

Событие:
Unit начинает применять способность
Conditions:
Ability being cast = Ваша способность
Actions:
(как и обычно)
If\then\else:
If:
Тут вы ставите условие, при котором будете разрешать спелл, но для нашего примера с количеством вражеских юнитов - я опишу именно это условие:
Integer comparison: Count units in unit group - Count units in (range matching conditions(тут будут условия по которым вычисляются это самое значение, в нашем примере будет количество вражеских героев на расстоянии 400 от нас)) - Count units in (range 400 around casting unit matching conditions (здесь, в зависимости от количества условий - придется использовать функцию and) (matching conditions (boolean comparison(matching unit is Герой = да) and (Boolean comparison(matching unit belongs to an allie to (owner of casting unit) не равно "ДА") and (Matching unit is alive = да)) больше или равно 5
Then:
do nothing
#####
При условии что вражеских живых героев вокруг нашего персонажа будет больше или равно 5 то триггер не будет припятствовать продолжению заклинания
####
Else:
Боевая единица - Issue order with no target - Order casting unit отставить

Теперь, при попытке произнести заклинание, а требования, которые вы хотите - не соблюдены - заклинание произнесенно не будет.

Еще хотелось бы упамянуть о циклах. Это отдельный разговор конечно же, но всетаки в кратце. Если вам требуется совершить подряд 10-20 действий, состоящих к примеру из 10 триггеров, то следует использовать циклы. Незнаю кому как, но я использую Integer A, разницы между ними нету никакой, и сделаны они исключительно для совместного использования (один внутри другого).
Так вот.В действительности смысл этих самых циклов в том что есть арифметическое значение [For loop integer A\B] который обозначается как текущее значение цикла. тоесть если цикл стоит от 1 до 15 то значение For Loop integer будет обозначать текущий цикловой момент.

Использовать можно не только для прокрутки самого цикла но и что бы одной строкой охватить сразу 20-30 значений, что кстати в разы легче. Тоесть можно использовать следующий набор функций:

Set Random[FL] = last created special effect
Set FL=FL+1

а в дальнейшем для манипулирования ими пользоваться функцией:

For each integer A from 0 to FL do actions:
Destroy Random[FL-For loop integer A]

Это для тех случаев когда вы создаете объект не через цикл а через стандартный триггер.

Так же, хотелось бы упомянуть во избежание. Есть такая нехорошая штука - называется утечки памяти. Такое бывает к примеру когда объект регистрируется как переменная, после чего не обнуляется а просто заменяется новым объектом. Или когда создаются спецэффекты и не удаляются (очень, хочу заметить, частая ошибка мапмейкеров)

Ах да, так же очень хочу заметить. Ненадо создавать большое количество переменных. К примеру вместо того что бы создавать 40 разных таймеров, лучше сделайте таймер под названием к примеру AA_Timer и поставьте галочку в поле "массив", тогда вы сможете использовать данную переменную с нужной пометкой - без загязнения своей карты лишними переменными.


 

Pa3apTДата: Воскресенье, 06 Декабря 2009, 10:45:33 | Сообщение # 2
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
Честно? Гумно, ни строки про канал не увидел, а он, можно сказать, основа триггерных спелов, учись http://xgm.ru/forum/showpost.php?p=639678&postcount=1 :Р

Добавлено (06-12-2009, 10:45)
---------------------------------------------
З.Ы Тупо на примерах статью не пишутся, легче было сделать наработку с комментариями имхо =\

 

FkoFFДата: Воскресенье, 06 Декабря 2009, 10:47:24 | Сообщение # 3
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (Pa3apT)
Честно? Гумно, ни строки про канал не увидел, а он, можно сказать, основа триггерных спелов, учись http://xgm.ru/forum/showpost.php?p=639678&postcount=1 :Р

каждому свое ) я вообще половину спеллов на москитах строю oO


 

Pa3apTДата: Воскресенье, 06 Декабря 2009, 10:49:04 | Сообщение # 4
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
FkoFF, в смысле? Даешь дамикам москиты или меняешь модель в геройской спосе?)
 

FkoFFДата: Воскресенье, 06 Декабря 2009, 10:50:27 | Сообщение # 5
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (Pa3apT)
FkoFF, в смысле? Даешь дамикам москиты или меняешь модель в геройской спосе?)

не, спеллы которые не требуют таргета предпочитаю делать на основе спелла "москиты - герой" а не на основе всеми так любимого "Рев"... -)


 

Pa3apTДата: Воскресенье, 06 Декабря 2009, 10:54:51 | Сообщение # 6
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
FkoFF, спелы, которые не требуют таргета лучше делать через канал ;)
 

ZET99Дата: Воскресенье, 06 Декабря 2009, 11:11:51 | Сообщение # 7
5 уровень
Группа: Заблокированные
Сообщений: 126
Награды: 0
Репутация: 15
Блокировки:
Quote (Pa3apT)
канал , основа триггерных спелов

согласен, у меня треть спеллов только на нём сделаны


<b>Alice</b>, из за тебя пропадает смысл в паролях, а так же постоянно будет требоваться пинать админа...(Enforcer)
 

Pa3apTДата: Воскресенье, 06 Декабря 2009, 11:15:14 | Сообщение # 8
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
Хм... поскольку свою я точно дорабатывать не буду,то ты напиши про канал, опиши преимущественные заклинания для каждого типа таргетов (например для юзается мгновенно и не сбивает каст может подойти виндволк и т.д.), вот тогда в статье появится смысл, ну а пока что бойан :)
 

FkoFFДата: Воскресенье, 06 Декабря 2009, 11:17:14 | Сообщение # 9
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (Pa3apT)
Хм... поскольку свою я точно дорабатывать не буду,то ты напиши про канал, опиши преимущественные заклинания для каждого типа таргетов (например для юзается мгновенно и не сбивает каст может подойти виндволк и т.д.), вот тогда в статье появится смысл, ну а пока что бойан

вечерком еще доработаю; перечитал статью, нашел мелкие огрехи которые препятствуют пониманию нубом данной статьи.


 

СорнемусДата: Воскресенье, 06 Декабря 2009, 13:50:31 | Сообщение # 10
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
FkoFF, обратись к комодератору, чтобы он оформил, ибо многа букафф и нет оформления. Читать тяжело.
 

BeLousДата: Воскресенье, 06 Декабря 2009, 13:53:35 | Сообщение # 11
8 уровень
Группа: Проверенные
Сообщений: 649
Награды: 0
Репутация: 120
Блокировки:
FkoFF, Оформи, перенеси в раздел Библиотека

^Y
 

ShadowDragonДата: Воскресенье, 06 Декабря 2009, 14:09:12 | Сообщение # 12
10 уровень
Группа: Проверенные
Сообщений: 1564
Награды: 1
Репутация: 286
Блокировки:
BeLous,

Он перенести не может, для этого есть модератор. а его нет)) Но переоформить надо.


Человечество так низко пало... Даже я за ним не успеваю © Не помню


 

СорнемусДата: Воскресенье, 06 Декабря 2009, 14:58:08 | Сообщение # 13
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (ShadowDragon)
Он перенести не может, для этого есть модератор. а его нет)) Но переоформить надо.

А обычные модераторы на что? О_о
 

ShadowDragonДата: Воскресенье, 06 Декабря 2009, 15:01:37 | Сообщение # 14
10 уровень
Группа: Проверенные
Сообщений: 1564
Награды: 1
Репутация: 286
Блокировки:
Сорнемус,

А их пока нету никого) слишком заняты))


Человечество так низко пало... Даже я за ним не успеваю © Не помню




Сообщение отредактировал ShadowDragon - Воскресенье, 06 Декабря 2009, 15:02:49
 

FkoFFДата: Понедельник, 07 Декабря 2009, 02:54:05 | Сообщение # 15
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Переоформлю покрасивше, выложу оформленную и доработанную версию в временном отрезке с этого вечера до следующего утра

Добавлено (07-12-2009, 02:53)
---------------------------------------------
Небольшое вступление.

В редакторе карт конечно же, есть готовые спеллы варкрафта, которые можно менять. Но изменить их координально можно только с помощью триггеров.

С чего начать. Для начала, что бы сделать спелл - вам нужно понять что вы конкретно хотите. Вплоть до того что взять бумажечку и поэтапно нарисовать действия и реакцию. Можно даже без спецеффектов.

Что следует знать начинающему картостроителю? Надо знать какие спеллы существуют и что такое думми.

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

А теперь виды спеллов.
Спеллы типа цель-юнит, их много и они очень разнообразны. Есть те которые дают баффы, есть те которые просто наносят урон.
Спеллы типа цель-АоЕ, это разряд спеллов которые используют как цель - местность вокруг точки каста. (элементарный пример - Буран верховного мага альянса)
Спеллы типа цель-точка. Это разряд спеллов которые как цель используют любую точку на земле. Чаще всего это просто направление от кастующего юнита в точку каста. Яркий представитель - Волна силы.
Спеллы типа цель-отсутсвует. Это спеллы, для использования которых просто достаточно нажать кнопку и произойдет эффект. Яркие представители - москиты, рев.

Есть всего один спелл, который сразу затрагивает все виды целей. Спелл называется "канал", спелл изначально является Channel спеллом, но если установить "следовать в течении времени" на 0, то спелл будет кастоваться как обычный спелл. Единственный его минус - все обсолютно эффекты и действия придется исполнять триггерно, но это - в недалеком будущем - уже не проблема.

Перед тем как перейдем непосредственно к созданию первого триггерного спелла, следует ознакомится с следующим аспектом:

Переменные. Переменные это панацея, без переменных жизнь была бы адом и невозможно было бы в этом аду жить. Собственно переменные бывают разных видов (таймеры, логические, целочисленные, реальные, боевые единицы, да все что угодно).
Смысл переменной в том что значение переменной можно дать любое, значение любого объекта, даже того, который на карте появится только через определенное время игры. Тоесть мы можем, к примеру, задать значение переменной юнита босса, который появляется на нашей карте только в самом конце игры.

Ну для примера разберем следующее. Ваша идея: вы кастуете заклятье на соперника и в последствии, каждый кто будет атаковать цель - будет получать прирост к скорости атаки с каждым ударом.
Теперь действия. Вам нужно выбрать заклинание наводящееся на юнита. желательно с "buff" эффектом. Берем. ну допустим, заклинание "Духовное пламя", называем его Deadmark. Делаем с ним следующие манипуляции:
1. удаляем все какие есть эффекты заклинания (бонус к атаке, бонус к защите)
2. в вкладке "разрешенные цели" выбираем нужные варианты. К примеру "герой; враг"
3. ставим нужную дальность заклинания (радиус действия), так же выставляем одинаковые значения для Длительность воздействия - герой и Длительность воздействия - юнит.
4.1: запоминаем значение строчки "заклинание" у способности.
4.2 Заходим в раздел редактора объектов "заклинания\эффекты" и создаем заклинание на основе того что мы видели у нашего спелла (в данном случае Духовное Пламя).
4.3: меняем у заклинания название, спецеффект, иконку, описание. Ставим имя эдентичное с именем нашего спелла, в нашем случае это Deadmark.
4.4: у нашего спелла меняем содержимое строки "заклинание" на свежеиспеченное заклинание "Deadmark"
В итоге у вас получиться духовное пламя которое можно скастовать только на противника и оно не будет давать никаких эффектов.

Теперь самая, пожалуй, сложная часть этого процесса - формулировка триггера. Тут кто на что горазд. Кто то будет модифицировать статы атакующего юнита, кто то добавит умение "перчатки скорости" с возрастающим эффектом. Собственно этот вариант мы и рассмотрим.

Для этого варианта нам так же потребуется заклинание предмета "Перчатки скорости".
Причем уровней у неё должно быть к примеру 11. Первый уровень ставим значение 0, все дальшейшие уровни ставим столько, сколько мы хотим что бы давало бонус к скорости атаки после каждого удара. называем это умение к примеру AA_IAS_FOR_SPELL

Теперь триггерная составляющая спелла:

Заходим в редактор триггеров. Создаем триггер под названием Deadmark.

Ставим событие: Generic unit event, приводит способность в действие (очень советую запомнить эту функцию, одна из самых частоиспользуемых функций для создания спеллов)

Условия:
Ability comparison: ability being cast равно Deadmark (тот самый спелл на основе духовного пламяни)

Действия:
Set variable (задать значение переменной) ;; Set [переменная типа юнит, с названием к примеру Pray] ;; Set pray = target of ability being cast
#####
Этим действием мы заставили запомнить цель нашего заклинания под кодовым названием Pray.
#####

Turn on [trigger №2] (он будет представлен ниже)
wait к примеру 10 секунд.
Set pray = нет боевой единицы
Turn off [trigger №2]
Отряд - Pick every unit in (entire map) and do multiplie actions:
If/then/else:
if:
Integer comparison: Level of ability AA_IAS_FOR_SPELL for picked unit не равно 0
Then:
Боевая единица - Set level of ability AA_IAS_FOR_SPELL for picked unit to 1
Else:
do nothing
######
Все то, что написанно после Отряд - pick every unit = это удаление ускорителя.
Почему не удаление спросите вы, а потому что если каждый раз добавлять способность заного = игрок, владелец персонажа, которому добавляется заклинание - будет притормаживать на 1 секунду (примерно), поэтому лучше просто поставить уровень способности на 1, эффект всеравно эдентичен.

######

Теперь мы закончили с первым триггером. Собственно это только фундамент спелла. Теперь нужно создать триггер который будет повышать скорость атаки атакующему юниту.

Trigger №2
событие: Generic unit event - Generic unit атакован
######
очень советую запомнить это событие, ибо нету события "юнит атакует", поэтому для любых пассивных скиллов, реагирующих на вашу атаку - придется использовать это событие
######

Conditions:
####
нам надо что бы триггер работал только в случае, когда атакуют юнита, которого мы пометили спеллом.
####

Boolean comparison: ((Attacking unit) is Герой) равно "да"
Unit comparison: (Attacked unit) равно Pray
Actions:
#####
Наша задача не допустить возможных ошибок в триггере, иначе весь спелл полетит на смарку
#####

If/then/else do multiplie functions:
If:
Integer comparison: Level of ability AA_IAS_FOR_SPELL for Attacking unit равно 0
then:
Боевая единица - add ability to unit - add AA_IAS_FOR_SPELL to attacking unit
else:
If\Then\Else
If:
Integer comparison: Level of AA_IAS_FOR_SPELL for attacking unit меньше или равно 10
Then:
Боевая единица - increase level of ability for unit - increase level of AA_IAS_FOR_SPELL for attacking unit
Else:
Do nothing
#####
вышеописанные события при условии что у атакующего юнита нету способности - добавят её, а если она уже есть - повысят её уровень на 1.
#####

Теперь, что бы небыло конфузов, надо создать еще один триггер, которые обнулит уровень AA_IAS_FOR_SPELL если маркированный юнит умирает, а так же если герой, с спеллом AA_IAS_FOR_SPELL атакует не маркированного юнита - способность так же обнулялась.

Trigger №3:
События:
Generic unit атакован
Generic unit умирает
Conditions:
OR (multiplie functions)
Boolean comparison: Unit has specific buff - Attacked unit has Deadmark не равно "ДА"
Unitcomparison: Dying unit = Pray
Actions:
If then else:
If:
Boolean comparison: Attacked unit has deadmark не равно "ДА"
Integer comparison: Level of AA_IAS_FOR_SPELL for attacking unit больше или равно 2
then:
Set level of AA_IAS_FOR_SPELL for attacking unit to 1
else:
If\Then\else:
If:
Dying unit = pray
then:
Pick every unit entire map and do actions:
If\then\else
If: Level of AA_IAS_FOR_SPELL for picked unit не равно 0
Then: set level of AA_IAS_FOR_SPELL for picked unit to 1
Else: do nothing

#########
Теперь у нас есть практически чистое заклинание, которое не будет давать сбоев. Но это только один вариант, с достаточно сложным спеллом. Обычно спеллы проще и умещаются в 1-2 триггера. Но вам, юнный мапмейкер, не нужны гайды по простым спеллам, они то, простые спеллы, итак не плохо получаются.

Но в любом случае вот вам небольшая справка:

Что делать когда:

Вам нужно запретить использование заклинания если не выполнены какие либо условия (ну допустим заклинание которое будет работать только если количество противников рядом больше 5)

Событие:
Unit начинает применять способность
Conditions:
Ability being cast = Ваша способность
Actions:
(как и обычно)
If\then\else:
If:
Тут вы ставите условие, при котором будете разрешать спелл, но для нашего примера с количеством вражеских юнитов - я опишу именно это условие:
Integer comparison: Count units in unit group - Count units in (range matching conditions(тут будут условия по которым вычисляются это самое значение, в нашем примере будет количество вражеских героев на расстоянии 400 от нас)) - Count units in (range 400 around casting unit matching conditions (здесь, в зависимости от количества условий - придется использовать функцию and) (matching conditions (boolean comparison(matching unit is Герой = да) and (Boolean comparison(matching unit belongs to an allie to (owner of casting unit) не равно "ДА") and (Matching unit is alive = да)) больше или равно 5
Then:
do nothing
#####
При условии что вражеских живых героев вокруг нашего персонажа будет больше или равно 5 то триггер не будет припятствовать продолжению заклинания
####

Else:
Боевая единица - Issue order with no target - Order casting unit отставить

Теперь, при попытке произнести заклинание, а требования, которые вы хотите - не соблюдены - заклинание произнесенно не будет.

Еще хотелось бы упамянуть о циклах. Это отдельный разговор конечно же, но всетаки в кратце. Если вам требуется совершить подряд 10-20 действий, состоящих к примеру из 10 триггеров, то следует использовать циклы. Незнаю кому как, но я использую Integer A, разницы между ними нету никакой, и сделаны они исключительно для совместного использования (один внутри другого).
Так вот.В действительности смысл этих самых циклов в том что есть арифметическое значение [For loop integer A\B] который обозначается как текущее значение цикла. тоесть если цикл стоит от 1 до 15 то значение For Loop integer будет обозначать текущий цикловой момент.

Использовать можно не только для прокрутки самого цикла но и что бы одной строкой охватить сразу 20-30 значений, что кстати в разы легче. Тоесть можно использовать следующий набор функций:

Set Random[FL] = last created special effect
Set FL=FL+1

а в дальнейшем для манипулирования ими пользоваться функцией:

For each integer A from 0 to FL do actions:
Destroy Random[FL-For loop integer A]

Это для тех случаев когда вы создаете объект не через цикл а через стандартный триггер.

Так же, хотелось бы упомянуть во избежание. Есть такая нехорошая штука - называется утечки памяти. Такое бывает к примеру когда объект регистрируется как переменная, после чего не обнуляется а просто заменяется новым объектом. Или когда создаются спецэффекты и не удаляются (очень, хочу заметить, частая ошибка мапмейкеров)

Ах да, так же очень хочу заметить. Ненадо создавать большое количество переменных. К примеру вместо того что бы создавать 40 разных таймеров, лучше сделайте таймер под названием к примеру AA_Timer и поставьте галочку в поле "массив", тогда вы сможете использовать данную переменную с нужной пометкой - без загязнения своей карты лишними переменными.

Добавлено (07-12-2009, 02:54)
---------------------------------------------
вот она, до конца оформленная версия которую можно класть на полочку в библиотеку..


 

ShadowDragonДата: Понедельник, 07 Декабря 2009, 14:22:11 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 1564
Награды: 1
Репутация: 286
Блокировки:
Ты бы лучше "оформленную версию" скопировал в 1 пост) Кстати, оранжевый цвет текста - не совсем оформление)

Человечество так низко пало... Даже я за ним не успеваю © Не помню


 

FkoFFДата: Понедельник, 07 Декабря 2009, 14:23:27 | Сообщение # 17
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (ShadowDragon)
Ты бы лучше "оформленную версию" скопировал в 1 пост) Кстати, оранжевый цвет текста - не совсем оформление)

смысл в том что бы разделить визуально триггерную часть от простого текста. )


 

ЭллесарДата: Понедельник, 07 Декабря 2009, 14:34:44 | Сообщение # 18
DeMoN
Группа: Ветераны
Сообщений: 934
Награды: 1
Репутация: 210
Блокировки:
Ой много букв.

А как же предметы-спелы ?О_о


база паролей: https://yadi.sk/d/mdDhWuvPcTSKw
бекап сайта от 26.12.2010 https://yadi.sk/d/L3xNpibbiHpYE
 

FkoFFДата: Понедельник, 07 Декабря 2009, 15:02:14 | Сообщение # 19
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (Эллесар)
А как же предметы-спелы ?О_о

непоняятно. (С) ;>


 

Pa3apTДата: Понедельник, 07 Декабря 2009, 15:07:48 | Сообщение # 20
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
FkoFF, спелы, которые кастуются юзанием айтема
 

FkoFFДата: Понедельник, 07 Декабря 2009, 15:11:41 | Сообщение # 21
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Вы господа слишком много хотите от первой моей статьи )

 

KartohaДата: Вторник, 08 Декабря 2009, 11:10:06 | Сообщение # 22
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
Quote (FkoFF)
В редакторе карт конечно же, есть готовые спеллы варкрафта, которые можно менять. Но изменить их координально можно только с помощью триггеров.

Это не совсем так. Могу предложить в качестве примера "ракеты" Tinker`a из DOTA Allstars: никто и никогда, на первый взгляд, не скажет что это "веерный бросок" - просто надо уметь изменять вот и все!)
Quote (FkoFF)
примеру вместо того что бы создавать 40 разных таймеров, лучше сделайте таймер под названием к примеру AA_Timer и поставьте галочку в поле "массив", тогда вы сможете использовать данную переменную с нужной пометкой - без загязнения своей карты лишними переменными.

Поставить галочку "массив" - недостаточно. Еще нужно указывать "размер", который должен быть равен кол-ву используемых массивов. Если например "размер" будет стоять 1, а в индексе ты укажеш 2, работать НЕ будет.
 

[DUОS]Дата: Среда, 09 Декабря 2009, 00:18:09 | Сообщение # 23
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (ShadowDragon)
"оформленную версию" скопировал в 1 пост

Oo, да у него нет правки, он не проверенный!


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

ShadowDragonДата: Среда, 09 Декабря 2009, 17:38:44 | Сообщение # 24
10 уровень
Группа: Проверенные
Сообщений: 1564
Награды: 1
Репутация: 286
Блокировки:
Упс, сорри, не заметил сразу)

Человечество так низко пало... Даже я за ним не успеваю © Не помню


 

АрранДата: Среда, 09 Декабря 2009, 20:06:18 | Сообщение # 25
10 уровень
Группа: Ветераны
Сообщений: 2172
Награды: 1
Репутация: 312
Блокировки:
Quote (Pa3apT)
Гумно, ни строки про канал не увидел, а он, можно сказать, основа триггерных спелов

пффффф, не факт совсем
Quote (Эллесар)
А как же предметы-спелы ?

а что они?всеравно ж считается если предмет используешь с спеллом заложенным в нем
а так хорошая статья, нечего придираться


 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » [CТАТЬЯ] Основы триггерных спеллов
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz