wraithseeker
Tired.
- Reaction score
- 122
Bring up my Post
private function Move takes nothing returns nothing
local data d = data(GetTimerData(GetExpiredTimer()))
local unit t = GetEnumUnit()
local real ux = GetUnitX(t)
local real uy = GetUnitY(t)
local real angle = Atan2(uy-d.y,ux-d.x)
local real cos = Cos(angle)
local real sin = Sin(angle)
set ux = ux + cos * TIME * d.speed
set uy = uy + sin * TIME * d.speed
call SetUnitPosition(t,ux,uy)
call DestroyEffect(AddSpecialEffect(EFFECT,ux,uy))
endfunction
set d.speed = d.speed + 30
set d.speed = d.speed - 30
scope Dash initializer Init
globals
private constant integer SPELL = 039;A003039;
private constant real TIME = 0.03
private constant real SPEED = 800
endglobals
private struct data
unit caster
unit target
real cos
real sin
real angle
real distance
timer t
static method create takes nothing returns data
local data d = data.allocate()
set d.caster = GetTriggerUnit()
set d.target = GetSpellTargetUnit()
set d.t = NewTimer()
return d
endmethod
method onDestroy takes nothing returns nothing
call ReleaseTimer(.t)
endmethod
endstruct
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELL
endfunction
private function Move takes nothing returns nothing
local data d = data(GetTimerData(GetExpiredTimer()))
local real cx = GetUnitX(d.caster)
local real cy = GetUnitY(d.caster)
local real tx = GetUnitX(d.target)
local real ty = GetUnitY(d.target)
local real angle = Atan2(ty-cy,tx-cx)
local real sin = Sin(angle)
local real cos = Cos(angle)
set cx = cx + cos * TIME * SPEED
set cy = cy + sin * TIME * SPEED
call SetUnitPosition(d.caster,cx,cy)
endfunction
private function Actions takes nothing returns nothing
local data d = data.create()
local real cx = GetUnitX(d.caster)
local real cy = GetUnitY(d.caster)
local real tx = GetUnitX(d.target)
local real ty = GetUnitY(d.target)
local real angle = Atan2(ty-cy,tx-cx)
local real cos = Cos(angle)
local real sin = Sin(angle)
call SetTimerData(d.t,integer (d))
call TimerStart(d.t,0.03,true,function Move)
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddAction( t, function Actions)
call TriggerAddCondition(t,Condition(function Conditions))
endfunction
endscope
if SquareRoot(cx - tx * cx - tx + cy - ty * cy - ty) <= 128 then
call d.destroy()
endif
scope Dash initializer Init
globals
private constant integer SPELL = 039;A003039;
private constant real TIME = 0.03
private constant real SPEED = 800
endglobals
private struct data
unit caster
unit target
real cos
real sin
real angle
real distance
timer t
static method create takes nothing returns data
local data d = data.allocate()
set d.caster = GetTriggerUnit()
set d.target = GetSpellTargetUnit()
set d.t = NewTimer()
return d
endmethod
method onDestroy takes nothing returns nothing
call ReleaseTimer(.t)
endmethod
endstruct
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELL
endfunction
private function Move takes nothing returns nothing
local data d = data(GetTimerData(GetExpiredTimer()))
local real cx = GetUnitX(d.caster)
local real cy = GetUnitY(d.caster)
local real tx = GetUnitX(d.target)
local real ty = GetUnitY(d.target)
local real angle = Atan2(ty-cy,tx-cx)
local real sin = Sin(angle)
local real cos = Cos(angle)
set cx = cx + cos * TIME * SPEED
set cy = cy + sin * TIME * SPEED
call SetUnitPosition(d.caster,cx,cy)
if SquareRoot(cx - tx * cx - tx + cy - ty * cy - ty) <= 128 then
call d.destroy()
endif
endfunction
private function Actions takes nothing returns nothing
local data d = data.create()
local real cx = GetUnitX(d.caster)
local real cy = GetUnitY(d.caster)
local real tx = GetUnitX(d.target)
local real ty = GetUnitY(d.target)
local real angle = Atan2(ty-cy,tx-cx)
local real cos = Cos(angle)
local real sin = Sin(angle)
call SetTimerData(d.t,integer (d))
call TimerStart(d.t,0.03,true,function Move)
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddAction( t, function Actions)
call TriggerAddCondition(t,Condition(function Conditions))
endfunction
endscope
(cx - tx * cx - tx + cy - ty * cy - ty)
// Change to:
((cx - tx) * (cx - tx) + (cy - ty) * (cy - ty))
scope Dash initializer Init
globals
private constant integer SPELL = 039;A003039;
private constant real TIME = 0.03
private constant real SPEED = 800
private boolexpr Check
endglobals
private function DISTANCE takes integer level returns integer
return level * 250
endfunction
private struct data
unit caster
unit target
real cos
real sin
real angle
real distance
timer t
timer h
group g
static method create takes nothing returns data
local data d = data.allocate()
set d.caster = GetTriggerUnit()
set d.target = GetSpellTargetUnit()
set d.t = NewTimer()
set d.h = NewTimer()
set d.distance = DISTANCE(GetUnitAbilityLevel(d.caster,SPELL))
set d.g = CreateGroup()
return d
endmethod
method onDestroy takes nothing returns nothing
call ReleaseTimer(.h)
endmethod
endstruct
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELL
endfunction
private function KnockCheck takes nothing returns boolean
return true
endfunction
private function Knock takes nothing returns nothing
local data d = data(GetTimerData(GetExpiredTimer()))
local real cx = GetUnitX(d.caster)
local real cy = GetUnitY(d.caster)
local real tx = GetUnitX(d.target)
local real ty = GetUnitY(d.target)
local real angle = Atan2(ty-cy,tx-cx)
local real sin = Sin(angle)
local real cos = Cos(angle)
set tx = tx + cos * TIME * SPEED
set ty = ty + sin * TIME * SPEED
call SetUnitX(d.target,tx)
call SetUnitY(d.target,ty)
set d.distance = d.distance - TIME * SPEED
if d.distance <= 0 then
call d.destroy()
endif
endfunction
private function Move takes nothing returns nothing
local data d = data(GetTimerData(GetExpiredTimer()))
local real cx = GetUnitX(d.caster)
local real cy = GetUnitY(d.caster)
local real tx = GetUnitX(d.target)
local real ty = GetUnitY(d.target)
local real angle = Atan2(ty-cy,tx-cx)
local real sin = Sin(angle)
local real cos = Cos(angle)
local unit u
local real x
local real y
local real angles
local real sins
local real coss
set cx = cx + cos * TIME * SPEED
set cy = cy + sin * TIME * SPEED
call SetUnitX(d.caster,cx)
call SetUnitY(d.caster,cy)
call GroupEnumUnitsInRange(d.g,cx,cy,180,Check)
loop
set u = FirstOfGroup(d.g)
exitwhen d.g == null
set x = GetUnitX(u)
set y = GetUnitY(u)
set angles = Atan2(cy-y,cx-x)
set sins = Sin(angles)
set coss = Cos(angles)
set x = cx + coss * TIME * SPEED
set y = cy + sins * TIME * SPEED
call SetUnitX(u,x)
call SetUnitY(u,y)
call GroupRemoveUnit(d.g,u)
endloop
if SquareRoot((cx - tx) * (cx - tx) + (cy - ty) * (cy - ty)) <= 128 then
call SetUnitAnimation(d.caster, "attack slam alternate")
call SetUnitAnimation(d.target, "DEATH")
call ReleaseTimer(d.t)
call SetTimerData(d.h,integer (d))
call TimerStart(d.h,0.03,true,function Knock)
endif
endfunction
private function Actions takes nothing returns nothing
local data d = data.create()
call SetTimerData(d.t,integer (d))
call TimerStart(d.t,0.03,true,function Move)
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddAction( t, function Actions)
call TriggerAddCondition(t,Condition(function Conditions))
set Check = Condition(function KnockCheck)
endfunction
endscope
call GroupEnumUnitsInRange(d.g,cx,cy,180,Check)
loop
set u = FirstOfGroup(d.g)
exitwhen d.g == null
set x = GetUnitX(u)
set y = GetUnitY(u)
set angles = Atan2(cy-y,cx-x)
set sins = Sin(angles)
set coss = Cos(angles)
set x = cx + coss * TIME * SPEED
set y = cy + sins * TIME * SPEED
call SetUnitX(u,x)
call SetUnitY(u,y)
call GroupRemoveUnit(d.g,u)
endloop
exitwhen d.g == null // this is your group.
// I think what you meam is exitwhen u==null