808 lines
27 KiB
Lua
808 lines
27 KiB
Lua
-- MoonWell: returns display faction (opposite for traitors)
|
|
local function MoonWell_GetDisplayFaction()
|
|
local f = UnitFactionGroup("player");
|
|
if MoonWell_IsTraitor and f then
|
|
return f == "Alliance" and "Horde" or "Alliance";
|
|
end
|
|
return f;
|
|
end
|
|
|
|
BATTLEFIELD_ZONES_DISPLAYED = 5;
|
|
BATTLEFIELD_ZONES_HEIGHT = 20;
|
|
BATTLEFIELD_SHUTDOWN_TIMER = 0;
|
|
BATTLEFIELD_TIMER_THRESHOLDS = {600, 300, 60, 15};
|
|
BATTLEFIELD_TIMER_THRESHOLD_INDEX = 1;
|
|
PREVIOUS_BATTLEFIELD_MOD = 0;
|
|
BATTLEFIELD_TIMER_DELAY = 3;
|
|
BATTLEFIELD_MAP_WIDTH = 320;
|
|
BATTLEFIELD_MAP_HEIGHT = 213;
|
|
MAX_BATTLEFIELD_QUEUES = 2;
|
|
MAX_WORLD_PVP_QUEUES = 1;
|
|
CURRENT_BATTLEFIELD_QUEUES = {};
|
|
PREVIOUS_BATTLEFIELD_QUEUES = {};
|
|
|
|
local BATTLEFIELD_FRAME_FADE_TIME = 0.15
|
|
|
|
function BattlefieldFrame_OnLoad (self)
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
|
self:RegisterEvent("BATTLEFIELDS_SHOW");
|
|
self:RegisterEvent("BATTLEFIELDS_CLOSED");
|
|
self:RegisterEvent("UPDATE_BATTLEFIELD_STATUS");
|
|
self:RegisterEvent("PARTY_LEADER_CHANGED");
|
|
self:RegisterEvent("ZONE_CHANGED");
|
|
self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
|
|
|
|
self:RegisterEvent("BATTLEFIELD_MGR_QUEUE_REQUEST_RESPONSE");
|
|
self:RegisterEvent("BATTLEFIELD_MGR_QUEUE_INVITE");
|
|
self:RegisterEvent("BATTLEFIELD_MGR_ENTRY_INVITE");
|
|
self:RegisterEvent("BATTLEFIELD_MGR_EJECT_PENDING");
|
|
self:RegisterEvent("BATTLEFIELD_MGR_EJECTED");
|
|
self:RegisterEvent("BATTLEFIELD_MGR_ENTERED");
|
|
|
|
BattlefieldFrame.timerDelay = 0;
|
|
end
|
|
|
|
function BattlefieldFrame_OnEvent (self, event, ...)
|
|
if ( event == "PLAYER_ENTERING_WORLD" ) then
|
|
MiniMapBattlefieldDropDown_OnLoad();
|
|
BattlefieldFrame_UpdateStatus(false, nil);
|
|
elseif ( event == "BATTLEFIELDS_SHOW" ) then
|
|
if ( not IsBattlefieldArena() ) then
|
|
ShowUIPanel(BattlefieldFrame);
|
|
|
|
-- Default to first available
|
|
SetSelectedBattlefield(0);
|
|
|
|
if ( not BattlefieldFrame:IsShown() ) then
|
|
CloseBattlefield();
|
|
return;
|
|
end
|
|
UpdateMicroButtons();
|
|
BattlefieldFrame_Update();
|
|
end
|
|
elseif ( event == "BATTLEFIELDS_CLOSED" ) then
|
|
HideUIPanel(BattlefieldFrame);
|
|
elseif ( event == "UPDATE_BATTLEFIELD_STATUS" or event == "ZONE_CHANGED_NEW_AREA" or event == "ZONE_CHANGED") then
|
|
local arg1 = ...
|
|
BattlefieldFrame_UpdateStatus(false, arg1);
|
|
BattlefieldFrame_Update();
|
|
elseif ( event == "BATTLEFIELD_MGR_QUEUE_REQUEST_RESPONSE" ) then
|
|
local battleID, accepted, warmup, inArea, loggingIn = ...;
|
|
if(not loggingIn) then
|
|
if(accepted) then
|
|
if(warmup) then
|
|
StaticPopup_Show("BFMGR_CONFIRM_WORLD_PVP_QUEUED_WARMUP", "Wintergrasp", nil, arg1);
|
|
elseif (inArea) then
|
|
StaticPopup_Show("BFMGR_EJECT_PENDING", "Wintergrasp", nil, arg1);
|
|
else
|
|
StaticPopup_Show("BFMGR_CONFIRM_WORLD_PVP_QUEUED", "Wintergrasp", nil, arg1);
|
|
end
|
|
else
|
|
StaticPopup_Show("BFMGR_DENY_WORLD_PVP_QUEUED", "Wintergrasp", nil, arg1);
|
|
end
|
|
end
|
|
BattlefieldFrame_UpdateStatus(false);
|
|
BattlefieldFrame_Update();
|
|
elseif ( event == "BATTLEFIELD_MGR_EJECT_PENDING" ) then
|
|
local battleID, remote = ...;
|
|
if(remote) then
|
|
local dialog = StaticPopup_Show("BFMGR_EJECT_PENDING_REMOTE", "Wintergrasp", nil, arg1);
|
|
else
|
|
local dialog = StaticPopup_Show("BFMGR_EJECT_PENDING", "Wintergrasp", nil, arg1);
|
|
end
|
|
BattlefieldFrame_UpdateStatus(false);
|
|
BattlefieldFrame_Update();
|
|
elseif ( event == "BATTLEFIELD_MGR_EJECTED" ) then
|
|
local battleID, playerExited, relocated, battleActive, lowLevel = ...;
|
|
StaticPopup_Hide("BFMGR_INVITED_TO_QUEUE");
|
|
StaticPopup_Hide("BFMGR_INVITED_TO_QUEUE_WARMUP");
|
|
StaticPopup_Hide("BFMGR_INVITED_TO_ENTER");
|
|
StaticPopup_Hide("BFMGR_EJECT_PENDING");
|
|
if(lowLevel) then
|
|
local dialog = StaticPopup_Show("BFMGR_PLAYER_LOW_LEVEL", "Wintergrasp", nil, arg1);
|
|
elseif (playerExited and battleActive and not relocated) then
|
|
local dialog = StaticPopup_Show("BFMGR_PLAYER_EXITED_BATTLE", "Wintergrasp", nil, arg1);
|
|
end
|
|
BattlefieldFrame_UpdateStatus(false);
|
|
BattlefieldFrame_Update();
|
|
elseif ( event == "BATTLEFIELD_MGR_QUEUE_INVITE" ) then
|
|
local battleID, warmup = ...;
|
|
if(warmup) then
|
|
local dialog = StaticPopup_Show("BFMGR_INVITED_TO_QUEUE_WARMUP", "Wintergrasp", nil, arg1);
|
|
else
|
|
local dialog = StaticPopup_Show("BFMGR_INVITED_TO_QUEUE", "Wintergrasp", nil, arg1);
|
|
end
|
|
StaticPopup_Hide("BFMGR_EJECT_PENDING");
|
|
BattlefieldFrame_UpdateStatus(false);
|
|
BattlefieldFrame_Update();
|
|
elseif ( event == "BATTLEFIELD_MGR_ENTRY_INVITE" ) then
|
|
local battleID = ...;
|
|
local dialog = StaticPopup_Show("BFMGR_INVITED_TO_ENTER", "Wintergrasp", nil, arg1);
|
|
StaticPopup_Hide("BFMGR_EJECT_PENDING");
|
|
BattlefieldFrame_UpdateStatus(false);
|
|
BattlefieldFrame_Update();
|
|
elseif ( event == "BATTLEFIELD_MGR_ENTERED" ) then
|
|
StaticPopup_Hide("BFMGR_INVITED_TO_QUEUE");
|
|
StaticPopup_Hide("BFMGR_INVITED_TO_QUEUE_WARMUP");
|
|
StaticPopup_Hide("BFMGR_INVITED_TO_ENTER");
|
|
StaticPopup_Hide("BFMGR_EJECT_PENDING");
|
|
BattlefieldFrame_UpdateStatus(false);
|
|
BattlefieldFrame_Update();
|
|
end
|
|
|
|
if ( event == "PARTY_LEADER_CHANGED" ) then
|
|
BattlefieldFrame_Update();
|
|
end
|
|
end
|
|
|
|
function BattlefieldTimerFrame_OnUpdate(self, elapsed)
|
|
local keepUpdating = false;
|
|
if ( BATTLEFIELD_SHUTDOWN_TIMER > 0 ) then
|
|
keepUpdating = true;
|
|
BattlefieldIconText:Hide();
|
|
else
|
|
local lowestExpiration = 0;
|
|
for i = 1, MAX_BATTLEFIELD_QUEUES do
|
|
local expiration = GetBattlefieldPortExpiration(i);
|
|
if ( expiration > 0 ) then
|
|
if( expiration < lowestExpiration or lowestExpiration == 0 ) then
|
|
lowestExpiration = expiration;
|
|
end
|
|
|
|
keepUpdating = true;
|
|
end
|
|
end
|
|
|
|
if( lowestExpiration > 0 and lowestExpiration <= 10 ) then
|
|
BattlefieldIconText:SetText(lowestExpiration);
|
|
BattlefieldIconText:Show();
|
|
else
|
|
BattlefieldIconText:Hide();
|
|
end
|
|
end
|
|
|
|
if ( not keepUpdating ) then
|
|
BattlefieldTimerFrame:SetScript("OnUpdate", nil);
|
|
return;
|
|
end
|
|
|
|
local frame = BattlefieldFrame
|
|
|
|
BATTLEFIELD_SHUTDOWN_TIMER = BATTLEFIELD_SHUTDOWN_TIMER - elapsed;
|
|
-- Set the time for the score frame
|
|
WorldStateScoreFrameTimer:SetFormattedText(SecondsToTimeAbbrev(BATTLEFIELD_SHUTDOWN_TIMER));
|
|
-- Check if I should send a message only once every 3 seconds (BATTLEFIELD_TIMER_DELAY)
|
|
frame.timerDelay = frame.timerDelay + elapsed;
|
|
if ( frame.timerDelay < BATTLEFIELD_TIMER_DELAY ) then
|
|
return;
|
|
else
|
|
frame.timerDelay = 0
|
|
end
|
|
|
|
local threshold = BATTLEFIELD_TIMER_THRESHOLDS[BATTLEFIELD_TIMER_THRESHOLD_INDEX];
|
|
if ( BATTLEFIELD_SHUTDOWN_TIMER > 0 ) then
|
|
if ( BATTLEFIELD_SHUTDOWN_TIMER < threshold and BATTLEFIELD_TIMER_THRESHOLD_INDEX ~= #BATTLEFIELD_TIMER_THRESHOLDS ) then
|
|
-- If timer past current threshold advance to the next one
|
|
BATTLEFIELD_TIMER_THRESHOLD_INDEX = BATTLEFIELD_TIMER_THRESHOLD_INDEX + 1;
|
|
else
|
|
-- See if time should be posted
|
|
local currentMod = floor(BATTLEFIELD_SHUTDOWN_TIMER/threshold);
|
|
if ( PREVIOUS_BATTLEFIELD_MOD ~= currentMod ) then
|
|
-- Print message
|
|
local info = ChatTypeInfo["SYSTEM"];
|
|
local string;
|
|
if ( GetBattlefieldWinner() ) then
|
|
local isArena = IsActiveBattlefieldArena();
|
|
if ( isArena ) then
|
|
string = format(ARENA_COMPLETE_MESSAGE, SecondsToTime(ceil(BATTLEFIELD_SHUTDOWN_TIMER/threshold) * threshold));
|
|
else
|
|
string = format(BATTLEGROUND_COMPLETE_MESSAGE, SecondsToTime(ceil(BATTLEFIELD_SHUTDOWN_TIMER/threshold) * threshold));
|
|
end
|
|
else
|
|
string = format(INSTANCE_SHUTDOWN_MESSAGE, SecondsToTime(ceil(BATTLEFIELD_SHUTDOWN_TIMER/threshold) * threshold));
|
|
end
|
|
DEFAULT_CHAT_FRAME:AddMessage(string, info.r, info.g, info.b, info.id);
|
|
PREVIOUS_BATTLEFIELD_MOD = currentMod;
|
|
end
|
|
end
|
|
else
|
|
BATTLEFIELD_SHUTDOWN_TIMER = 0;
|
|
end
|
|
end
|
|
|
|
function BattlefieldFrame_UpdateStatus(tooltipOnly, mapIndex)
|
|
local status, mapName, instanceID, queueID, levelRangeMin, levelRangeMax, teamSize, registeredMatch;
|
|
local numberQueues = 0;
|
|
local waitTime, timeInQueue;
|
|
local tooltip;
|
|
local showRightClickText;
|
|
BATTLEFIELD_SHUTDOWN_TIMER = 0;
|
|
|
|
-- Reset tooltip
|
|
MiniMapBattlefieldFrame.tooltip = nil;
|
|
MiniMapBattlefieldFrame.waitTime = {};
|
|
MiniMapBattlefieldFrame.status = nil;
|
|
|
|
-- Copy current queues into previous queues
|
|
if ( not tooltipOnly ) then
|
|
PREVIOUS_BATTLEFIELD_QUEUES = {};
|
|
for index, value in pairs(CURRENT_BATTLEFIELD_QUEUES) do
|
|
tinsert(PREVIOUS_BATTLEFIELD_QUEUES, value);
|
|
end
|
|
CURRENT_BATTLEFIELD_QUEUES = {};
|
|
end
|
|
|
|
if ( CanHearthAndResurrectFromArea() ) then
|
|
if ( not MiniMapBattlefieldFrame.inWorldPVPArea ) then
|
|
MiniMapBattlefieldFrame.inWorldPVPArea = true;
|
|
UIFrameFadeIn(MiniMapBattlefieldFrame, BATTLEFIELD_FRAME_FADE_TIME);
|
|
BattlegroundShineFadeIn();
|
|
end
|
|
else
|
|
MiniMapBattlefieldFrame.inWorldPVPArea = false;
|
|
end
|
|
|
|
for i=1, MAX_BATTLEFIELD_QUEUES do
|
|
status, mapName, instanceID, levelRangeMin, levelRangeMax, teamSize, registeredMatch = GetBattlefieldStatus(i);
|
|
if ( mapName ) then
|
|
if ( instanceID ~= 0 ) then
|
|
mapName = mapName.." "..instanceID;
|
|
end
|
|
if ( teamSize ~= 0 ) then
|
|
if ( registeredMatch ) then
|
|
mapName = ARENA_RATED_MATCH.." "..format(PVP_TEAMSIZE, teamSize, teamSize);
|
|
else
|
|
mapName = ARENA_CASUAL.." "..format(PVP_TEAMSIZE, teamSize, teamSize);
|
|
end
|
|
end
|
|
end
|
|
tooltip = nil;
|
|
MiniMapBattlefieldFrame_isArena();
|
|
if ( not tooltipOnly and (status ~= "confirm") ) then
|
|
StaticPopup_Hide("CONFIRM_BATTLEFIELD_ENTRY", i);
|
|
end
|
|
|
|
if ( status ~= "none" ) then
|
|
numberQueues = numberQueues+1;
|
|
if ( status == "queued" ) then
|
|
-- Update queue info show button on minimap
|
|
waitTime = GetBattlefieldEstimatedWaitTime(i);
|
|
timeInQueue = GetBattlefieldTimeWaited(i)/1000;
|
|
if ( waitTime == 0 ) then
|
|
waitTime = QUEUE_TIME_UNAVAILABLE;
|
|
elseif ( waitTime < 60000 ) then
|
|
waitTime = LESS_THAN_ONE_MINUTE;
|
|
else
|
|
waitTime = SecondsToTime(waitTime/1000, 1);
|
|
end
|
|
MiniMapBattlefieldFrame.waitTime[i] = waitTime;
|
|
tooltip = format(BATTLEFIELD_IN_QUEUE, mapName, waitTime, SecondsToTime(timeInQueue));
|
|
|
|
if ( not tooltipOnly ) then
|
|
if ( not IsAlreadyInQueue(mapName) ) then
|
|
UIFrameFadeIn(MiniMapBattlefieldFrame, BATTLEFIELD_FRAME_FADE_TIME);
|
|
BattlegroundShineFadeIn();
|
|
PlaySound("PVPENTERQUEUE");
|
|
end
|
|
tinsert(CURRENT_BATTLEFIELD_QUEUES, mapName);
|
|
end
|
|
showRightClickText = 1;
|
|
elseif ( status == "confirm" ) then
|
|
-- Have been accepted show enter battleground dialog
|
|
local seconds = SecondsToTime(GetBattlefieldPortExpiration(i));
|
|
if ( seconds ~= "" ) then
|
|
tooltip = format(BATTLEFIELD_QUEUE_CONFIRM, mapName, seconds);
|
|
else
|
|
tooltip = format(BATTLEFIELD_QUEUE_PENDING_REMOVAL, mapName);
|
|
end
|
|
if ( (i==mapIndex) and (not tooltipOnly) ) then
|
|
local dialog = StaticPopup_Show("CONFIRM_BATTLEFIELD_ENTRY", mapName, nil, i);
|
|
PlaySound("PVPTHROUGHQUEUE");
|
|
MiniMapBattlefieldFrame:Show();
|
|
end
|
|
showRightClickText = 1;
|
|
BattlefieldTimerFrame:SetScript("OnUpdate", BattlefieldTimerFrame_OnUpdate);
|
|
elseif ( status == "active" ) then
|
|
-- In the battleground
|
|
if ( teamSize ~= 0 ) then
|
|
tooltip = mapName;
|
|
else
|
|
tooltip = format(BATTLEFIELD_IN_BATTLEFIELD, mapName);
|
|
end
|
|
BATTLEFIELD_SHUTDOWN_TIMER = GetBattlefieldInstanceExpiration()/1000;
|
|
if ( BATTLEFIELD_SHUTDOWN_TIMER > 0 ) then
|
|
BattlefieldTimerFrame:SetScript("OnUpdate", BattlefieldTimerFrame_OnUpdate);
|
|
end
|
|
BATTLEFIELD_TIMER_THRESHOLD_INDEX = 1;
|
|
PREVIOUS_BATTLEFIELD_MOD = 0;
|
|
MiniMapBattlefieldFrame.status = status;
|
|
elseif ( status == "error" ) then
|
|
-- Should never happen haha
|
|
end
|
|
if ( tooltip ) then
|
|
if ( MiniMapBattlefieldFrame.tooltip ) then
|
|
MiniMapBattlefieldFrame.tooltip = MiniMapBattlefieldFrame.tooltip.."\n\n"..tooltip;
|
|
else
|
|
MiniMapBattlefieldFrame.tooltip = tooltip;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
for i=1, MAX_WORLD_PVP_QUEUES do
|
|
status, mapName, queueID = GetWorldPVPQueueStatus(i);
|
|
if ( status ~= "none" ) then
|
|
numberQueues = numberQueues + 1;
|
|
end
|
|
if ( status == "queued" or status == "confirm" ) then
|
|
if ( status == "queued" ) then
|
|
tooltip = format(BATTLEFIELD_IN_QUEUE_SIMPLE, mapName);
|
|
elseif ( status == "confirm" ) then
|
|
tooltip = format(BATTLEFIELD_QUEUE_CONFIRM_SIMPLE, mapName);
|
|
end
|
|
|
|
if ( MiniMapBattlefieldFrame.tooltip ) then
|
|
MiniMapBattlefieldFrame.tooltip = MiniMapBattlefieldFrame.tooltip.."\n\n"..tooltip;
|
|
else
|
|
MiniMapBattlefieldFrame.tooltip = tooltip;
|
|
end
|
|
end
|
|
end
|
|
|
|
-- See if should add right click message
|
|
if ( MiniMapBattlefieldFrame.tooltip and showRightClickText ) then
|
|
MiniMapBattlefieldFrame.tooltip = MiniMapBattlefieldFrame.tooltip.."\n"..RIGHT_CLICK_MESSAGE;
|
|
elseif ( MiniMapBattlefieldFrame_isArena() ) then
|
|
MiniMapBattlefieldFrame.tooltip = MiniMapBattlefieldFrame.tooltip;
|
|
end
|
|
|
|
if ( not tooltipOnly ) then
|
|
MiniMapBattlefieldFrame_isArena();
|
|
if ( numberQueues == 0 and (not CanHearthAndResurrectFromArea()) ) then
|
|
-- Clear everything out
|
|
MiniMapBattlefieldFrame:Hide();
|
|
else
|
|
MiniMapBattlefieldFrame:Show();
|
|
end
|
|
end
|
|
BattlefieldFrame.numQueues = numberQueues;
|
|
end
|
|
|
|
function MiniMapBattlefieldFrame_isArena()
|
|
-- Set minimap icon here since it bugs out on login
|
|
local status, mapName, instanceID, levelRangeMin, levelRangeMax, teamSize, registeredMatch = GetBattlefieldStatus(1);
|
|
local isArena, isRegistered = IsActiveBattlefieldArena();
|
|
if ( registeredMatch or isRegistered ) then
|
|
MiniMapBattlefieldIcon:SetTexture("Interface\\PVPFrame\\PVP-ArenaPoints-Icon");
|
|
MiniMapBattlefieldIcon:SetWidth(19);
|
|
MiniMapBattlefieldIcon:SetHeight(19);
|
|
MiniMapBattlefieldIcon:SetPoint("CENTER", "MiniMapBattlefieldFrame", "CENTER", -1, 2);
|
|
elseif ( UnitFactionGroup("player") ) then
|
|
MiniMapBattlefieldIcon:SetTexture("Interface\\BattlefieldFrame\\Battleground-"..MoonWell_GetDisplayFaction());
|
|
MiniMapBattlefieldIcon:SetTexCoord(0, 1, 0, 1);
|
|
MiniMapBattlefieldIcon:SetWidth(32);
|
|
MiniMapBattlefieldIcon:SetHeight(32);
|
|
MiniMapBattlefieldIcon:SetPoint("CENTER", "MiniMapBattlefieldFrame", "CENTER", -1, 0);
|
|
end
|
|
end
|
|
|
|
function BattlefieldFrame_Update()
|
|
local zoneIndex;
|
|
local zoneOffset = FauxScrollFrame_GetOffset(BattlefieldListScrollFrame);
|
|
local playerLevel = UnitLevel("player");
|
|
local button, buttonStatus;
|
|
local instanceID;
|
|
local mapName, mapDescription, maxGroup = GetBattlefieldInfo();
|
|
local factionTexture = "Interface\\PVPFrame\\PVP-Currency-"..MoonWell_GetDisplayFaction();
|
|
|
|
if ( not mapName ) then
|
|
return;
|
|
end
|
|
|
|
-- Set title text
|
|
BattlefieldFrameFrameLabel:SetText(mapName);
|
|
-- Set the Join as Group text based on the limits of which instances can join as group.
|
|
if ( maxGroup and maxGroup == 5 ) then
|
|
BattlefieldFrameGroupJoinButton:SetText(JOIN_AS_PARTY);
|
|
else
|
|
BattlefieldFrameGroupJoinButton:SetText(JOIN_AS_GROUP);
|
|
end
|
|
-- Setup instance buttons
|
|
-- add one to battlefields because of the fake "first available" button
|
|
local numBattlefields = GetNumBattlefields() + 1;
|
|
for i=1, BATTLEFIELD_ZONES_DISPLAYED, 1 do
|
|
zoneIndex = zoneOffset + i;
|
|
button = _G["BattlefieldZone"..i];
|
|
|
|
if ( zoneIndex == 1 ) then
|
|
-- The first entry in the list is always "first available"
|
|
button:SetText(FIRST_AVAILABLE);
|
|
-- Set tooltip
|
|
button.title = FIRST_AVAILABLE;
|
|
button.tooltip = NEWBIE_TOOLTIP_FIRST_AVAILABLE;
|
|
button:Show();
|
|
elseif ( zoneIndex > numBattlefields ) then
|
|
button:Hide();
|
|
else
|
|
instanceID = GetBattlefieldInstanceInfo(zoneIndex - 1);
|
|
button:SetText(mapName.." "..instanceID);
|
|
-- Set tooltip
|
|
button.title = mapName.." "..instanceID;
|
|
button.tooltip = NEWBIE_TOOLTIP_ENTER_BATTLEGROUND;
|
|
button:Show();
|
|
end
|
|
|
|
-- Set queued status
|
|
button.status:Hide();
|
|
local queueStatus, queueMapName, queueInstanceID;
|
|
for i=1, MAX_BATTLEFIELD_QUEUES do
|
|
queueStatus, queueMapName, queueInstanceID = GetBattlefieldStatus(i);
|
|
if ( queueStatus ~= "none" and queueMapName.." "..queueInstanceID == button.title ) then
|
|
if ( queueStatus == "queued" ) then
|
|
button.status.texture:SetTexture(factionTexture);
|
|
button.status.texture:SetTexCoord(0.0, 1.0, 0.0, 1.0);
|
|
button.status.tooltip = BATTLEFIELD_QUEUE_STATUS;
|
|
button.status:Show();
|
|
elseif ( queueStatus == "confirm" ) then
|
|
button.status.texture:SetTexture("Interface\\CharacterFrame\\UI-StateIcon");
|
|
button.status.texture:SetTexCoord(0.45, 0.95, 0.0, 0.5);
|
|
button.status.tooltip = BATTLEFIELD_CONFIRM_STATUS;
|
|
button.status:Show();
|
|
end
|
|
elseif ( button.title == FIRST_AVAILABLE and queueMapName == mapName and queueInstanceID == 0 ) then
|
|
if ( queueStatus == "queued" ) then
|
|
button.status.texture:SetTexture(factionTexture);
|
|
button.status.texture:SetTexCoord(0.0, 1.0, 0.0, 1.0);
|
|
button.status.tooltip = BATTLEFIELD_QUEUE_STATUS;
|
|
button.status:Show();
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Set selected instance
|
|
if ( zoneIndex == 1 and GetSelectedBattlefield() == 0 ) then
|
|
button:LockHighlight();
|
|
elseif ( zoneIndex - 1 == GetSelectedBattlefield() ) then
|
|
button:LockHighlight();
|
|
else
|
|
button:UnlockHighlight();
|
|
end
|
|
end
|
|
|
|
local mapName, mapDescription, maxGroup, canEnter, isHoliday, isRandom = GetBattlefieldInfo();
|
|
|
|
if ( isRandom or isHoliday ) then
|
|
BattlefieldFrame_UpdateRandomInfo();
|
|
BattlefieldFrameInfoScrollFrameChildFrameRewardsInfo:Show();
|
|
BattlefieldFrameInfoScrollFrameChildFrameDescription:Hide();
|
|
else
|
|
if ( mapDescription ~= BattlefieldFrameInfoScrollFrameChildFrameDescription:GetText() ) then
|
|
BattlefieldFrameInfoScrollFrameChildFrameDescription:SetText(mapDescription);
|
|
BattlefieldFrameInfoScrollFrame:SetVerticalScroll(0);
|
|
end
|
|
|
|
BattlefieldFrameInfoScrollFrameChildFrameRewardsInfo:Hide();
|
|
BattlefieldFrameInfoScrollFrameChildFrameDescription:Show();
|
|
end
|
|
|
|
-- Enable or disable the group join button
|
|
if ( CanJoinBattlefieldAsGroup() ) then
|
|
if ( ((GetNumPartyMembers() > 0) or (GetNumRaidMembers() > 0)) and IsPartyLeader() ) then
|
|
-- If this is true then can join as a group
|
|
BattlefieldFrameGroupJoinButton:Enable();
|
|
else
|
|
BattlefieldFrameGroupJoinButton:Disable();
|
|
end
|
|
BattlefieldFrameGroupJoinButton:Show();
|
|
else
|
|
BattlefieldFrameGroupJoinButton:Hide();
|
|
end
|
|
|
|
if ( BattlefieldFrame.numQueues ) then
|
|
if ( BattlefieldFrame.numQueues <= 3 ) then
|
|
BattlefieldFrameJoinButton:Enable();
|
|
else
|
|
BattlefieldFrameJoinButton:Disable();
|
|
end
|
|
end
|
|
|
|
FauxScrollFrame_Update(BattlefieldListScrollFrame, numBattlefields, BATTLEFIELD_ZONES_DISPLAYED, BATTLEFIELD_ZONES_HEIGHT, "BattlefieldZone", 293, 315);
|
|
end
|
|
|
|
function PVPQueue_UpdateRandomInfo(base, infoFunc)
|
|
local BGname, canEnter, isHoliday, isRandom = infoFunc();
|
|
|
|
local hasWin, lossHonor, winHonor, winArena, lossArena;
|
|
|
|
if ( isRandom ) then
|
|
hasWin, winHonor, winArena, lossHonor, lossArena = GetRandomBGHonorCurrencyBonuses();
|
|
base.title:SetText(RANDOM_BATTLEGROUND);
|
|
base.description:SetText(RANDOM_BATTLEGROUND_EXPLANATION);
|
|
else
|
|
base.title:SetText(BATTLEGROUND_HOLIDAY);
|
|
base.description:SetText(BATTLEGROUND_HOLIDAY_EXPLANATION);
|
|
hasWin, winHonor, winArena, lossHonor, lossArena = GetHolidayBGHonorCurrencyBonuses();
|
|
end
|
|
|
|
if (winHonor ~= 0) then
|
|
base.winReward.honorSymbol:Show();
|
|
base.winReward.honorAmount:Show();
|
|
base.winReward.honorAmount:SetText(winHonor);
|
|
else
|
|
base.winReward.honorSymbol:Hide();
|
|
base.winReward.honorAmount:Hide();
|
|
end
|
|
|
|
if (winArena ~= 0) then
|
|
base.winReward.arenaSymbol:Show();
|
|
base.winReward.arenaAmount:Show();
|
|
base.winReward.arenaAmount:SetText(winArena);
|
|
else
|
|
base.winReward.arenaSymbol:Hide();
|
|
base.winReward.arenaAmount:Hide();
|
|
end
|
|
|
|
if (lossHonor ~= 0) then
|
|
base.lossReward.honorSymbol:Show();
|
|
base.lossReward.honorAmount:Show();
|
|
base.lossReward.honorAmount:SetText(lossHonor);
|
|
else
|
|
base.lossReward.honorSymbol:Hide();
|
|
base.lossReward.honorAmount:Hide();
|
|
end
|
|
|
|
if (lossArena ~= 0) then
|
|
base.lossReward.arenaSymbol:Show();
|
|
base.lossReward.arenaAmount:Show();
|
|
base.lossReward.arenaAmount:SetText(lossArena);
|
|
else
|
|
base.lossReward.arenaSymbol:Hide();
|
|
base.lossReward.arenaAmount:Hide();
|
|
end
|
|
|
|
local englishFaction = MoonWell_GetDisplayFaction();
|
|
base.winReward.honorSymbol:SetTexture("Interface\\PVPFrame\\PVP-Currency-"..englishFaction);
|
|
base.lossReward.honorSymbol:SetTexture("Interface\\PVPFrame\\PVP-Currency-"..englishFaction);
|
|
end
|
|
|
|
function BattlefieldFrame_GetSelectedBattlegroundInfo()
|
|
local BGname, description, groupSize, canEnter, isHoliday, isRandom = GetBattlefieldInfo();
|
|
return BGname, canEnter, isHoliday, isRandom;
|
|
end
|
|
|
|
function BattlefieldFrame_UpdateRandomInfo()
|
|
PVPQueue_UpdateRandomInfo(BattlefieldFrameInfoScrollFrameChildFrameRewardsInfo, BattlefieldFrame_GetSelectedBattlegroundInfo);
|
|
end
|
|
|
|
function BattlefieldButton_OnClick(self)
|
|
local id = self:GetID();
|
|
SetSelectedBattlefield(FauxScrollFrame_GetOffset(BattlefieldListScrollFrame) + id - 1);
|
|
BattlefieldFrame_Update();
|
|
end
|
|
|
|
function BattlefieldFrameJoinButton_OnClick(self)
|
|
local GROUPJOIN_BUTTONID = 2;
|
|
local id = self:GetID();
|
|
if ( id == GROUPJOIN_BUTTONID ) then
|
|
JoinBattlefield(GetSelectedBattlefield(), 1);
|
|
else
|
|
JoinBattlefield(GetSelectedBattlefield());
|
|
end
|
|
|
|
HideUIPanel(BattlefieldFrame);
|
|
end
|
|
|
|
function MiniMapBattlefieldDropDown_OnLoad()
|
|
UIDropDownMenu_Initialize(MiniMapBattlefieldDropDown, MiniMapBattlefieldDropDown_Initialize, "MENU");
|
|
end
|
|
|
|
function MiniMapBattlefieldDropDown_Initialize()
|
|
local info;
|
|
local status, mapName, instanceID, queueID, levelRangeMin, levelRangeMax, teamSize, registeredMatch;
|
|
local numQueued = 0;
|
|
local numShown = 0;
|
|
|
|
local shownHearthAndRes;
|
|
|
|
for i=1, MAX_BATTLEFIELD_QUEUES do
|
|
status, mapName, instanceID, levelRangeMin, levelRangeMax, teamSize, registeredMatch = GetBattlefieldStatus(i);
|
|
|
|
-- Inserts a spacer if it's not the first option... to make it look nice.
|
|
if ( status ~= "none" ) then
|
|
numShown = numShown + 1;
|
|
if ( numShown > 1 ) then
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
end
|
|
|
|
if ( status == "queued" or status == "confirm" ) then
|
|
numQueued = numQueued + 1;
|
|
-- Add a spacer if there were dropdown items before this
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
if ( teamSize ~= 0 ) then
|
|
if ( registeredMatch ) then
|
|
info.text = ARENA_RATED_MATCH.." "..format(PVP_TEAMSIZE, teamSize, teamSize);
|
|
else
|
|
info.text = ARENA_CASUAL.." "..format(PVP_TEAMSIZE, teamSize, teamSize);
|
|
end
|
|
else
|
|
info.text = mapName;
|
|
end
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
if ( CanHearthAndResurrectFromArea() and not shownHearthAndRes and GetRealZoneText() == mapName ) then
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = format(LEAVE_ZONE, GetRealZoneText());
|
|
|
|
info.func = HearthAndResurrectFromArea;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
shownHearthAndRes = true;
|
|
end
|
|
|
|
if ( status == "queued" ) then
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = LEAVE_QUEUE;
|
|
info.func = function (self, ...) AcceptBattlefieldPort(...) end;
|
|
info.arg1 = i;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
elseif ( status == "confirm" ) then
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = ENTER_BATTLE;
|
|
info.func = function (self, ...) AcceptBattlefieldPort(...) end;
|
|
info.arg1 = i;
|
|
info.arg2 = 1;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
if ( teamSize == 0 ) then
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = LEAVE_QUEUE;
|
|
info.func = function (self, ...) AcceptBattlefieldPort(...) end;
|
|
info.arg1 = i;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
|
|
end
|
|
|
|
elseif ( status == "active" ) then
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
if ( teamSize ~= 0 ) then
|
|
info.text = mapName.." "..format(PVP_TEAMSIZE, teamSize, teamSize);
|
|
else
|
|
info.text = mapName;
|
|
end
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
if ( IsActiveBattlefieldArena() ) then
|
|
info.text = LEAVE_ARENA;
|
|
else
|
|
info.text = LEAVE_BATTLEGROUND;
|
|
end
|
|
info.func = function (self, ...) LeaveBattlefield(...) end;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
end
|
|
end
|
|
|
|
for i=1, MAX_WORLD_PVP_QUEUES do
|
|
status, mapName, queueID = GetWorldPVPQueueStatus(i);
|
|
|
|
-- Inserts a spacer if it's not the first option... to make it look nice.
|
|
if ( status ~= "none" ) then
|
|
numShown = numShown + 1;
|
|
if ( numShown > 1 ) then
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
end
|
|
|
|
if ( status == "queued" or status == "confirm" ) then
|
|
numQueued = numQueued + 1;
|
|
-- Add a spacer if there were dropdown items before this
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = mapName;
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
if ( CanHearthAndResurrectFromArea() and not shownHearthAndRes and GetRealZoneText() == mapName ) then
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = format(LEAVE_ZONE, GetRealZoneText());
|
|
|
|
info.func = HearthAndResurrectFromArea;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
shownHearthAndRes = true;
|
|
end
|
|
|
|
if ( status == "queued" ) then
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = LEAVE_QUEUE;
|
|
info.func = function (self, ...) BattlefieldMgrExitRequest(...) end;
|
|
info.arg1 = queueID;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
elseif ( status == "confirm" ) then
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = ENTER_BATTLE;
|
|
info.func = function (self, ...) BattlefieldMgrEntryInviteResponse(...) end;
|
|
info.arg1 = queueID;
|
|
info.arg2 = 1;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = LEAVE_QUEUE;
|
|
info.func = function (self, ...) BattlefieldMgrEntryInviteResponse(...) end;
|
|
info.arg1 = i;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
end
|
|
end
|
|
|
|
if ( CanHearthAndResurrectFromArea() and not shownHearthAndRes ) then
|
|
numShown = numShown + 1;
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = GetRealZoneText();
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
info = UIDropDownMenu_CreateInfo();
|
|
info.text = format(LEAVE_ZONE, GetRealZoneText());
|
|
|
|
info.func = HearthAndResurrectFromArea;
|
|
info.notCheckable = 1;
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
|
|
end
|
|
|
|
function BattlegroundShineFadeIn()
|
|
-- Fade in the shine and then fade it out with the ComboPointShineFadeOut function
|
|
local fadeInfo = {};
|
|
fadeInfo.mode = "IN";
|
|
fadeInfo.timeToFade = 0.5;
|
|
fadeInfo.finishedFunc = BattlegroundShineFadeOut;
|
|
UIFrameFade(BattlegroundShine, fadeInfo);
|
|
end
|
|
|
|
--hack since a frame can't have a reference to itself in it
|
|
function BattlegroundShineFadeOut()
|
|
UIFrameFadeOut(BattlegroundShine, 0.5);
|
|
end
|
|
|
|
function IsAlreadyInQueue(mapName)
|
|
local inQueue = nil;
|
|
for index,value in pairs(PREVIOUS_BATTLEFIELD_QUEUES) do
|
|
if ( value == mapName ) then
|
|
inQueue = 1;
|
|
end
|
|
end
|
|
return inQueue;
|
|
end
|