cleeezzz
The Undead Ranger.
- Reaction score
- 268
JASS:
library Arrow initializer Init
//=======================================================================
private function Damage takes integer lvl returns real
return 133.33+(66.66*lvl)
endfunction
private function Max_dist takes integer lvl returns real
return 333.33+(666.66*lvl)
endfunction
function CustomFilter takes nothing returns boolean
return IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(Caster)) and GetWidgetLife(GetFilterUnit())>0.405
endfunction
private function CreateArrow takes player ForPlayer, unit Caster, integer DummyID, integer AbilID, real Period, real Damage, real Distance, real Move_Distance, location CastPoint returns nothing
private struct SAD
timer t
unit cast
unit dummy
real castx
real casty
real targx
real targy
real Move_dist
real angle
integer level
group Group1 = CreateGroup()
group Group2 = CreateGroup()
static method create takes nothing returns SAD
local SAD data = SAD.allocate()
set data.cast = Caster
set data.castx = GetUnitX(Caster)
set data.casty = GetUnitY(Caster)
set data.targx = GetLocationX(CastPoint)
set data.targy = GetLocationY(CastPoint)
set data.angle = AngleXY(data.castx,data.casty,data.targx,data.targy)
set data.level = GetUnitAbilityLevel(data.cast, GetSpellAbilityId())
set Caster = data.cast
set data.dummy = CreateUnit(GetOwningPlayer(data.cast), DummyID, PolarProjectionX (data.castx, 10, data.angle), PolarProjectionY (data.casty, 10, data.angle) , Rad2Deg(data.angle))
call SetUnitMoveSpeed(data.dummy, Move_Distance)
set data.Move_dist = GetUnitMoveSpeed(data.dummy)
call SetUnitPathing(data.dummy,false)
call SetUnitScale(data.dummy,Scale,Scale,Scale)
call SetUnitFlyHeight(data.dummy,Fly_height,0.00)
call RemoveLocation(targ)
set targ = null
return data
endmethod
private method onDestroy takes nothing returns nothing
call KillUnit(.dummy)
call GroupClear(.Group1)
call DestroyGroup(.Group1)
call ReleaseTimer(.t)
endmethod
endstruct
//=======================================================================
private function Move takes nothing returns nothing
local SAD data = GetCSData(GetExpiredTimer())
local unit u
local real x = GetUnitX(data.dummy)
local real y = GetUnitY(data.dummy)
set data.Move_dist = GetUnitMoveSpeed(data.dummy)
set data.dist = data.dist + data.Move_dist
if data.dist >= Max_dist(data.level) then
call data.destroy()
return
endif
set x = PolarProjectionX(x, data.Move_dist, data.angle)
set y = PolarProjectionY(y, data.Move_dist, data.angle)
call SetUnitX(data.dummy, SafeX(x))
call SetUnitY(data.dummy, SafeY(y))
call GroupClear(data.Group2)
call GroupEnumUnitsInRange(data.Group2,SafeX(x),SafeY(y),Radius,Condition(function CustomFilter))
loop
set u = FirstOfGroup(data.Group2)
exitwhen u == null
if not(IsUnitInGroup(u,data.Group1)) then
call GroupAddUnit(data.Group1,u)
call UnitDamageTarget(data.cast,u,Damage(data.level),false,false,A_type,D_type,null)
call GroupRemoveUnit(data.Group2,u)
endif
call GroupRemoveUnit(data.Group2,u)
endloop
endfunction
//=======================================================================
private function Actions takes nothing returns nothing
local SAD data = SAD.create()
set data.t = NewTimer()
call TimerStart(data.t,Period,true,function Move)
call SetCSData(data.t,data)
endfunction
//=======================================================================
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == 039;A011039; or GetSpellAbilityId() == 039;A017039;
endfunction
//=======================================================================
private function InitTrig takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(trig,Condition(function Conditions))
call TriggerAddAction(trig,function Actions)
endfunction
endscope
endlibrary
okay so you know how you can create custom functions?
call CreateArrow(Hi,hi,hi,hi)
something like that?
well im trying to convert this trigger so i can easily create an arrow with just a line.
im having a lot of trouble though.
1. am i allowed to use structs in custom functions?