MAX_ARENA_TEAMS = 3; MAX_ARENA_TEAM_MEMBERS = 10; MAX_ARENA_TEAM_NAME_WIDTH = 310; function PVPFrame_OnLoad(self) PVPFrameLine1:SetAlpha(0.3); PVPHonorKillsLabel:SetVertexColor(0.6, 0.6, 0.6); PVPHonorHonorLabel:SetVertexColor(0.6, 0.6, 0.6); PVPHonorTodayLabel:SetVertexColor(0.6, 0.6, 0.6); PVPHonorYesterdayLabel:SetVertexColor(0.6, 0.6, 0.6); PVPHonorLifetimeLabel:SetVertexColor(0.6, 0.6, 0.6); self:RegisterEvent("PLAYER_ENTERING_WORLD"); self:RegisterEvent("ARENA_TEAM_UPDATE"); self:RegisterEvent("ARENA_TEAM_ROSTER_UPDATE"); self:RegisterEvent("PLAYER_PVP_KILLS_CHANGED"); self:RegisterEvent("PLAYER_PVP_RANK_CHANGED"); self:RegisterEvent("HONOR_CURRENCY_UPDATE"); --self:RegisterEvent("ARENA_SEASON_WORLD_STATE"); end function PVPFrame_OnEvent(self, event, ...) local arg1 = ...; if ( event == "PLAYER_ENTERING_WORLD" ) then -- PVPFrame.season = GetCurrentArenaSeason(); PVPFrame_Update(); PVPHonor_Update(); elseif ( event == "PLAYER_PVP_KILLS_CHANGED" or event == "PLAYER_PVP_RANK_CHANGED") then PVPHonor_Update(); elseif ( event == "ARENA_TEAM_UPDATE" ) then PVPFrame_Update(); if ( PVPTeamDetails:IsShown() ) then local team = GetArenaTeam(PVPTeamDetails.team); if ( not team ) then PVPTeamDetails:Hide(); else PVPTeamDetails_Update(PVPTeamDetails.team); -- team games played/won are shown in the detail frame end end --[[ elseif ( event == "ARENA_SEASON_WORLD_STATE" ) then PVPFrame.season = GetCurrentArenaSeason(); PVPFrame_Update(); ]] elseif ( event == "HONOR_CURRENCY_UPDATE" ) then PVPHonor_Update(); elseif ( event == "ARENA_TEAM_ROSTER_UPDATE" ) then if ( arg1 ) then if ( PVPTeamDetails:IsShown() ) then ArenaTeamRoster(PVPTeamDetails.team); end elseif ( PVPTeamDetails.team ) then PVPTeamDetails_Update(PVPTeamDetails.team); PVPFrame_Update(); end end end function PVPFrame_OnShow() PVPFrame_SetFaction(); PVPFrame_Update(); PVPMicroButton_SetPushed(); UpdateMicroButtons(); SetPortraitTexture(PVPFramePortrait, "player"); PlaySound("igCharacterInfoOpen"); end function PVPFrame_OnHide() PVPTeamDetails:Hide(); PVPFrame_SetJustBG(false); PVPMicroButton_SetNormal(); UpdateMicroButtons(); PlaySound("igCharacterInfoClose"); end function PVPFrame_SetFaction() local factionGroup = UnitFactionGroup("player"); if ( factionGroup ) then PVPFrameHonorIcon:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..factionGroup); PVPFrameHonorIcon:Show(); end end function PVPFrame_Update() for i=1, MAX_ARENA_TEAMS do GetArenaTeam(i); end PVPHonor_Update(); PVPTeam_Update(); if ( GetCurrentArenaSeason() == 0 ) then --We're in an off-season. PVPFrame_SetToOffSeason(); elseif ( PVPFrameOffSeason:IsShown() ) then PVPFrame_SetToInSeason(); end end function PVPTeam_Update() -- Display Elements local button, buttonName, highlight, data, standard, emblem, border; -- Data Elements local teamName, teamSize, teamRating, teamPlayed, teamWins, teamLoss, seasonTeamPlayed, seasonTeamWins, playerPlayed, seasonPlayerPlayed, playerPlayedPct, teamRank, playerRating; local played, wins, loss; local background = {}; local borderColor = {}; local emblemColor = {}; local ARENA_TEAMS = {}; ARENA_TEAMS[1] = {size = 2}; ARENA_TEAMS[2] = {size = 3}; ARENA_TEAMS[3] = {size = 5}; -- Sort teams by size local count = 0; local buttonIndex = 0; for index, value in pairs(ARENA_TEAMS) do for i=1, MAX_ARENA_TEAMS do teamName, teamSize = GetArenaTeam(i); if ( value.size == teamSize ) then value.index = i; end end end -- fill out data for index, value in pairs(ARENA_TEAMS) do buttonIndex = buttonIndex + 1; button = _G["PVPTeam"..buttonIndex]; if ( value.index ) then -- Pull Values teamName, teamSize, teamRating, teamPlayed, teamWins, seasonTeamPlayed, seasonTeamWins, playerPlayed, seasonPlayerPlayed, teamRank, playerRating, background.r, background.g, background.b, emblem, emblemColor.r, emblemColor.g, emblemColor.b, border, borderColor.r, borderColor.g, borderColor.b = GetArenaTeam(value.index); -- Set button elements to variables buttonName = "PVPTeam"..buttonIndex; data = buttonName.."Data"; standard = buttonName.."Standard"; button:SetID(value.index); if ( PVPFrame.seasonStats ) then _G[data.."TypeLabel"]:SetText(ARENA_THIS_SEASON); PVPFrameToggleButton:SetText(ARENA_THIS_WEEK_TOGGLE); played = seasonTeamPlayed; wins = seasonTeamWins; playerPlayed = seasonPlayerPlayed; else _G[data.."TypeLabel"]:SetText(ARENA_THIS_WEEK); PVPFrameToggleButton:SetText(ARENA_THIS_SEASON_TOGGLE); played = teamPlayed; wins = teamWins; playerPlayed = playerPlayed; end loss = played - wins; if ( played ~= 0 ) then playerPlayedPct = floor( ( playerPlayed / played ) * 100 ); else playerPlayedPct = floor( ( playerPlayed / 1 ) * 100 ); end -- Populate Data _G[data.."Name"]:SetText(teamName); _G[data.."Rating"]:SetText(teamRating); _G[data.."Games"]:SetText(played); _G[data.."Wins"]:SetText(wins); _G[data.."Loss"]:SetText(loss); if ( PVPFrame.seasonStats ) then _G[data.."Played"]:SetText(playerRating); _G[data.."Played"]:SetVertexColor(1.0, 1.0, 1.0); _G[data.."PlayedLabel"]:SetText(PVP_YOUR_RATING); else -- played % if ( playerPlayedPct < 10 ) then _G[data.."Played"]:SetVertexColor(1.0, 0, 0); else _G[data.."Played"]:SetVertexColor(1.0, 1.0, 1.0); end -- FIXME: Turn this into a localized format string playerPlayedPct = format("%d", playerPlayedPct); _G[data.."Played"]:SetText(playerPlayed.." ("..playerPlayedPct.."%)"); _G[data.."PlayedLabel"]:SetText(PLAYED); end -- Set TeamSize Banner _G[standard.."Banner"]:SetTexture("Interface\\PVPFrame\\PVP-Banner-"..teamSize); _G[standard.."Banner"]:SetVertexColor(background.r, background.g, background.b); _G[standard.."Border"]:SetVertexColor(borderColor.r, borderColor.g, borderColor.b); _G[standard.."Emblem"]:SetVertexColor(emblemColor.r, emblemColor.g, emblemColor.b); if ( border ~= -1 ) then _G[standard.."Border"]:SetTexture("Interface\\PVPFrame\\PVP-Banner-"..teamSize.."-Border-"..border); end if ( emblem ~= -1 ) then _G[standard.."Emblem"]:SetTexture("Interface\\PVPFrame\\Icons\\PVP-Banner-Emblem-"..emblem); end -- Set visual elements _G[data]:Show(); button:SetAlpha(1); _G[buttonName.."Highlight"]:SetAlpha(1); _G[buttonName.."Highlight"]:SetBackdropBorderColor(1.0, 0.82, 0); _G[standard]:SetAlpha(1); _G[standard.."Border"]:Show(); _G[standard.."Emblem"]:Show(); _G[buttonName.."Background"]:SetVertexColor(0, 0, 0); _G[buttonName.."Background"]:SetAlpha(1); _G[buttonName.."TeamType"]:Hide(); else -- Set button elements to variables buttonName = "PVPTeam"..buttonIndex; data = buttonName.."Data"; button:SetID(0); -- Set standard type local standardBanner = _G[buttonName.."StandardBanner"]; standardBanner:SetTexture("Interface\\PVPFrame\\PVP-Banner-"..value.size); standardBanner:SetVertexColor(1, 1, 1); -- Hide or Show items button:SetAlpha(0.4); _G[data]:Hide(); _G[buttonName.."Background"]:SetVertexColor(0, 0, 0); _G[buttonName.."Standard"]:SetAlpha(0.1); _G[buttonName.."StandardBorder"]:Hide(); _G[buttonName.."StandardEmblem"]:Hide(); _G[buttonName.."TeamType"]:SetFormattedText(PVP_TEAMSIZE, value.size, value.size); _G[buttonName.."TeamType"]:Show(); end count = count +1; end if ( count == 3 ) then PVPFrameToggleButton:Hide(); else PVPFrameToggleButton:Show(); end end function PVPTeam_OnEnter(self) if ( GetArenaTeam(self:GetID() ) ) then _G[self:GetName().."Highlight"]:Show(); GameTooltip_AddNewbieTip(self, ARENA_TEAM, 1.0, 1.0, 1.0, CLICK_FOR_DETAILS, 1); else GameTooltip_AddNewbieTip(self, ARENA_TEAM, 1.0, 1.0, 1.0, ARENA_TEAM_LEAD_IN, 1); end end function PVPTeam_OnLeave(self) _G[self:GetName().."Highlight"]:Hide(); GameTooltip:Hide(); end function PVPTeamDetails_OnShow() PlaySound("igSpellBookOpen"); end function PVPTeamDetails_OnHide() CloseArenaTeamRoster(); PlaySound("igSpellBookClose"); end function PVPTeamDetails_Update(id) local numMembers = GetNumArenaTeamMembers(id, 1); local name, rank, level, class, online, played, win, loss, seasonPlayed, seasonWin, seasonLoss, rating; local teamName, teamSize, teamRating, teamPlayed, teamWins, seasonTeamPlayed, seasonTeamWins, playerPlayed, seasonPlayerPlayed, teamRank, personalRating = GetArenaTeam(id); local button; local teamIndex; -- Display General Team Stats PVPTeamDetailsName:SetText(teamName); PVPTeamDetailsSize:SetFormattedText(PVP_TEAMSIZE, teamSize, teamSize); PVPTeamDetailsRank:SetText(teamRank); PVPTeamDetailsRating:SetText(teamRating); -- Tidy up team name display if it's too long - mostly for CN PVPTeamDetailsName:SetWidth(0); if ( PVPTeamDetailsName:GetWidth() > MAX_ARENA_TEAM_NAME_WIDTH ) then PVPTeamDetailsName:SetWidth(MAX_ARENA_TEAM_NAME_WIDTH); end -- Display General Team Data if ( PVPTeamDetails.season ) then PVPTeamDetailsFrameColumnHeader3.sortType = "seasonplayed"; PVPTeamDetailsFrameColumnHeader4.sortType = "seasonwon"; PVPTeamDetailsGames:SetText(seasonTeamPlayed); PVPTeamDetailsWins:SetText(seasonTeamWins); PVPTeamDetailsLoss:SetText(seasonTeamPlayed - seasonTeamWins); PVPTeamDetailsStatsType:SetText(strupper(ARENA_THIS_SEASON)); PVPTeamDetailsToggleButton:SetText(ARENA_THIS_WEEK_TOGGLE); else PVPTeamDetailsFrameColumnHeader3.sortType = "played"; PVPTeamDetailsFrameColumnHeader4.sortType = "won"; PVPTeamDetailsGames:SetText(teamPlayed); PVPTeamDetailsWins:SetText(teamWins); PVPTeamDetailsLoss:SetText(teamPlayed - teamWins); PVPTeamDetailsStatsType:SetText(strupper(ARENA_THIS_WEEK)); PVPTeamDetailsToggleButton:SetText(ARENA_THIS_SEASON_TOGGLE); end local nameText, classText, playedText, winLossWin, winLossLoss, ratingText; local nameButton, classButton, playedButton, winLossButton; -- Display Team Member Specific Info local playedValue, winValue, lossValue, playedPct; for i=1, MAX_ARENA_TEAM_MEMBERS, 1 do button = _G["PVPTeamDetailsButton"..i]; if ( i > numMembers ) then button:Hide(); else button.teamIndex = i; -- Get Data name, rank, level, class, online, played, win, seasonPlayed, seasonWin, rating = GetArenaTeamRosterInfo(id, i); loss = played - win; seasonLoss = seasonPlayed - seasonWin; if ( class ) then button.tooltip = LEVEL.." "..level.." "..class; else button.tooltip = LEVEL.." "..level; end -- Populate Data into the display, season or this week if ( PVPTeamDetails.season ) then playedValue = seasonPlayed; winValue = seasonWin; lossValue = seasonLoss; teamPlayed = seasonTeamPlayed; else playedValue = played; winValue = win; lossValue = loss; teamPlayed = teamPlayed; end if ( teamPlayed ~= 0 ) then playedPct = floor( ( playedValue / teamPlayed ) * 100 ); else playedPct = floor( (playedValue / 1 ) * 100 ); end if ( playedPct < 10 ) then _G["PVPTeamDetailsButton"..i.."PlayedText"]:SetVertexColor(1.0, 0, 0); else _G["PVPTeamDetailsButton"..i.."PlayedText"]:SetVertexColor(1.0, 1.0, 1.0); end playedPct = format("%d", playedPct); _G["PVPTeamDetailsButton"..i.."Played"].tooltip = playedPct.."%"; nameText = _G["PVPTeamDetailsButton"..i.."NameText"]; classText = _G["PVPTeamDetailsButton"..i.."ClassText"]; playedText = _G["PVPTeamDetailsButton"..i.."PlayedText"] winLossWin = _G["PVPTeamDetailsButton"..i.."WinLossWin"]; winLossLoss = _G["PVPTeamDetailsButton"..i.."WinLossLoss"]; ratingText = _G["PVPTeamDetailsButton"..i.."RatingText"]; --- Not needed after Arena Season 3 change. nameButton = _G["PVPTeamDetailsButton"..i.."Name"]; classButton = _G["PVPTeamDetailsButton"..i.."Class"]; playedButton = _G["PVPTeamDetailsButton"..i.."Played"] winLossButton = _G["PVPTeamDetailsButton"..i.."WinLoss"]; nameText:SetText(name); classText:SetText(class); playedText:SetText(playedValue); winLossWin:SetText(winValue) winLossLoss:SetText(lossValue); ratingText:SetText(rating); -- Color Entries based on Online status local r, g, b; if ( online ) then if ( rank > 0 ) then r = 1.0; g = 1.0; b = 1.0; else r = 1.0; g = 0.82; b = 0.0; end else r = 0.5; g = 0.5; b = 0.5; end nameText:SetTextColor(r, g, b); classText:SetTextColor(r, g, b); playedText:SetTextColor(r, g, b); winLossWin:SetTextColor(r, g, b); _G["PVPTeamDetailsButton"..i.."WinLoss-"]:SetTextColor(r, g, b); winLossLoss:SetTextColor(r, g, b); ratingText:SetTextColor(r, g, b); button:Show(); -- Highlight the correct who if ( GetArenaTeamRosterSelection(id) == i ) then button:LockHighlight(); else button:UnlockHighlight(); end end end end function PVPTeamDetailsToggleButton_OnClick() if ( PVPTeamDetails.season ) then PVPTeamDetails.season = nil; else PVPTeamDetails.season = 1; end PVPTeamDetails_Update(PVPTeamDetails.team); end function PVPFrameToggleButton_OnClick() if ( PVPFrame.seasonStats ) then PVPFrame.seasonStats = nil; else PVPFrame.seasonStats = 1; end PVPTeam_Update(); end function PVPTeamDetailsButton_OnClick(self, button) if ( button == "LeftButton" ) then PVPTeamDetails.previousSelectedTeamMember = PVPTeamDetails.selectedTeamMember; PVPTeamDetails.selectedTeamMember = self.teamIndex; SetArenaTeamRosterSelection(PVPTeamDetails.team, PVPTeamDetails.selectedTeamMember); PVPTeamDetails_Update(PVPTeamDetails.team); else local name, rank, level, class, online = GetArenaTeamRosterInfo(PVPTeamDetails.team, self.teamIndex); PVPFrame_ShowDropdown(name, online); end end function PVPDropDown_Initialize() UnitPopup_ShowMenu(UIDROPDOWNMENU_OPEN_MENU, "TEAM", nil, PVPDropDown.name); end function PVPFrame_ShowDropdown(name, online) HideDropDownMenu(1); if ( not IsArenaTeamCaptain(PVPTeamDetails.team) ) then if ( online ) then PVPDropDown.initialize = PVPDropDown_Initialize; PVPDropDown.displayMode = "MENU"; PVPDropDown.name = name; PVPDropDown.online = online; ToggleDropDownMenu(1, nil, PVPDropDown, "cursor"); end else PVPDropDown.initialize = PVPDropDown_Initialize; PVPDropDown.displayMode = "MENU"; PVPDropDown.name = name; PVPDropDown.online = online; ToggleDropDownMenu(1, nil, PVPDropDown, "cursor"); end end function PVPStandard_OnLoad(self) self:SetAlpha(0.1); end function PVPTeam_OnClick(self) local id = self:GetID(); local teamName, teamSize = GetArenaTeam(id); if ( not teamName ) then return; else if ( PVPTeamDetails:IsShown() and id == PVPTeamDetails.team ) then PVPTeamDetails:Hide(); else PVPTeamDetails.team = id; ArenaTeamRoster(id); PVPTeamDetails_Update(id); PVPTeamDetails:Show(); end end end function PVPTeam_OnMouseDown(self) if ( GetArenaTeam(self:GetID()) and (not self.isDown) ) then self.isDown = true; local point, relativeTo, relativePoint, offsetX, offsetY = self:GetPoint(); self:SetPoint(point, relativeTo, relativePoint, offsetX-2, offsetY-2); end end function PVPTeam_OnMouseUp(self) --Note that this function is also called OnShow. Make sure it always checks if it was previously down. if ( GetArenaTeam(self:GetID()) and (self.isDown) ) then self.isDown = false; local point, relativeTo, relativePoint, offsetX, offsetY = self:GetPoint(); self:SetPoint(point, relativeTo, relativePoint, offsetX+2, offsetY+2); end end -- PVP Honor Data function PVPHonor_Update() local hk, cp, dk, contribution, rank, highestRank, rankName, rankNumber; -- Yesterday's values hk, contribution = GetPVPYesterdayStats(); PVPHonorYesterdayKills:SetText(hk); PVPHonorYesterdayHonor:SetText(contribution); -- Lifetime values hk, contribution = GetPVPLifetimeStats(); PVPHonorLifetimeKills:SetText(hk); PVPFrameHonorPoints:SetText(GetHonorCurrency()); PVPFrameArenaPoints:SetText(GetArenaCurrency()) -- Today's values hk, cp = GetPVPSessionStats(); PVPHonorTodayKills:SetText(hk); PVPHonorTodayHonor:SetText(cp); PVPHonorTodayHonor:SetHeight(14); end function PVPMicroButton_SetPushed() PVPMicroButtonTexture:SetPoint("TOP", PVPMicroButton, "TOP", 5, -31); PVPMicroButtonTexture:SetAlpha(0.5); end function PVPMicroButton_SetNormal() PVPMicroButtonTexture:SetPoint("TOP", PVPMicroButton, "TOP", 6, -30); PVPMicroButtonTexture:SetAlpha(1.0); end function PVPFrame_SetToOffSeason() PVPTeam1:Hide(); PVPTeam1Standard:Hide(); PVPTeam2:Hide(); PVPTeam2Standard:Hide(); PVPTeam3:Hide(); PVPTeam3Standard:Hide(); PVPFrameBlackFilter:Show(); PVPFrameOffSeason:Show(); local previousArenaSeason = GetPreviousArenaSeason(); PVPFrameOffSeasonText:SetText(format(ARENA_OFF_SEASON_TEXT, previousArenaSeason, previousArenaSeason+1)); end function PVPFrame_SetToInSeason() PVPTeam1:Show(); PVPTeam1Standard:Show(); PVPTeam2:Show(); PVPTeam2Standard:Show(); PVPTeam3:Show(); PVPTeam3Standard:Show(); PVPFrameBlackFilter:Hide(); PVPFrameOffSeason:Hide(); end function TogglePVPFrame() if ( PVPFrame_IsJustBG() ) then PVPFrame_SetJustBG(false); else if ( UnitLevel("player") >= SHOW_PVP_LEVEL ) then ToggleFrame(PVPParentFrame); end end end function PVPFrame_IsJustBG() return PVPParentFrame.justBG; end function PVPFrame_SetJustBG(justBG) local pvpParentFrame = PVPParentFrame; if ( justBG ) then pvpParentFrame.justBG = true; pvpParentFrame.savedSelectedTab = PanelTemplates_GetSelectedTab(pvpParentFrame); PVPParentFrameTab2:Click(); PVPParentFrameTab1:Hide(); PVPParentFrameTab2:Hide(); UpdateMicroButtons(); else pvpParentFrame.justBG = false; if ( pvpParentFrame.savedSelectedTab ) then _G["PVPParentFrameTab"..pvpParentFrame.savedSelectedTab]:Click(); pvpParentFrame.savedSelectedTab = nil; end CloseBattlefield(); PVPBattlegroundFrame_UpdateVisible(); UpdateMicroButtons(); end end