vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--------------------------------------------------------------------------
-- TitanFactions.lua 
--------------------------------------------------------------------------
--[[

Titan Panel [Factions]
        When hovered over it displays the reputation standing for each faction
        and the percentage completed.  Can monitor an individual faction in the
        Titan Panel.

Author: Corgi - corgiwow@gmail.com

v0.13 (April 10, 2006 14:21 PST)
- updated toc# for 1.10 patch
- added ability to show both percent and raw values

v0.12 (January 6, 2006 10:00 PST)
- updated toc# for 1.9 patch

v0.11 (October 19, 2005 11:15 PST)
- localization update

v0.10 (October 14, 2005 13:45 PST)
- added ability to monitor a faction
- color-coded faction text (thanks Fyredrake)

v0.09 (October 11, 2005 16:20 PST)
- updated for changes to GetFactionInfo()
- updated toc# for 1.80 patch

v0.08 (September 15, 2005 21:23 PST)
- added toggle between raw and percentage
- updated toc# for 1.70 patch

v0.07 (June 13, 2005 15:00 PST)
- updated for Titan Panel 1.24

v0.06 (June 7, 2005 20:30 PST)
- toc updated for 1.50 patch

v0.05 (June 6, 2005 23:45 PST)
- added transparent icon

v0.04 (May 31, 2005 02:22 PST)
- updated for Titan Panel version 1.22
- added Icon
- removed the displaying number of factions

v0.03 (May 26, 2005 15:20 PST)
- added a tab between faction name and standing

v0.02 (May 25, 2005 11:05 PST)
- removed faction headers from total number of factions

v0.01 (May 25, 2005 02:00 PST)
- Initial Release

TODO: Complete translation for German, French and Korean.
      
NOTE: Requires Titan Panel version 1.22+

]]--

TITAN_FACTIONS_ID = "Factions";

TITAN_FACTIONS_ICON = "Interface\\AddOns\\TitanFactions\\Artwork\\TitanFactions";

-- Maximum units for each standing
Units = { };
Units[1] = 36000; -- Hated
Units[2] = 3000; -- Hostile
Units[3] = 3000; -- Unfriendly
Units[4] = 3000; -- Neutral
Units[5] = 6000; -- Friendly
Units[6] = 12000; -- Honored
Units[7] = 21000; -- Revered
Units[8] = 1000; -- Exalted

--
-- OnFunctions
--
function TitanPanelFactionsButton_OnLoad()
        this.registry = { 
                id = TITAN_FACTIONS_ID,
                menuText = TITAN_FACTIONS_MENU_TEXT, 
                buttonTextFunction = "TitanPanelFactionsButton_GetButtonText", 
                tooltipTitle = TITAN_FACTIONS_TOOLTIP,
                tooltipTextFunction = "TitanPanelFactionsButton_GetTooltipText", 
                icon = TITAN_FACTIONS_ICON,
            iconWidth = 16,
                savedVariables = {
                        ShowIcon = 1,
                        ShowLabelText = 1,
                        ShowRaw = TITAN_NIL,
                        ShowBoth = TITAN_NIL,
                        ShowMonitor = TITAN_NIL,
                        MonitorFaction = TITAN_NIL,
                }
        };
        
        this:RegisterEvent("UPDATE_FACTION");
end


function TitanPanelFactionsButton_OnEvent(event)
        if ( event == "UPDATE_FACTION" ) then
                if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowMonitor") == 1 ) then
                        TitanPanelFactions_UpdateMonitor();
                        TitanPanelButton_UpdateButton(TITAN_FACTIONS_ID);       
                end
                TitanPanelButton_UpdateTooltip();
        end
end

--
-- Titan functions
--
function TitanPanelFactionsButton_GetButtonText(id)
        local buttonRichText = "";
        if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowMonitor") == 1 and (TitanGetVar(TITAN_FACTIONS_ID, "MonitorFaction") ~= nil) ) then
                buttonRichText = format(TITAN_FACTIONS_BUTTON_TEXT, TitanGetVar(TITAN_FACTIONS_ID, "MonitorFaction"));
        end
        
        return TITAN_FACTIONS_BUTTON_LABEL, buttonRichText;
end


function TitanPanelFactionsButton_GetTooltipText()
        
        local tooltipRichText = "";

        local NumFactions = GetNumFactions();

        local faction_name, faction_description, faction_standingID, faction_barMin, faction_barMax, faction_barValue, faction_atWarWith;
        local faction_canToggleAtWar, faction_isHeader, faction_isCollapsed;

        local factionIndex;

        for factionIndex=1, NumFactions do

                faction_name, faction_description, faction_standingID, faction_barMin, faction_barMax, faction_barValue, faction_atWarWith, faction_canToggleAtWar, faction_isHeader, faction_isCollapsed = GetFactionInfo(factionIndex);
        
                if ( not faction_isHeader ) then
                        
                        tooltipRichText = tooltipRichText..TitanUtils_GetGreenText(faction_name)..":".."\t"..TitanPanelFactions_FindRep(faction_standingID).."(";
                        
                        if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowRaw") ) then
                                tooltipRichText = tooltipRichText..faction_barValue - faction_barMin.."/"..faction_barMax - faction_barMin..")\n";
                        elseif (TitanGetVar(TITAN_FACTIONS_ID, "ShowBoth") ) then
                                local bval = math.floor( ((faction_barValue - faction_barMin) / (faction_barMax - faction_barMin)) * 100);
                                tooltipRichText = tooltipRichText..faction_barValue - faction_barMin.."/"..faction_barMax - faction_barMin..") ("..bval.."%)\n";
                        else
                                local bval = math.floor( ((faction_barValue - faction_barMin) / (faction_barMax - faction_barMin)) * 100);
                                tooltipRichText = tooltipRichText..bval.."%)\n";
                        end
                else
                        tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(faction_name).."\n";
                end
        end

        -- remove the last \n
        tooltipRichText = string.sub(tooltipRichText, 1, string.len(tooltipRichText)-1);

        return tooltipRichText;
end

--
-- create 2nd level right-click menu
--
function TitanPanelRightClickMenu_PrepareFactionsMenu()

        local info = {};
        
        if ( UIDROPDOWNMENU_MENU_LEVEL == 2 ) then              
                if ( UIDROPDOWNMENU_MENU_VALUE == "DisplayAbout" ) then
                        info = {};
                        info.text = TITAN_FACTIONS_ABOUT_POPUP_TEXT;
                        info.value = "AboutTextPopUP";
                        info.notClickable = 1;
                        info.isTitle = 0;
                        UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
                end
                
                if ( UIDROPDOWNMENU_MENU_VALUE == "Monitor" ) then
                                
                        info = {};
                        info.text = TITAN_FACTIONS_MONITOR_TOGGLE_TEXT;
                        info.func = TitanPanelFactions_MonitorToggle;
                        info.checked = TitanGetVar(TITAN_FACTIONS_ID, "ShowMonitor");
                        UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
                        
                        info = {};
                        UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
                        
                        local NumFactions = GetNumFactions();

                        local faction_name, faction_description, faction_standingID, faction_barMin, faction_barMax, faction_barValue, faction_atWarWith;
                        local faction_canToggleAtWar, faction_isHeader, faction_isCollapsed;
                
                        local factionIndex;
                
                        for factionIndex=1, NumFactions do
                
                                info = {};
                                info.text = "";
                                
                                faction_name, faction_description, faction_standingID, faction_barMin, faction_barMax, faction_barValue, faction_atWarWith, faction_canToggleAtWar, faction_isHeader, faction_isCollapsed = GetFactionInfo(factionIndex);
                        
                                if ( not faction_isHeader ) then
                                        
                                        info.text = info.text..TitanUtils_GetGreenText(faction_name)..":".."\t"..TitanPanelFactions_FindRep(faction_standingID).."(";
                                        
                                        if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowRaw") ) then
                                                info.text = info.text..faction_barValue - faction_barMin.."/"..faction_barMax - faction_barMin..")\n";
                                        elseif (TitanGetVar(TITAN_FACTIONS_ID, "ShowBoth") ) then
                                                local bval = math.floor( ((faction_barValue - faction_barMin) / (faction_barMax - faction_barMin)) * 100);
                                                info.text = info.text..faction_barValue - faction_barMin.."/"..faction_barMax - faction_barMin..") ("..bval.."%)\n";
                                        else
                                                local bval = math.floor( ((faction_barValue - faction_barMin) / (faction_barMax - faction_barMin)) * 100);
                                                info.text = info.text..bval.."%)\n";
                                        end
                                        
                                        info.value = info.text;
                                        
                                        info.func = TitanPanelFactions_SetMonitorFaction;
                                                                
                                        info.checked = nil;
                                        if ( info.text == TitanGetVar(TITAN_FACTIONS_ID, "MonitorFaction") ) then
                                                info.checked = 1;
                                        end
                                        UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
                                
                                end
                                
                        end
                end
                                
                return;
        end
        
        TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_FACTIONS_ID].menuText);
        
        --TitanPanelRightClickMenu_AddToggleIcon(TITAN_FACTIONS_ID);
        
        -- monitor
        info = {};
        info.text = TITAN_FACTIONS_MONITOR;
        info.value = "Monitor";
        info.hasArrow = 1;
        UIDropDownMenu_AddButton(info);
        
        info = {};
        UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
        
        info = {};
        info.text = TITAN_FACTIONS_SHOW_RAW;
        info.func = TitanPanelFactions_ShowRawToggle;
        info.checked = TitanGetVar(TITAN_FACTIONS_ID, "ShowRaw");
        UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
        
        info = {};
        info.text = TITAN_FACTIONS_SHOW_BOTH;
        info.func = TitanPanelFactions_ShowBothToggle;
        info.checked = TitanGetVar(TITAN_FACTIONS_ID, "ShowBoth");
        UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
        
        info = {};
        UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
        
        TitanPanelRightClickMenu_AddToggleLabelText(TITAN_FACTIONS_ID);         
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_FACTIONS_ID, TITAN_PANEL_MENU_FUNC_HIDE);

        -- info about plugin
        info = {};
        info.text = TITAN_FACTIONS_ABOUT_TEXT;
        info.value = "DisplayAbout";
        info.hasArrow = 1;
        UIDropDownMenu_AddButton(info);

end

--
-- Factions functions
--
-- Round function
function round(x)
        return floor(x+0.5);
end

function TitanPanelFactions_UpdateMonitor()

        local tmp_faction = "";
        
        local NumFactions = GetNumFactions();

        local faction_name, faction_description, faction_standingID, faction_barMin, faction_barMax, faction_barValue, faction_atWarWith;
        local faction_canToggleAtWar, faction_isHeader, faction_isCollapsed;

        local factionIndex;
        
        for factionIndex=1, NumFactions do

                faction_name, faction_description, faction_standingID, faction_barMin, faction_barMax, faction_barValue, faction_atWarWith, faction_canToggleAtWar, faction_isHeader, faction_isCollapsed = GetFactionInfo(factionIndex);
        
                if ( (TitanGetVar(TITAN_FACTIONS_ID, "MonitorFaction") ~= nil) and string.find(TitanGetVar(TITAN_FACTIONS_ID, "MonitorFaction"), faction_name) ) then
                        
                        tmp_faction = TitanUtils_GetGreenText(faction_name)..":".."\t"..TitanPanelFactions_FindRep(faction_standingID).."(";
                        
                        if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowRaw") ) then
                                tmp_faction = tmp_faction..faction_barValue - faction_barMin.."/"..faction_barMax - faction_barMin..")\n";
                        elseif (TitanGetVar(TITAN_FACTIONS_ID, "ShowBoth") ) then
                                local bval = math.floor( ((faction_barValue - faction_barMin) / (faction_barMax - faction_barMin)) * 100);
                                tmp_faction = tmp_faction..faction_barValue - faction_barMin.."/"..faction_barMax - faction_barMin..") ("..bval.."%)\n";
                        else
                                local bval = math.floor( ((faction_barValue - faction_barMin) / (faction_barMax - faction_barMin)) * 100);
                                tmp_faction = tmp_faction..bval.."%)\n";
                        end
                        TitanSetVar(TITAN_FACTIONS_ID, "MonitorFaction", tmp_faction);
                end
        end     
end

function TitanPanelFactions_MonitorToggle()
        if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowMonitor") ) then
                TitanSetVar(TITAN_FACTIONS_ID, "ShowMonitor", nil);
        else
                TitanSetVar(TITAN_FACTIONS_ID, "ShowMonitor", 1);
        end
        TitanPanelButton_UpdateButton(TITAN_FACTIONS_ID);
end

function TitanPanelFactions_SetMonitorFaction()
        TitanSetVar(TITAN_FACTIONS_ID, "MonitorFaction", this.value);
        TitanPanelButton_UpdateButton(TITAN_FACTIONS_ID);
end

function TitanPanelFactions_ShowRawToggle()
        if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowRaw") ) then
                TitanSetVar(TITAN_FACTIONS_ID, "ShowRaw", nil);
        else
                TitanSetVar(TITAN_FACTIONS_ID, "ShowRaw", 1);
                if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowBoth") ) then
                        TitanSetVar(TITAN_FACTIONS_ID, "ShowBoth", nil);
                end
        end
        if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowMonitor") == 1 ) then
                        TitanPanelFactions_UpdateMonitor();
        end
        TitanPanelButton_UpdateButton(TITAN_FACTIONS_ID);
end

function TitanPanelFactions_ShowBothToggle()
        if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowBoth") ) then
                TitanSetVar(TITAN_FACTIONS_ID, "ShowBoth", nil);
        else
                TitanSetVar(TITAN_FACTIONS_ID, "ShowBoth", 1);
                if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowRaw") ) then
                        TitanSetVar(TITAN_FACTIONS_ID, "ShowRaw", nil);
                end
        end
        if ( TitanGetVar(TITAN_FACTIONS_ID, "ShowMonitor") == 1 ) then
                        TitanPanelFactions_UpdateMonitor();
        end
        TitanPanelButton_UpdateButton(TITAN_FACTIONS_ID);
end

function TitanPanelFactions_FindRep(standingID)
        if ( standingID == 0 ) then
                return UNKNOWN; -- unknown
        elseif ( standingID == 1 ) then
                return FactionTextHated; -- hated
        elseif ( standingID == 2) then
                return FactionTextHostile; -- hostile
        elseif ( standingID == 3) then
                return FactionTextUnfriendly; -- unfriendly
        elseif ( standingID == 4) then
                return FactionTextNeutral; -- neutral
        elseif ( standingID == 5) then
                return FactionTextFriendly; -- friendly
        elseif ( standingID == 6) then
                return FactionTextHonored; -- honored
        elseif ( standingID == 7) then
                return FactionTextRevered; -- revered
        elseif ( standingID == 8) then
                return FactionTextExalted; -- exalted
        end
end

--
-- debug
--
function TitanPanelFactions_ChatPrint(msg)
        DEFAULT_CHAT_FRAME:AddMessage(msg);
end