Четверг, 04-12-2008, 22:45 Приветствую Вас Гость, пожалуйста зарегистрируйтесь!


Всё для Warcraft 3

Главная | Форум | Регистрация | Вход | RSS | MAP
[ Файлы | Статьи | Обои ]
Меню сайта
Наш опрос
Оцените наш сайт
Всего ответов: 21451
Сейчас на сайте
На сайте всего: 86
Гостей: 56
Пользователей: 30
Реклама
Главная » Статьи по Warcraft 3 » Создание карт » Триггеры
Триггерные Заклинания
16-10-2007, 08:34
Зачем это все надо
В "движок" Варкрафта входят разные стандартные спеллы. А в редакторе объектов можно изменять параметры их. Но принципиально их таким образом не изменить. Если нам нужно создать какой-то полностью новый спелл, то нам приходят на помощь триггеры или 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 и вычислять номер точки в массиве, в которую надо двигаться.

Добавил: РеКсАр |
Просмотров: 952 | Рейтинг: 5.0/2

Для упаковки закачиваемых файлов и распаковки скачиваемых:
WinRAR 3.71
Всего комментариев: 8
14-07-2008
8. ME4man
я всё это умею делать! B)

03-07-2008
7. андр
Я вообщет не сильно разбираюсь но большую часть понял. По поводу airstrike не проще использовать москитов с заклинанием пламя феникса для простоты

27-06-2008
6. Красников Даниил Владимирович (DNLK)
Надо помогать новичкам, эта статья и мне пригодилась.

03-01-2008
5. Вячеслав (XOMKA-MACTEP)
Проверим :D

10-11-2007
4. Артемий (Murador)
mad ммммммммм

04-11-2007
3. Юра (Venom-111)
Клёво vinsent

02-11-2007
2. Mastodont (Mastodont)
+1 Это мне очень пригодится B)

31-10-2007
1. Alex (timebreaker)
+1 timebreaker
Одобряю статья полезная,хотя я почти всё ето знаю, спасибо что напомнил! :)

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Логин:
Пароль:
Поиск статей
Случайные обои
Случайный файл
[08-07-2007]
[Карты · RPG]
Final Fantesy Epic RPG 0.8.8.1 BETA - Отличнейшая RPG-карта, здесь можно выбирать профессии и выполнять прекрасно созданные побочные задания.
Новые карты
[04-12-2008]
Петросянщина 1.9 Global Beta Test[Другое]
[04-12-2008]
Black Temple Reload - In the shadow[Другое]
[04-12-2008]
Moo Moo v3.0 Generation X[Другое]
[03-12-2008]
DotA Allstars v6.57b AI+ 1.52(0.2) rus[Dota]
[01-12-2008]
Age of Eternal Strife v. 0.60K[AoS]
[01-12-2008]
DotA Allstars 6.41 Open Object[Dota]
[29-11-2008]
Zombie Slayers v1.1[Другое]
[29-11-2008]
Stairway[Melee]
[29-11-2008]
Draculas Curse v5.8[Другое]
[29-11-2008]
Impossible Bosses BetaV2S[Arena]
5 лучших по кол-у добавленных статей
[ OrcRider ] [ 39 ]
[ РеКсАр ] [ 34 ]
[ porty ] [ 24 ]
[ ASAQRA ] [ 23 ]
[ Sheogorath ] [ 22 ]
Наша кнопка
www.Warcraft3FT.info - Всё для Warcraft 3

Другие варианты
Статистика