Я расскажу как сделать движение юнита,снаряда(дамми) Конечно можно сделать это на ГУИ , но еще проще делается на Джасе с Гуем сразу. В корень карты нужно кинуть вот такой кодик.
Code
function Speed takes unit u, real a returns nothing call SetUnitX(u,GetUnitX(u)+70*CosBJ(a)) call SetUnitY(u,GetUnitY(u)+70*SinBJ(a)) endfunction
Тут все просто меняется
Code
function Speed takes unit u, real a returns nothing - Функция Speed берет юнита u,реальную а , ничего не возвращает. call SetUnitX(u,GetUnitX(u)+70(скорость)*CosBJ(a )) call SetUnitY(u,GetUnitY(u)+70(скорость)*SinBJ(a ))
Что вам надо Надо создать две глобальные переменные Например я создал UH - боевая еденица AH - реальная. С этим поконченно. Теперь создадим тригер Speed Событие- каждые 0.04 секунды Действие - Установить AH = Угол поворота(Переключающий юнит) Custom Script: call Speed(udg_AH,udg_UH) Теперь другой тригер Событие - Юнит приводит способность в действие Условие - спелл = Ускорение(так я назвал свой спелл) Действие - Установить UH = Переключающий юнит() Установить AH = Угол поворота(Переключающий юнит) Включить тригер Speed Ждать 10 секунд Выключить тригер Speed //============================================= И так что же у нас получилось? Когда герой использует спелл - Ускорение Запускается тригер устанавливающий Угол поворота Юнита(куда он смотрел во время каста) и самого юнита. После включает тригер который каждые 0.04 секунды двигает юнита и устанавливает угол поворота заного! Т.е во время движения вы сможете еще и управлять юнитом!(чтобы убрать это уберите в тригере speed установление переменной) И в конце - спустя 10 секунд герой остановиться! (Скорость во время движения узнаётся из функции - помните у меня скорости были 70 и 70 (умножде их друг на друга = скорость)) Карта пример внизу. Как не вылететь за карту! При использовании таково метода движения юнита есть вероятность что он вылетит за карту(За её границы) Есть способ на джассе как этого избежать , но у меня есть способ по понятнее(на ГУЕ) И так по всем границам карты Раставьте 4-е Региона(сделайте по границам квадрат из регионов(см.карту пример)) И Сделайте простой тригер Событие - Юнит входит в область 1-н Юнит входит в область 2-а Юнит входит в область 3-и Юнит входит в область 4-е Действие - Двигать юнита(переключающий юнит) в центр карты(например) Вот и все!...
Примечание* в карте примере у меня в корне карты вот такой код вместо того что я показал вам в начале.
Code
function Speed takes unit u, real a returns nothing call SetUnitX(u,GetUnitX(u)+70*CosBJ(a)) call SetUnitY(u,GetUnitY(u)+70*SinBJ(a)) endfunction
function Fire takes unit s, real d returns nothing call SetUnitX(s,GetUnitX(s)+20*CosBJ(d)) call SetUnitY(s,GetUnitY(s)+20*SinBJ(d)) endfunction
function Jump takes unit z, real x returns nothing call SetUnitX(z,GetUnitX(z)+60*CosBJ(x)) call SetUnitY(z,GetUnitY(z)+60*SinBJ(x)) endfunction
Это код на 3 разных спелла вам же нужен самый верхний - начинается
Code
function Speed takes unit u, real a returns nothing
Так же в карте примери в тригере чтобы не вылететь за карту тоже чуть чуть другой. Там if/then/elsev - т.к у меня есть спелл там на снаряд и мне надо чтобы долетев до края карты он уничтожался(он не так важен как герой - согласитесь) * Так же чтобы не вылететь за карту можно в тригере speed устанавливать точку юнита(незабывайте её удалять и обнулять )
Code
call RemoveLocation(имя переменной) set имя переменной = null
И тогда можно при поподении на край границы двигать юнита в последнюю точку где он был. (Правдо я незнаю как это выглядит)
Code
function RectX takes real x returns real local real xm = GetRectMinX(bj_mapInitialPlayableArea)+50 if(x<xm)then return xm endif set xm = GetRectMaxX(bj_mapInitialPlayableArea)-50 if(x>xm)then return xm endif return x endfunction
function RectY takes real y returns real local real ym = GetRectMinY(bj_mapInitialPlayableArea)+50 if(y<ym)then return ym endif set ym = GetRectMaxY(bj_mapInitialPlayableArea)-50 if(y>ym)then return ym endif return y endfunction