library EnableDisableAbility
globals
hashtable Disable_Hash = InitHashtable() // Hashtable for enable/disable
endglobals
function UnitEnableDisableAbility takes unit u, integer abilId, boolean isDisabled returns nothing
local integer h = GetHandleId(u)
local integer currentDisableCounter = LoadInteger(Disable_Hash, h, abilId) // Tracks disable state (+1, -1)
// Adjust disable counter
if isDisabled then
set currentDisableCounter = currentDisableCounter - 1
else
set currentDisableCounter = currentDisableCounter + 1
endif
if isDisabled and currentDisableCounter >= 0 then
// DISABLE
loop
set currentDisableCounter = currentDisableCounter - 1
call BlzUnitDisableAbility(u, abilId, isDisabled, false)
call BlzUnitHideAbility(u, abilId, true)
exitwhen currentDisableCounter == -1
endloop
elseif not isDisabled and currentDisableCounter < 0 then
// ENABLE
loop
set currentDisableCounter = currentDisableCounter + 1
call BlzUnitDisableAbility(u, abilId, isDisabled, false)
call BlzUnitHideAbility(u, abilId, true)
exitwhen currentDisableCounter == 0
endloop
endif
call BlzUnitHideAbility(u, abilId, true)
call BlzUnitDisableAbility(u, abilId, isDisabled, false)
call SaveInteger(Disable_Hash, h, abilId, currentDisableCounter)
endfunction
endlibrary