WoWInterface SVN CoolLineFix

[/] [trunk/] [Fix.lua] - Rev 2

Go to most recent revision | Compare with Previous | Blame | View Log

--[[--------------------------------------------------------------------
        CoolLine Fix
        Hides CoolLine in pet battles, and adds support for spell charges.
        Copyright (c) 2014 Phanx <addons@phanx.net>
        Do not redistribute. See accompanying LICENSE file for details.
        http://www.wowinterface.com/downloads/info22791-CoolLineFix
        http://www.curse.com/wow/addons/coolline-fix
----------------------------------------------------------------------]]
--      Hide in pet battles

CoolLine:RegisterEvent("PET_BATTLE_OPENING_START")
CoolLine:RegisterEvent("PET_BATTLE_CLOSE")

CoolLine.PET_BATTLE_OPENING_START = CoolLine.Hide
CoolLine.PET_BATTLE_CLOSE = CoolLine.Show

if C_PetBattles.IsInBattle() then
        CoolLine:Hide()
end

------------------------------------------------------------------------
--      Show spell charges

local CoolLineFix = CreateFrame("Frame")
CoolLineFix:SetScript("OnEvent", function(f, e, ...) return (f[e] or f["SPELLS_CHANGED"])(f, ...) end)
CoolLineFix:RegisterEvent("PLAYER_LOGIN")
CoolLineFix:RegisterEvent("SPELLS_CHANGED")
CoolLineFix:RegisterEvent("SPELL_UPDATE_CHARGES")

local chargeSpells = {
        [BOOKTYPE_SPELL] = {},
        [BOOKTYPE_PET] = {},
}

do  -- cache spells that have a cooldown
        local last
        local GetSpellBookItemName, GetSpellBookItemInfo, GetSpellCharges = GetSpellBookItemName, GetSpellBookItemInfo, GetSpellCharges
        local function CacheBook(bookType)
                local t = chargeSpells[bookType]
                local _, _, offset, numSpells = GetSpellTabInfo(2)
                for i = 1, offset + numSpells do
                        local name = GetSpellBookItemName(i, bookType)
                        if not name then break end
                        local slotType, id = GetSpellBookItemInfo(i, bookType)
                        if id and slotType ~= "FLYOUT" and slotType ~= "FUTURESPELL" and id ~= last then
                                last = id
                                local currentCharges, maxCharges, cooldownStart, cooldownDuration = GetSpellCharges(id)
                                if maxCharges and maxCharges > 0 then
                                        t[id] = name
                                end
                        end
                end
        end

        function CoolLineFix:SPELLS_CHANGED()
                CacheBook(BOOKTYPE_SPELL)
                if not CoolLineDB.hidepet then
                        CacheBook(BOOKTYPE_PET)
                end
        end
end

do
        local AVAILABLE = 2^32 / 1000
        local GetSpellCharges, GetSpellTexture = GetSpellCharges, GetSpellTexture
        local function CheckSpellBook(bookType)
                for id, name in pairs(chargeSpells[bookType]) do
                        local currentCharges, maxCharges, cooldownStart, cooldownDuration = GetSpellCharges(id)
                        if cooldownStart and cooldownDuration and currentCharges < maxCharges and not CoolLineDB.block[name] then
                                local _, _, texture = GetSpellInfo(id)
                                CoolLine.NewCooldown(name, texture, cooldownStart + cooldownDuration, bookType == BOOKTYPE_SPELL)
                        else
                                CoolLine.ClearCooldown(nil, name)
                        end
                end
        end

        function CoolLineFix:SPELL_UPDATE_CHARGES()
                CheckSpellBook(BOOKTYPE_SPELL)
                if not CoolLineDB.hidepet and HasPetUI() then
                        CheckSpellBook(BOOKTYPE_PET)
                end
        end
end

Go to most recent revision | Compare with Previous | Blame