library CAS
globals
private timer CAS_SUA_T // Timer
private integer CAS_SUA_N = 0 // List size
private integer array CAS_SUA_A // SpellId
private integer array CAS_SUA_C // Mana Cost
private unit array CAS_SUA_U // Caster
endglobals
//////////////////
private function CAS_SUA_TF takes nothing returns nothing
local integer i = 0
loop
call BlzUnitDisableAbility( CAS_SUA_U[i], CAS_SUA_A[i], false, false )
if CAS_SUA_C[i] > 0 then
call SetUnitState( CAS_SUA_U[i], UNIT_STATE_MANA, GetUnitState( CAS_SUA_U[i], UNIT_STATE_MANA ) + CAS_SUA_C[i] )
endif
set CAS_SUA_A[i] = 0
set CAS_SUA_C[i] = 0
set CAS_SUA_U[i] = null
set i = i + 1
exitwhen i > CAS_SUA_N
endloop
set CAS_SUA_N = 0
endfunction
//////////////////
function CAS_StopUnitAbility takes unit whichUnit, integer abilityId, boolean refund returns nothing
local integer i = CAS_SUA_N
call BlzUnitDisableAbility( whichUnit, abilityId, true, false )
set CAS_SUA_U[i] = whichUnit
set CAS_SUA_A[i] = abilityId
if refund then
set CAS_SUA_C[i] = BlzGetUnitAbilityManaCost( whichUnit, abilityId, GetUnitAbilityLevel( whichUnit, abilityId ) - 1 )
endif
set CAS_SUA_N = i + 1
call TimerStart( CAS_SUA_T, 0.00, false, function CAS_SUA_TF )
endfunction
endlibrary