Frizz.Meister
New Member
- Reaction score
- 0
Dummy unit dies instantly when spell is cast.
A dummy unit dies instantly when spell is cast. My spell is a glaive being thrown(point targeted) and when it strikes a target the dummy unit (glaive) should die and the target should take damage. I know it sounds simple but i cannot work out why my dummy unit dies on what appears to be the first timer callback. Any help?
If it helps anyone it is like dota elunes arrow spell but with out the stun.
CODE:
A dummy unit dies instantly when spell is cast. My spell is a glaive being thrown(point targeted) and when it strikes a target the dummy unit (glaive) should die and the target should take damage. I know it sounds simple but i cannot work out why my dummy unit dies on what appears to be the first timer callback. Any help?
If it helps anyone it is like dota elunes arrow spell but with out the stun.
CODE:
JASS:
function Trig_Throw_Glaive_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 039;A002039; ) ) then
return false
endif
return true
endfunction
function Distancecheck takes nothing returns boolean
if ( not ( DistanceBetweenPoints(GetUnitLoc(GetLastCreatedUnit()), GetSpellTargetLoc()) < 1600.00 ) ) then
return false
endif
return true
endfunction
function buildingcheck takes nothing returns boolean
return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false )
endfunction
function enemycheck takes nothing returns boolean
return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == true )
endfunction
function glaive1stand takes nothing returns boolean
return GetBooleanAnd( buildingcheck(), enemycheck() )
endfunction
function Targetcheck takes nothing returns boolean
if ( not ( CountUnitsInGroup(GetLastCreatedGroup()) > 0 ) ) then
return false
endif
return true
endfunction
function glaivedeadcheck takes nothing returns boolean
return (IsUnitDeadBJ(udg_Glaive[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]) == true)
endfunction
function Glaive_Movement takes nothing returns nothing
local group gr
local timer t = GetExpiredTimer()
local unit u = GetHandleUnit(t, "u")
local unit g = GetHandleUnit(t, "g")
local unit h
if ( Distancecheck() ) then
call SetUnitPositionLoc(g, PolarProjectionBJ(GetUnitLoc(g),10,udg_Glaiveangle[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]))
set gr=GetUnitsInRangeOfLocMatching(80.00, GetUnitLoc(GetLastCreatedUnit()), Condition(function glaive1stand))
if ( Targetcheck() ) then
call KillUnit( g )
set h=GroupPickRandomUnit(GetLastCreatedGroup())
call UnitDamageTargetBJ( u, h, 21.00, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL )
else
endif
set gr=null
else
call KillUnit( g )
endif
set h=null
set gr=null
set g=null
set u=null
endfunction
function Trig_Throw_Glaive_Actions takes nothing returns nothing
local unit u=GetTriggerUnit()
local unit g
local timer t=CreateTimer()
set udg_GlaiveThrower[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=GetUnitLoc(GetTriggerUnit())
set udg_GlaiveTarget[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=GetSpellTargetLoc()
set udg_Glaiveangle[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=AngleBetweenPoints(GetUnitLoc(u), udg_GlaiveTarget[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))])
call CreateNUnitsAtLoc(1,039;n001039;,GetOwningPlayer(GetTriggerUnit()),PolarProjectionBJ(GetUnitLoc(GetTriggerUnit()),75.00,udg_Glaiveangle[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]),udg_Glaiveangle[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))])
set g=GetLastCreatedUnit()
call SetHandleHandle(t, "u", u)
call SetHandleHandle(t, "g", g)
set udg_Glaive[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=g
call TimerStart(t, 0.01, true, function Glaive_Movement)
loop
exitwhen ( glaivedeadcheck() )
call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 0.20))
endloop
call DestroyTimer(t)
call FlushHandleLocals(t)
set t=null
set g=null
set u=null
endfunction
//===========================================================================
function InitTrig_Throw_Glaive takes nothing returns nothing
set gg_trg_Throw_Glaive = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Throw_Glaive, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Throw_Glaive, Condition( function Trig_Throw_Glaive_Conditions ) )
call TriggerAddAction( gg_trg_Throw_Glaive, function Trig_Throw_Glaive_Actions )
endfunction