Статья рассчитана на человека, достаточно знающего основы Jass. В этой статье я хочу вам рассказать о jass спеллах, как они делаются, и какова их логика. Давайте, рассмотрим заклинание blink, или "скачок". Для простых игроков, это просто спелл. Но, если мы вдумаемся, как он построен. Это не просто одна строчка кода вроде
Code
cast(blink)
Нееет, совсем нет. Что делает наш герой при касте спелла? Первое, он перемещается на точку указанную при касте и второе, воспроизводится спецэффект. Для реализации этого заклинания на Jass нам нужен спелл-пустышка, с кастом на точку. Начинающий Jass'ер, конечно же, для перемещения юнита написал бы что-то вроде того:
Нет, друзья мои, это не верно. Локи, это конечно лучше регионов, но не айс. Исправляем всё это дело на X/Y:
Code
local real loc_x = GetSpellTargetX() local real loc_y = GetSpellTargetY() call SetUnitX(GetTriggerUnit(), loc_x) call SetUnitY(GetTriggerUnit(), loc_y)
Тааак, уже лучше. Займёмся спецэффектом. Путь его, как выяснилось - Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl. Добавим же его!
Прелестно. Как бы нам ещё тут подоформить... Пожалуй, можно в локалку занести юнита. Заносим. Получаем такой код:
Code
local real loc_x = GetSpellTargetX() local real loc_y = GetSpellTargetY() call SetUnitX(GetTriggerUnit(), loc_x) call SetUnitY(GetTriggerUnit(), loc_y) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl", loc_x, loc_y))
Займёмся прочей начинкой триггера. Событие у нас, конечно, должно быть - каст спелла-пустышки. Подкорректируем нижнюю часть:
Code
function InitTrig_blinkspell takes nothing returns nothing set gg_trg_blinkspell = CreateTrigger( ) call TriggerAddCondition( gg_trg_blinkspell, Condition( function blink_cond ) ) call TriggerRegisterAnyUnitEventBJ( gg_trg_blinkspell, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddAction( gg_trg_blinkspell, function blinkspell ) endfunction
Здесь мы просто проверяем ID спелла. На выходе имеем вобщем такой триггер: Разберём теперь пример спелла потрудней. Скажем, пусть это будет громовая поступь. статью допишу, сейчас нету времени
local real loc_x = GetSpellTargetX() local real loc_y = GetSpellTargetY() local unit u = GetTriggerUnit() call SetUnitX(u,loc_x) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl",loc_x,loc_y))
А в нем ты забыл установить Y, вот я и подумал, что один раз.
сыровато и коротковато, новичкам ничего нового не будет, это же элементарно, кто не догадается что при касте блинка мы тп? другое дело описать новичкам все jass функции, разбив их на категории, это было бы полезно(имхо)
Кстати в способности "Скачок" не совсем так. Выбирается точка, можно выбрать в радиусе 99999 и герой приближается на нужную дистанцию, указанную в характеристиках способности, а не в точку применения способности.