vanilla-wow-addons – Rev 1
?pathlinks?
BGBUDDY_TITLE = "BGBuddy";
BGBUDDY_VERSION = "v2.2";
local lastkill = 0;
local sessionhonor = 0;
local sessionkillhonor = 0;
local bonusHonor = -1;
local current_line = 1;
local debug_enable = 0;
local last_GameTime = 0;
local this_GameTime = 0;
local timer_nextRes = nil;
local resTimeSet = false;
local lines = { };
local kill_log = { };
local soundplayed = { };
local honorshown = false;
function BGBuddy_OnLoad()
this:RegisterForDrag("LeftButton");
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
this:RegisterEvent("UPDATE_WORLD_STATES");
this:RegisterEvent("BATTLEFIELDS_SHOW");
this:RegisterEvent("BATTLEFIELDS_CLOSED");
this:RegisterEvent("UPDATE_BATTLEFIELD_SCORE");
this:RegisterEvent("UPDATE_BATTLEFIELD_STATUS");
this:RegisterEvent("PLAYER_PVP_KILLS_CHANGED");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
this:RegisterEvent("CHAT_MSG_COMBAT_HONOR_GAIN");
this:RegisterEvent("CHAT_MSG_COMBAT_HONOR_GAIN");
this:RegisterEvent("PLAYER_DEAD");
end
function BGBuddy_OnEvent()
if ( event == "VARIABLES_LOADED" ) then
BGBuddy_Init();
return;
end
if ( BGBuddy_SavedVars["config"]["isEnabled"] == 0 ) then
return;
end
if ( event == "PLAYER_ENTERING_WORLD" ) then
RequestBattlefieldScoreData();
BGBuddy_Initialize();
end
if ( event == "UPDATE_BATTLEFIELD_SCORE" ) then
RequestBattlefieldScoreData();
end
if ( event == "UPDATE_BATTLEFIELD_STATUS" ) then
RequestBattlefieldScoreData();
end
if ( event == "PLAYER_DEAD" ) then
BGBuddy_AutoRelease();
end
if ( event == "PLAYER_PVP_KILLS_CHANGED" ) then
RequestBattlefieldScoreData();
end
if ( event == "CHAT_MSG_COMBAT_HONOR_GAIN" ) then
_, _, _, _, lastchathonor = string.find(arg1, "^(.+) ([^:]+:[^:]+): (%d+)");
_, _, _, _, lastchatkill = string.find(arg1, "a" );
-- update honor with the new estimate
if ( lastchathonor == nil ) then
return;
else
sessionhonor = sessionhonor + lastchathonor;
sessionkillhonor = sessionkillhonor + lastchathonor;
lastkill = lastchathonor;
end
end
if ( event == "PLAYER_ENTERING_WORLD" ) then
if ( bonusHonor ~= nil and bonusHonor >= 0 ) then
BGBuddy_ChatReport( BGBUDDY_MSG_ENDOFBATTLE_REPORT );
BGBuddy_ChatReport( BGBUDDY_MSG_ENDOFBATTLE_KILLHONOR..sessionhonor..
" "..BGBUDDY_MSG_ENDOFBATTLE_BONUSHONOR..bonusHonor );
sessionhonor = sessionhonor + bonusHonor;
BGBuddy_ChatReport( BGBUDDY_MSG_ENDOFBATTLE_TOTALHONOR..sessionhonor );
end
bonusHonor = -1;
end
end
function BGBuddy_HandleSlashes(arg1)
arg1 = string.lower(arg1);
if( arg1 == "debug" or arg1 == "db" ) then
BGBuddy_ToggleDebug();
else
ShowUIPanel(BGBuddy_ConfigPanel_CustomizeDisplay);
end
end
function BGBuddy_Init()
if(myAddOnsFrame) then
myAddOnsList.BGBuddy = {
name = 'BGBuddy',
description = BGBUDDY_ABOUT_DESCRIPTION,
version = BGBUDDY_VERSION,
category = MYADDONS_CATEGORY_OTHERS,
frame = 'BGBuddy_StandardFrame',
optionsframe = 'BGBuddy_ConfigPanel'
};
end
PanelTemplates_SetNumTabs(BGBuddy_ConfigPanel_CustomizeDisplay, 3);
BGBuddy_ConfigPanel_CustomizeDisplay.selectedTab = 1;
PanelTemplates_UpdateTabs(BGBuddy_ConfigPanel_CustomizeDisplay);
BGBuddy_ConfigPanel_AboutTitle:SetText(BGBUDDY_TITLE.." "..BGBUDDY_VERSION);
SLASH_BGBuddy1 = "/bgbuddy";
SLASH_BGBuddy2 = "/bgb";
SlashCmdList["BGBuddy"] = BGBuddy_HandleSlashes;
if (BGBuddy_SavedVars == nil) then
BGBuddy_SavedVars = {
config = { },
alterac_valley = {
customizeText = nil,
},
warsong_gulch = {
customizeText = nil,
},
arathi_basin = {
customizeText = nil,
},
not_queued = {
customizeText = nil,
},
queued = {
customizeText = nil,
showQueuedSeconds = nil,
},
};
end
-- Now handle upgrades, data format has changed.
if (BGBuddy_SavedVars["config"] == nil) then
BGBuddy_SavedVars["config"] = { };
end
if (BGBuddy_SavedVars["alterac_valley"] == nil) then
BGBuddy_SavedVars["alterac_valley"] = {
customizeText = nil,
};
end
if (BGBuddy_SavedVars["warsong_gulch"] == nil) then
BGBuddy_SavedVars["warsong_gulch"] = {
customizeText = nil,
};
end
if (BGBuddy_SavedVars["arathi_basin"] == nil) then
BGBuddy_SavedVars["arathi_basin"] = {
customizeText = nil,
};
end
if (BGBuddy_SavedVars["not_queued"] == nil) then
BGBuddy_SavedVars["not_queued"] = {
customizeText = nil,
};
end
if (BGBuddy_SavedVars["queued"] == nil) then
BGBuddy_SavedVars["queued"] = {
customizeText = nil,
showQueuedSeconds = nil,
};
end
BGBuddy_SavedVars["version"] = BGBUDDY_VERSION;
if ( BGBuddy_SavedVars["daily_honor"] == nil
or BGBuddy_SavedVars["daily_honor_expire"] == nil) then
BGBuddy_SavedVars["daily_honor"] = 0;
BGBuddy_SavedVars["daily_honor_expire"] = "???";
end
--if ( BGBuddy_SavedVars["daily_honor_expire"]
--
-- General Config
--
if (BGBuddy_SavedVars["config"]["isEnabled"] == nil) then
BGBuddy_SavedVars["config"]["isEnabled"] = 1;
end
if (BGBuddy_SavedVars["config"]["isLocked"] == nil) then
BGBuddy_SavedVars["config"]["isLocked"] = 0;
end
if (BGBuddy_SavedVars["config"]["isAlwaysVisible"] == nil) then
BGBuddy_SavedVars["config"]["isAlwaysVisible"] = 1;
end
if (BGBuddy_SavedVars["config"]["playSound"] == nil) then
BGBuddy_SavedVars["config"]["playSound"] = 1;
end
if (BGBuddy_SavedVars["config"]["backgroundAlpha"] == nil) then
BGBuddy_SavedVars["config"]["backgroundAlpha"] = 50;
end
if (BGBuddy_SavedVars["config"]["borderAlpha"] == nil) then
BGBuddy_SavedVars["config"]["borderAlpha"] = 50;
end
if (BGBuddy_SavedVars["config"]["hideBGIcon"] == nil) then
BGBuddy_SavedVars["config"]["hideBGIcon"] = 1;
end
if (BGBuddy_SavedVars["config"]["AutoJoin"] == nil) then
BGBuddy_SavedVars["config"]["AutoJoin"] = 1;
end
if ( BGBuddy_SavedVars["config"]["delayedAutoJoin"] == nil ) then
BGBuddy_SavedVars["config"]["delayedAutoJoin"] = 1;
end
if (BGBuddy_SavedVars["config"]["AutoRes"] == nil) then
BGBuddy_SavedVars["config"]["AutoRes"] = 1;
end
if (BGBuddy_SavedVars["config"]["AutoRelease"] == nil) then
BGBuddy_SavedVars["config"]["AutoRelease"] = 1;
end
if (BGBuddy_SavedVars["config"]["displayRank"] == nil) then
BGBuddy_SavedVars["config"]["displayRank"] = 1;
end
if (BGBuddy_SavedVars["config"]["hideDisplay"] == nil) then
BGBuddy_SavedVars["config"]["hideDisplay"] = 0;
end
if ( BGBuddy_SavedVars["config"]["alwaysShowHonor"] == nil ) then
BGBuddy_SavedVars["config"]["alwaysShowHonor"] = 1;
end
if ( BGBuddy_SavedVars["config"]["autoLeaveBG"] == nil ) then
BGBuddy_SavedVars["config"]["autoLeaveBG"] = 0;
end
if ( BGBuddy_SavedVars["config"]["uiScale"] == nil ) then
BGBuddy_SavedVars["config"]["uiScale"] = 0;
end
--
-- Alterac Valley Defaults
--
if( BGBuddy_SavedVars["alterac_valley"]["customizeText"] == nil ) then
BGBuddy_SavedVars["alterac_valley"]["customizeText"] = "#: ~S K: ~K KB: ~KB D: ~D\n"..
"GYA: ~GYA GYD: ~GYD TA: ~TA TD: ~TD\nHonor: ~SH Last Kill: ~LKH\n"..
"MC: ~MC LDK: ~LDK SO: ~SO\nNext Res: ~RES\nCurrently In: ~BG\nNext Res: ~RES";
end
--
-- Warsong Gulch Defaults
--
if( BGBuddy_SavedVars["warsong_gulch"]["customizeText"] == nil ) then
BGBuddy_SavedVars["warsong_gulch"]["customizeText"] = "#: ~S K: ~K KB: ~KB D: ~D\n"..
"Honor Totals\nKills: ~KH Bonus: ~BH\nTotal: ~SH Last Kill: ~LKH\nNext Res: ~RES\n"..
"Currently In: ~BG";
end
--
-- Arathi Basin Defaults
--
if( BGBuddy_SavedVars["arathi_basin"]["customizeText"] == nil ) then
BGBuddy_SavedVars["arathi_basin"]["customizeText"] = "#: ~S K: ~K KB: ~KB D: ~D\n"..
"Honor Totals\nKills: ~KH Bonus: ~BH\nTotal: ~SH Last Kill: ~LKH\nNext Res: ~RES\n"..
"Currently In: ~BG";
end
--
-- Not Queued Defaults
--
if( BGBuddy_SavedVars["not_queued"]["customizeText"] == nil ) then
BGBuddy_SavedVars["not_queued"]["customizeText"] = "~NQ";
end
--
-- Queued Defaults
--
if( BGBuddy_SavedVars["queued"]["customizeText"] == nil ) then
BGBuddy_SavedVars["queued"]["customizeText"] = "~Q";
end
-- Set the default ui up
BGBuddy_Config_ChangeCustomDisplay("AV");
BGBuddy_Config_SetButtonState(BGBuddy_ConfigPanel_Button_AV);
end
function BGBuddy_OnUpdate()
-- Update time
this_GameTime = GetTime();
if ( BGBuddy_SavedVars["config"]["isEnabled"] == 1 ) then
BGBuddy_UpdateDisplay();
BGBuddy_AutoRelease();
-- Auto leave
if( GetBattlefieldWinner() ~= nil ) then
if ( BGBuddy_SavedVars["config"]["autoLeaveBG"] == 1 ) then
LeaveBattlefield();
end
end
if ( BGBuddy_SavedVars["config"]["displayRank"] == 1 ) then
BGBuddy_RankFrame:Show();
else
BGBuddy_RankFrame:Hide();
end
else
BGBuddy_StandardFrame:Hide();
end
end
function BGBuddy_DropDown_OnLoad()
UIDropDownMenu_Initialize(this, BGBuddy_DropDown_Initialize, "MENU");
end
function BGBuddy_DropDown_Initialize()
--[[ for i=1, MAX_BATTLEFIELD_QUEUES do
local status, mapName, instanceID = GetBattlefieldStatus(i)
end
local status, _, _ = GetBattlefieldStatus();
local info;
if ( status == "queued" ) then
info = {};
info.text = BGBUDDY_DROPDOWN_CHANGEINSTANCE;
info.func = ShowBattlefieldList;
info.notCheckable = 1;
UIDropDownMenu_AddButton(info);
info = {};
info.text = BGBUDDY_DROPDOWN_LEAVEQUEUE;
info.func = AcceptBattlefieldPort;
info.notCheckable = 1;
UIDropDownMenu_AddButton(info);
elseif ( status == "confirm" ) then
info = {};
info.text = BGBUDDY_DROPDOWN_ACCEPTPORT;
info.func = BattlefieldFrame_EnterBattlefield;
info.notCheckable = 1;
UIDropDownMenu_AddButton(info);
info = {};
info.text = BGBUDDY_DROPDOWN_LEAVEQUEUE;
info.func = AcceptBattlefieldPort;
info.notCheckable = 1;
UIDropDownMenu_AddButton(info);
end]]
end
function BGBuddy_OnEnter()
GameTooltip_SetDefaultAnchor(GameTooltip, this);
GameTooltip:SetText(BGBUDDY_TITLE.." "..BGBUDDY_VERSION, 255/255, 209/255, 0/255);
GameTooltip:AddLine(BGBUDDY_TOOLTIP_DEFAULT, 1.00, 1.00, 1.00);
GameTooltip:Show();
end
function BGBuddy_OnEnterScoreFrame()
if ( BGBuddy_StandardFrame.status == "queued" or BGBuddy_StandardFrame.status == "confirm" ) then
GameTooltip_SetDefaultAnchor(GameTooltip, this);
GameTooltip:SetText(BGBUDDY_TOOLTIP_BUTTON, 1, 1, 1);
GameTooltip:Show();
elseif ( BGBuddy_StandardFrame.status == "active" ) then
GameTooltip_SetDefaultAnchor(GameTooltip, this);
GameTooltip:SetText(BGBUDDY_TOOLTIP_BUTTON_ACTIVE_LN1..BGBuddy_StandardFrame.mapName.." "..
BGBuddy_StandardFrame.instanceID, 255/255, 209/255, 0/255);
GameTooltip:AddLine(BGBUDDY_TOOLTIP_BUTTON_ACTIVE_LN2, 1.00, 1.00, 1.00);
GameTooltip:Show();
end
end
function BGBuddy_Initialize()
BGBuddy_SetRankInfo(GetPVPRankInfo(UnitPVPRank("player")));
BGBuddy_UpdateDisplay();
BGBuddy_Config_SetAlpha();
if ( BGBuddy_SavedVars["config"]["hideDisplay"] == 1 ) then
BGBuddy_StandardFrame:Hide();
else
BGBuddy_StandardFrame:Show();
end
end
function BGBuddy_SetRankInfo(rankName, rankNumber)
if ( rankNumber < 1 ) then
BGBuddy_RankName:SetText(BGBUDDY_PLAYER_RANK_UNRANKED);
BGBuddy_RankFrameIcon:Hide();
else
BGBuddy_RankName:SetText(rankName);
BGBuddy_RankFrameIcon:SetTexture(format("%s%02d","Interface\\PvPRankBadges\\PvPRank", rankNumber));
end
end
-- GetBattlefieldInfo(0); ???
-- ShowBattlefieldList(0); ???
-- GetNumBattlefields(); Number fo instances on the menu in range
function BGBuddy_UpdateDisplay()
-- Reset the display
BGBuddy_ClearLines();
-- Get all battlefield statuses
local bgStatus = { };
local hasBGStatus = nil;
honorshown = false;
for i=1, MAX_BATTLEFIELD_QUEUES do
local status, mapName, instanceID = GetBattlefieldStatus(i);
bgStatus[i] = { };
bgStatus[i]["status"] = status;
bgStatus[i]["map"] = mapName;
bgStatus[i]["id"] = instanceID;
-- Show honor on top if we've opted to always display it
if ( BGBuddy_SavedVars["config"]["alwaysShowHonor"] == 1
and honorshown == false
and status ~= "active" ) then
BGBuddy_AddLine(NORMAL_FONT_COLOR_CODE..BGBUDDY_ALWAYS_SHOW_HONOR_STRING..
HIGHLIGHT_FONT_COLOR_CODE..sessionhonor..FONT_COLOR_CODE_CLOSE);
honorshown = true;
end
if( status == "queued" ) then
hasBGStatus = true;
BGBuddy_ProcessSingleQueue(i, bgStatus[i]);
elseif( status == "confirm" ) then
hasBGStatus = true;
BGBuddy_ProcessReady(i, bgStatus[i]);
elseif( status == "active" ) then
hasBGStatus = true;
BGBuddy_ProcessActive(bgStatus[i]);
end
end
-- No PvP right now? :(
if( hasBGStatus == nil ) then
BGBuddy_ProcessNotQueued();
end
BGBuddy_StandardFrame.status = "ERROR";
BGBuddy_StandardFrame.mapName = "ERROR";
BGBuddy_StandardFrame.instanceID = "ERROR";
BGBuddy_DisplayLines();
end
-- Function to be called if there are NO active queues
function BGBuddy_ProcessNotQueued()
BGBuddy_AddLine(GRAY_FONT_COLOR_CODE..BGBUDDY_NOT_IN_QUEUE..FONT_COLOR_CODE_CLOSE);
-- Handle mod visibility preferences
if ( BGBuddy_SavedVars["config"]["isAlwaysVisible"] == 0 ) then
BGBuddy_StandardFrame:Hide();
else
if ( BGBuddy_SavedVars["config"]["hideDisplay"] == 0 ) then
BGBuddy_StandardFrame:Show();
end
end
BGBuddy_OverlayFrame_EnterButton:Hide();
BGBuddy_OverlayFrame_LeaveButton:Hide();
BGBuddy_ScoreFrame:Hide();
end
-- Function to be called for each queued battleground
-- this must not interfere with active battlegrounds
function BGBuddy_ProcessSingleQueue(index, bgStatus)
soundplayed[bgStatus["map"]] = false;
local waitTime = GetBattlefieldEstimatedWaitTime(index);
local timeInQueue = GetBattlefieldTimeWaited(index)/1000;
timeInQueue = SecondsToTime(timeInQueue, BGBuddy_SavedVars["queued"]["showQueuedSeconds"] );
-- We really should show seconds if minutes are 0
if( timeInQueue == "" and BGBuddy_SavedVars["queued"]["showQueuedSeconds"] ~= nil ) then
timeInQueue = GetBattlefieldTimeWaited(index)/1000;
timeInQueue = SecondsToTime(timeInQueue);
end
if ( waitTime == 0 ) then
waitTime = UNAVAILABLE;
elseif ( waitTime < 60000 ) then
waitTime = LESS_THAN_ONE_MINUTE;
else
waitTime = SecondsToTime(waitTime/1000, 1);
end
if( bgStatus["id"] ~= 0 ) then
BGBuddy_AddLine(NORMAL_FONT_COLOR_CODE..BGBUDDY_IN_QUEUE..FONT_COLOR_CODE_CLOSE..
GREEN_FONT_COLOR_CODE..bgStatus["map"].." "..bgStatus["id"]..
FONT_COLOR_CODE_CLOSE);
else -- If first availible
BGBuddy_AddLine(NORMAL_FONT_COLOR_CODE..BGBUDDY_IN_QUEUE..FONT_COLOR_CODE_CLOSE..
GREEN_FONT_COLOR_CODE..bgStatus["map"]..FONT_COLOR_CODE_CLOSE..
GREEN_FONT_COLOR_CODE.." "..BGBUDDY_FIRST_AVAILABLE..FONT_COLOR_CODE_CLOSE);
end
BGBuddy_AddLine(HIGHLIGHT_FONT_COLOR_CODE..waitTime.." ("..GRAY_FONT_COLOR_CODE..
timeInQueue..FONT_COLOR_CODE_CLOSE..")"..FONT_COLOR_CODE_CLOSE);
if ( BGBuddy_SavedVars["config"]["hideDisplay"] == 0 ) then
BGBuddy_StandardFrame:Show();
BGBuddy_ScoreFrame:Show();
if ( BGBuddy_SavedVars["config"]["hideBGIcon"] == 1 ) then
MiniMapBattlefieldFrame:Hide();
else
MiniMapBattlefieldFrame:Show();
end
end
BGBuddy_OverlayFrame_EnterButton:Hide();
BGBuddy_OverlayFrame_LeaveButton:Hide();
end
-- Function to be called for and active battleground
-- can only be called once per update (duh)
function BGBuddy_ProcessActive(bgStatus)
RequestBattlefieldScoreData();
local playerName = UnitName("player");
local av = BGBuddy_SavedVars["alterac_valley"];
local wsg = BGBuddy_SavedVars["warsong_gulch"];
local ab = BGBuddy_SavedVars["arathi_basin"];
local numScores = GetNumBattlefieldScores();
local name, kills, killingblows, deaths, honorgained, faction, rank, race, class;
local totalplayers = 0;
local playerstanding = 0;
local playerkills = 0;
local playerkillingblows = 0;
local playerdeaths = 0;
local playerhonorgained = 0;
local playerfaction = 0;
local playerrank = 0;
local playerrace = 0;
local playerclass = 0;
BGBuddy_SyncResTimer();
for i=1, 80 do
name, _, _, _, _, _, _, _, playerclass = GetBattlefieldScore(i);
if ( playerclass ~= nil ) then
totalplayers = totalplayers + 1;
else
break;
end
if ( name == playerName ) then
playerstanding = i;
_, playerkillingblows, playerkills, playerdeaths, playerhonorgained, playerfaction, playerrank, playerrace, _ = GetBattlefieldScore(i);
playerlifetimekills,_,_ = GetPVPLifetimeStats();
bonusHonor = playerhonorgained;
end
end
if( bgStatus["map"] == BGBUDDY_BATTLEGROUND_ALTERAC_VALLEY ) then
local numStatColumns = GetNumBattlefieldStats();
for j=1, MAX_NUM_STAT_COLUMNS do
if ( j <= numStatColumns ) then
columnData = GetBattlefieldStatData(playerstanding, j);
if (j==1) then
playergraveyardsassaulted = columnData;
elseif (j==2) then
playergraveyardsdefended = columnData;
elseif (j==3) then
playertowersassaulted = columnData;
elseif (j==4) then
playertowersdefended = columnData;
elseif (j==5) then
playerminescaptured = columnData;
elseif (j==6) then
playerleaderskilled = columnData;
elseif (j==7) then
playersecondaryobjectives = columnData;
end
end
end
elseif( bgStatus["map"] == BGBUDDY_BATTLEGROUND_ARATHI_BASIN ) then
local numStatColumns = GetNumBattlefieldStats();
for j=1, MAX_NUM_STAT_COLUMNS do
if ( j <= numStatColumns ) then
columnData = GetBattlefieldStatData(playerstanding, j);
if (j==1) then
playergraveyardsassaulted = columnData;
elseif (j==2) then
playergraveyardsdefended = columnData;
else
break;
end
end
end
playertowersassaulted = GetBattlefieldWinner();
if( playertowersassaulted == nil ) then playertowersassaulted = "N/A"; end
playertowersdefended = "N/A";
playerminescaptured = "N/A";
playerleaderskilled = "N/A";
playersecondaryobjectives = "N/A";
else
playergraveyardsassaulted = "N/A";
playergraveyardsdefended = "N/A";
playertowersassaulted = "N/A";
playertowersdefended = "N/A";
playerminescaptured = "N/A";
playerleaderskilled = "N/A";
playersecondaryobjectives = "N/A";
end
-- Just in case some values are still nill
-- It shouldnt happen, but it does.
if (playerlifetimekills == nil) then
playerlifetimekills = "N/A";
end
if (playername == nil) then
playername = "N/A";
end
if (playerkills == nil) then
playerkills = "N/A";
end
if (playerdeaths == nil) then
playerdeaths = "N/A";
end
if (playerkillingblows == nil) then
playerkillingblows = "N/A";
end
if (playerhonorgained == nil) then
playerhonorgained = "N/A";
bonusHonor = 0;
end
if (playerfaction == nil) then
playerfaction = "N/A";
end
if (playerrank == nil) then
playerrank = "N/A";
end
if (playerrace == nil) then
playerrace = "N/A";
end
if (playerclass == nil) then
playerclass = "N/A";
end
if ( playergraveyardsassaulted == nil ) then
playergraveyardsassaulted = "N/A";
end
if ( playergraveyardsdefended == nil ) then
playergraveyardsdefended = "N/A";
end
sSub = HIGHLIGHT_FONT_COLOR_CODE..playerstanding.."/"..totalplayers..NORMAL_FONT_COLOR_CODE;
kSub = GRAY_FONT_COLOR_CODE..playerkills..NORMAL_FONT_COLOR_CODE;
kbSub = GREEN_FONT_COLOR_CODE..playerkillingblows..NORMAL_FONT_COLOR_CODE;
lkSub = HIGHLIGHT_FONT_COLOR_CODE..playerlifetimekills..NORMAL_FONT_COLOR_CODE;
dSub = RED_FONT_COLOR_CODE..playerdeaths..NORMAL_FONT_COLOR_CODE;
shSub = HIGHLIGHT_FONT_COLOR_CODE..sessionhonor..NORMAL_FONT_COLOR_CODE;
khSub = HIGHLIGHT_FONT_COLOR_CODE..sessionkillhonor..NORMAL_FONT_COLOR_CODE;
lkhSub = HIGHLIGHT_FONT_COLOR_CODE..lastkill..NORMAL_FONT_COLOR_CODE;
bhSub = HIGHLIGHT_FONT_COLOR_CODE..playerhonorgained..NORMAL_FONT_COLOR_CODE;
gyaSub = RED_FONT_COLOR_CODE..playergraveyardsassaulted..NORMAL_FONT_COLOR_CODE;
gydSub = GREEN_FONT_COLOR_CODE..playergraveyardsdefended..NORMAL_FONT_COLOR_CODE;
taSub = RED_FONT_COLOR_CODE..playertowersassaulted..NORMAL_FONT_COLOR_CODE;
tdSub = GREEN_FONT_COLOR_CODE..playertowersdefended..NORMAL_FONT_COLOR_CODE;
mcSub = HIGHLIGHT_FONT_COLOR_CODE..playerminescaptured..NORMAL_FONT_COLOR_CODE;
ldkSub = HIGHLIGHT_FONT_COLOR_CODE..playerleaderskilled..NORMAL_FONT_COLOR_CODE;
soSub = HIGHLIGHT_FONT_COLOR_CODE..playersecondaryobjectives..NORMAL_FONT_COLOR_CODE;
bgSub = GREEN_FONT_COLOR_CODE..bgStatus["map"].." "..bgStatus["id"]..FONT_COLOR_CODE_CLOSE;
if( resTimeSet == false ) then
resSub = RED_FONT_COLOR_CODE.."N/A"..NORMAL_FONT_COLOR_CODE;
else
local time_left = ceil(timer_nextRes - this_GameTime);
if( time_left == 31 ) then
resSub = RED_FONT_COLOR_CODE.."RES!"..NORMAL_FONT_COLOR_CODE;
elseif( time_left < 6 ) then
resSub = RED_FONT_COLOR_CODE..time_left..NORMAL_FONT_COLOR_CODE;
elseif( time_left < 15 ) then
resSub = GREEN_FONT_COLOR_CODE..time_left..NORMAL_FONT_COLOR_CODE;
else
resSub = HIGHLIGHT_FONT_COLOR_CODE..time_left..NORMAL_FONT_COLOR_CODE;
end
end
newString = nil;
if ( bgStatus["map"] == BGBUDDY_BATTLEGROUND_ALTERAC_VALLEY ) then
newString = BGBuddy_SavedVars["alterac_valley"]["customizeText"];
elseif ( bgStatus["map"] == BGBUDDY_BATTLEGROUND_WARSONG_GULCH ) then
newString = BGBuddy_SavedVars["warsong_gulch"]["customizeText"];
elseif ( bgStatus["map"] == BGBUDDY_BATTLEGROUND_ARATHI_BASIN ) then
newString = BGBuddy_SavedVars["arathi_basin"]["customizeText"];
end
if ( newString ~= nil ) then
newString = gsub(newString,"~LKH",lkhSub);
newString = gsub(newString,"~LDK",ldkSub);
newString = gsub(newString,"~GYA",gyaSub);
newString = gsub(newString,"~GYD",gydSub);
newString = gsub(newString,"~KB",kbSub);
newString = gsub(newString,"~LK",lkSub);
newString = gsub(newString,"~SH",shSub);
newString = gsub(newString,"~KH",khSub);
newString = gsub(newString,"~BH",bhSub);
newString = gsub(newString,"~TA",taSub);
newString = gsub(newString,"~TD",tdSub);
newString = gsub(newString,"~MC",mcSub);
newString = gsub(newString,"~SO",soSub);
newString = gsub(newString,"~K",kSub);
newString = gsub(newString,"~D",dSub);
newString = gsub(newString,"~S",sSub);
newString = gsub(newString,"~BG",bgSub);
newString = gsub(newString,"~RES",resSub);
BGBuddy_AddLine(NORMAL_FONT_COLOR_CODE..newString);
end
if ( BGBuddy_SavedVars["config"]["hideBGIcon"] == 1 ) then
MiniMapBattlefieldFrame:Hide();
else
MiniMapBattlefieldFrame:Show();
end
BGBuddy_OverlayFrame_EnterButton:Hide();
BGBuddy_OverlayFrame_LeaveButton:Hide();
BGBuddy_OverlayFrame_SwitchButton:Hide();
if ( BGBuddy_SavedVars["config"]["hideDisplay"] == 0 ) then
BGBuddy_ScoreFrame:Show();
BGBuddy_StandardFrame:Show();
end
end
-- Function to be called for each battleground that
-- is ready to join
function BGBuddy_ProcessReady(index, bgStatus)
if ( BGBuddy_SavedVars["config"]["playSound"] == 1 and soundplayed[bgStatus["map"]] == false) then
PlaySoundFile("Interface\\AddOns\\BGBuddy\\BGBuddy_BattlegroundReady.wav");
soundplayed[bgStatus["map"]] = true;
end
BGBuddy_AddLine(GREEN_FONT_COLOR_CODE..bgStatus["map"]..FONT_COLOR_CODE_CLOSE..
HIGHLIGHT_FONT_COLOR_CODE..BGBUDDY_BATTLEGROUND_READY..FONT_COLOR_CODE_CLOSE);
local expireTime = GetBattlefieldPortExpiration(index)/1000
local autoJoinTime = SecondsToTime(expireTime-2);
local manualJoinTime = SecondsToTime(expireTime);
if ( BGBuddy_SavedVars["config"]["delayedAutoJoin"] == 1
and BGBuddy_SavedVars["config"]["AutoJoin"] == 1 ) then
BGBuddy_AddLine(NORMAL_FONT_COLOR_CODE..BGBUDDY_BATTLEGROUND_JOIN_TIME..
FONT_COLOR_CODE_CLOSE..RED_FONT_COLOR_CODE..autoJoinTime..FONT_COLOR_CODE_CLOSE);
else
BGBuddy_AddLine(NORMAL_FONT_COLOR_CODE..BGBUDDY_BATTLEGROUND_JOIN_EXPIRE..
FONT_COLOR_CODE_CLOSE..RED_FONT_COLOR_CODE..manualJoinTime..FONT_COLOR_CODE_CLOSE);
end
BGBuddy_AutoJoin(index);
StaticPopup_Hide("CONFIRM_BATTLEFIELD_ENTRY");
if ( BGBuddy_SavedVars["config"]["hideBGIcon"] == 1 ) then
MiniMapBattlefieldFrame:Hide();
else
MiniMapBattlefieldFrame:Show();
end
BGBuddy_OverlayFrame_LeaveButton:Hide();
if ( BGBuddy_SavedVars["config"]["hideDisplay"] == 0 ) then
BGBuddy_StandardFrame:Show();
BGBuddy_OverlayFrame_EnterButton:Show();
BGBuddy_ScoreFrame:Show();
end
bonusHonor = -1;
end
-- Add a line to the ui display
function BGBuddy_AddLine(arg1)
lines[current_line] = arg1;
current_line = current_line + 1;
end
function BGBuddy_ClearLines()
lines = { };
current_line = 1;
end
function BGBuddy_DisplayLines()
-- Clear out the UI text field
BGBuddy_Line1:SetText("");
local lineCount = 0;
local display_text = "";
for i=1, (current_line+1) do
if( lines[i] ~= nil ) then
if( i ~= 1) then
display_text = display_text.."\n";
end
display_text = display_text..lines[i];
lineCount = lineCount + 1;
end
end
BGBuddy_Line1:SetText(display_text);
local baseHeight = 0;
if( lineCount > 0 ) then
baseHeight = baseHeight + math.floor(lineCount * 13);
end
maxWidth = BGBuddy_Line1:GetWidth();
if ( (BGBuddy_RankName:GetWidth()+40) > maxWidth and BGBuddy_SavedVars["config"]["displayRank"] == 1 ) then
maxWidth = BGBuddy_RankName:GetWidth() + 40;
end
if ( BGBuddy_ScoreFrame:IsVisible() ) then
maxWidth = maxWidth + 17;
end
if ( BGBuddy_SavedVars["config"]["displayRank"] == 1 ) then
baseHeight = baseHeight + 16;
BGBuddy_RankFrame:Show();
else
BGBuddy_RankFrame:Hide();
end
BGBuddy_StandardFrame:SetHeight(baseHeight);
BGBuddy_StandardFrame:SetWidth(maxWidth);
end
function BGBuddy_OnMouseDown(arg1)
if (arg1 == "LeftButton" and BGBuddy_SavedVars["config"]["isLocked"] == 0) then
BGBuddy_StandardFrame:StartMoving();
end
if (arg1 == "RightButton") then
ShowUIPanel(BGBuddy_ConfigPanel_CustomizeDisplay);
end
end
function BGBuddy_OnMouseUp(arg1)
if (arg1 == "LeftButton") then
BGBuddy_StandardFrame:StopMovingOrSizing();
end
end
function BGBuddy_Config_SetCustomDisplay()
custom_text = ConfigureBodyEditBox:GetText();
if ( AVLabel:IsVisible() == 1 ) then
BGBuddy_SavedVars["alterac_valley"]["customizeText"] = custom_text;
elseif ( WSGLabel:IsVisible() == 1 ) then
BGBuddy_SavedVars["warsong_gulch"]["customizeText"] = custom_text;
elseif ( ABLabel:IsVisible() == 1 ) then
BGBuddy_SavedVars["arathi_basin"]["customizeText"] = custom_text;
end
end
-- Sets the check boxes and line text to match the current saved settings
function BGBuddy_Config_ChangeCustomDisplay(bg)
custom_text = " ";
AVLabel:Hide();
WSGLabel:Hide();
ABLabel:Hide();
LegendValue2_AV:Hide();
LegendValue2_WSG:Hide();
LegendValue2_AB:Hide();
LegendEquals2_AV:Hide();
LegendEquals2_WSG:Hide();
LegendKeys2_AV:Hide();
LegendKeys2_WSG:Hide();
if ( bg == "AV" ) then
AVLabel:Show();
LegendValue2_AV:Show();
LegendEquals2_AV:Show();
LegendKeys2_AV:Show();
custom_text = BGBuddy_SavedVars["alterac_valley"]["customizeText"];
elseif ( bg == "WSG" ) then
WSGLabel:Show();
LegendValue2_WSG:Show();
LegendEquals2_WSG:Show();
LegendKeys2_WSG:Show()
custom_text = BGBuddy_SavedVars["warsong_gulch"]["customizeText"];
elseif ( bg == "AB" ) then
ABLabel:Show();
LegendValue2_AB:Show();
LegendEquals2_WSG:Show();
LegendKeys2_WSG:Show();
custom_text = BGBuddy_SavedVars["arathi_basin"]["customizeText"];
else
return;
end
ConfigureBodyEditBox:SetText(custom_text);
end
function BGBuddy_Config_ChangeCustomDisplayNBG(tab)
custom_text = "";
AVLabel:Hide();
WSGLabel:Hide();
ABLabel:Hide();
LegendValue2_AV:Hide();
LegendValue2_WSG:Hide();
LegendValue2_AB:Hide();
LegendEquals2_AV:Hide();
LegendEquals2_WSG:Hide();
LegendKeys2_AV:Hide();
LegendKeys2_WSG:Hide();
if ( bg == "AV" ) then
AVLabel:Show();
LegendValue2_AV:Show();
LegendEquals2_AV:Show();
LegendKeys2_AV:Show();
custom_text = BGBuddy_SavedVars["queued"]["customizeText"];
elseif ( bg == "WSG" ) then
WSGLabel:Show();
LegendValue2_WSG:Show();
LegendEquals2_WSG:Show();
LegendKeys2_WSG:Show()
custom_text = BGBuddy_SavedVars["not_queued"]["customizeText"];
else
return;
end
ConfigureBodyEditBox:SetText(custom_text);
end
--
-- Timers
--
-- Sync the res timers, or try to keep count
function BGBuddy_SyncResTimer()
local spiritTimer = GetAreaSpiritHealerTime();
if( spiritTimer ~= 0 and spiritTimer ~= nil ) then
timer_nextRes = ceil(this_GameTime) + spiritTimer;
resTimeSet = true;
return;
end
if( resTimeSet == true ) then
-- Countdown is -1 < x < 31.
while( (timer_nextRes - this_GameTime) < 0 ) do
timer_nextRes = timer_nextRes + 31;
end
-- Only decrement the counter about once per second
if( (floor(this_GameTime) - ceil(last_GameTime)) >= 1 ) then
last_GameTime = this_GameTime;
end
end
end
-- Update the timers res timer when it hits 0
function BGBuddy_UpdateResTimer()
end
--
-- UI Button Panels
--
-- Enables all buttons, then disables the currently active button
function BGBuddy_Config_SetButtonState(button)
-- BG
BGBuddy_ConfigPanel_CustomizeDisplay.selectedTab = button;
PanelTemplates_UpdateTabs(BGBuddy_ConfigPanel_CustomizeDisplay);
end
-- Sets up the customize drop down
function BGBuddy_ConfigPanel_CustomizeDropdown_OnLoad()
UIDropDownMenu_Initialize( this, BGBuddy_ConfigPanel_CustomizeDropdown_Init );
end
function BGBuddy_ConfigPanel_CustomizeDropdown_Init()
local battlegrounds = { };
battlegrounds.text = BGBUDDY_CONFIG_DROPDOWN_BG;
battlegrounds.value = "bg";
battlegrounds.func = BGBuddy_ShowConfigPanel;
battlegrounds.toolTipTitle = BGBUDDY_CONFIG_DROPDOWN_TITLE;
battlegrounds.toolTipText = BGBUDDY_CONFIG_DROPTOWN_BG_TIP;
--[[ local nonbattlegrounds = { };
nonbattlegrounds.text = BGBUDDY_CONFIG_DROPDOWN_NONBG;
nonbattlegrounds.value = "nbg";
nonbattlegrounds.func = BGBuddy_ShowConfigPanel;
nonbattlegrounds.toolTipTitle = BGBUDDY_CONFIG_DROPDOWN_TITLE;
nonbattlegrounds.toolTipText = BGBUDDY_CONFIG_DROPDOWN_NONBG_TIP;
]]
local general = { };
general.text = BGBUDDY_CONFIG_DROPDOWN_GENERAL;
general.value = "gen";
general.func = BGBuddy_ShowConfigPanel;
general.toolTipTitle = BGBUDDY_CONFIG_DROPDOWN_TITLE;
general.toolTipText = BGBUDDY_CONFIG_DROPDOWN_GENERAL_TIP;
UIDropDownMenu_AddButton( battlegrounds, 1 );
-- UIDropDownMenu_AddButton( nonbattlegrounds, 1 );
UIDropDownMenu_AddButton( general, 1 );
end
function BGBuddy_ShowConfigPanel(id, value)
if( id == nil ) then
id = this:GetID();
end
if( value == nil ) then
value = this.value;
end
UIDropDownMenu_SetSelectedID(BGBuddy_ConfigPanel_CustomizeDropdown, id, nil);
BGBuddy_ConfigPanel_CustomizeBG:Hide();
-- BGBuddy_ConfigPanel_CustomizeNonBG:Hide();
BGBuddy_ConfigPanel_CustomizeGeneral:Hide();
if ( value == "bg" ) then
BGBuddy_ConfigPanel_CustomizeBG:Show();
-- elseif ( value == "nbg" ) then
-- BGBuddy_ConfigPanel_CustomizeNonBG:Show();
elseif ( value == "gen" ) then
BGBuddy_ConfigPanel_CustomizeGeneral:Show();
end
end
--
-- General Config Handling Functions
--
function BGBuddy_Config_SetAlpha()
BGBuddy_ConfigPanel_Slider1:SetValue(BGBuddy_SavedVars["config"]["backgroundAlpha"]);
BGBuddy_ConfigPanel_Slider2:SetValue(BGBuddy_SavedVars["config"]["borderAlpha"]);
end
function BGBuddy_Config_SetBackgroundAlpha()
BGBuddy_SavedVars["config"]["backgroundAlpha"] = BGBuddy_ConfigPanel_Slider1:GetValue();
BGBuddy_ConfigPanel_Slider1ValueText:SetText(BGBuddy_SavedVars["config"]["backgroundAlpha"].."%");
alpha = BGBuddy_SavedVars["config"]["backgroundAlpha"];
alpha = alpha * 0.01;
BGBuddy_StandardFrame:SetBackdropColor(0, 0, 0, alpha);
end
function BGBuddy_Config_SetBorderAlpha()
BGBuddy_SavedVars["config"]["borderAlpha"] = BGBuddy_ConfigPanel_Slider2:GetValue();
BGBuddy_ConfigPanel_Slider2ValueText:SetText(BGBuddy_SavedVars["config"]["borderAlpha"].."%");
alpha = BGBuddy_SavedVars["config"]["borderAlpha"];
alpha = alpha * 0.01;
BGBuddy_StandardFrame:SetBackdropBorderColor(1, 1, 1, alpha);
end
function BGBuddy_Config_SetUiScale()
BGBuddy_SavedVars["config"]["uiScale"] = BGBuddy_ConfigPanel_Slider3:GetValue();
BGBuddy_ConfigPanel_Slider3ValueText:SetText((100+(math.floor(BGBuddy_SavedVars["config"]["uiScale"])).."%"));
BGBuddy_StandardFrame:SetScale(1 + (BGBuddy_SavedVars["config"]["uiScale"]/100));
end
function BGBuddy_Config_SetEnabled()
if ( BGBuddy_ConfigPanel_EnableBGBuddy:GetChecked() == 1 ) then
BGBuddy_Initialize();
BGBuddy_Config_SetVisibilityStatus();
else
DEFAULT_CHAT_FRAME:AddMessage(BGBUDDY_TITLE.." "..BGBUDDY_VERSION..BGBUDDY_DISABLED_CHAT_MESSAGE);
BGBuddy_StandardFrame:Hide();
end
end
function BGBuddy_Config_SetVisibility()
if ( BGBuddy_SavedVars["config"]["hideDisplay"] == 1 ) then
BGBuddy_StandardFrame:Hide();
DEFAULT_CHAT_FRAME:AddMessage(BGBUDDY_TITLE.." "..BGBUDDY_VERSION..BGBUDDY_HIDDEN_CHAT_MESSAGE);
else
BGBuddy_StandardFrame:Show();
end
end
function BGBuddy_Config_SetVisibilityStatus()
if ( BGBuddy_SavedVars["config"]["isAlwaysVisible"] == 1 ) then
if ( BGBuddy_SavedVars["config"]["hideDisplay"] == 0 ) then
BGBuddy_StandardFrame:Show();
end
end
end
function BGBuddy_AutoJoin(index)
local expireTime = GetBattlefieldPortExpiration(index)/1000
if( BGBuddy_SavedVars["config"]["AutoJoin"] == 1 ) then
if( BGBuddy_SavedVars["config"]["delayedAutoJoin"] == 0 ) then
AcceptBattlefieldPort(index, true);
StaticPopup_Hide("CONFIRM_BATTLEFIELD_ENTRY");
else
expireTime = math.floor(expireTime);
if( expireTime == 2 ) then
AcceptBattlefieldPort(index, true);
StaticPopup_Hide("CONFIRM_BATTLEFIELD_ENTRY");
end
end
end
end
-- Standard as of WoW 1.7
function BGBuddy_AutoRes()
-- local status, _, _ = GetBattlefieldStatus();
-- if ( BGBuddy_ConfigPanel_AutoRes:GetChecked() == 1) then
-- BGBuddy_SavedVars["config"]["AutoRes"] = 1;
-- if ( status == "active" ) then
--
-- if ( UnitIsGhost("player") ) then
-- AcceptAreaSpiritHeal();
-- getglobal("StaticPopup1Button1"):Hide();
-- getglobal("StaticPopup1Button2"):Hide();
-- end
-- end
-- else
-- BGBuddy_SavedVars["config"]["AutoRes"] = 0;
-- end
end
function BGBuddy_AutoRelease()
for i=1, MAX_BATTLEFIELD_QUEUES do
local _, _, instanceID = GetBattlefieldStatus(i)
if( BGBuddy_SavedVars["config"]["AutoRelease"] == 1
and UnitIsDeadOrGhost("player")
and HasSoulstone() == nil
and instanceID ~= 0 ) then
RepopMe();
end
end
end
-- Generic output
function BGBuddy_ChatReport(msg)
DEFAULT_CHAT_FRAME:AddMessage(msg,1,0,0.35);
end
------------------------------
-- Debug Functions
------------------------------
function bgbdebug(msg)
if( debug_enable == 1 ) then
BGBuddy_ChatReport( "BGB Debug: "..msg );
end
end
function BGBuddy_ToggleDebug()
if( debug_enable == 1 ) then
debug_enable = 0;
DEFAULT_CHAT_FRAME:AddMessage("BGB Debugging: Disabled",1,0.65,1);
return;
end
debug_enable = 1;
DEFAULT_CHAT_FRAME:AddMessage("BGB Debugging: Enabled",1,0.65,1);
end