vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
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