function Trig_Jump_Conditions takes nothing returns boolean return GetSpellAbilityId()=='A000' endfunction function Trig_Jump_Timer takes nothing returns nothing local timer t=GetExpiredTimer() local integer id=GetHandleId(t) local unit u=LoadUnitHandle(Hash,id,0) local real xu=LoadReal(Hash,id,1) local real yu=LoadReal(Hash,id,2) local real dist=LoadReal(Hash,id,3) local real time=LoadReal(Hash,id,4)+1. local real height call SetUnitFlyHeight(u,height,10000.) call SetUnitX(u,dist*Cos(GetUnitFacing(u))) call SetUnitY(u,dist*Sin(GetUnitFacing(u))) if time<20. then set height=height+15. endif if time<40. then set height=height+5. endif if time>=40. then set height=height-5. endif if time>=60. then set height=height-10. endif if time>=80. then call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(Hash,id) call SetUnitPathing(u,false) call PauseUnit(u,false) call SetUnitX(u,xu+dist*Cos(GetUnitFacing(u))) call SetUnitY(u,yu+dist*Sin(GetUnitFacing(u))) endif endfunction function Trig_Jump_Actions takes nothing returns nothing local timer t=CreateTimer() local unit u=GetTriggerUnit() local integer id=GetHandleId(t) local real dx=GetSpellTargetX()-GetWidgetX(u) local real dy=GetSpellTargetY()-GetWidgetY(u) call PauseUnit(u,false) call SetUnitAnimation(u,"Attack Slam") call UnitAddAbility(u,'Arav') call UnitRemoveAbility(u,'Arav') call SetUnitPathing(u,true) call SaveUnitHandle(Hash,id,0,u) call SaveReal(Hash,id,1,GetWidgetX(u)) call SaveReal(Hash,id,2,GetWidgetY(u)) call SaveReal(Hash,id,3,SquareRoot(dx*dx+dy*dy)/80.) call SaveReal(Hash,id,4,0.) call TimerStart(t,.05,true,function Trig_Jump_Timer) set t=null set u=null endfunction
проблема в том,что юнит не движеться и даже не меняет свою высоту... Дела прыжок по дуге) Hash=иницилизрован
Manko_O, да,ты правильно понял,но нчиего этого нет)
Code
function Trig_Jump_Conditions takes nothing returns boolean return GetSpellAbilityId()=='A000' endfunction function Trig_Jump_Timer takes nothing returns nothing local timer t=GetExpiredTimer() local integer id=GetHandleId(t) local unit u=LoadUnitHandle(Hash,id,0) local real xu=LoadReal(Hash,id,1) local real yu=LoadReal(Hash,id,2) local real dist=LoadReal(Hash,id,3) local real time=LoadReal(Hash,id,4)+1. local real height=LoadReal(Hash,id,5) call SetUnitFlyHeight(u,height,10000.) call SetUnitX(u,dist*Cos(GetUnitFacing(u)*bj_DEGTORAD)) call SetUnitY(u,dist*Sin(GetUnitFacing(u)*bj_DEGTORAD)) if time<20. then set height=height+15. endif if time<40. then set height=height+5. endif if time>=40. then set height=height-5. endif if time>=60. then set height=height-10. endif if time>=80. then call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(Hash,id) call SetUnitPathing(u,true) call PauseUnit(u,false) call SetUnitX(u,xu+dist*Cos(GetUnitFacing(u))) call SetUnitY(u,yu+dist*Sin(GetUnitFacing(u))) endif endfunction function Trig_Jump_Actions takes nothing returns nothing local timer t=CreateTimer() local unit u=GetTriggerUnit() local integer id=GetHandleId(t) local real dx=GetSpellTargetX()-GetWidgetX(u) local real dy=GetSpellTargetY()-GetWidgetY(u) call PauseUnit(u,false) call SetUnitAnimation(u,"Attack Slam") call UnitAddAbility(u,'Arav') call UnitRemoveAbility(u,'Arav') call SetUnitPathing(u,false) call SaveUnitHandle(Hash,id,0,u) call SaveReal(Hash,id,1,GetWidgetX(u)) call SaveReal(Hash,id,2,GetWidgetY(u)) call SaveReal(Hash,id,3,SquareRoot(dx*dx+dy*dy)/80.) call SaveReal(Hash,id,4,0.) call SaveReal(Hash,id,5,0.) call TimerStart(t,.05,true,function Trig_Jump_Timer) set t=null set u=null endfunction
так сделал теперь он тупо тп в центр карты. при повторном использовании он свнова на месте играет анимку.
function Jump takes nothing returns nothing local timer t=GetExpiredTimer() local integer h = GetHandleId(t) local unit u=LoadUnitHandle(udg_Hash,h,1) local real a = LoadReal(udg_Hash,h,2) local integer i = LoadInteger(udg_Hash,h,3)-1 local real fl = LoadReal(udg_Hash,h,4) local integer dis = LoadInteger(udg_Hash,h,5) local real x = GetUnitX(u)+50.*Cos(a) local real y = GetUnitY(u)+50.*Sin(a) if RectContainsCoords(bj_mapInitialPlayableArea,x,y) then if i > dis/2 then set fl = fl + 30 call SetUnitFlyHeight(u,fl,0) call SetUnitX(u,x) call SetUnitY(u,y) else set fl = fl - 30 call SetUnitFlyHeight(u,fl,0) call SetUnitX(u,GetUnitX(u)+50.*Cos(a)) call SetUnitY(u,GetUnitY(u)+50.*Sin(a)) endif else set i = 0 endif
if i == 0 then call SetUnitFlyHeight(u,0,0) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl",GetUnitX(u),GetUnitY(u))) call TerrainDeformCrater(GetUnitX(u),GetUnitY(u),200,100,5,false) call PauseTimer(t) call FlushChildHashtable(udg_Hash,h) call DestroyTimer(t) else call SaveInteger(udg_Hash,h,3,i) call SaveReal(udg_Hash,h,4,fl) endif endfunction
function Trig_SpellJump_Actions takes nothing returns nothing local timer t = CreateTimer() local integer h = GetHandleId(t) local unit u = GetSpellAbilityUnit() local real x = GetUnitX(u) local real y = GetUnitY(u) local real x2 = GetSpellTargetX() local real y2 = GetSpellTargetY() local integer dis = R2I(SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2))) local real a = Atan2(y2-y,x2-x) call UnitAddAbility(u,'Aave' ) call UnitRemoveAbility(u,'Aave' ) if dis < 100 then set dis = dis + 100 endif call SaveUnitHandle(udg_Hash,h,1,u) call SaveReal(udg_Hash,h,2,a) call SaveInteger(udg_Hash,h,3,dis/50) call SaveReal(udg_Hash,h,4,0) call SaveInteger(udg_Hash,h,5,dis/50) call TimerStart(t,0.03,true,function Jump) endfunction
rixt7956, мм а что атм почеркнуто?Я вообще не понимаю что я делаю(((Голова болит)
Добавлено (18-03-2011, 10:57) --------------------------------------------- От этого нечигео не изменилось. Так скажет что я делаю неправильно? з.ы Полярки зло
Dreii, Я не знаю что ты делаешь но движение реализоваться должно так local unit u=юнит local real x=Loadблаблабла local real y=Loadблаблабла local real f=GetUnitFacing(u)*.0174532 call SetUnitX(x+20*Cos(f)) call SetUnitY(y+20*Sin(f)) call SaveReal(сохранение x) call SaveReal(сохранение y)
так,все вроде летает и двигаеться но,после прыжка он продолжает ехать по земле((
Code
function Trig_Jump_Conditions takes nothing returns boolean return GetSpellAbilityId()=='A000' endfunction function Trig_Jump_Timer takes nothing returns nothing local timer t=GetExpiredTimer() local integer id=GetHandleId(t) local unit u=LoadUnitHandle(Hash,id,0) local real dist=LoadReal(Hash,id,1) local real a=GetUnitFacing(u)*.0174532 local integer count call SetUnitX(u,GetUnitX(u)+dist*Cos(a)) call SetUnitY(u,GetUnitY(u)+dist*Sin(a)) if count>50. then call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(Hash,id) call UnitRemoveAbility(u,'A001') call SetUnitPathing(u,false) call PauseUnit(u,false) else call SetUnitFlyHeight(u,625-(25-count)*(25-count),0.) set count = count + 1 endif set t=null set u=null endfunction function Trig_Jump_Actions takes nothing returns nothing local timer t=CreateTimer() local integer id=GetHandleId(t) local unit u=GetTriggerUnit() local real dx=GetWidgetX(u)-GetSpellTargetX() local real dy=GetWidgetY(u)-GetSpellTargetY() call PauseUnit(u,true) call SetUnitAnimation(u,"Attack Slam" ) call UnitAddAbility(u,'A001') call UnitAddAbility(u,'Amrf') call UnitRemoveAbility(u,'Amrf') call SetUnitPathing(u,false) call SaveUnitHandle(Hash,id,0,u) call SaveReal(Hash,id,1,SquareRoot(dx*dx+dy*dy)/80) call TimerStart(t,.01,true,function Trig_Jump_Timer) set t=null set u=null endfunction
function Trig_Jump_Conditions takes nothing returns boolean return GetSpellAbilityId()=='A000' endfunction function Trig_Jump_Timer takes nothing returns nothing local timer t=GetExpiredTimer() local integer id=GetHandleId(t) local unit u=LoadUnitHandle(Hash,id,0) local real dist=LoadReal(Hash,id,1) local real a=GetUnitFacing(u)*.0174532 local integer count = LoadInteger(Hash,id,2)+1 call SetUnitX(u,GetUnitX(u)+dist*Cos(a)) call SetUnitY(u,GetUnitY(u)+dist*Sin(a)) if count>50. then call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(Hash,id) call UnitRemoveAbility(u,'A001') call SetUnitPathing(u,false) call PauseUnit(u,false) else call SetUnitFlyHeight(u,625-(25-count)*(25-count),0.) call SaveInteger(Hash,id,2,count) endif set t=null set u=null endfunction function Trig_Jump_Actions takes nothing returns nothing local timer t=CreateTimer() local integer id=GetHandleId(t) local unit u=GetTriggerUnit() local real dx=GetWidgetX(u)-GetSpellTargetX() local real dy=GetWidgetY(u)-GetSpellTargetY() call PauseUnit(u,true) call SetUnitAnimation(u,"Attack Slam" ) call UnitAddAbility(u,'A001') call UnitAddAbility(u,'Amrf') call UnitRemoveAbility(u,'Amrf') call SetUnitPathing(u,false) call SaveUnitHandle(Hash,id,0,u) call SaveReal(Hash,id,1,SquareRoot(dx*dx+dy*dy)/80) call SaveInteger(Hash,id,2,0) call TimerStart(t,.01,true,function Trig_Jump_Timer) set t=null set u=null endfunction