struct Data
real pointX
real pointY
unit summonedUnit
integer heroInt
integer heroLevel
unit triggerUnit
player triggerPlayer
static constant real DAMAGE = 10
method destroy takes nothing returns nothing
call this.deallocate()
set this.summonedUnit = null
set this.triggerUnit = null
set this.triggerPlayer = null
endmethod
endstruct
function WaterOrbCallback takes nothing returns nothing
local timer t = GetExpiredTimer()
local Data data = GetTimerData(t)
local group g = CreateGroup()
local unit u
if GetWidgetLife(data.summonedUnit) > 0 then
call BJDebugMsg(" summoned unit is alive")
call GroupEnumUnitsInRange(g, data.pointX, data.pointY , 150 , null)
loop
set u = FirstOfGroup(g)
exitwhen u == null
if IsUnitAlly(u, data.triggerPlayer) and GetWidgetLife(u) > 0 then
call UnitDamageTarget(data.triggerUnit, u, data.DAMAGE, true, false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_COLD,WEAPON_TYPE_WHOKNOWS)
endif
call GroupRemoveUnit(g, u)
endloop
call DestroyGroup(g)
else
call ReleaseTimer(t)
call data.destroy()
endif
endfunction
function WaterOrbActions takes nothing returns boolean
local group g
local unit u
local timer t
local Data data
if GetSpellAbilityId() == 'A06Z' then
set data = Data.create()
set data.triggerUnit = GetTriggerUnit()
set data.heroLevel = GetUnitAbilityLevel(data.triggerUnit, 'A06Z')
set data.heroInt = GetHeroInt(data.triggerUnit, true)
set data.pointX = GetSpellTargetX()
set data.pointY = GetSpellTargetY()
set g = CreateGroup()
call GroupEnumUnitsInRange(g, data.pointX, data.pointY, 300, null)
loop
set u = FirstOfGroup(g)
exitwhen u == null
call BJDebugMsg(I2S(GetUnitTypeId(u)))
if GetUnitTypeId(u) == 'h01H' then
set data.summonedUnit = u
endif
call GroupRemoveUnit(g, u)
endloop
call DestroyGroup(g)
call BJDebugMsg(I2S(GetHandleId(data.summonedUnit)))
set data.triggerPlayer = GetTriggerPlayer()
set t = NewTimer()
call SetTimerData(t, data)
call TimerStart(t, 1, true, function WaterOrbCallback)
endif
return false
endfunction
//===========================================================================
function InitTrig_Water_Orb takes nothing returns nothing
set gg_trg_Water_Orb = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Water_Orb, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Water_Orb, Condition( function WaterOrbActions ) )
endfunction