TITAN_ITEMBONUSES_ID = "ItemBonuses"; TitanItemBonuses_bonuses = {}; 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 = 0, ShowIcon = 1, shortdisplay = 0, displaybonuses = {}, } }; this:RegisterEvent("PLAYER_ENTERING_WORLD"); this:RegisterEvent("UNIT_INVENTORY_CHANGED"); 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)) 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; 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 = e.name..": "; end if(TitanItemBonuses_bonuses[e.effect]) then val = TitanItemBonuses_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() local retstr,cat,val = "","","",""; local i; for i,e in TITAN_ITEMBONUSES_EFFECTS do if(TitanItemBonuses_bonuses[e.effect]) then if(e.format) then val = format(e.format,TitanItemBonuses_bonuses[e.effect]); else val = TitanItemBonuses_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".. e.name..":\t".. TitanUtils_GetHighlightText(val); end end return retstr; end function TitanPanelItemBonusesButton_OnEvent() if (event == "PLAYER_ENTERING_WORLD") then TitanItemBonuses_active = 1; end if (((event == "PLAYER_ENTERING_WORLD") or (event == "UNIT_INVENTORY_CHANGED")) and TitanItemBonuses_active) then TitanPanelItemBonuses_CalcValues(); TitanPanelButton_UpdateButton(TITAN_ITEMBONUSES_ID); end end 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) .. '] ' .. e.name; if(TitanItemBonuses_bonuses[e.effect]) then val = TitanItemBonuses_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 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 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 function TitanPanelItemBonuses_CalcValues() BonusScanner_ScanAll(); TitanItemBonuses_bonuses = BonusScanner_bonuses; end