В таймере не работают Get...Ololo(), их нужно сохранять в хэш перед запуском. И лучше юзать не точки, а их координаты, есть простая геометрическая формула расчета расстояния между координатами
В таймере не работают Get...Ololo(), их нужно сохранять в хэш перед запуском. И лучше юзать не точки, а их координаты, есть простая геометрическая формула расчета расстояния между координатами
ага ясно. спасибо, сейчас все сделаю.
Привет и добро пожаловать в клуб альцгеймера. Правило №1. Привет и добро пожаловать в клуб альцгеймера.
function Trig_Jass_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'A009' ) ) then return false endif return true endfunction
function timer1 takes nothing returns nothing local timer t = GetExpiredTimer() local integer i = GetHandleId(t) local unit d = LoadUnitHandle(udg_H, i,1) local real a = LoadReal(udg_H, i,2) local real b = LoadReal(udg_H,i, 3) local real x = GetWidgetX(d) local real y = GetWidgetY(d) local real q = 0.0 local real w = 0.0 if IsUnitType(d, UNIT_TYPE_DEAD) == false then call SetUnitX(d, x+40.0*Cos(a)) call SetUnitY(d, y+40.0*Sin(a)) set q = x set w = y else call DisplayTextToPlayer(GetOwningPlayer(d),0.,0.,"So Close") set d = null call DestroyTimer(t) call FlushChildHashtable(udg_H, i) endif if q >= LoadReal(udg_H,i,4) and w>=LoadReal(udg_H,i,5) then call DisplayTextToPlayer(GetOwningPlayer(d), 0.,0., "ЙЕСС") call KillUnit(d) set d = null call DestroyTimer(t) call FlushChildHashtable(udg_H, i) endif endfunction
function Trig_Jass_Actions takes nothing returns nothing local unit u = GetSpellAbilityUnit() local real x = GetUnitX(u) local real y = GetUnitY(u) local real tx = GetLocationX(GetSpellTargetLoc()) local real ty = GetLocationY(GetSpellTargetLoc()) local real a = Atan2(ty-y, tx-x) local real b = SquareRoot((tx-x)*(tx-x)+(ty-y)*(ty-y)) local timer t = CreateTimer() local integer i = GetHandleId(t) local unit d = CreateUnitAtLoc(GetOwningPlayer(u), 'e00A', GetUnitLoc(u),a*bj_RADTODEG) call SetUnitScalePercent(d, 200,200,200) call UnitApplyTimedLife(d, 'BTLF', 2.0) call SaveUnitHandle(udg_H, i, 1, d) call SaveReal(udg_H, i , 4, tx) call SaveReal(udg_H, i,5,ty) call SaveReal(udg_H, i,2,a) call SaveReal(udg_H,i,3,b) call TimerStart(t, 0.05,true, function timer1) set d=null set t=null set u=null endfunction
//=========================================================================== function InitTrig_Jass takes nothing returns nothing set gg_trg_Jass = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Jass, EVENT_PLAYER_UNIT_SPELL_CHANNEL ) call TriggerAddCondition( gg_trg_Jass, Condition( function Trig_Jass_Conditions ) ) call TriggerAddAction( gg_trg_Jass, function Trig_Jass_Actions ) endfunction[/hide]
Привет и добро пожаловать в клуб альцгеймера. Правило №1. Привет и добро пожаловать в клуб альцгеймера.
function Trig_Jass_Conditions takes nothing returns boolean return GetSpellAbilityId()=='A009' endfunction
function Trig_Jass_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer i = GetHandleId(t) local unit d = LoadUnitHandle(udg_H, i, 0) local real a = LoadReal(udg_H, i, 1) local real b = LoadReal(udg_H, i, 2) local real tx = LoadReal(udg_H, i, 3); local real ty = LoadReal(udg_H, i, 4); local real x = GetWidgetX(d) local real y = GetWidgetY(d) if IsUnitType(d, UNIT_TYPE_DEAD) == false then call SetUnitX(d, x+40.0*Cos(a)) call SetUnitY(d, y+40.0*Sin(a)) else call DisplayTextToPlayer(GetOwningPlayer(d),0.,0.,"So Close") call DestroyTimer(t) call FlushChildHashtable(udg_H, i) endif if q >= tx and w>=ty then call DisplayTextToPlayer(GetOwningPlayer(d), 0.,0., "ЙЕСС") call KillUnit(d) call DestroyTimer(t) call FlushChildHashtable(udg_H, i) endif set t = null set d = null //обнуляем в любом случае!!! endfunction
function Trig_Jass_Actions takes nothing returns nothing local unit u = GetSpellAbilityUnit() local real x = GetUnitX(u) local real y = GetUnitY(u) local real tx = GetSpellTargetX() local real ty = GetSpellTargetY() local real a = Atan2(ty-y, tx-x) local real b = SquareRoot((tx-x)*(tx-x)+(ty-y)*(ty-y)) local timer t = CreateTimer() local integer i = GetHandleId(t) local unit d = CreateUnit(GetOwningPlayer(u), 'e00A', x, y, a*57.29578) call SetUnitScale(d, 2.0, 2.0, 2.0) call UnitApplyTimedLife(d, 'BTLF', 2.0) call SaveUnitHandle(udg_H, i, 0, d) call SaveReal(udg_H, i, 1, a) call SaveReal(udg_H, i, 2, b) call SaveReal(udg_H, i, 3, tx) call SaveReal(udg_H, i, 4, ty) call TimerStart(t, 0.05, true, function Trig_Jass_Timer) set d=null set t=null set u=null endfunction
//=========================================================================== function InitTrig_Jass takes nothing returns nothing set gg_trg_Jass = CreateTrigger() call TriggerRegisterAnyUnitEventBJ( gg_trg_Jass, EVENT_PLAYER_UNIT_SPELL_CHANNEL ) call TriggerAddCondition( gg_trg_Jass, Condition( function Trig_Jass_Conditions ) ) call TriggerAddAction( gg_trg_Jass, function Trig_Jass_Actions ) endfunction