|
|
|
|
[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 (Эллесар) А как же предметы-спелы ? а что они?всеравно ж считается если предмет используешь с спеллом заложенным в нем а так хорошая статья, нечего придираться
|
|
|
|
|
|
|
|
|
|
|