vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
-- Addon information variables.
TITAN_TITANBT_ID        = "TitanBT";
TITANBT_MENU_TEXT       = "BattleTracker";
TITAN_TITANBT_FREQUENCY = 0.5;
TITANBT_ARTWORK_PATH    = "Interface\\AddOns\\Titan\\TitanBattleTracker\\Artwork\\TitanBT";
TITANBT_BLUETEXT        = "|cff0070dd"
TITANBT_NOTICK          = 0;

-- Game win/loss ratio stats

BTStats = {};

BTStats["AV"] = {};
BTStats["WSG"] = {};
BTStats["AB"] = {};

BTStats.AV.Games = 0;
BTStats.AB.Games = 0;
BTStats.WSG.Games = 0;

BTStats.AV.Wins = 0;
BTStats.AB.Wins = 0;
BTStats.WSG.Wins = 0;

BTStats.AV.Losses = 0;
BTStats.AB.Losses = 0;
BTStats.WSG.Losses = 0;

TitanBT_Vars = {};

TitanBT_Vars.ShowAVText = false;
TitanBT_Vars.ShowWSGText = false;
TitanBT_Vars.ShowABText = false;

TitanBT_Vars.Debug = false;

-- Indicates the addon was successfully loaded.
local _addon_loaded = false;


-- #####################
-- ## EVENT FUNCTIONS ##
-- #####################

-- ## Events occuring when caught in game by the system.
function TitanPanelTitanBTButton_OnEvent(event, arg1)
        if (event == "ADDON_LOADED") then

                -- Indicate the addon has finished loading.
                _addon_loaded = true;

        elseif ( event == "CHAT_MSG_BG_SYSTEM_NEUTRAL" or event == "CHAT_MSG_BG_SYSTEM_ALLIANCE" or event == "CHAT_MSG_BG_SYSTEM_HORDE" or event == "CHAT_MSG_MONSTER_YELL" ) then
                if ( arg1 ~= nil) then
                        TitanBT_DebugPrint("Battleground Event {"..event.."} arg1 {"..arg1.."}");
                        if ( event == "CHAT_MSG_MONSTER_YELL" ) then
                                if ( arg2 ~= "Horde" and arg2 ~= "Alliance" and arg2 ~= "Herald" ) then
                                        TitanBT_DebugPrint("Event "..event.." arg2 {"..arg2.."} did not match");
                                        return;
                                end
                        end

                        if ( string.find(arg1, TITANBT_NOTICE_GAMEOVER) ) then

                                TitanBT_DebugPrint("arg1 {"..arg1.."} indicates this is a GAME OVER message");

                                -- Only add to the correct one
                                if ( GetRealZoneText() == TITANBT_BG_AV ) then
                                        BTStats.AV.Games = BTStats.AV.Games + 1;
                                elseif ( GetRealZoneText() == TITANBT_BG_AB ) then
                                        BTStats.AB.Games = BTStats.AB.Games + 1;
                                elseif ( GetRealZoneText() == TITANBT_BG_WSG ) then
                                        BTStats.WSG.Games = BTStats.WSG.Games + 1;
                                end
        
                                if ( string.find( arg1, (UnitFactionGroup("player")) ) ) then
                                        TitanPanelTitanBT_Print(string.format(TITANBT_GAMEWON, GetRealZoneText()));
                                        if ( GetRealZoneText() == TITANBT_BG_AV ) then
                                                BTStats.AV.Wins = BTStats.AV.Wins + 1;
                                        elseif ( GetRealZoneText() == TITANBT_BG_AB ) then
                                                BTStats.AB.Wins = BTStats.AB.Wins + 1;
                                        elseif ( GetRealZoneText() == TITANBT_BG_WSG ) then
                                                BTStats.WSG.Wins = BTStats.WSG.Wins + 1;
                                        end
                                elseif ( string.find( arg1, (GetOpposingFaction()) ) ) then
                                        TitanPanelTitanBT_Print(string.format(TITANBT_GAMELOST, GetRealZoneText()));
                                        if ( GetRealZoneText() == TITANBT_BG_AV ) then
                                                BTStats.AV.Losses = BTStats.AV.Losses + 1;
                                        elseif ( GetRealZoneText() == TITANBT_BG_AB ) then
                                                BTStats.AB.Losses = BTStats.AB.Losses + 1;
                                        elseif ( GetRealZoneText() == TITANBT_BG_WSG ) then
                                                BTStats.WSG.Losses = BTStats.WSG.Losses + 1;
                                        end
                                end
                        end
                end
        end
end


function GetOpposingFaction()
        if ( (UnitFactionGroup("player")) == TITANBT_ALLIANCE ) then
                return TITANBT_HORDE;
        else
                return TITANBT_ALLIANCE;
        end
end

-- #####################
-- ## TITAN FUNCTIONS ##
-- #####################

-- ## Creates the text located on the titan bar.
function TitanPanelTitanBTButton_GetButtonText(id)
        local text = "";

        if ( not TitanBT_Vars.ShowABText and not TitanBT_Vars.ShowABText and not TitanBT_Vars.ShowWSGText ) then
                text = text..TITANBT_S_NULL;
        else
                text = text..TITANBT_S_SHORT;
        end

        if ( TitanBT_Vars.ShowAVText ) then
                text = text..TITANBT_S_AV..BTStats.AV.Games.."/"..TitanUtils_GetGreenText(BTStats.AV.Wins).."/"..TitanUtils_GetRedText(BTStats.AV.Losses)
        end
        if ( TitanBT_Vars.ShowABText ) then
                text = text..TITANBT_S_AB..BTStats.AB.Games.."/"..TitanUtils_GetGreenText(BTStats.AB.Wins).."/"..TitanUtils_GetRedText(BTStats.AB.Losses)
        end
        if ( TitanBT_Vars.ShowWSGText ) then
                text = text..TITANBT_S_WSG..BTStats.WSG.Games.."/"..TitanUtils_GetGreenText(BTStats.WSG.Wins).."/"..TitanUtils_GetRedText(BTStats.WSG.Losses)
        end

        return text;
end


-- ## Creates the tooltip text for the addon.
function TitanPanelTitanBTButton_GetTooltipText()
        local tt;
        tt = TITANBT_BLUETEXT .. TITANBT_TT_HeaderLeft .. "\t" .. TITANBT_TT_HeaderRight;

-- ## Alterac Valley
        tt = tt .. "\n" .. TITANBT_TT_AV .. "\t" .. BTStats.AV.Games .. "/" .. TitanUtils_GetGreenText(BTStats.AV.Wins) .. "/" .. TitanUtils_GetRedText(BTStats.AV.Losses);

-- ## Arathi Basin
        tt = tt .. "\n" .. TITANBT_TT_AB .. "\t" .. BTStats.AB.Games .. "/" .. TitanUtils_GetGreenText(BTStats.AB.Wins) .. "/" .. TitanUtils_GetRedText(BTStats.AB.Losses);

-- ## Warsong Gulch
        tt = tt .. "\n" .. TITANBT_TT_WSG .. "\t" .. BTStats.WSG.Games .. "/" .. TitanUtils_GetGreenText(BTStats.WSG.Wins) .. "/" .. TitanUtils_GetRedText(BTStats.WSG.Losses);

        return "\n" .. tt;
end


-- #######################
-- ## DISPLAY FUNCTIONS ##
-- #######################


-- ## Prints a message to the user's console.
function TitanPanelTitanBT_Print(string)
        DEFAULT_CHAT_FRAME:AddMessage("[TitanBT]: " .. string);
end

-- ## Prints a message to the user's console.
function TitanBT_DebugPrint(string)
        if ( TitanBT_Vars.Debug ) then
                DEFAULT_CHAT_FRAME:AddMessage("[TitanBT Debug]: " .. string);
        end
end

-- #############################
-- ## INITALISATION FUNCTIONS ##
-- #############################


-- ## Performed when the addon is loaded.
function TitanPanelTitanBTButton_OnLoad()
        this.registry = {
                id                  = TITAN_TITANBT_ID,
                menuText            = TITANBT_MENU_TEXT,
                buttonTextFunction  = "TitanPanelTitanBTButton_GetButtonText",
                tooltipTitle        = TITANBT_TOOLTIP,
                tooltipTextFunction = "TitanPanelTitanBTButton_GetTooltipText",
                icon                = TITANBT_ARTWORK_PATH,
                iconWidth           = 16,
                frequency           = TITAN_TITANBT_FREQUENCY,
                savedVariables = {
                        ShowIcon      = 1,
                }
        };

        this:RegisterEvent("ADDON_LOADED");
        this:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL");
        this:RegisterEvent("CHAT_MSG_BG_SYSTEM_ALLIANCE");
        this:RegisterEvent("CHAT_MSG_BG_SYSTEM_HORDE");
        this:RegisterEvent("CHAT_MSG_MONSTER_YELL");
end

-- ####################
-- ## MENU FUNCTIONS ##
-- ####################

-- ## Creates the titan drop down menu for the addon.
function TitanPanelRightClickMenu_PrepareTitanBTMenu()

        local info = {};

        -- First Level Menu

        TitanPanelTitanBT_MenuAddHeader(TitanPlugins[TITAN_TITANBT_ID].menuText);

        -- Show Icon
        TitanPanelRightClickMenu_AddToggleIcon(TITAN_TITANBT_ID);

        -- Show AV Label
        info       = {};
        info.text  = TITANBT_MENU_DISP_AV;
        info.value = "ShowAVText";
        info.func  = TitanPanelTitanBT_MenuClicked;
        TitanPanelTitanBT_MenuAddOption(info, nil);

        -- Show AB Label
        info       = {};
        info.text  = TITANBT_MENU_DISP_AB;
        info.value = "ShowABText";
        info.func  = TitanPanelTitanBT_MenuClicked;
        TitanPanelTitanBT_MenuAddOption(info, nil);

        -- Show WSG Label
        info       = {};
        info.text  = TITANBT_MENU_DISP_WSG;
        info.value = "ShowWSGText";
        info.func  = TitanPanelTitanBT_MenuClicked;
        TitanPanelTitanBT_MenuAddOption(info, nil);

        TitanPanelRightClickMenu_AddSpacer();

        -- Debug Mode
        info       = {};
        info.text  = TITANBT_MENU_OPTS_DEBUG;
        info.value = "Debug";
        info.func  = TitanPanelTitanBT_MenuClicked;
        TitanPanelTitanBT_MenuAddOption(info, nil);

        TitanPanelRightClickMenu_AddSpacer();

        -- Reset Stats
        info       = {};
        info.text  = TITANBT_MENU_FUNCS_RESET;
        info.value = "ResetStats";
        info.func  = TitanPanelTitanBT_ResetClicked;
        TitanPanelTitanBT_MenuAddOption(info, nil);     

        -- Hide
        TitanPanelRightClickMenu_AddSpacer();
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_TITANBT_ID, TITAN_PANEL_MENU_FUNC_HIDE);

end


-- ## Adds a new header to the menu.
function TitanPanelTitanBT_MenuAddHeader(title, level)
        info              = {};
        info.text         = title;
        info.notClickable = 1;
        info.isTitle      = 1;
        UIDropDownMenu_AddButton(info, level);
end


-- ## Adds a new option to the menu.
function TitanPanelTitanBT_MenuAddOption(info, level)
        info.keepShownOnClick = 1;
        if (TitanBT_Vars[info.value]) then info.checked = 1; end
        UIDropDownMenu_AddButton(info, level);
end


-- ## Called when a menu item is clicked and requires action.
function TitanPanelTitanBT_MenuClicked()
        TitanPanelTitanBT_MenuToggleVar(this.value);
end

-- ## Called when the button is clicked.
function TitanPanelTitanBTButton_OnClick(button)
        if ( button ~= "LeftButton" ) then
                return;
        end

        local message = GetDataForChat();
        local numMembers = GetNumRaidMembers();
        if ( numMembers > 0 ) then
                SendChatMessage(message, "BATTLEGROUND");
        else
                TitanPanelTitanBT_Print(message);
        end
end

function GetDataForChat()
        local AV = "T:"..BTStats.AV.Games.."/W:"..BTStats.AV.Wins.."/L:"..BTStats.AV.Losses;
        local AB = "T:"..BTStats.AB.Games.."/W:"..BTStats.AB.Wins.."/L:"..BTStats.AB.Losses;
        local WSG = "T:"..BTStats.WSG.Games.."/W:"..BTStats.WSG.Wins.."/L:"..BTStats.WSG.Losses;
        local message = string.format(TITANBT_SEND_DATA, AV, AB, WSG);
        AV = nil;
        AB = nil;
        WSG = nil;
        return message;
end

-- ## Called when a menu item is clicked and requires action.
function TitanPanelTitanBT_ResetClicked()
        BTStats.AV.Games = 0;
        BTStats.AB.Games = 0;
        BTStats.WSG.Games = 0;
        BTStats.AV.Wins = 0;
        BTStats.AB.Wins = 0;
        BTStats.WSG.Wins = 0;
        BTStats.AV.Losses = 0;
        BTStats.AB.Losses = 0;
        BTStats.WSG.Losses = 0;
end


-- ## Toggles a specified variable in the menu, changing it from true to false and vice versa.
-- ##
-- ## Variables
-- ##     value: The value that UIDROPDOWNMENU_MENU_VALUE is set to when the button is clicked.
function TitanPanelTitanBT_MenuToggleVar(value)
        if (TitanBT_Vars[value]) then
                TitanBT_Vars[value] = false;
        else
                TitanBT_Vars[value] = true;
        end
end

Generated by GNU Enscript 1.6.5.90.