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