-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathSafeQueue.lua
112 lines (104 loc) · 3.81 KB
/
SafeQueue.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
-- SafeQueue by Jordon
local SafeQueue = SafeQueue
local L = LibStub("AceLocale-3.0"):GetLocale("SafeQueue")
local CreateFrame = CreateFrame
local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME
local GetBattlefieldPortExpiration = GetBattlefieldPortExpiration
local GetBattlefieldStatus = GetBattlefieldStatus
local GetBattlefieldTimeWaited = GetBattlefieldTimeWaited
local GetMaxBattlefieldID = GetMaxBattlefieldID
local GetTime = GetTime
local PVPReadyDialog = PVPReadyDialog
local PVPReadyDialog_Display = PVPReadyDialog_Display
local SecondsToTime = SecondsToTime
local TOOLTIP_UPDATE_TIME = TOOLTIP_UPDATE_TIME
local WOW_PROJECT_ID = WOW_PROJECT_ID
local WOW_PROJECT_MAINLINE = WOW_PROJECT_MAINLINE
local format = format
local hooksecurefunc = hooksecurefunc
function SafeQueue:SetExpiresText()
local battlefieldId = self.battlefieldId
if (not battlefieldId) then return end
local secs = GetBattlefieldPortExpiration(battlefieldId)
if secs <= 0 then secs = 1 end
local color
if secs > 20 then
color = "20ff20"
elseif secs > 10 then
color = "ffff00"
else
color = "ff0000"
end
local text = L["SafeQueue expires in |cff%s%s|r"]:format(color, SecondsToTime(secs))
self.text:SetText(text)
if PVPReadyDialog then
if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then
-- retail: just show expiration
PVPReadyDialog.label:SetText(text)
elseif PVPReadyDialog.text and self.color and self.battleground then
text = format("\n%s\n\n|cff%s%s|r", text, self.color, self.battleground)
PVPReadyDialog.text:SetText(text)
end
end
end
function SafeQueue:Print(message)
DEFAULT_CHAT_FRAME:AddMessage("|cff33ff99SafeQueue|r: " .. message)
end
local update = CreateFrame("Frame")
update.timer = TOOLTIP_UPDATE_TIME
update:SetScript("OnUpdate", function(self, elapsed)
local battlefieldId = SafeQueue.battlefieldId
if (not battlefieldId) then return end
local timer = self.timer
timer = timer - elapsed
if timer <= 0 then
if GetBattlefieldStatus(battlefieldId) ~= "confirm" then
SafeQueue.battlefieldId = nil
if SafeQueue.HidePopup then SafeQueue:HidePopup() end
return
end
SafeQueue:SetExpiresText()
end
self.timer = timer
end)
function SafeQueue:UPDATE_BATTLEFIELD_STATUS()
local isConfirm = nil
for i = 1, GetMaxBattlefieldID() do
local status = GetBattlefieldStatus(i)
if status == "queued" then
self.queues[i] = self.queues[i] or GetTime() - (GetBattlefieldTimeWaited(i) / 1000)
elseif status == "confirm" then
if self.queues[i] then
local secs = GetTime() - self.queues[i]
local message
if secs < 1 then
message = L["Queue popped instantly!"]
else
message = L["Queue popped after %s"]:format(SecondsToTime(secs))
end
self:Print(message)
self.queues[i] = nil
end
isConfirm = true
else
self.queues[i] = nil
end
end
if (not isConfirm) then
self.battlefieldId = nil
if self.HidePopup then self:HidePopup() end
end
end
if PVPReadyDialog_Display then
if PVPReadyDialog.label then PVPReadyDialog.label:SetWidth(250) end
hooksecurefunc("PVPReadyDialog_Display", function(self, i)
self = self or PVPReadyDialog
if self.hideButton then self.hideButton:Hide() end
if self.leaveButton then self.leaveButton:Hide() end
self.enterButton:ClearAllPoints()
self.enterButton:SetPoint("BOTTOM", self, "BOTTOM", 0, 25)
SafeQueue.battlefieldId = i
if SafeQueue.ShowPopup then SafeQueue:ShowPopup() end
SafeQueue:SetExpiresText()
end)
end