```
function GetUnitCooldownReduction takes unit u returns real
-> Returns the amount of cdr a unit has (this bonuses stacks multiplicatively)
-> 0.1 = 10%
function GetUnitCooldownReductionFlat takes unit u returns real
-> Returns the amount of cdr flat a unit has (this bonuses stacks additively)
-> 0.1 = 10%
function GetUnitCooldownOffset takes unit u returns real
-> Returns the amount of cdr offset a unit has (this bonuses stacks additively)
-> 3.0 = 3 seconds is taken from default cooldown before cdr calculation
function SetUnitCooldownReduction takes unit u, real value returns nothing
-> Set the amount of cdr for a unit (stacks multiplicatively)
function SetUnitCooldownReductionFlat takes unit u, real value returns nothing
-> Set the amount of cdr flat for a unit (stacks additively)
function SetUnitCooldownOffset takes unit u, real value returns nothing
-> Set the amount of cdr offset for a unit (stacks additively)
function CalculateAbilityCooldown takes unit u, integer id, integer lvl, real cd returns nothing
-> Main funciton used to calculate ability coodown. It is used internaly by default and can
-> be called by itself to set custom cooldowns that take advantage of cooldown reduction
function UnitAddCooldownReduction takes unit u, real value returns nothing
-> Add to the amount of cdr of a unit. Accepts positive and negative values
-> Adding a negative with the intent of removing a positive bonus will not work
-> for that use/read UnitRemoveCooldownReduction().
function UnitAddCooldownReductionFlat takes unit u, real value returns nothing
-> Add to the amount of cdr flat of a unit. Accepts positive and negative values
function UnitAddCooldownOffset takes unit u, real value returns nothing
-> Add to the amount of cdr offset of a unit. Accepts positive and negative values
function UnitRemoveCooldownReduction takes unit u, real value returns nothing
-> Use this function to remove a default cdr bonus from a unit. Additions of default cdr are paired,
-> meaning that if you added 0.5 and are trying to remove 0.4, it will not work.
function RegisterAbility takes ability abil returns nothing
-> Manually register an ability into the system. This is very usefull if you have abilities with
-> varying cooldown that are triggered. Right After changing its cooldown, call this function to
-> re-register the default cooldowns of the ability.
function GetUnitAbilityCooldown takes unit u, integer abilityId, integer level returns real
-> Returns the calculated cooldown for an ability
function UnitAddCooldownReductionTimed takes unit u, real value, real duration returns nothing
-> Add to the amount of cdr of a unit for a given duration. Accepts positive and negative values.
-> It handles removing the bonus automatically
function UnitAddCooldownReductionFlatTimed takes unit u, real value, real duration returns nothing
-> Add to the amount of cdr flat of a unit for a given period. Accepts positive and negative values.
-> It handles removing the bonus automatically
function UnitAddCooldownOffsetTimed takes unit u, real value, real duration returns nothing
-> Add to the amount of cdr offset of a unit for a given period. Accepts positive and negative values.
-> It handles removing the bonus automatically
function GetUnitAbilityCooldownEx takes unit u, integer abilityId, integer level returns string
-> Returns the calculated cooldown for an ability as a string
function GetUnitCooldownReductionEx takes unit u returns string
-> Returns the amount of cdr a unit has as a string factored by 100
-> example of return: 10.50 -> 0.105 internally.
function GetUnitCooldownReductionFlatEx takes unit u returns string
-> Returns the amount of cdr flat a unit has as a string factored by 100
-> example of return: 10.50 -> 0.105 internally.
function GetUnitCooldownOffsetEx takes unit u returns string
-> Returns the amount of cdr offset a unit has as a string
function GetAbilityTable takes nothing returns hashtable
-> Returns the table that holds the units default cooldown reduction values.
-> Use with caution! you might break stuff
```