unction Trig_contrspell_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A001' ) ) then
return false
endif
return true
endfunction
function endcontr takes nothing returns nothing
local integer i = 0
loop
exitwhen udg_contr_timer[i] == GetExpiredTimer()
set i = i + 2
endloop
call DestroyTimer(udg_contr_timer[i])
set udg_contr_timer[i] = null
call TriggerClearActions(udg_contr_trig[i])
call DestroyTrigger(udg_contr_trig[i])
set udg_contr_trig[i] = null
set udg_contr_unit[i] = null
set udg_contr_unit[i+1] = null
endfunction
function nextnospell takes nothing returns nothing
local integer i = 0
loop
exitwhen udg_contr_timer[i] == GetExpiredTimer()
set i = i + 2
endloop
if udg_contr_ability_level[i] > 0 then
call UnitAddAbility(udg_contr_unit[i], udg_contr_ability[i])
call SetUnitAbilityLevel(udg_contr_unit[i], udg_contr_ability[i], udg_contr_ability_level[i])
call UnitRemoveBuffs(udg_contr_unit[i], true, false)
endif
call DestroyTimer(udg_contr_timer[i])
set udg_contr_timer[i] = null
set udg_contr_unit[i] = null
set udg_contr_unit[i+1] = null
call TriggerClearActions(udg_contr_trig[i])
call DestroyTrigger(udg_contr_trig[i])
set udg_contr_trig[i] = null
endfunction
function nospell takes nothing returns nothing
local integer i = 0
loop
exitwhen udg_contr_trig[i] == GetTriggeringTrigger()
set i = i + 2
endloop
if GetUnitAbilityLevel(udg_contr_unit[i], 'B000') > 0 then
set udg_contr_ability[i] = GetSpellAbilityId()
set udg_contr_ability_level[i] = GetUnitAbilityLevel(udg_contr_unit[i], udg_contr_ability[i])
call UnitRemoveAbility(udg_contr_unit[i], 'B000')
call IssueImmediateOrder(udg_contr_unit[i], "stop")
call UnitRemoveAbility(udg_contr_unit[i], udg_contr_ability[i])
call AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl", udg_contr_unit[i], "origin")
call UnitDamageTarget(udg_contr_unit[i+1], udg_contr_unit[i], udg_contr_damage[i], true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS)
endif
call PauseTimer(udg_contr_timer[i])
call TimerStart(udg_contr_timer[i], 5, false, function nextnospell)
endfunction
function Trig_contrspell_Actions takes nothing returns nothing
local integer i = 0
local unit caster = GetSpellAbilityUnit()
local integer abi = GetUnitAbilityLevel(caster, 'A001')
local unit u = GetSpellTargetUnit()
if GetUnitAbilityLevel(u, 'B000') == 0 then
loop
exitwhen udg_contr_trig[i] == null
set i = i + 2
endloop
set udg_contr_trig[i] = CreateTrigger( )
call TriggerRegisterUnitEvent(udg_contr_trig[i], u, EVENT_UNIT_SPELL_EFFECT)
call TriggerAddAction(udg_contr_trig[i], function nospell)
set udg_contr_timer[i] = CreateTimer()
call TimerStart(udg_contr_timer[i], (5 * abi), false, function endcontr)
set udg_contr_unit[i] = u
set udg_contr_unit[i+1] = caster
set udg_contr_damage[i] = 150 * abi - 50
endif
set caster = null
set u = null
endfunction
//===========================================================================
function InitTrig_contrspell takes nothing returns nothing
set gg_trg_contrspell = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_contrspell, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_contrspell, Condition( function Trig_contrspell_Conditions ) )
call TriggerAddAction( gg_trg_contrspell, function Trig_contrspell_Actions )
endfunction