-- 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