```
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 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 CalculateAbilityCooldown takes unit u, integer id, integer level, real cooldown 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 SimulateAbilityCooldown takes unit u, real cooldown returns real
-> Given a unit and a custom cooldown value, this function will return the resultant
-> cooldown after reductions.
function RegisterAbility takes unit u, integer id returns nothing
-> Manually register an ability into the system.
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
```