vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
ItemBonusesFu = AceLibrary("AceAddon-2.0"):new("AceConsole-2.0", "AceDB-2.0", "AceHook-2.1", "AceEvent-2.0", "AceDebug-2.0", "FuBarPlugin-2.0")

local L = AceLibrary("AceLocale-2.2"):new("ItemBonusesFu")
local tablet = AceLibrary("Tablet-2.0")
local crayon = AceLibrary("Crayon-2.0")
local compost = AceLibrary("Compost-2.0")
local dewdrop = AceLibrary("Dewdrop-2.0")
local bonus = AceLibrary("ItemBonusLib-1.0")

local const = {
        ItemBonuses_colors = {
                X = 'FFD200',  -- attributes
                Y = '20FF20',  -- skills
                M = 'FFFFFF',  -- melee
                R = '00C0C0',  -- ranged
                C = 'FFFF00',  -- spells
                A = 'FF60FF',  -- arcane
                I = 'FF3600',  -- fire
                F = '00C0FF',  -- frost
                H = 'FFA400',  -- holy
                N = '00FF60',  -- nature
                S = 'AA12AC',  -- shadow
                L = '20FF20',  -- life
                P = '6060FF',  -- mana
        },
   
        ITEMBONUSES_EFFECTS = {
                { effect = "STR",       format = "+%d", short = "STR",  color = "X",    cat = "ATT" },
                { effect = "AGI",       format = "+%d", short = "AGI",  color = "X",    cat = "ATT" },
                { effect = "STA",       format = "+%d", short = "STA",  color = "X",    cat = "ATT" },
                { effect = "INT",       format = "+%d", short = "INT",  color = "X",    cat = "ATT" },
                { effect = "SPI",       format = "+%d", short = "SPI",  color = "X",    cat = "ATT" },
                { effect = "ARMOR",     format = "+%d", short = "ARM",  color = "X",    cat = "ATT" },

                { effect = "ARCANERES", format = "+%d", short = "R",    color = "A",    cat = "RES" },
                { effect = "FIRERES",   format = "+%d", short = "R",    color = "I",    cat = "RES" },
                { effect = "NATURERES", format = "+%d", short = "R",    color = "N",    cat = "RES" },
                { effect = "FROSTRES",  format = "+%d", short = "R",    color = "F",    cat = "RES" },
                { effect = "SHADOWRES", format = "+%d", short = "R",    color = "S",    cat = "RES" },

                { effect = "DEFENSE",   format = "+%d", short = "DEF",  color = "Y",    cat = "SKILL" },
                { effect = "MINING",    format = "+%d", short = "MIN",  color = "Y",    cat = "SKILL" },
                { effect = "HERBALISM", format = "+%d", short = "HER",  color = "Y",    cat = "SKILL" },
                { effect = "SKINNING",  format = "+%d", short = "SKI",  color = "Y",    cat = "SKILL" },
                { effect = "FISHING",   format = "+%d", short = "FIS",  color = "Y",    cat = "SKILL" },

                { effect = "ATTACKPOWER",       format = "+%d",         short = "AP",   color = "M",    cat = "BON" },
                { effect = "ATTACKPOWERUNDEAD", format = "+%d",         short = "APU",  color = "M",    cat = "BON" },
                { effect = "ATTACKPOWERFERAL",  format = "+%d",         short = "APF",  color = "M",    cat = "BON" },
                { effect = "CRIT",              format = "+%d%%",       short = "C",    color = "M",    cat = "BON" },
                { effect = "BLOCK",             format = "+%d%%",       short = "B",    color = "M",    cat = "BON" },
                { effect = "BLOCKVALUE",        format = "+%d",         short = "BV",   color = "M",    cat = "BON" },
                { effect = "DODGE",             format = "+%d%%",       short = "D",    color = "M",    cat = "BON" },
                { effect = "PARRY",             format = "+%d%%",       short = "P",    color = "M",    cat = "BON" },
                { effect = "TOHIT",             format = "+%d%%",       short = "H",    color = "M",    cat = "BON" },
                { effect = "RANGEDATTACKPOWER", format = "+%d",         short = "A",    color = "R",    cat = "BON" },
                { effect = "RANGEDCRIT",        format = "+%d%%",       short = "C",    color = "R",    cat = "BON" },

                { effect = "DMG",               format = "+%d",         short = "D",    color = "C",    cat = "SBON" },
                { effect = "HEAL",              format = "+%d",         short = "H",    color = "C",    cat = "SBON"},
                { effect = "HOLYCRIT",          format = "+%d%%",       short = "HC",   color = "C",    cat = "SBON" },
                { effect = "SPELLCRIT",         format = "+%d%%",       short = "SC",   color = "C",    cat = "SBON" },
                { effect = "SPELLTOHIT",        format = "+%d%%",       short = "SH",   color = "C",    cat = "SBON" },
                { effect = "ARCANEDMG",         format = "+%d",         short = "D",    color = "A",    cat = "SBON" },
                { effect = "FIREDMG",           format = "+%d",         short = "D",    color = "I",    cat = "SBON" },
                { effect = "FROSTDMG",          format = "+%d",         short = "D",    color = "F",    cat = "SBON" },
                { effect = "HOLYDMG",           format = "+%d",         short = "D",    color = "H",    cat = "SBON" },
                { effect = "NATUREDMG",         format = "+%d",         short = "D",    color = "N",    cat = "SBON" },
                { effect = "SHADOWDMG",         format = "+%d",         short = "D",    color = "S",    cat = "SBON" },
                { effect = "DMGUNDEAD",         format = "+%d",         short = "D",    color = "S",    cat = "SBON" },
                { effect = "SPELLPEN",          format = "+%d",         short = "SP",   color = "C",    cat = "SBON" },

                { effect = "HEALTH",    format = "+%d",         short = "P",    color = "L",    cat = "OBON" },
                { effect = "HEALTHREG", format = "%d HP/5s",    short = "R",    color = "L",    cat = "OBON" },
                { effect = "MANA",      format = "+%d",         short = "P",    color = "P",    cat = "OBON" },
                { effect = "MANAREG",   format = "%d MP/5s",    short = "R",    color = "P",    cat = "OBON" },
    },
    ITEMBONUSES_CATEGORIES = {ATT='Attributes', BON='Melee and ranged combat', SBON='Spells', RES='Resistance', SKILL='Skills', OBON='Life and mana'},
}

ItemBonusesFu.version = "2.0." .. string.sub("$Revision: 9785 $", 12, -3)
ItemBonusesFu.date = string.sub("$Date: 2006-09-02 03:25:39 +0200 (Sa, 02 Sep 2006) $", 8, 17)
ItemBonusesFu.hasIcon = "Interface\\Icons\\Spell_Nature_EnchantArmor.blp"
ItemBonusesFu.hasNoColor = true
ItemBonusesFu.independentProfile = true

function ItemBonusesFu:OnInitialize()
        self:RegisterDB("FuBar_ItemBonusesDB")
end

function ItemBonusesFu:OnEnable()
        self:RegisterEvent("ItemBonusLib_Update", "Update", 1)
end

function ItemBonusesFu:UpdateData()
        self:Debug("Updating Data")
        local check
        for i,e in pairs(const.ITEMBONUSES_EFFECTS) do
                if self.db.profile[e.effect] then
                        check = true
                end
        end
        if not check then
                self.db.profile.display_none = true
        end
end

function ItemBonusesFu:UpdateText()
        self:Debug("Updating Text")
        if self.db.profile.display_none then
                if self.db.profile.short_display then
                        self:SetText(L["IB"])
                else
                        self:SetText(L["Item Bonuses"])
                end
        else
                if not bonus:IsActive() then
                self:Debug("BonusScanner not active!")
                        self:SetText(crayon:Red(L["BonusScanner N/A"]))
                else
                        local text = compost:Acquire()
                        for i,e in ipairs(const.ITEMBONUSES_EFFECTS) do
                                if self.db.profile[e.effect] then
                                        table.insert(text, self:GetBonusText(e, false))
                                end
                        end
                        self:SetText(table.concat(text, " "))
                        compost:Reclaim(text)
                end
        end
end

function ItemBonusesFu:OnTooltipUpdate()
        self:Debug("Updating Tooltip")
        if not bonus:IsActive() then
                self:Debug("BonusScanner not active!")
                local TabCat = tablet:AddCategory(
                        'columns', 1,
                        'child_textR', 1,
                        'child_textG', 0,
                        'child_textB', 0
                )
                TabCat:AddLine('text', L["BonusScanner N/A"])
        else
                local TabCat = compost:Acquire()
                for i,itemcat in pairs(const.ITEMBONUSES_CATEGORIES) do
                        TabCat[i] = tablet:AddCategory(
                                'text', L[itemcat],
                                'columns', 2,
                                'textR', 0,
                                'textG', 1,
                                'textB', 0,
                                'child_textR', 1,
                                'child_textG', 1,
                                'child_textB', 0,
                                'child_text2R', 1,
                                'child_text2G', 1,
                                'child_text2B', 1
                        )
                end
                
                for i,e in pairs(const.ITEMBONUSES_EFFECTS) do
                        local b = bonus:GetBonus(e.effect)
                        self:Debug(e.effect .. " = " .. b)
                        if b == 0 then
                                self:Debug("GetBonus returned 0, skipping")
                        else
                                local val
                                if e.format then
                                        val = format(e.format,b)
                                else
                                        val = b
                                end
                                TabCat[e.cat]:AddLine(
                                        'text', bonus:GetBonusFriendlyName(e.effect),
                                        'text2', val
                                )
                        end
                end

                compost:Reclaim(TabCat)
        end
end

function ItemBonusesFu:OnMenuRequest(level, value)
        if level == 1 then
                dewdrop:AddLine(
                        'text', L["Display none"],
                        'func', function() self:ToggleOption("display_none", true) end,
                        'checked', self.db.profile.display_none
                )
                for  i,e in pairs(const.ITEMBONUSES_CATEGORIES) do
                        dewdrop:AddLine(
                                'text', L[e],
                                'hasArrow', true,
                                'value', i
                        )
                end
                dewdrop:AddLine()
                dewdrop:AddLine(
                        'text', L["Brief label text"],
                        'func', function() self:ToggleOption("short_display", true) end,
                        'checked', self.db.profile.short_display
                )
                dewdrop:AddLine(
                        'text', L["Show Colored text"],
                        'func', function() self:ToggleOption("colored", true) end,
                        'checked', self.db.profile.colored
                )
        elseif level == 2 then
                for i,e in pairs(const.ITEMBONUSES_EFFECTS) do
                        if e.cat == value then
                                local my_e = e
                                dewdrop:AddLine(
                                        'text', self:GetBonusText(my_e, true),
                                        'func', function() self.db.profile.display_none = false; self:ToggleOption(my_e.effect, true) end,
                                        'checked', self.db.profile[my_e.effect]
                                )
                        end
                end
        end
end

function ItemBonusesFu:ToggleOption(var, doUpdate)
        self.db.profile[var] = not self.db.profile[var]
        if doUpdate then
                self:Update()
        end
        return self.db.profile[var]
end

function ItemBonusesFu:GetBonusText(EffectTable, forMenu)
        local t = compost:Acquire()
        local val
        local b = bonus:GetBonus(EffectTable.effect)
        local b_fn = bonus:GetBonusFriendlyName(EffectTable.effect)
        if b == 0 then
                self:Debug("GetBonus returned " .. b .. ", skipping")
        else
                val = format(EffectTable.format, b)
        end
        if forMenu then
                table.insert(t, "[" .. crayon:Colorize(const.ItemBonuses_colors[EffectTable.color], EffectTable.short) .. "] " .. b_fn)
        else
                if self.db.profile.short_display then
                        table.insert(t, crayon:Colorize(const.ItemBonuses_colors[EffectTable.color], EffectTable.short))
                else
                        table.insert(t, crayon:Colorize(const.ItemBonuses_colors[EffectTable.color], b_fn))
                end
        end
        if not val then
                if not forMenu then
                        val = format(EffectTable.format, 0)
                else
                        local text = table.concat(t)
                        compost:Reclaim(t)
                        return text
                end
        end
        if self.db.profile.colored then
                val = crayon:Colorize(const.ItemBonuses_colors[EffectTable.color], val)
        else
                val = crayon:White(val)
        end
        if forMenu then
                table.insert(t, " (" .. val .. ")")
        else
                table.insert(t, 1, " ")
                table.insert(t, val)
        end
        local text = table.concat(t)
        compost:Reclaim(t)
        return text
end