Всем привет! Помогите пожалуйста долетать умение
Нужно что бы после каста юнит перелетел через кастующего и приземлился за спину
прикрепляю совой работу

Принятый ответ

Нашел пример переделал под себя, прикрепляю возможно кому пригодится =)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
7
6 лет назад
0
Посмотри в опен-доте как сделан скилл "Toss" у Тини.
0
32
6 лет назад
0
Amer90, это не будет так работать как вы это пытались сделать, никакие вейты вам не помогут.
Нужно двигать юнита таймером, каждые 0.03125 или 0.02 сек. (что эквивалентно 32 и 50 раз в секунду соответственно) и так же менять ему высоту, с помощью функции пораболы. Неплохо было бы еще проверять не умер ли юнит пока летит, многие манипуляции с мертвыми юнитами могут закончится багами или фатальными ошибками (игра вылетит на рабочий стол).
Если вы пока не знаете что такое jass, а на гуи (триггеры) вы только только начинаете, нестоит делать такие способности, для вас это пока сложновато.
Для начала нужно:
  1. оглушить или паузить юнита при полете, т.к он сможет ходить и это будет некрасиво.
  2. перемещать юнита по коордиантам отключив ему коллизию, чтобы не стопил других юнитов и не застревал в скалах, деревьях.
  3. сделать приземление с учетом непроходимости некоторых мест, т.е чтобы юнита не могли закинуть на гору или в яму, он должен упать рядом, или это будет очень действовать на нервы игроков.
Могу показать пример на jass, но если вы заядлый гуишник - увы, ищите милису или читайте стати, создание простого стомп спелла кажется называется...
0
19
6 лет назад
0
Я недавно задавал вопрос про "фикс структуры". Там я прикрепил vJass структуру с откидыванием юнита. Думаю она тебе подойдет в твоем случае. Просто копируешь её в шапку карты, а потом вызываешь функцией call Flyout() - в скобках нужно будет прописать параметры в соответствии с теми, что прописаны в самой функции(она в самом низу структуры), что то типа:
Flyout takes unit u, real dir, real angle... - я уже не помню из головы, что и в каком порядке там указывается.
Единственное, там в конце списка takes стоит integer checksolid - сотри к чертям этот кусочек, а также в самой функции сотри условие с этим интегером. У меня в карте есть понятие "несдвигаемый" - так вот это для них спец. настроечка. Тебе она будет не нужна)
А потом тебе нужно будет просто отбросить этой функцией юнита в направлении цели, на расстояние между юнит---цель и с нужной тебе высотой. Разве что, один момент тебе обьясню, на случай если ты совсем слаб:
Если хочешь чтобы время полета зависело от расстояния, то тебе нужно будет время указать как "расстояние/скорость"(скорость из головы берешь, по примеру снарядов из РО. 900 например), а если время указать статичное, то это позволит тебе через wait game time потом еще эффект в точке приземления создать.
Вот:
Подредактировал за тебя
library Flyout
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
private function Parabola takes real h, real d, real x returns real
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
private static method Loop takes nothing returns nothing
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
public static method MUE_Start takes unit NewC, real NewDist,real NewRmax, real NewA,integer NewCheck,real NewFly returns nothing
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
function Flyout takes unit c,real distance,real timeformoving,real angle,integer checkingfly,real flyheight returns nothing
call MUE_Struct.MUE_Start(c,distance,timeformoving,angle*bj_DEGTORAD,checkingfly,flyheight)
c = null
endfunction
endlibrary
Просто вписываешь Flyout(юнит,дистанция,направление,лететь?(0/1),высота полета)
2
3
6 лет назад
2
Нашел пример переделал под себя, прикрепляю возможно кому пригодится =)
Загруженные файлы
Принятый ответ
1
32
6 лет назад
1
Amer90, Ненужно юзать это гомно с вейтами и утечками, это никому не пригодится более того нормально работать не будет...
Еще раз, высоту регулируют как и перемещение таймером, перемещая по координатам.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.