режим предателя + UI референсы и DragonUI

This commit is contained in:
2026-04-09 02:05:29 +04:00
parent 1109d19bb5
commit e8f1ae4ab9
397 changed files with 202750 additions and 37 deletions
+807
View File
@@ -0,0 +1,807 @@
-- 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