Добавлен Amer90
Всем привет! Помогите пожалуйста долетать умение
Нужно что бы после каста юнит перелетел через кастующего и приземлился за спину
прикрепляю совой работу
Нужно что бы после каста юнит перелетел через кастующего и приземлился за спину
прикрепляю совой работу
Принятый ответ
Нашел пример переделал под себя, прикрепляю возможно кому пригодится =)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Нужно двигать юнита таймером, каждые 0.03125 или 0.02 сек. (что эквивалентно 32 и 50 раз в секунду соответственно) и так же менять ему высоту, с помощью функции пораболы. Неплохо было бы еще проверять не умер ли юнит пока летит, многие манипуляции с мертвыми юнитами могут закончится багами или фатальными ошибками (игра вылетит на рабочий стол).
Если вы пока не знаете что такое jass, а на гуи (триггеры) вы только только начинаете, нестоит делать такие способности, для вас это пока сложновато.
Для начала нужно:
Flyout takes unit u, real dir, real angle... - я уже не помню из головы, что и в каком порядке там указывается.
Единственное, там в конце списка takes стоит integer checksolid - сотри к чертям этот кусочек, а также в самой функции сотри условие с этим интегером. У меня в карте есть понятие "несдвигаемый" - так вот это для них спец. настроечка. Тебе она будет не нужна)
А потом тебе нужно будет просто отбросить этой функцией юнита в направлении цели, на расстояние между юнит---цель и с нужной тебе высотой. Разве что, один момент тебе обьясню, на случай если ты совсем слаб:
Если хочешь чтобы время полета зависело от расстояния, то тебе нужно будет время указать как "расстояние/скорость"(скорость из головы берешь, по примеру снарядов из РО. 900 например), а если время указать статичное, то это позволит тебе через wait game time потом еще эффект в точке приземления создать.
Вот:
Подредактировал за тебя
private function MoveUnit takes unit u, real spd, real dir returns nothing
if IsTerrainPathable(GetUnitX(u),GetUnitY(u)+spd*Sin(dir),PATHING_TYPE_FLYABILITY)==false
SetUnitY(u,GetUnitY(u)+spd*Sin(dir))
endif
if IsTerrainPathable(GetUnitX(u)+spd*Cos(dir),GetUnitY(u),PATHING_TYPE_FLYABILITY)==false
SetUnitX(u,GetUnitX(u)+spd*Cos(dir))
endif
set u = null
endfunction
return (4 * h / d) * (d - x) * (x / d)
endfunction
private struct MUE_Struct
private static timer t = CreateTimer()
private static integer m[]
private static integer MUI = -1
unit c
real dist
integer check
real r
real r2 = 0
real fly
real rmax
real sr
real a
private method StopAction takes integer j returns nothing
set m[j] = m[MUI]
set MUI = MUI - 1
if MUI <= -1 then
call PauseTimer(t)
set MUI = -1
endif
endmethod
local thistype this
local integer i = 0
loop
exitwhen i > MUI
set this = m[i]
if r<rmax then
set r = r + 0.01
MoveUnit(c,dist,a)
if check == 1 then
SetUnitFlyHeight(c,Parabola(fly,sr,r2),0)
set r2 = r2+dist
endif
else
if check == 1 then
UnitAddAbility(c,'Arav')
UnitRemoveAbility(c,'Arav')
endif
set c = null
call StopAction(i)
call destroy()
endif
set i = i + 1
endloop
endmethod
local thistype this = thistype.create()
set MUI = MUI + 1
set m[MUI] = this
set c = NewC
set r = 0
set rmax = NewRmax
set dist = NewDist
set sr = NewDist
set dist = (dist/(rmax*100))
set check = NewCheck
set fly = NewFly
set r2= 0
set a = NewA
if MUI == 0 then
call TimerStart(t, 0.01, true, function thistype.Loop)
endif
set NewC = null
endmethod
endstruct
call MUE_Struct.MUE_Start(c,distance,timeformoving,angle*bj_DEGTORAD,checkingfly,flyheight)
c = null
endfunction
endlibrary
Еще раз, высоту регулируют как и перемещение таймером, перемещая по координатам.