vanilla-wow-addons – Rev 1
?pathlinks?
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