Создание триггерных заклинаний на вероятность в Warcraft 3
Наверняка многие играли в ту же самую доту и там есть заклинания, которых не добиться обычным Редактором Объектов, все их можно сделать через Редактор Триггеров. Первое, что нужно будет знать, это "дамми"- юнит-пустышка, он применяется для каста стандартных заклинаний, либо как спецэффект, он имеет способность "Москиты" и не умеет атаковать, либо это способность-пустышка , которая применяется для запуска триггера.
Редактор объектов
Возьмем за основу способность "Удар грома" или любую другую активную способность без указания цели, также следует знать, что на основе одного и того же заклинания не стоит делать все нестандартные способности, так как они имеют один и тот же ID приказа (в этом нам бы помогло заклинание "Канал",но о нем в следующей статье), назовем эту способность "Случайность". Для проверки этого заклинания убираем у него затраты маны и перезарядку(ставим 0), еще можно убрать урон и длительность ,если надо конечно же. Далее создадим способность на основе "Пронзающая смерть (враг)", также убираем затраты и перезарядку, по желанию регулируем урон и длительность. Еще создадим способность на основе "Полиморф (враг)" убираем затраты и перезарядку, а также в целях убираем "Враги", "Нейтральные" и "Не герои", регулируем длительность(если надо). Теперь требуется создать героя и дать ему нашу способность "Случайность", также создать дамми-юнита, дадим ему нами созданные способности "Полиморф" и "Пронзающая смерть", уберем возможность атаки, а также уберем модель, для этого прописываем в поле "Графика- Файл модели" значение ".mdl" и не забываем убрать тень и потребление пищи. Все на этом работа в РО закончена, переходим к следующей части.
Редактор Триггеров
Первым делом удаляем триггер с инициализацией ,он нам ни к чему.Создадим триггер и назовем его "Cast" Событием ставим "Боевая единица - Unit Приводит способность в действие" это и будет приводить его в действие, он будет срабатывать каждый раз ,когда кто-то применит способность, а для того, чтобы он срабатывал только когда надо, Условием ставим Ability being cast равно Случайность В итоге получается такой триггер
В Действия первым делом нужно присвоить реальной переменной случайное значение, для того ,чтобы её создать нужно нажать кнопку в виде икса или нажать сочетание клавиш "Ctrl+B", нажмем на зеленый икс или на Ctrl+N, видим окно настройки переменной, дадим переменной название "RandomReal" и поставим тип "Реальная", также можно использовать тип "Целочисленная". Все! Переменная создана, теперь нужно присвоить ей значение, для этого добавляем действие, "Set Variable" Указываем туда нашу переменную и приравниваем ее к Математика- Random Number- Random real number between 0.00 to 100.00
А теперь будем настраивать шанс, я решил ,что у нашего героя при касте способности будет шанс выпустить шипы в разные стороны , либо стать овцой,для этого я и дал юниту-пустышке способности "Полиморф" и "Пронзающая смерть" Чтобы настроить шанс нам пригодится функция "If / Then / Else, Multiple Functions" Добавляем в поле "Если " условие Real Comparison- RandomReal меньше или равно 50 Это значит что шанс на следующее действие равен 50% Теперь указываем действия, я хочу ,чтобы вокруг героя било 6 волн шипов, направленных в разные стороны, тут нам помогут циклы, а для цикла нужно создать целочисленную переменную, повторяем действие по созданию переменных, но сменив название на Cycle и тип переменной на Целочисленная. Добавляем действие For each Integer Cycle, Do Multiple Actions от 1 до 6, если вы хотите не 6 волн, можете сменить В действиях цикла указываем Боевая единица- Create 1 ДаммиЮнит for (Owner of (Triggering unit)) at ((Position of (Triggering unit )) offset by 100.00 towards ((Real(Cycle))x60)degrees) facing Стандартная ориентация зданий degrees Объясню по порядку
1 это собственно количество создаваемых юнитов
2 это тип юнита
3 это игрок ,которому будут принадлежать юниты,
"Owner of (Triggering unit)"это функция ,которая возвращает значение того кому принадлежит юнит активировавший триггер
4 это точка где будет создаваться юнит
"Position of Triggering unit" - точка позиции юнита включившего триггер
"offset by 100.00"это расстояние сдвига от "Position of Triggering unit"
"towards ((Real(Cycle))x60)degrees) "- это направление сдвига, оно будет зависеть от переменной Cycle
5 это поворот создаваемого юнита
Ну вот, дамми созданы теперь нужно их направить, добавляем действие Боевая единица - Issue order targeting a point - Order (Last created unit) to Повелитель могил(Нежить)-Пронзающая смерть ((Position of (Last created Unit)) offset by 100.00 towards (Angle from(Position of (Triggering unit)) to (Position of (Last created unit))) degrees Ну вот! Первый эффект создан, но он полон утечек, в конце ссылка на статью по устранению утечек
Приступаем ко второму эффекту, он намного проще и не требует циклов, В Иначе Добавляем еще один "If / Then / Else, Multiple Functions" Если-УсловияRandomReal больше 50 RandomReal меньше или равно 90 При таких условиях будет 40% шанс превратится в овцу и 10% шанс на то, что ничего не произойдет То-Действия Боевая единица- Create 1 ДаммиЮнит for (Owner of (Triggering unit)) at (Position of (Triggering unit )) facing Стандартная ориентация зданий degrees Боевая единица - Issue order targeting a point - Order (Last created unit) to Волшебница(Альянс)-Полиморф (Triggering unit)
Вот и все первый триггер завершен, хоть и не до конца.
Приступаем ко второму триггеру, ведь нужно же убрать дамми-юнитов для этого пишем такой триггер
Проверяем!
Ссылка на карту - http://www.epicwar.com/maps/232185/.