function Trig_Elemental_Wave_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 039;A004039;
endfunction
function Trig_Elemental_Carrion_Leech takes nothing returns nothing
endfunction
function Trig_Elemental_Carrion_Damage takes nothing returns boolean
if not IsUnitType( GetFilterUnit(), UNIT_TYPE_FLYING ) and not IsUnitType( GetFilterUnit(), UNIT_TYPE_STRUCTURE ) and GetUnitState( GetFilterUnit(), UNIT_STATE_LIFE ) > .405 and IsUnitEnemy( GetFilterUnit(), GetOwningPlayer( udg_Caster ) ) and not UnitHasBuffBJ( GetFilterUnit(), 039;B001039; ) then
call UnitDamageTarget( udg_Caster, GetFilterUnit(), udg_Damage, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS )
call IssueTargetOrder( udg_Dummy, "frostnova", GetFilterUnit() )
call UnitResetCooldown( udg_Dummy )
endif
return false
endfunction
function Trig_Elemental_Carrion takes nothing returns nothing
local timer tSpellTimer = GetExpiredTimer()
local integer nTimerID = GetHandleId( tSpellTimer )
local integer nAbilityLevel = LoadInteger( udg_AbilityTable, nTimerID, StringHash( "Level" ) )
local integer nCarrionCurrent = LoadInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionCurrent" ) )
local integer nCarrionTimer = LoadInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionMax" ) )
local unit uCastUnit = LoadUnitHandle( udg_AbilityTable, nTimerID, StringHash( "Caster" ) )
local unit uDummyUnit = LoadUnitHandle( udg_AbilityTable, nTimerID, StringHash( "CarrionDummy" ) )
local real rCarrionDamage = LoadReal( udg_AbilityTable, nTimerID, StringHash( "CarrionDamage" ) )
local real rCarrionLeech = LoadReal( udg_AbilityTable, nTimerID, StringHash( "CarrionLeech" ) )
local real rAngle = LoadReal( udg_AbilityTable, nTimerID, StringHash( "Angle" ) )
local real rCurrentDur = LoadReal( udg_AbilityTable, nTimerID, StringHash( "CurrentDur" ) )
local real rNewX
local real rNewY
local group gDamageGroup = CreateGroup()
local boolexpr beGroupFilter = Condition( function Trig_Elemental_Carrion_Damage )
set rNewX = GetUnitX( uDummyUnit ) + 12. * Cos( rAngle * bj_DEGTORAD )
set rNewY = GetUnitY( uDummyUnit ) + 12. * Sin( rAngle * bj_DEGTORAD )
if ( rCurrentDur < 1. ) then
call SetUnitX( uDummyUnit, rNewX )
call SetUnitY( uDummyUnit, rNewY )
set udg_Damage = rCarrionDamage
set udg_Caster = uCastUnit
set udg_Dummy = uDummyUnit
call GroupEnumUnitsInRange( gDamageGroup, rNewX, rNewY, 65 + 50 * rCurrentDur, beGroupFilter )
set rCurrentDur = rCurrentDur + 0.02
call SaveUnitHandle( udg_AbilityTable, nTimerID, StringHash( "CarrionDummy" ), uDummyUnit )
call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CarrionDamage" ), rCarrionDamage )
call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CarrionLeech" ), rCarrionLeech )
call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionCurrent" ), nCarrionCurrent )
call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionMax" ), nCarrionTimer )
call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CurrentDur" ), rCurrentDur )
else
call KillUnit( uDummyUnit )
call DestroyTimer( tSpellTimer )
call DestroyGroup( gDamageGroup )
call FlushChildHashtable( udg_AbilityTable, nTimerID )
endif
set tSpellTimer = null
set uCastUnit = null
set uDummyUnit = null
set gDamageGroup = null
set beGroupFilter = null
endfunction
function Trig_Elemental_Shockwave takes nothing returns nothing
endfunction
function Trig_Elemental_Frost takes nothing returns nothing
endfunction
function Trig_Elemental_Fire takes nothing returns nothing
endfunction
function Trig_Elemental_Wave_Actions takes nothing returns nothing
local timer tSpellTimer = CreateTimer()
local unit uCastUnit = GetTriggerUnit()
local unit uDummyUnit
local integer nTimerID = GetHandleId( tSpellTimer )
local integer nAbilityLevel = GetUnitAbilityLevel( uCastUnit, 039;A004039; )
local integer nWhatSpell = GetRandomInt( 1, 200 )
local real rCurrentDur = 0.
local real rTargetX = GetSpellTargetX()
local real rTargetY = GetSpellTargetY()
local real rCastX = GetUnitX( uCastUnit )
local real rCastY = GetUnitY( uCastUnit )
local real rAngle = bj_RADTODEG * Atan2( rTargetY - rCastY, rTargetX - rCastX )
local real rCurrentDur = 0.
local player plOwningPlayer = GetOwningPlayer( uCastUnit )
local real rCarrionDamage = 150. * I2R( nAbilityLevel )
local real rCarrionLeech = 25. * I2R( nAbilityLevel )
local integer nCarrionCurrent = 0
local integer nCarrionTimer = 4 + nAbilityLevel
call SaveUnitHandle( udg_AbilityTable, nTimerID, StringHash( "Caster" ), uCastUnit )
call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "Level" ), nAbilityLevel )
call SaveReal( udg_AbilityTable, nTimerID, StringHash( "Angle" ), rAngle )
call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CurrentDur" ), rCurrentDur )
if ( nWhatSpell < 250 and nWhatSpell > 0 ) then
set uDummyUnit = CreateUnit( plOwningPlayer, 039;h002039;, rCastX, rCastY, rAngle )
call SaveUnitHandle( udg_AbilityTable, nTimerID, StringHash( "CarrionDummy" ), uDummyUnit )
call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CarrionDamage" ), rCarrionDamage )
call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CarrionLeech" ), rCarrionLeech )
call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionCurrent" ), nCarrionCurrent )
call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionMax" ), nCarrionTimer )
call TimerStart( tSpellTimer, 0.02, true, function Trig_Elemental_Carrion )
elseif ( nWhatSpell < 500 and nWhatSpell >= 250 ) then
elseif ( nWhatSpell < 750 and nWhatSpell >= 500 ) then
elseif ( nWhatSpell <= 1000 and nWhatSpell >= 750 ) then
endif
endfunction
function StartTrigger_Elemental_Wave takes nothing returns nothing
set gg_trg_Elemental_Wave = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Elemental_Wave, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Elemental_Wave, Condition( function Trig_Elemental_Wave_Conditions ) )
call TriggerAddAction( gg_trg_Elemental_Wave, function Trig_Elemental_Wave_Actions )
endfunction
function InitTrig_Elemental_Wave takes nothing returns nothing
endfunction
Converted?
set gg_trg_Elemental_Wave = CreateTrigger( )
Local trigger T = CreateTrigger()
Local trigger T = CreateTrigger()