vanilla-wow-addons – Rev 1
?pathlinks?
TITAN_ITEMBONUSES_ID = "ItemBonuses";
TitanItemBonuses_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
};
TITAN_ITEMBONUSES_EFFECTS = {
{ effect = "STR", format = "+%d", short = "XSTR", cat = "ATT" },
{ effect = "AGI", format = "+%d", short = "XAGI", cat = "ATT" },
{ effect = "STA", format = "+%d", short = "XSTA", cat = "ATT" },
{ effect = "INT", format = "+%d", short = "XINT", cat = "ATT" },
{ effect = "SPI", format = "+%d", short = "XSPI", cat = "ATT" },
{ effect = "ARMOR", format = "+%d", short = "XARM", cat = "ATT" },
{ effect = "ARCANERES", format = "+%d", short = "AR", cat = "RES" },
{ effect = "FIRERES", format = "+%d", short = "IR", cat = "RES" },
{ effect = "NATURERES", format = "+%d", short = "NR", cat = "RES" },
{ effect = "FROSTRES", format = "+%d", short = "FR", cat = "RES" },
{ effect = "SHADOWRES", format = "+%d", short = "SR", cat = "RES" },
{ effect = "DEFENSE", format = "+%d", short = "YDEF", cat = "SKILL" },
{ effect = "MINING", format = "+%d", short = "YMIN", cat = "SKILL" },
{ effect = "HERBALISM", format = "+%d", short = "YHER", cat = "SKILL" },
{ effect = "SKINNING", format = "+%d", short = "YSKI", cat = "SKILL" },
{ effect = "FISHING", format = "+%d", short = "YFIS", cat = "SKILL" },
{ effect = "ATTACKPOWER", format = "+%d", short = "MA", cat = "BON" },
{ effect = "CRIT", format = "+%d%%", short = "MC", cat = "BON" },
{ effect = "BLOCK", format = "+%d%%", short = "MB", cat = "BON" },
{ effect = "DODGE", format = "+%d%%", short = "MD", cat = "BON" },
{ effect = "PARRY", format = "+%d%%", short = "MP", cat = "BON" },
{ effect = "TOHIT", format = "+%d%%", short = "MH", cat = "BON" },
{ effect = "RANGEDATTACKPOWER", format = "+%d", short = "RA", cat = "BON" },
{ effect = "RANGEDCRIT", format = "+%d%%", short = "RC", cat = "BON" },
{ effect = "DMG", format = "+%d", short = "CD", cat = "SBON" },
{ effect = "HEAL", format = "+%d", short = "CH", cat = "SBON"},
{ effect = "HOLYCRIT", format = "+%d%%", short = "CHC", cat = "SBON" },
{ effect = "SPELLCRIT", format = "+%d%%", short = "CSC", cat = "SBON" },
{ effect = "SPELLTOHIT", format = "+%d%%", short = "CSH", cat = "SBON" },
{ effect = "ARCANEDMG", format = "+%d", short = "AD", cat = "SBON" },
{ effect = "FIREDMG", format = "+%d", short = "ID", cat = "SBON" },
{ effect = "FROSTDMG", format = "+%d", short = "FD", cat = "SBON" },
{ effect = "HOLYDMG", format = "+%d", short = "HD", cat = "SBON" },
{ effect = "NATUREDMG", format = "+%d", short = "ND", cat = "SBON" },
{ effect = "SHADOWDMG", format = "+%d", short = "SD", cat = "SBON" },
{ effect = "HEALTH", format = "+%d", short = "LP", cat = "OBON" },
{ effect = "HEALTHREG", format = "%d HP/5s",short = "LR", cat = "OBON" },
{ effect = "MANA", format = "+%d", short = "PP", cat = "OBON" },
{ effect = "MANAREG", format = "%d MP/5s",short = "PR", cat = "OBON" },
};
TITAN_ITEMBONUSES_CATEGORIES = {'ATT', 'BON', 'SBON', 'RES', 'SKILL', 'OBON'};
TitanItemBonuses_active = nil;
function TitanPanelItemBonusesButton_OnLoad()
this.registry = {
id = TITAN_ITEMBONUSES_ID,
builtIn = 1,
version = "0.9.1800",
menuText = TITAN_ITEMBONUSES_TEXT,
buttonTextFunction = "TitanPanelItemBonusesButton_GetButtonText",
tooltipTitle = TITAN_ITEMBONUSES_TEXT,
tooltipTextFunction = "TitanPanelItemBonusesButton_GetTooltipText",
icon = "Interface\\Icons\\Spell_Nature_EnchantArmor.blp";
iconWidth = 16,
savedVariables = {
ShowLabelText = 1,
ShowColoredText = TITAN_NIL,
ShowIcon = 1,
shortdisplay = TITAN_NIL,
displaybonuses = {},
}
};
this:RegisterEvent("PLAYER_ENTERING_WORLD");
end
function TitanPanelItemBonusesButton_OnEvent()
if (event == "PLAYER_ENTERING_WORLD") then
TitanItemBonuses_active = 1;
end
end
function TitanPanelItemBonusesButton_FormatShortText(short,val)
local color = 'FFFFFF';
local text = string.sub(short,2);
local colorcode = string.sub(short,1,1);
if(TitanItemBonuses_colors[colorcode]) then
color = TitanItemBonuses_colors[colorcode];
end;
if(val) then
return '|cff'.. color .. val .. FONT_COLOR_CODE_CLOSE
else
return '|cff'.. color .. text .. FONT_COLOR_CODE_CLOSE
end;
end
function TitanPanelItemBonusesButton_GetButtonText(id)
local title = TITAN_ITEMBONUSES_TEXT;
local text = "";
local disp = TitanGetVar(TITAN_ITEMBONUSES_ID, "displaybonuses");
-- preventing getting inaccessible due to no display at all
if( (not disp or (table.getn(disp) == 0 ) or not BonusScanner or not BonusScanner.active)
and not TitanGetVar(TITAN_ITEMBONUSES_ID, "ShowLabelText")
and not TitanGetVar(TITAN_ITEMBONUSES_ID, "ShowIcon")) then
TitanSetVar(TITAN_ITEMBONUSES_ID, "ShowLabelText", 1);
TitanPanelButton_UpdateButton(TITAN_ITEMBONUSES_ID);
end;
if(not BonusScanner or not BonusScanner.active) then
return TITAN_ITEMBONUSES_TEXT,"";
end
local i,d,e;
local liste = {};
for i,d in disp do
e = TITAN_ITEMBONUSES_EFFECTS[d];
if(TitanGetVar(TITAN_ITEMBONUSES_ID, "shortdisplay")) then
title = TitanPanelItemBonusesButton_FormatShortText(e.short);
else
title = BONUSSCANNER_NAMES[e.effect]..": ";
end
if(BonusScanner.bonuses[e.effect]) then
val = BonusScanner.bonuses[e.effect];
else
val = 0;
end
text = format(e.format,val);
if(TitanGetVar(TITAN_ITEMBONUSES_ID, "ShowColoredText")) then
text = TitanPanelItemBonusesButton_FormatShortText(e.short,text);
end;
table.insert(liste,title);
table.insert(liste,TitanUtils_GetHighlightText(text));
end;
if(table.getn(liste) == 0) then
return TITAN_ITEMBONUSES_TEXT,"";
end
return unpack(liste);
end
function TitanPanelItemBonusesButton_isdisp(val)
local disp = TitanGetVar(TITAN_ITEMBONUSES_ID, "displaybonuses");
local i,d;
for i,d in disp do
if(d==val) then
return 1;
end
end
return nil;
end
function TitanPanelItemBonusesButton_hasdisp()
local disp = TitanGetVar(TITAN_ITEMBONUSES_ID, "displaybonuses");
if(not disp) then
return nil;
end
return table.getn(disp) > 0;
end
function TitanPanelItemBonusesButton_GetTooltipText()
if(not BonusScanner or not BonusScanner.active) then
return "\n" ..TITAN_ITEMBONUSES_BONUSSCANNER_MISSING;
end
local retstr,cat,val = "","","","";
local i;
for i,e in TITAN_ITEMBONUSES_EFFECTS do
if(BonusScanner.bonuses[e.effect]) then
if(e.format) then
val = format(e.format,BonusScanner.bonuses[e.effect]);
else
val = BonusScanner.bonuses[e.effect];
end;
if(e.cat ~= cat) then
cat = e.cat;
if(retstr ~= "") then
retstr = retstr .. "\n"
end
retstr = retstr .. "\n" .. TitanUtils_GetGreenText(getglobal('TITAN_ITEMBONUSES_CAT_'..cat)..":");
end
retstr = retstr.. "\n".. BONUSSCANNER_NAMES[e.effect]..":\t".. TitanUtils_GetHighlightText(val);
end
end
return retstr;
end
function TitanPanelItemBonuses_Update()
oldBonusScanner_Update();
if(TitanItemBonuses_active) then
TitanPanelButton_UpdateButton(TITAN_ITEMBONUSES_ID);
end
end
oldBonusScanner_Update = BonusScanner_Update;
BonusScanner_Update = TitanPanelItemBonuses_Update;
function TitanPanelRightClickMenu_PrepareItemBonusesMenu()
local id = "ItemBonuses";
local info = {};
local i,cat,disp,val;
if ( UIDROPDOWNMENU_MENU_LEVEL == 2 ) then
for i,e in TITAN_ITEMBONUSES_EFFECTS do
if(e.cat == this.value) then
info = {};
info.text = '[' .. TitanPanelItemBonusesButton_FormatShortText(e.short) .. '] ' .. BONUSSCANNER_NAMES[e.effect];
if(BonusScanner.bonuses[e.effect]) then
val = BonusScanner.bonuses[e.effect];
info.text = info.text .. " (".. format(e.format,val).. ")";
end
info.value = i;
info.func = TitanPanelItemBonuses_SetDisplay;
info.checked = TitanPanelItemBonusesButton_isdisp(i);
info.keepShownOnClick = 1;
UIDropDownMenu_AddButton(info,UIDROPDOWNMENU_MENU_LEVEL);
end
end
else
if(not BonusScanner or not BonusScanner.active) then
TitanPanelRightClickMenu_AddToggleIcon(TITAN_ITEMBONUSES_ID);
TitanPanelRightClickMenu_AddToggleLabelText(TITAN_ITEMBONUSES_ID);
TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, id, TITAN_PANEL_MENU_FUNC_HIDE);
else
TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_ITEMBONUSES_ID].menuText);
TitanPanelRightClickMenu_AddSpacer(UIDROPDOWNMENU_MENU_LEVEL);
info = {};
info.text = TITAN_ITEMBONUSES_DISPLAY_NONE;
info.value = 0;
info.func = TitanPanelItemBonuses_SetDisplay;
disp = TitanGetVar(TITAN_ITEMBONUSES_ID, "displaybonuses");
info.checked = not TitanPanelItemBonusesButton_hasdisp();
UIDropDownMenu_AddButton(info);
for i,cat in TITAN_ITEMBONUSES_CATEGORIES do
info = {};
info.text = getglobal('TITAN_ITEMBONUSES_CAT_'..cat);
info.hasArrow = 1;
info.value = cat;
UIDropDownMenu_AddButton(info);
end;
TitanPanelRightClickMenu_AddSpacer(UIDROPDOWNMENU_MENU_LEVEL);
TitanPanelRightClickMenu_AddToggleIcon(TITAN_ITEMBONUSES_ID);
TitanPanelRightClickMenu_AddToggleVar(TITAN_ITEMBONUSES_SHORTDISPLAY, TITAN_ITEMBONUSES_ID,'shortdisplay');
TitanPanelRightClickMenu_AddToggleLabelText(TITAN_ITEMBONUSES_ID);
TitanPanelRightClickMenu_AddToggleColoredText(TITAN_ITEMBONUSES_ID);
TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, id, TITAN_PANEL_MENU_FUNC_HIDE);
end
end
end
function TitanPanelItemBonuses_SetDisplay()
local db = TitanGetVar(TITAN_ITEMBONUSES_ID, "displaybonuses");
local i,d,found;
if(this.value == 0) then
TitanSetVar(TITAN_ITEMBONUSES_ID, "displaybonuses", {});
else
found = 0;
for i,d in db do
if(d == this.value)then
found = i;
end
end
if(found > 0) then
table.remove(db,found)
else
while(table.getn(db)>3) do
table.remove(db);
end;
table.insert(db,this.value);
end
TitanSetVar(TITAN_ITEMBONUSES_ID, "displaybonuses", db);
end;
TitanPanelButton_UpdateButton(TITAN_ITEMBONUSES_ID);
end