|
ShadowTheAge@0
|
1 CrossRealmAssist = LibStub("AceAddon-3.0"):NewAddon("CrossRealmAssist", "AceEvent-3.0", "AceConsole-3.0", "AceTimer-3.0")
|
|
ShadowTheAge@0
|
2 local addon = CrossRealmAssist;
|
|
ShadowTheAge@0
|
3 local wholib = LibStub:GetLibrary('LibWho-2.0'):Library()
|
|
ShadowTheAge@12
|
4 local ScrollingTable = LibStub("ScrollingTable");
|
|
ShadowTheAge@13
|
5 local ldb = LibStub("LibDataBroker-1.1")
|
|
ShadowTheAge@13
|
6 local minimapIcon = LibStub("LibDBIcon-1.0")
|
|
ShadowTheAge@13
|
7 local db
|
|
ShadowTheAge@0
|
8
|
|
ShadowTheAge@13
|
9 local homeRealm, realmSep, gui, btRefresh, btSettings, btQuick, btManual, lbRealm, lbStatus, playerName, lfgui, lfgTabSelected, lfgTable, lbThrottle, curLfgGroup, sheduledScan, wasInGroup, inInstance
|
|
ShadowTheAge@13
|
10 local settingsMenu
|
|
ShadowTheAge@13
|
11 local hintShown
|
|
ShadowTheAge@0
|
12
|
|
ShadowTheAge@12
|
13 local tabs = {}
|
|
ShadowTheAge@17
|
14 local curRealmStat, curPartyStat
|
|
ShadowTheAge@0
|
15 local scanstate=0
|
|
ShadowTheAge@0
|
16 local recentRealms={}
|
|
ShadowTheAge@12
|
17 local recentgroups={}
|
|
ShadowTheAge@13
|
18 local autoScanGroups={}
|
|
ShadowTheAge@0
|
19 local active=false
|
|
ShadowTheAge@0
|
20
|
|
ShadowTheAge@0
|
21 local lfgGroups={
|
|
ShadowTheAge@0
|
22 6, -- Custom
|
|
ShadowTheAge@0
|
23 10, -- Ashran
|
|
ShadowTheAge@0
|
24 1, -- Quests
|
|
ShadowTheAge@13
|
25 3, -- Raids
|
|
ShadowTheAge@13
|
26 8 -- BGs
|
|
ShadowTheAge@0
|
27 }
|
|
ShadowTheAge@0
|
28
|
|
ShadowTheAge@12
|
29 local StatusTable = {
|
|
ShadowTheAge@12
|
30 ["invited"]="Invited",
|
|
ShadowTheAge@12
|
31 ["declined"]="Declined",
|
|
ShadowTheAge@12
|
32 ["timedout"]="Timed out",
|
|
ShadowTheAge@12
|
33 ["applied"]="Applied",
|
|
ShadowTheAge@12
|
34 ["cancelled"]="Join cancelled",
|
|
ShadowTheAge@12
|
35 ["inviteaccepted"]="Joined",
|
|
ShadowTheAge@13
|
36 ["_init"]="Join request",
|
|
ShadowTheAge@13
|
37 ["_skip"]="Skipped"
|
|
ShadowTheAge@12
|
38 }
|
|
ShadowTheAge@13
|
39 local DefaultWidgetPos = {x=0, y=200, to="CENTER"}
|
|
ShadowTheAge@13
|
40 local SettingsDefaults={
|
|
ShadowTheAge@13
|
41 global={
|
|
ShadowTheAge@13
|
42 minimap = {},
|
|
ShadowTheAge@13
|
43 widgetPos=DefaultWidgetPos,
|
|
ShadowTheAge@13
|
44 quickJoinHint = true,
|
|
ShadowTheAge@13
|
45 quickJoin={[6]=1,[10]=1}
|
|
ShadowTheAge@13
|
46 }
|
|
ShadowTheAge@13
|
47 }
|
|
ShadowTheAge@12
|
48
|
|
ShadowTheAge@12
|
49
|
|
ShadowTheAge@12
|
50 -- Utils functions
|
|
ShadowTheAge@12
|
51
|
|
ShadowTheAge@12
|
52 local function PlayerName(fullname)
|
|
ShadowTheAge@12
|
53 fullname = fullname or "???-???"
|
|
ShadowTheAge@12
|
54 local name, realm = strsplit(realmSep, fullname)
|
|
ShadowTheAge@12
|
55 realm = realm or homeRealm;
|
|
ShadowTheAge@12
|
56 return name, realm;
|
|
ShadowTheAge@12
|
57 end
|
|
ShadowTheAge@12
|
58
|
|
ShadowTheAge@12
|
59 local function canJoinGroup()
|
|
ShadowTheAge@12
|
60 return (not IsInGroup()) or (UnitIsGroupLeader('player') and not IsInRaid())
|
|
ShadowTheAge@12
|
61 end
|
|
ShadowTheAge@12
|
62
|
|
ShadowTheAge@12
|
63 local function sortByWeight(a,b)
|
|
ShadowTheAge@12
|
64 return b.weight < a.weight
|
|
ShadowTheAge@12
|
65 end
|
|
ShadowTheAge@12
|
66
|
|
ShadowTheAge@12
|
67
|
|
ShadowTheAge@12
|
68 -- UI functions
|
|
ShadowTheAge@12
|
69
|
|
ShadowTheAge@12
|
70 local function createIcon(owner, icon, id)
|
|
ShadowTheAge@12
|
71 local image = owner:CreateTexture(nil, "BACKGROUND")
|
|
ShadowTheAge@12
|
72 image:SetWidth(16)
|
|
ShadowTheAge@12
|
73 image:SetHeight(16)
|
|
ShadowTheAge@12
|
74 image:SetTexture(icon)
|
|
ShadowTheAge@12
|
75 image:SetPoint("TOPLEFT",owner,"TOPLEFT",id*16,0)
|
|
ShadowTheAge@12
|
76 return image
|
|
ShadowTheAge@12
|
77 end
|
|
ShadowTheAge@0
|
78
|
|
ShadowTheAge@11
|
79 local function setupWidget(widget, parameters, x, y)
|
|
ShadowTheAge@11
|
80 if parameters then
|
|
ShadowTheAge@11
|
81 for key,value in pairs(parameters) do widget[key](widget,value) end
|
|
ShadowTheAge@11
|
82 end
|
|
ShadowTheAge@11
|
83 if y then
|
|
ShadowTheAge@11
|
84 widget:SetPoint("TOPLEFT",widget:GetParent(),"TOPLEFT",x,-y)
|
|
ShadowTheAge@11
|
85 end
|
|
ShadowTheAge@11
|
86 return widget
|
|
ShadowTheAge@11
|
87 end
|
|
ShadowTheAge@11
|
88
|
|
ShadowTheAge@11
|
89 local function ShowTooltip(widget)
|
|
ShadowTheAge@11
|
90 GameTooltip:SetOwner(widget, widget.TooltipAnchor)
|
|
ShadowTheAge@11
|
91 GameTooltip:ClearLines()
|
|
ShadowTheAge@11
|
92 widget:TooltipFactory()
|
|
ShadowTheAge@11
|
93 GameTooltip:Show()
|
|
ShadowTheAge@11
|
94 end
|
|
ShadowTheAge@11
|
95
|
|
ShadowTheAge@11
|
96 local function HideTooltip(widget)
|
|
ShadowTheAge@11
|
97 GameTooltip:Hide()
|
|
ShadowTheAge@11
|
98 end
|
|
ShadowTheAge@11
|
99
|
|
ShadowTheAge@11
|
100 local function setupTooltip(widget, anchor, factory)
|
|
ShadowTheAge@11
|
101 widget.TooltipAnchor = anchor;
|
|
ShadowTheAge@11
|
102 widget.TooltipFactory = factory;
|
|
ShadowTheAge@11
|
103 widget:SetScript("OnEnter", ShowTooltip)
|
|
ShadowTheAge@11
|
104 widget:SetScript("OnLeave", HideTooltip)
|
|
ShadowTheAge@11
|
105 end
|
|
ShadowTheAge@11
|
106
|
|
ShadowTheAge@13
|
107 local function TabClick(tab)
|
|
ShadowTheAge@13
|
108 if tab == lfgTabSelected then return end
|
|
ShadowTheAge@13
|
109 addon.LfgScan(tab.searchID)
|
|
ShadowTheAge@13
|
110 end
|
|
ShadowTheAge@13
|
111
|
|
ShadowTheAge@13
|
112 local function changeTab(tab)
|
|
ShadowTheAge@12
|
113 PanelTemplates_DeselectTab(lfgTabSelected)
|
|
ShadowTheAge@12
|
114 lfgTabSelected = tab
|
|
ShadowTheAge@12
|
115 PanelTemplates_SelectTab(lfgTabSelected)
|
|
ShadowTheAge@12
|
116 end
|
|
ShadowTheAge@0
|
117
|
|
ShadowTheAge@12
|
118 local function realmToolip()
|
|
ShadowTheAge@12
|
119 if not curRealmStat then return end
|
|
ShadowTheAge@12
|
120 local players = curRealmStat.players;
|
|
ShadowTheAge@12
|
121 local threshold = curRealmStat.threshold
|
|
ShadowTheAge@12
|
122 GameTooltip:AddLine("Players in zone: "..players)
|
|
ShadowTheAge@12
|
123 if not curRealmStat.complete then
|
|
ShadowTheAge@12
|
124 GameTooltip:AppendText("+")
|
|
ShadowTheAge@12
|
125 end
|
|
ShadowTheAge@12
|
126 for i=1,curRealmStat.realms do
|
|
ShadowTheAge@12
|
127 local data = curRealmStat[i]
|
|
ShadowTheAge@12
|
128 local percent = math.ceil(100 * data.count / players - 0.5) .. "%";
|
|
ShadowTheAge@12
|
129 if data.count >= threshold then
|
|
ShadowTheAge@12
|
130 GameTooltip:AddDoubleLine(data.realm, percent, 0,1,0,0,1,0)
|
|
ShadowTheAge@12
|
131 else
|
|
ShadowTheAge@12
|
132 GameTooltip:AddDoubleLine(data.realm, percent, 0.5,0.5,0.5,0.5,0.5,0.5)
|
|
ShadowTheAge@12
|
133 end
|
|
ShadowTheAge@12
|
134 end
|
|
ShadowTheAge@0
|
135 end
|
|
ShadowTheAge@0
|
136
|
|
ShadowTheAge@13
|
137 local function ClearRealmHistory()
|
|
ShadowTheAge@13
|
138 recentRealms = {}
|
|
ShadowTheAge@13
|
139 addon:updateCurrentRealm()
|
|
ShadowTheAge@13
|
140 if lfgTable then lfgTable:Refresh() end
|
|
ShadowTheAge@13
|
141 end
|
|
ShadowTheAge@13
|
142
|
|
ShadowTheAge@12
|
143
|
|
ShadowTheAge@12
|
144
|
|
ShadowTheAge@12
|
145
|
|
ShadowTheAge@12
|
146
|
|
ShadowTheAge@12
|
147
|
|
ShadowTheAge@12
|
148
|
|
ShadowTheAge@12
|
149 -- LFG list data providers, filters and tooltips
|
|
ShadowTheAge@12
|
150
|
|
ShadowTheAge@12
|
151 local lfgScanInProgress=false
|
|
ShadowTheAge@12
|
152 local hasLfgListChanges=false
|
|
ShadowTheAge@12
|
153
|
|
ShadowTheAge@12
|
154 local function addTooltipLineIcon(predicat, text, icon, r, g, b, wrap)
|
|
ShadowTheAge@12
|
155 if predicat then
|
|
ShadowTheAge@12
|
156 GameTooltip:AddLine(text, r, g, b, wrap)
|
|
ShadowTheAge@12
|
157 if icon then GameTooltip:AddTexture(icon) end
|
|
ShadowTheAge@12
|
158 end
|
|
ShadowTheAge@12
|
159 end
|
|
ShadowTheAge@12
|
160
|
|
ShadowTheAge@12
|
161 local function WeightLfgItem(id, forAutoJoin)
|
|
ShadowTheAge@12
|
162 local _, action, caption, desc, voice, ilvl, time, bnetfr, charfr, guild, delisted, fullname, pcount, autoinv = C_LFGList.GetSearchResultInfo(id)
|
|
ShadowTheAge@12
|
163 if delisted then return 0 end
|
|
ShadowTheAge@12
|
164 local name,realm = PlayerName(fullname);
|
|
ShadowTheAge@12
|
165 if forAutoJoin then
|
|
ShadowTheAge@12
|
166 if not autoinv or pcount >= 35 or pcount <= 5 or recentgroups[fullname] then return 0 end
|
|
ShadowTheAge@12
|
167 end
|
|
ShadowTheAge@12
|
168
|
|
ShadowTheAge@12
|
169 local autoinvWeight = autoinv and 5 or 2
|
|
ShadowTheAge@12
|
170
|
|
ShadowTheAge@12
|
171 local visCoef = 1
|
|
ShadowTheAge@12
|
172 if recentgroups[fullname] then
|
|
ShadowTheAge@12
|
173 local ago = GetTime() - recentgroups[fullname].time;
|
|
ShadowTheAge@12
|
174 visCoef = math.min(1,ago/600)
|
|
ShadowTheAge@12
|
175 end
|
|
ShadowTheAge@12
|
176
|
|
ShadowTheAge@12
|
177 local leaderRealm = 3 -- recently visited realms
|
|
ShadowTheAge@13
|
178 local realmVis = recentRealms[realm]
|
|
ShadowTheAge@13
|
179 local leaderRealm = 3;
|
|
ShadowTheAge@13
|
180 if realmVis then
|
|
ShadowTheAge@13
|
181 local ago = GetTime() - realmVis
|
|
ShadowTheAge@13
|
182 leaderRealm = 1 + 2*math.min(1,ago/600);
|
|
ShadowTheAge@13
|
183 end
|
|
ShadowTheAge@12
|
184
|
|
ShadowTheAge@12
|
185 local countWeight = 4 -- count weight
|
|
ShadowTheAge@12
|
186 if pcount >= 39 or pcount <= 1 then countWeight = 1
|
|
ShadowTheAge@12
|
187 elseif pcount >= 35 or pcount <= 4 then countWeight = 2
|
|
ShadowTheAge@12
|
188 elseif pcount >= 30 or pcount <= 10 then countWeight = 3
|
|
ShadowTheAge@12
|
189 else countWeight = 4 end
|
|
ShadowTheAge@12
|
190
|
|
ShadowTheAge@12
|
191 local ageWeight = 2
|
|
ShadowTheAge@12
|
192 if time > 1200 then ageWeight = 4
|
|
ShadowTheAge@12
|
193 elseif time > 300 then ageWeight = 3 end
|
|
ShadowTheAge@12
|
194
|
|
ShadowTheAge@12
|
195 return leaderRealm * countWeight * visCoef * autoinvWeight * ageWeight;
|
|
ShadowTheAge@12
|
196 end
|
|
ShadowTheAge@12
|
197
|
|
ShadowTheAge@13
|
198 local function AddLfgGroupInfo(id, short)
|
|
ShadowTheAge@13
|
199 local _, action, caption, desc, voice, ilvl, time, bnetfr, charfr, guild, delisted, fullname, pcount, autoinv = C_LFGList.GetSearchResultInfo(id)
|
|
ShadowTheAge@12
|
200 local friends = bnetfr+charfr+guild
|
|
ShadowTheAge@12
|
201 GameTooltip:ClearLines()
|
|
ShadowTheAge@12
|
202 GameTooltip:AddLine(caption,1,1,1)
|
|
ShadowTheAge@12
|
203 addTooltipLineIcon(desc ~= "", desc, nil, 0.5, 0.5, 0.5, true)
|
|
ShadowTheAge@12
|
204 local name, realm = PlayerName(fullname)
|
|
ShadowTheAge@13
|
205 GameTooltip:AddDoubleLine("Players:",pcount)
|
|
ShadowTheAge@12
|
206 GameTooltip:AddDoubleLine("Leader:",name)
|
|
ShadowTheAge@12
|
207 GameTooltip:AddDoubleLine("Leader realm:",realm)
|
|
ShadowTheAge@13
|
208 if recentRealms[realm] then
|
|
ShadowTheAge@13
|
209 local ago = GetTime() - recentRealms[realm]
|
|
ShadowTheAge@13
|
210 GameTooltip:AddDoubleLine("Realm visited",SecondsToTime(ago, false, false, 1, false).." ago",1,0.5,0,1,0.5,0)
|
|
ShadowTheAge@13
|
211 else
|
|
ShadowTheAge@13
|
212 GameTooltip:AddDoubleLine(" ","Realm not visited!",0,0,0,0,1,0)
|
|
ShadowTheAge@13
|
213 end
|
|
ShadowTheAge@13
|
214 if not short then
|
|
ShadowTheAge@13
|
215 addTooltipLineIcon(ilvl > 0, "Min. ilvl: "..ilvl, READY_CHECK_WAITING_TEXTURE, 1, 1, 0)
|
|
ShadowTheAge@13
|
216 addTooltipLineIcon(voice ~= "", "Voice: "..voice, READY_CHECK_WAITING_TEXTURE, 1, 1, 0)
|
|
ShadowTheAge@13
|
217 addTooltipLineIcon(friends > 0, "Friends: "..friends, READY_CHECK_WAITING_TEXTURE, 1, 1, 0)
|
|
ShadowTheAge@13
|
218 addTooltipLineIcon(autoinv, "Autoinvite!", READY_CHECK_READY_TEXTURE, 0, 1, 0)
|
|
ShadowTheAge@13
|
219 local visitinfo = recentgroups[fullname]
|
|
ShadowTheAge@13
|
220 if visitinfo then
|
|
ShadowTheAge@13
|
221 local ago = GetTime() - visitinfo.time;
|
|
ShadowTheAge@13
|
222 GameTooltip:AddDoubleLine(StatusTable[visitinfo.status] or visitinfo.status,SecondsToTime(ago, false, false, 1, false).." ago",1,0,0,1,0,0)
|
|
ShadowTheAge@13
|
223 GameTooltip:AddTexture(READY_CHECK_NOT_READY_TEXTURE)
|
|
ShadowTheAge@13
|
224 end
|
|
ShadowTheAge@12
|
225 end
|
|
ShadowTheAge@12
|
226 GameTooltip:Show()
|
|
ShadowTheAge@12
|
227 end
|
|
ShadowTheAge@12
|
228
|
|
ShadowTheAge@13
|
229 local function ShowLfgInfo(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...)
|
|
ShadowTheAge@13
|
230 if not realrow then return end
|
|
ShadowTheAge@13
|
231 local rowdata = scrollingTable:GetRow(realrow);
|
|
ShadowTheAge@13
|
232 GameTooltip:SetOwner(rowFrame, "ANCHOR_BOTTOMLEFT",-10,25)
|
|
ShadowTheAge@13
|
233 AddLfgGroupInfo(rowdata.id);
|
|
ShadowTheAge@13
|
234 end
|
|
ShadowTheAge@13
|
235
|
|
ShadowTheAge@12
|
236 local function updateTableData(rowFrame, cellFrame, data, cols, row, realrow, column, fShow, table, ...)
|
|
ShadowTheAge@12
|
237 if fShow then
|
|
ShadowTheAge@12
|
238 local rowdata = table:GetRow(realrow);
|
|
ShadowTheAge@12
|
239 local icons = cellFrame.icons
|
|
ShadowTheAge@12
|
240 local _, action, caption, desc, voice, ilvl, time, bnetfr, charfr, guild, delisted, fullname, pcount, autoinv = C_LFGList.GetSearchResultInfo(rowdata.id)
|
|
ShadowTheAge@12
|
241 if not icons then
|
|
ShadowTheAge@12
|
242 local miscdata = createIcon(cellFrame,READY_CHECK_WAITING_TEXTURE,0)
|
|
ShadowTheAge@12
|
243 local autoinv = createIcon(cellFrame,READY_CHECK_READY_TEXTURE, 1)
|
|
ShadowTheAge@12
|
244 local visited = createIcon(cellFrame,READY_CHECK_NOT_READY_TEXTURE, 2)
|
|
ShadowTheAge@12
|
245 icons = {misc=miscdata, autoinv=autoinv, visited=visited}
|
|
ShadowTheAge@12
|
246 cellFrame.icons = icons
|
|
ShadowTheAge@12
|
247 end
|
|
ShadowTheAge@12
|
248 icons.misc:SetShown(voice ~= "" or bnetfr > 0 or charfr > 0 or guild > 0 or ilvl > 0)
|
|
ShadowTheAge@12
|
249 icons.autoinv:SetShown(autoinv)
|
|
ShadowTheAge@12
|
250 icons.visited:SetShown(recentgroups[fullname])
|
|
ShadowTheAge@12
|
251 if GameTooltip:GetOwner() == rowFrame then ShowLfgInfo(rowFrame, cellFrame, data, cols, row, realrow, column, table) end
|
|
ShadowTheAge@12
|
252 end
|
|
ShadowTheAge@12
|
253 end
|
|
ShadowTheAge@12
|
254
|
|
ShadowTheAge@12
|
255 local function updateGroupName(id)
|
|
ShadowTheAge@12
|
256 return select(3, C_LFGList.GetSearchResultInfo(id))
|
|
ShadowTheAge@12
|
257 end
|
|
ShadowTheAge@12
|
258
|
|
ShadowTheAge@12
|
259 local function updateGroupCount(id)
|
|
ShadowTheAge@12
|
260 return select(13, C_LFGList.GetSearchResultInfo(id))
|
|
ShadowTheAge@12
|
261 end
|
|
ShadowTheAge@12
|
262
|
|
ShadowTheAge@12
|
263 local function updateGroupRealm(id)
|
|
ShadowTheAge@12
|
264 local name = select(12, C_LFGList.GetSearchResultInfo(id))
|
|
ShadowTheAge@12
|
265 local pname, realm = PlayerName(name);
|
|
ShadowTheAge@12
|
266 return realm
|
|
ShadowTheAge@12
|
267 end
|
|
ShadowTheAge@12
|
268
|
|
ShadowTheAge@13
|
269 local COLOR_YELLOW = {r=1,g=1,b=0,a=1}
|
|
ShadowTheAge@13
|
270 local COLOR_GREEN = {r=0,g=1,b=0,a=1}
|
|
ShadowTheAge@13
|
271 local function updateRealmColor(id)
|
|
ShadowTheAge@13
|
272 local name = select(12, C_LFGList.GetSearchResultInfo(id))
|
|
ShadowTheAge@13
|
273 local pname, realm = PlayerName(name);
|
|
ShadowTheAge@13
|
274 return recentRealms[realm] and COLOR_YELLOW or COLOR_GREEN;
|
|
ShadowTheAge@13
|
275 end
|
|
ShadowTheAge@13
|
276
|
|
ShadowTheAge@12
|
277 local function filterTable(self, row)
|
|
ShadowTheAge@12
|
278 local delisted = select(11, C_LFGList.GetSearchResultInfo(row.id))
|
|
ShadowTheAge@12
|
279 return not delisted;
|
|
ShadowTheAge@12
|
280 end
|
|
ShadowTheAge@12
|
281
|
|
ShadowTheAge@12
|
282 function addon:UpdateResponseData(event, result)
|
|
ShadowTheAge@13
|
283 if not lfgTable then return end
|
|
ShadowTheAge@12
|
284 if select(11, C_LFGList.GetSearchResultInfo(result)) then
|
|
ShadowTheAge@12
|
285 lfgTable:SetFilter(filterTable)
|
|
ShadowTheAge@12
|
286 end
|
|
ShadowTheAge@12
|
287 hasLfgListChanges = true
|
|
ShadowTheAge@12
|
288 end
|
|
ShadowTheAge@12
|
289
|
|
ShadowTheAge@12
|
290 local function refreshLFGList()
|
|
ShadowTheAge@12
|
291 if lfgScanInProgress or not lfgTable then return end
|
|
ShadowTheAge@12
|
292 local count, list = C_LFGList.GetSearchResults()
|
|
ShadowTheAge@12
|
293 local tableData = {}
|
|
ShadowTheAge@12
|
294 for i = 1,count do
|
|
ShadowTheAge@12
|
295 local rid = list[i];
|
|
ShadowTheAge@12
|
296 if not rid then break end
|
|
ShadowTheAge@12
|
297 local data = list[i];
|
|
ShadowTheAge@12
|
298 local cols = {}
|
|
ShadowTheAge@12
|
299 local row = {rid}
|
|
ShadowTheAge@12
|
300 cols[1] = {value=updateGroupName,args=row}
|
|
ShadowTheAge@12
|
301 cols[2] = {value=updateGroupCount,args=row}
|
|
ShadowTheAge@13
|
302 cols[3] = {value=updateGroupRealm,args=row,color=updateRealmColor,colorargs=row}
|
|
ShadowTheAge@12
|
303 cols[4] = {}
|
|
ShadowTheAge@12
|
304 table.insert(tableData, {cols=cols,id=rid,weight=WeightLfgItem(rid)})
|
|
ShadowTheAge@12
|
305 end
|
|
ShadowTheAge@12
|
306 table.sort(tableData, sortByWeight);
|
|
ShadowTheAge@12
|
307 lfgTable:SetData(tableData)
|
|
ShadowTheAge@12
|
308 end
|
|
ShadowTheAge@12
|
309
|
|
ShadowTheAge@13
|
310 local function JoinGroup(rid)
|
|
ShadowTheAge@13
|
311 local tank, heal, dd = C_LFGList.GetAvailableRoles()
|
|
ShadowTheAge@13
|
312 addon:SetGroupJoinStatus(rid, "_init")
|
|
ShadowTheAge@13
|
313 C_LFGList.ApplyToGroup(rid, "", tank, heal, dd)
|
|
ShadowTheAge@13
|
314 end
|
|
ShadowTheAge@13
|
315
|
|
ShadowTheAge@13
|
316 local function TableCellClick(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...)
|
|
ShadowTheAge@12
|
317 if not realrow or not canJoinGroup() then return end
|
|
ShadowTheAge@12
|
318 local rowdata = scrollingTable:GetRow(realrow);
|
|
ShadowTheAge@13
|
319 JoinGroup(rowdata.id)
|
|
ShadowTheAge@12
|
320 end
|
|
ShadowTheAge@12
|
321
|
|
ShadowTheAge@12
|
322
|
|
ShadowTheAge@12
|
323
|
|
ShadowTheAge@12
|
324
|
|
ShadowTheAge@12
|
325
|
|
ShadowTheAge@12
|
326
|
|
ShadowTheAge@12
|
327 -- Addon functions and gui constructors
|
|
ShadowTheAge@12
|
328
|
|
ShadowTheAge@13
|
329 function addon.ShowMmTooltip(tooltip)
|
|
ShadowTheAge@13
|
330 tooltip:AddLine("Cross Realm Assist",1,1,1)
|
|
ShadowTheAge@13
|
331 tooltip:Show()
|
|
ShadowTheAge@13
|
332 end
|
|
ShadowTheAge@13
|
333
|
|
ShadowTheAge@13
|
334 --[[function addon.MmClick(self, button)
|
|
ShadowTheAge@13
|
335 if button == "RightButton" then
|
|
ShadowTheAge@13
|
336 addon.ShowSettings(self)
|
|
ShadowTheAge@13
|
337 else
|
|
ShadowTheAge@13
|
338 addon:Activate()
|
|
ShadowTheAge@13
|
339 end
|
|
ShadowTheAge@13
|
340 end]]
|
|
ShadowTheAge@13
|
341
|
|
ShadowTheAge@13
|
342 function addon:OnInitialize()
|
|
ShadowTheAge@13
|
343 db = LibStub("AceDB-3.0"):New("CrossRealmAssistDB", SettingsDefaults)
|
|
ShadowTheAge@13
|
344 local minimapData = ldb:NewDataObject("CrossRealmAssistMinimapIcon",{
|
|
ShadowTheAge@13
|
345 type = "data source",
|
|
ShadowTheAge@13
|
346 text = "Cross Realm Assist",
|
|
ShadowTheAge@13
|
347 icon = "Interface/Icons/INV_Misc_GroupNeedMore",
|
|
ShadowTheAge@13
|
348 OnClick = addon.Activate,
|
|
ShadowTheAge@13
|
349 OnTooltipShow = addon.ShowMmTooltip
|
|
ShadowTheAge@13
|
350 })
|
|
ShadowTheAge@13
|
351 minimapIcon:Register("CrossRealmAssistMinimapIcon", minimapData, db.global.minimap)
|
|
ShadowTheAge@13
|
352 end
|
|
ShadowTheAge@13
|
353
|
|
ShadowTheAge@0
|
354 function addon:OnEnable()
|
|
ShadowTheAge@0
|
355 realmSep = _G.REALM_SEPARATORS
|
|
ShadowTheAge@11
|
356 playerName = UnitName("player")
|
|
ShadowTheAge@0
|
357 homeRealm = GetRealmName()
|
|
ShadowTheAge@0
|
358 addon:RegisterChatCommand("cra", "Activate")
|
|
ShadowTheAge@0
|
359 addon:RegisterChatCommand("crossrealmassist", "Activate")
|
|
ShadowTheAge@0
|
360 end
|
|
ShadowTheAge@0
|
361
|
|
ShadowTheAge@0
|
362 function addon:OnDisable()
|
|
ShadowTheAge@0
|
363 addon:Deactivate()
|
|
ShadowTheAge@0
|
364 end
|
|
ShadowTheAge@0
|
365
|
|
ShadowTheAge@0
|
366 function addon:Activate()
|
|
ShadowTheAge@0
|
367 if active then return end
|
|
ShadowTheAge@0
|
368 active=true
|
|
ShadowTheAge@0
|
369 wasInGroup = IsInGroup()
|
|
ShadowTheAge@11
|
370 if not gui then addon:CreateUI() end
|
|
ShadowTheAge@11
|
371 addon:updateCurrentRealm();
|
|
ShadowTheAge@13
|
372 addon:RefreshZoneAndClearHistory();
|
|
ShadowTheAge@11
|
373 gui:Show()
|
|
ShadowTheAge@13
|
374 addon:RegisterEvent("ZONE_CHANGED_NEW_AREA", "RefreshZoneAndClearHistory")
|
|
ShadowTheAge@13
|
375 addon:RegisterEvent("SCENARIO_UPDATE", "RefreshZoneAndClearHistory")
|
|
ShadowTheAge@12
|
376 addon:RegisterEvent("LFG_LIST_SEARCH_RESULTS_RECEIVED", "LfgResponseData")
|
|
ShadowTheAge@12
|
377 addon:RegisterEvent("LFG_LIST_SEARCH_RESULT_UPDATED", "UpdateResponseData")
|
|
ShadowTheAge@12
|
378 addon:RegisterEvent("LFG_LIST_SEARCH_FAILED", "LfgScanFailed")
|
|
ShadowTheAge@12
|
379 addon:RegisterEvent("GROUP_ROSTER_UPDATE", "updatePartyInfo")
|
|
ShadowTheAge@12
|
380 addon:RegisterEvent("LFG_LIST_APPLICATION_STATUS_UPDATED", "updateAppStatus")
|
|
ShadowTheAge@13
|
381 addon.LfgScan(addon.GetNextAutoScanCategory() or 1)
|
|
ShadowTheAge@0
|
382 end
|
|
ShadowTheAge@0
|
383
|
|
ShadowTheAge@0
|
384 function addon:Deactivate()
|
|
ShadowTheAge@0
|
385 if not active then return end
|
|
ShadowTheAge@0
|
386 active = false
|
|
ShadowTheAge@12
|
387 gui:Hide()
|
|
ShadowTheAge@12
|
388 if lfgui then lfgui:Hide() end
|
|
ShadowTheAge@0
|
389 scanstate = 0
|
|
ShadowTheAge@0
|
390 lfgScanInProgress = false
|
|
ShadowTheAge@0
|
391 addon:UnregisterEvent("ZONE_CHANGED_NEW_AREA")
|
|
ShadowTheAge@17
|
392 addon:UnregisterEvent("SCENARIO_UPDATE")
|
|
ShadowTheAge@0
|
393 addon:UnregisterEvent("PLAYER_REGEN_ENABLED")
|
|
ShadowTheAge@0
|
394 addon:UnregisterEvent("LFG_LIST_SEARCH_RESULTS_RECEIVED")
|
|
ShadowTheAge@12
|
395 addon:UnregisterEvent("LFG_LIST_SEARCH_RESULT_UPDATED")
|
|
ShadowTheAge@0
|
396 addon:UnregisterEvent("LFG_LIST_SEARCH_FAILED")
|
|
ShadowTheAge@0
|
397 addon:UnregisterEvent("GROUP_ROSTER_UPDATE")
|
|
ShadowTheAge@0
|
398 addon:UnregisterEvent("LFG_LIST_APPLICATION_STATUS_UPDATED")
|
|
ShadowTheAge@0
|
399 end
|
|
ShadowTheAge@0
|
400
|
|
ShadowTheAge@11
|
401 function addon:SetStatus(status)
|
|
ShadowTheAge@11
|
402 if status then
|
|
ShadowTheAge@11
|
403 lbStatus:SetText(status)
|
|
ShadowTheAge@11
|
404 else
|
|
ShadowTheAge@13
|
405 lbStatus:SetText("")
|
|
ShadowTheAge@11
|
406 end
|
|
ShadowTheAge@11
|
407 end
|
|
ShadowTheAge@11
|
408
|
|
ShadowTheAge@13
|
409 local function stopMovingWidget()
|
|
ShadowTheAge@13
|
410 gui:StopMovingOrSizing()
|
|
ShadowTheAge@13
|
411 local point,_,_,x,y = gui:GetPoint(1);
|
|
ShadowTheAge@13
|
412 db.global.widgetPos = {x=x,y=y,to=point}
|
|
ShadowTheAge@13
|
413 end
|
|
ShadowTheAge@13
|
414
|
|
ShadowTheAge@0
|
415 function addon:CreateUI()
|
|
ShadowTheAge@12
|
416 gui = setupWidget(CreateFrame("Frame","CrossRealmAssistMainUI",nil,"InsetFrameTemplate3"), {SetFrameStrata="LOW",SetWidth=208,SetHeight=60,EnableMouse=true,SetMovable=true})
|
|
ShadowTheAge@11
|
417 local title = setupWidget(CreateFrame("Frame",nil,gui), {SetWidth=190,SetHeight=18,EnableMouse=true,RegisterForDrag="LeftButton"}, 0, 6);
|
|
ShadowTheAge@11
|
418 title:SetScript("OnDragStart", function() gui:StartMoving() end)
|
|
ShadowTheAge@13
|
419 title:SetScript("OnDragStop", stopMovingWidget)
|
|
ShadowTheAge@11
|
420 gui:SetScript("OnHide", addon.Deactivate)
|
|
ShadowTheAge@12
|
421 setupTooltip(title, "ANCHOR_TOP", realmToolip)
|
|
ShadowTheAge@11
|
422
|
|
ShadowTheAge@11
|
423 lbRealm = setupWidget(gui:CreateFontString(nil,"BACKGROUND", "GameFontNormal"), {SetWidth=200,SetHeight=18}, 0, 6)
|
|
ShadowTheAge@11
|
424 lbStatus = setupWidget(gui:CreateFontString(nil,"BACKGROUND", "GameFontHighlightSmallLeft"), {SetWidth=200,SetHeight=10}, 6, 23)
|
|
ShadowTheAge@11
|
425
|
|
ShadowTheAge@12
|
426 btQuick = setupWidget(CreateFrame("Button",nil,gui,"UIMenuButtonStretchTemplate"),{SetWidth=90,SetHeight=20,SetText="Quick join"},4,36)
|
|
ShadowTheAge@13
|
427 btQuick:RegisterForClicks("RightButtonUp","LeftButtonUp")
|
|
ShadowTheAge@12
|
428 btQuick:SetScript("OnClick",addon.DoAutoAction)
|
|
ShadowTheAge@13
|
429 setupTooltip(btQuick, "ANCHOR_BOTTOM", addon.actionTooltip)
|
|
ShadowTheAge@12
|
430 btManual = setupWidget(CreateFrame("Button",nil,gui,"UIMenuButtonStretchTemplate"),{SetWidth=90,SetHeight=20,SetText="Manual join"},94,36)
|
|
ShadowTheAge@12
|
431 btManual:SetScript("OnClick",addon.ShowManualLfg)
|
|
ShadowTheAge@11
|
432 setupWidget(CreateFrame("Button",nil,gui,"UIPanelCloseButton"),{EnableMouse=true,SetWidth=20,SetHeight=20},188,0)
|
|
ShadowTheAge@11
|
433
|
|
ShadowTheAge@13
|
434 btRefresh = setupWidget(CreateFrame("Button",nil,gui,"UIPanelSquareButton"),{SetWidth=20,SetHeight=20},184,16)
|
|
ShadowTheAge@11
|
435 btRefresh.icon:SetTexture("Interface/BUTTONS/UI-RefreshButton")
|
|
ShadowTheAge@11
|
436 btRefresh.icon:SetTexCoord(0,1,0,1);
|
|
ShadowTheAge@11
|
437 btRefresh:SetScript("OnClick",addon.RefreshZone)
|
|
ShadowTheAge@11
|
438
|
|
ShadowTheAge@13
|
439 btSettings = setupWidget(CreateFrame("Button",nil,gui,"UIPanelSquareButton"),{SetWidth=20,SetHeight=20},184,36)
|
|
ShadowTheAge@13
|
440 btSettings.icon:SetTexture("Interface/Worldmap/Gear_64Grey")
|
|
ShadowTheAge@13
|
441 btSettings.icon:SetTexCoord(0.1,0.9,0.1,0.9);
|
|
ShadowTheAge@13
|
442 btSettings:SetScript("OnClick",addon.ShowSettings)
|
|
ShadowTheAge@13
|
443
|
|
ShadowTheAge@13
|
444 local savedPos = db.global.widgetPos
|
|
ShadowTheAge@13
|
445 gui:SetPoint(savedPos.to,savedPos.x,savedPos.y)
|
|
ShadowTheAge@12
|
446 addon:UpdateAutoButtonStatus()
|
|
ShadowTheAge@12
|
447 end
|
|
ShadowTheAge@11
|
448
|
|
ShadowTheAge@12
|
449 function addon:ShowManualLfg()
|
|
ShadowTheAge@12
|
450 if not lfgui then addon:CreateLFGUI() end
|
|
ShadowTheAge@12
|
451 lfgui:Show()
|
|
ShadowTheAge@12
|
452 end
|
|
ShadowTheAge@0
|
453
|
|
ShadowTheAge@12
|
454 function addon.lfgUpdate()
|
|
ShadowTheAge@12
|
455 if hasLfgListChanges then
|
|
ShadowTheAge@12
|
456 lfgTable:Refresh()
|
|
ShadowTheAge@12
|
457 hasLfgListChanges = false
|
|
ShadowTheAge@12
|
458 end
|
|
ShadowTheAge@12
|
459 end
|
|
ShadowTheAge@0
|
460
|
|
ShadowTheAge@12
|
461 function addon:CreateLFGUI()
|
|
ShadowTheAge@12
|
462 lfgui = setupWidget(CreateFrame("Frame","CrossRealmAssistJoinUI",nil,"UIPanelDialogTemplate"), {SetFrameStrata="DIALOG",SetWidth=405,SetHeight=300,EnableMouse=true,SetMovable=true})
|
|
ShadowTheAge@12
|
463 lfgui.title:SetText("Click to join group")
|
|
ShadowTheAge@12
|
464 lfgui:SetScript("OnUpdate",addon.lfgUpdate)
|
|
ShadowTheAge@12
|
465 local titlereg = lfgui:CreateTitleRegion()
|
|
ShadowTheAge@12
|
466 titlereg:SetAllPoints(lfgui.title)
|
|
ShadowTheAge@12
|
467 addon:CreateTabs()
|
|
ShadowTheAge@0
|
468
|
|
ShadowTheAge@12
|
469 lfgTable = ScrollingTable:CreateST({
|
|
ShadowTheAge@12
|
470 {name="Title",width=160},
|
|
ShadowTheAge@12
|
471 {name="#",width=30,align="CENTER"},
|
|
ShadowTheAge@12
|
472 {name="Realm",width=120,align="RIGHT"},
|
|
ShadowTheAge@12
|
473 {name="",width=50,DoCellUpdate=updateTableData}
|
|
ShadowTheAge@12
|
474 },15,16,nil,lfgui);
|
|
ShadowTheAge@0
|
475
|
|
ShadowTheAge@13
|
476 lfgTable:RegisterEvents({OnEnter=ShowLfgInfo,OnLeave=HideTooltip,OnClick=TableCellClick})
|
|
ShadowTheAge@0
|
477
|
|
ShadowTheAge@12
|
478 setupWidget(lfgTable.frame, nil, 10, 45);
|
|
ShadowTheAge@12
|
479 lfgTable.frame:SetBackdrop(nil)
|
|
ShadowTheAge@12
|
480 lfgui:SetPoint("CENTER",0,0)
|
|
ShadowTheAge@12
|
481 refreshLFGList()
|
|
ShadowTheAge@0
|
482
|
|
ShadowTheAge@12
|
483 lbThrottle = setupWidget(lfgui:CreateFontString(nil,"BACKGROUND", "GameFontHighlightSmall"), {SetWidth=300}, 50, 100)
|
|
ShadowTheAge@12
|
484 lbThrottle:Hide();
|
|
ShadowTheAge@0
|
485
|
|
ShadowTheAge@12
|
486 local btRefresh = setupWidget(CreateFrame("Button",nil,lfgui,"UIPanelSquareButton"),{SetWidth=22,SetHeight=22},379,27)
|
|
ShadowTheAge@12
|
487 btRefresh.icon:SetTexture("Interface/BUTTONS/UI-RefreshButton")
|
|
ShadowTheAge@12
|
488 btRefresh.icon:SetTexCoord(0,1,0,1);
|
|
ShadowTheAge@12
|
489 btRefresh:SetScript("OnClick",addon.refreshLfgCurrent)
|
|
ShadowTheAge@12
|
490 end
|
|
ShadowTheAge@0
|
491
|
|
ShadowTheAge@12
|
492 function addon:CreateTabs()
|
|
ShadowTheAge@12
|
493 local prevTab
|
|
ShadowTheAge@12
|
494 for i=1,#lfgGroups do
|
|
ShadowTheAge@12
|
495 local tab = CreateFrame("Button","$parentTab"..i,lfgui,"CharacterFrameTabButtonTemplate")
|
|
ShadowTheAge@12
|
496 tab:SetText((C_LFGList.GetCategoryInfo(lfgGroups[i])));
|
|
ShadowTheAge@13
|
497 tab.searchID = i;
|
|
ShadowTheAge@12
|
498 tab:SetID(i);
|
|
ShadowTheAge@12
|
499 PanelTemplates_TabResize(tab, 0)
|
|
ShadowTheAge@12
|
500 if i == 1 then
|
|
ShadowTheAge@12
|
501 tab:SetPoint("TOPLEFT", lfgui, "BOTTOMLEFT", 10, 7)
|
|
ShadowTheAge@12
|
502 lfgTabSelected = tab
|
|
ShadowTheAge@13
|
503 else
|
|
ShadowTheAge@13
|
504 tab:SetPoint("TOPLEFT", prevTab, "TOPRIGHT",-15,0)
|
|
ShadowTheAge@13
|
505 end
|
|
ShadowTheAge@13
|
506 if curLfgGroup == i then
|
|
ShadowTheAge@12
|
507 PanelTemplates_SelectTab(tab)
|
|
ShadowTheAge@12
|
508 else
|
|
ShadowTheAge@12
|
509 PanelTemplates_DeselectTab(tab)
|
|
ShadowTheAge@12
|
510 end
|
|
ShadowTheAge@13
|
511 tab:SetScript("OnClick", TabClick)
|
|
ShadowTheAge@12
|
512 tabs[i] = tab
|
|
ShadowTheAge@12
|
513 prevTab = tab
|
|
ShadowTheAge@12
|
514 end
|
|
ShadowTheAge@0
|
515 end
|
|
ShadowTheAge@0
|
516
|
|
ShadowTheAge@0
|
517 -- LFG scanning routine
|
|
ShadowTheAge@0
|
518
|
|
ShadowTheAge@12
|
519 function addon.refreshLfgCurrent()
|
|
ShadowTheAge@12
|
520 addon.LfgScan(curLfgGroup)
|
|
ShadowTheAge@0
|
521 end
|
|
ShadowTheAge@0
|
522
|
|
ShadowTheAge@13
|
523 function addon.GetNextAutoScanCategory()
|
|
ShadowTheAge@13
|
524 for i=1,#lfgGroups do
|
|
ShadowTheAge@13
|
525 if not autoScanGroups[i] and db.global.quickJoin[lfgGroups[i]] and i ~= curLfgGroup then return i end
|
|
ShadowTheAge@13
|
526 end
|
|
ShadowTheAge@13
|
527 return nil
|
|
ShadowTheAge@13
|
528 end
|
|
ShadowTheAge@13
|
529
|
|
ShadowTheAge@12
|
530 function addon.LfgScan(group)
|
|
ShadowTheAge@13
|
531 if lfgTable then
|
|
ShadowTheAge@13
|
532 lfgTable:SetData({})
|
|
ShadowTheAge@13
|
533 changeTab(tabs[group])
|
|
ShadowTheAge@13
|
534 end
|
|
ShadowTheAge@0
|
535 lfgScanInProgress = true
|
|
ShadowTheAge@12
|
536 curLfgGroup = group
|
|
ShadowTheAge@13
|
537 C_LFGList.Search(lfgGroups[curLfgGroup],"")
|
|
ShadowTheAge@0
|
538 end
|
|
ShadowTheAge@0
|
539
|
|
ShadowTheAge@0
|
540 function addon:LfgScanFailed(event, reason)
|
|
ShadowTheAge@0
|
541 if reason == "throttled" then
|
|
ShadowTheAge@12
|
542 addon:ScheduleTimer(addon.LfgScan, 2, curLfgGroup)
|
|
ShadowTheAge@0
|
543 end
|
|
ShadowTheAge@13
|
544 if lbThrottle then
|
|
ShadowTheAge@13
|
545 if reason == "throttled" then
|
|
ShadowTheAge@13
|
546 lbThrottle:SetText("LFG scan is delayed (throttled).\nThis page will update automatically...")
|
|
ShadowTheAge@13
|
547 else
|
|
ShadowTheAge@13
|
548 lbThrottle:SetText("Scan failed ("..reason..")")
|
|
ShadowTheAge@13
|
549 end
|
|
ShadowTheAge@13
|
550 lbThrottle:Show()
|
|
ShadowTheAge@13
|
551 end
|
|
ShadowTheAge@0
|
552 end
|
|
ShadowTheAge@0
|
553
|
|
ShadowTheAge@0
|
554 function addon:LfgResponseData()
|
|
ShadowTheAge@0
|
555 lfgScanInProgress = false;
|
|
ShadowTheAge@13
|
556 addon:UpdateAutoButtonStatus()
|
|
ShadowTheAge@12
|
557 if lbThrottle then lbThrottle:Hide() end
|
|
ShadowTheAge@12
|
558 refreshLFGList()
|
|
ShadowTheAge@0
|
559 end
|
|
ShadowTheAge@0
|
560
|
|
ShadowTheAge@0
|
561 function addon:updateAppStatus(event, id, status, oldstatus)
|
|
ShadowTheAge@0
|
562 if status == "invited" then
|
|
ShadowTheAge@0
|
563 LFGListInviteDialog_Accept(LFGListInviteDialog)
|
|
ShadowTheAge@0
|
564 end
|
|
ShadowTheAge@12
|
565 addon:UpdateAutoButtonStatus()
|
|
ShadowTheAge@12
|
566 addon:SetGroupJoinStatus(id, status)
|
|
ShadowTheAge@12
|
567 end
|
|
ShadowTheAge@12
|
568
|
|
ShadowTheAge@12
|
569 function addon:SetGroupJoinStatus(id, status)
|
|
ShadowTheAge@12
|
570 local name = select(12, C_LFGList.GetSearchResultInfo(id))
|
|
ShadowTheAge@13
|
571 if name then
|
|
ShadowTheAge@13
|
572 recentgroups[name] = {status=status, time=GetTime()}
|
|
ShadowTheAge@13
|
573 end
|
|
ShadowTheAge@13
|
574 end
|
|
ShadowTheAge@13
|
575
|
|
ShadowTheAge@13
|
576 function addon:RealmVisited(realm, head)
|
|
ShadowTheAge@13
|
577 recentRealms[realm] = GetTime()
|
|
ShadowTheAge@12
|
578 end
|
|
ShadowTheAge@12
|
579
|
|
ShadowTheAge@12
|
580 function addon:updatePartyInfo()
|
|
ShadowTheAge@17
|
581 curPartyStat = {}
|
|
ShadowTheAge@12
|
582 local inGroup = IsInGroup()
|
|
ShadowTheAge@12
|
583 if inGroup then
|
|
ShadowTheAge@12
|
584 if IsInRaid() then
|
|
ShadowTheAge@12
|
585 for i=1, MAX_RAID_MEMBERS do
|
|
ShadowTheAge@17
|
586 addon:AddUnitIdStat("raid"..i, curPartyStat)
|
|
ShadowTheAge@12
|
587 end
|
|
ShadowTheAge@12
|
588 else
|
|
ShadowTheAge@12
|
589 for i=1, MAX_PARTY_MEMBERS do
|
|
ShadowTheAge@17
|
590 addon:AddUnitIdStat("party"..i, curPartyStat)
|
|
ShadowTheAge@12
|
591 end
|
|
ShadowTheAge@12
|
592 end
|
|
ShadowTheAge@12
|
593 end
|
|
ShadowTheAge@12
|
594 if inGroup ~= wasInGroup then
|
|
ShadowTheAge@13
|
595 addon:RefreshZone(true)
|
|
ShadowTheAge@12
|
596 wasInGroup = inGroup
|
|
ShadowTheAge@12
|
597 addon:UpdateAutoButtonStatus()
|
|
ShadowTheAge@12
|
598 end
|
|
ShadowTheAge@12
|
599 end
|
|
ShadowTheAge@12
|
600
|
|
ShadowTheAge@12
|
601
|
|
ShadowTheAge@12
|
602
|
|
ShadowTheAge@0
|
603
|
|
ShadowTheAge@0
|
604 -- Zone scanning routine
|
|
ShadowTheAge@0
|
605
|
|
ShadowTheAge@0
|
606 function addon:LeaveCombat()
|
|
ShadowTheAge@0
|
607 addon:UnregisterEvent("PLAYER_REGEN_ENABLED")
|
|
ShadowTheAge@0
|
608 scanstate = 0
|
|
ShadowTheAge@0
|
609 addon:ScanRealm();
|
|
ShadowTheAge@0
|
610 end
|
|
ShadowTheAge@0
|
611
|
|
ShadowTheAge@13
|
612 function addon:RefreshZoneAndClearHistory()
|
|
ShadowTheAge@13
|
613 ClearRealmHistory()
|
|
ShadowTheAge@11
|
614 addon:RefreshZone(true)
|
|
ShadowTheAge@11
|
615 end
|
|
ShadowTheAge@11
|
616
|
|
ShadowTheAge@11
|
617 function addon:RefreshZone(shedule)
|
|
ShadowTheAge@11
|
618 local inst, instType = IsInInstance()
|
|
ShadowTheAge@12
|
619 inInstance = (inst or instType ~= "none")
|
|
ShadowTheAge@12
|
620 if inInstance then
|
|
ShadowTheAge@11
|
621 lbRealm:SetText("Instanced zone")
|
|
ShadowTheAge@11
|
622 curRealmStat = nil
|
|
ShadowTheAge@12
|
623 inInstance = true
|
|
ShadowTheAge@11
|
624 else
|
|
ShadowTheAge@12
|
625 inInstance = false;
|
|
ShadowTheAge@11
|
626 if scanstate == 0 then
|
|
ShadowTheAge@11
|
627 addon:ScanRealm()
|
|
ShadowTheAge@11
|
628 elseif shedule == true and scanstate == 2 then
|
|
ShadowTheAge@11
|
629 addon:SetStatus("Rescan sheduled...")
|
|
ShadowTheAge@11
|
630 scanstate = 3
|
|
ShadowTheAge@11
|
631 end
|
|
ShadowTheAge@11
|
632 end
|
|
ShadowTheAge@12
|
633 addon:UpdateAutoButtonStatus()
|
|
ShadowTheAge@11
|
634 end
|
|
ShadowTheAge@11
|
635
|
|
ShadowTheAge@0
|
636 function addon:ScanRealm()
|
|
ShadowTheAge@0
|
637 if scanstate > 0 then return end
|
|
ShadowTheAge@0
|
638 if InCombatLockdown() then
|
|
ShadowTheAge@0
|
639 addon:RegisterEvent("PLAYER_REGEN_ENABLED","LeaveCombat")
|
|
ShadowTheAge@0
|
640 scanstate = 1
|
|
ShadowTheAge@11
|
641 addon:SetStatus("Scan sheduled after combat...");
|
|
ShadowTheAge@0
|
642 return
|
|
ShadowTheAge@0
|
643 end
|
|
ShadowTheAge@0
|
644 scanstate = 2
|
|
ShadowTheAge@11
|
645 addon:SetStatus("Scanning current realm...");
|
|
ShadowTheAge@0
|
646 local searchString = _G.WHO_TAG_ZONE .. '"' .. GetZoneText() .. '"';
|
|
ShadowTheAge@0
|
647 wholib:Who(searchString, {callback = "ScanResult", handler=addon})
|
|
ShadowTheAge@0
|
648 end
|
|
ShadowTheAge@0
|
649
|
|
ShadowTheAge@0
|
650 function addon:ScanResult(query, results, complete)
|
|
ShadowTheAge@0
|
651 local realms = {}
|
|
ShadowTheAge@0
|
652 for _, player in ipairs(results) do
|
|
ShadowTheAge@0
|
653 addon:AddRealmStat(player.Name, realms);
|
|
ShadowTheAge@0
|
654 end
|
|
ShadowTheAge@0
|
655 curRealmStat = addon:GetRealmStat(realms);
|
|
ShadowTheAge@11
|
656 curRealmStat.complete = complete
|
|
ShadowTheAge@0
|
657 addon:updateCurrentRealm();
|
|
ShadowTheAge@0
|
658 local rescan = scanstate == 3
|
|
ShadowTheAge@0
|
659 scanstate = 0;
|
|
ShadowTheAge@0
|
660 if rescan then addon:ScanRealm() end
|
|
ShadowTheAge@0
|
661 end
|
|
ShadowTheAge@0
|
662
|
|
ShadowTheAge@0
|
663 function addon:AddRealmStat(name, realms)
|
|
ShadowTheAge@11
|
664 if (name == playerName) then return end
|
|
ShadowTheAge@11
|
665 local _, realm = strsplit(realmSep, name)
|
|
ShadowTheAge@0
|
666 realm = realm or homeRealm
|
|
ShadowTheAge@0
|
667 realms[realm] = (realms[realm] or 0) + 1
|
|
ShadowTheAge@0
|
668 end
|
|
ShadowTheAge@0
|
669
|
|
ShadowTheAge@0
|
670 function addon:AddUnitIdStat(unitid, realms)
|
|
ShadowTheAge@0
|
671 local name, realm = UnitName(unitid);
|
|
ShadowTheAge@0
|
672 if not name then return end
|
|
ShadowTheAge@0
|
673 if realm == "" then realm = homeRealm end
|
|
ShadowTheAge@0
|
674 realm = realm or homeRealm
|
|
ShadowTheAge@0
|
675 realms[realm] = (realms[realm] or 0) + 1
|
|
ShadowTheAge@0
|
676 end
|
|
ShadowTheAge@0
|
677
|
|
ShadowTheAge@0
|
678 function addon:GetRealmStat(realms)
|
|
ShadowTheAge@0
|
679 local rcount = 0;
|
|
ShadowTheAge@0
|
680 local stat = {};
|
|
ShadowTheAge@0
|
681 local pcount = 0;
|
|
ShadowTheAge@19
|
682 if realms then
|
|
ShadowTheAge@19
|
683 for realm,count in pairs(realms) do
|
|
ShadowTheAge@19
|
684 table.insert(stat,{realm=realm,count=count})
|
|
ShadowTheAge@19
|
685 rcount = rcount + 1;
|
|
ShadowTheAge@19
|
686 pcount = pcount + count;
|
|
ShadowTheAge@19
|
687 end
|
|
ShadowTheAge@0
|
688 end
|
|
ShadowTheAge@0
|
689 if rcount > 1 then
|
|
ShadowTheAge@0
|
690 table.sort(stat, function(a,b) return a.count > b.count end)
|
|
ShadowTheAge@0
|
691 stat.max = stat[1].count
|
|
ShadowTheAge@0
|
692 else stat.max = 0 end
|
|
ShadowTheAge@0
|
693 stat.players = pcount;
|
|
ShadowTheAge@0
|
694 stat.realms = rcount;
|
|
ShadowTheAge@0
|
695 return stat;
|
|
ShadowTheAge@0
|
696 end
|
|
ShadowTheAge@0
|
697
|
|
ShadowTheAge@0
|
698 function addon:updateCurrentRealm()
|
|
ShadowTheAge@11
|
699 addon:SetStatus();
|
|
ShadowTheAge@11
|
700 if not curRealmStat or curRealmStat.realms < 1 then
|
|
ShadowTheAge@11
|
701 lbRealm:SetText("Unknown realm (No players)")
|
|
ShadowTheAge@11
|
702 return;
|
|
ShadowTheAge@0
|
703 end
|
|
ShadowTheAge@11
|
704
|
|
ShadowTheAge@11
|
705 local bestRealm = curRealmStat[1]
|
|
ShadowTheAge@13
|
706 addon:RealmVisited(bestRealm.realm, true)
|
|
ShadowTheAge@12
|
707 local prevThreshold = math.min(bestRealm.count/3,10)
|
|
ShadowTheAge@11
|
708 local mixCount = 0
|
|
ShadowTheAge@11
|
709 for i=2,curRealmStat.realms do
|
|
ShadowTheAge@0
|
710 local data = curRealmStat[i]
|
|
ShadowTheAge@11
|
711 if data.count >= prevThreshold then
|
|
ShadowTheAge@11
|
712 mixCount = mixCount + 1
|
|
ShadowTheAge@13
|
713 addon:RealmVisited(data.realm)
|
|
ShadowTheAge@12
|
714 prevThreshold = math.min(data.count/3,10)
|
|
ShadowTheAge@0
|
715 end
|
|
ShadowTheAge@0
|
716 end
|
|
ShadowTheAge@11
|
717 curRealmStat.threshold = prevThreshold
|
|
ShadowTheAge@11
|
718
|
|
ShadowTheAge@11
|
719 if (mixCount > 0) then
|
|
ShadowTheAge@11
|
720 lbRealm:SetText("Mixed "..bestRealm.realm.." +"..mixCount)
|
|
ShadowTheAge@11
|
721 else
|
|
ShadowTheAge@11
|
722 lbRealm:SetText(bestRealm.realm)
|
|
ShadowTheAge@0
|
723 end
|
|
ShadowTheAge@0
|
724 end
|
|
ShadowTheAge@0
|
725
|
|
ShadowTheAge@12
|
726
|
|
ShadowTheAge@12
|
727
|
|
ShadowTheAge@12
|
728
|
|
ShadowTheAge@12
|
729
|
|
ShadowTheAge@12
|
730
|
|
ShadowTheAge@12
|
731 -- Auto action button
|
|
ShadowTheAge@12
|
732
|
|
ShadowTheAge@13
|
733 local action
|
|
ShadowTheAge@12
|
734
|
|
ShadowTheAge@13
|
735 local LeaveGroup = {
|
|
ShadowTheAge@13
|
736 func = LeaveParty;
|
|
ShadowTheAge@17
|
737 tooltip = function(self)
|
|
ShadowTheAge@17
|
738 local partyStat = addon:GetRealmStat(curPartyStat)
|
|
ShadowTheAge@17
|
739 GameTooltip:AddLine("Players in party "..partyStat.players)
|
|
ShadowTheAge@17
|
740 local max = partyStat.max;
|
|
ShadowTheAge@17
|
741 for i=1,#partyStat do
|
|
ShadowTheAge@17
|
742 local data = partyStat[i]
|
|
ShadowTheAge@17
|
743 local percent = math.ceil(100 * data.count / partyStat.players - 0.5) .. "%";
|
|
ShadowTheAge@17
|
744 local pmax = data.count/max;
|
|
ShadowTheAge@17
|
745 local green = 0.5 + pmax * 0.5;
|
|
ShadowTheAge@17
|
746 local gray = 0.5 * (1-pmax)
|
|
ShadowTheAge@17
|
747 GameTooltip:AddDoubleLine(data.realm, percent, gray,green,gray,gray,green,gray)
|
|
ShadowTheAge@17
|
748 end
|
|
ShadowTheAge@17
|
749 GameTooltip:AddLine("Click to leave party",1,0.5,0)
|
|
ShadowTheAge@17
|
750 end,
|
|
ShadowTheAge@13
|
751 text = "Leave group"
|
|
ShadowTheAge@13
|
752 }
|
|
ShadowTheAge@13
|
753
|
|
ShadowTheAge@13
|
754 local CancelJoin = {
|
|
ShadowTheAge@13
|
755 func = function()
|
|
ShadowTheAge@13
|
756 local apps = C_LFGList.GetApplications();
|
|
ShadowTheAge@13
|
757 if apps[1] then
|
|
ShadowTheAge@13
|
758 C_LFGList.CancelApplication(apps[1])
|
|
ShadowTheAge@13
|
759 end
|
|
ShadowTheAge@13
|
760 end,
|
|
ShadowTheAge@13
|
761 tooltip = "Cancel your current join application",
|
|
ShadowTheAge@13
|
762 text = "Cancel join"
|
|
ShadowTheAge@13
|
763 }
|
|
ShadowTheAge@13
|
764
|
|
ShadowTheAge@13
|
765 local QuickJoin = {
|
|
ShadowTheAge@13
|
766 func = function(self, button)
|
|
ShadowTheAge@13
|
767 if button == "RightButton" then
|
|
ShadowTheAge@13
|
768 addon:SetGroupJoinStatus(self.groupToJoin, "_skip")
|
|
ShadowTheAge@13
|
769 else
|
|
ShadowTheAge@13
|
770 local delisted = select(11, C_LFGList.GetSearchResultInfo(self.groupToJoin))
|
|
ShadowTheAge@13
|
771 if delisted == false then
|
|
ShadowTheAge@13
|
772 JoinGroup(self.groupToJoin)
|
|
ShadowTheAge@13
|
773 else
|
|
ShadowTheAge@13
|
774 addon:SetStatus("Group just delisted")
|
|
ShadowTheAge@13
|
775 end
|
|
ShadowTheAge@13
|
776 end
|
|
ShadowTheAge@13
|
777 end,
|
|
ShadowTheAge@13
|
778 findGroup = function()
|
|
ShadowTheAge@13
|
779 local count, list = C_LFGList.GetSearchResults()
|
|
ShadowTheAge@13
|
780 local best
|
|
ShadowTheAge@13
|
781 local bestvalue = 0
|
|
ShadowTheAge@13
|
782 for i = 1,count do
|
|
ShadowTheAge@13
|
783 local rid = list[i];
|
|
ShadowTheAge@13
|
784 if not rid then break end
|
|
ShadowTheAge@13
|
785 local value = WeightLfgItem(rid, true);
|
|
ShadowTheAge@13
|
786 if value > bestvalue then
|
|
ShadowTheAge@13
|
787 best = rid
|
|
ShadowTheAge@13
|
788 bestvalue = value
|
|
ShadowTheAge@13
|
789 end
|
|
ShadowTheAge@13
|
790 end
|
|
ShadowTheAge@13
|
791 return best
|
|
ShadowTheAge@13
|
792 end,
|
|
ShadowTheAge@13
|
793 tooltip = function(self)
|
|
ShadowTheAge@13
|
794 AddLfgGroupInfo(self.groupToJoin, true)
|
|
ShadowTheAge@13
|
795 GameTooltip:AddLine(" ")
|
|
ShadowTheAge@13
|
796 GameTooltip:AddDoubleLine("Click to join","Right click to skip",0,1,0,1,0.5,0)
|
|
ShadowTheAge@13
|
797 end,
|
|
ShadowTheAge@13
|
798 text = "Quick join"
|
|
ShadowTheAge@13
|
799 }
|
|
ShadowTheAge@13
|
800
|
|
ShadowTheAge@13
|
801 local ScanNext = {
|
|
ShadowTheAge@13
|
802 func = function(self)
|
|
ShadowTheAge@13
|
803 autoScanGroups[curLfgGroup] = 1
|
|
ShadowTheAge@13
|
804 addon.LfgScan(self.category)
|
|
ShadowTheAge@13
|
805 end,
|
|
ShadowTheAge@13
|
806 tooltip = function(self)
|
|
ShadowTheAge@13
|
807 GameTooltip:AddLine("Scan "..(C_LFGList.GetCategoryInfo(lfgGroups[self.category])))
|
|
ShadowTheAge@13
|
808 end,
|
|
ShadowTheAge@13
|
809 text = "Scan more"
|
|
ShadowTheAge@13
|
810 }
|
|
ShadowTheAge@13
|
811
|
|
ShadowTheAge@13
|
812 local NeedReset = {
|
|
ShadowTheAge@13
|
813 func = function()
|
|
ShadowTheAge@13
|
814 wipe(autoScanGroups);
|
|
ShadowTheAge@13
|
815 local categoryToScan = addon.GetNextAutoScanCategory()
|
|
ShadowTheAge@13
|
816 if categoryToScan then
|
|
ShadowTheAge@13
|
817 addon.LfgScan(categoryToScan)
|
|
ShadowTheAge@13
|
818 end
|
|
ShadowTheAge@13
|
819 end,
|
|
ShadowTheAge@13
|
820 tooltip = "Scan again",
|
|
ShadowTheAge@13
|
821 text = "Restart scan"
|
|
ShadowTheAge@13
|
822 }
|
|
ShadowTheAge@13
|
823
|
|
ShadowTheAge@13
|
824 local Wait = {
|
|
ShadowTheAge@13
|
825 tooltip = "Scan in progress",
|
|
ShadowTheAge@13
|
826 text = "Wait..."
|
|
ShadowTheAge@13
|
827 }
|
|
ShadowTheAge@13
|
828
|
|
ShadowTheAge@13
|
829 local ShowQuickHint = {
|
|
ShadowTheAge@13
|
830 tooltip = "Quick Join",
|
|
ShadowTheAge@13
|
831 text = "Quick Join",
|
|
ShadowTheAge@13
|
832 func = function()
|
|
ShadowTheAge@13
|
833 StaticPopupDialogs["CROSS_REALM_ASSIST"] = {
|
|
ShadowTheAge@13
|
834 text = "Quick Join button will automatically join you to a random group with autoinvite and medium number of players. You never join same group twice, you need to clear join history to do so. This message can be disabled in options.",
|
|
ShadowTheAge@13
|
835 button1 = OKAY,
|
|
ShadowTheAge@13
|
836 hideOnEscape = true,
|
|
ShadowTheAge@13
|
837 preferredIndex = 3,
|
|
ShadowTheAge@13
|
838 }
|
|
ShadowTheAge@13
|
839 StaticPopup_Show("CROSS_REALM_ASSIST")
|
|
ShadowTheAge@13
|
840 hintShown = true;
|
|
ShadowTheAge@13
|
841 end
|
|
ShadowTheAge@13
|
842 }
|
|
ShadowTheAge@13
|
843
|
|
ShadowTheAge@13
|
844 function addon.DoAutoAction(widget, button)
|
|
ShadowTheAge@13
|
845 addon:SetStatus()
|
|
ShadowTheAge@13
|
846 if action and action.func then
|
|
ShadowTheAge@13
|
847 action:func(button)
|
|
ShadowTheAge@13
|
848 end
|
|
ShadowTheAge@13
|
849 addon:UpdateAutoButtonStatus()
|
|
ShadowTheAge@13
|
850 end
|
|
ShadowTheAge@13
|
851
|
|
ShadowTheAge@13
|
852 function addon.actionTooltip()
|
|
ShadowTheAge@13
|
853 local tooltip = action.tooltip
|
|
ShadowTheAge@13
|
854 if type(tooltip) == 'function' then
|
|
ShadowTheAge@13
|
855 tooltip(action)
|
|
ShadowTheAge@13
|
856 else
|
|
ShadowTheAge@13
|
857 GameTooltip:AddLine(tooltip)
|
|
ShadowTheAge@11
|
858 end
|
|
ShadowTheAge@11
|
859 end
|
|
ShadowTheAge@11
|
860
|
|
ShadowTheAge@13
|
861 function addon:UpdateAutoButtonStatus()
|
|
ShadowTheAge@13
|
862 if not btQuick then return end
|
|
ShadowTheAge@13
|
863 btQuick:Enable()
|
|
ShadowTheAge@19
|
864 if IsInGroup() then
|
|
ShadowTheAge@13
|
865 action = LeaveGroup;
|
|
ShadowTheAge@13
|
866 elseif C_LFGList.GetNumApplications() > 0 then
|
|
ShadowTheAge@13
|
867 action = CancelJoin;
|
|
ShadowTheAge@13
|
868 elseif lfgScanInProgress then
|
|
ShadowTheAge@13
|
869 action = Wait
|
|
ShadowTheAge@19
|
870 elseif not hintShown and db.global.quickJoinHint then
|
|
ShadowTheAge@19
|
871 action = ShowQuickHint;
|
|
ShadowTheAge@13
|
872 else
|
|
ShadowTheAge@13
|
873 local group = QuickJoin.findGroup();
|
|
ShadowTheAge@13
|
874 if group then
|
|
ShadowTheAge@13
|
875 action = QuickJoin;
|
|
ShadowTheAge@13
|
876 QuickJoin.groupToJoin = group
|
|
ShadowTheAge@13
|
877 else
|
|
ShadowTheAge@13
|
878 local categoryToScan = addon.GetNextAutoScanCategory()
|
|
ShadowTheAge@13
|
879 if (categoryToScan) then
|
|
ShadowTheAge@13
|
880 action = ScanNext;
|
|
ShadowTheAge@13
|
881 ScanNext.category = categoryToScan
|
|
ShadowTheAge@13
|
882 else
|
|
ShadowTheAge@13
|
883 action = NeedReset;
|
|
ShadowTheAge@13
|
884 end
|
|
ShadowTheAge@13
|
885 end
|
|
ShadowTheAge@13
|
886 end
|
|
ShadowTheAge@13
|
887 btQuick:SetText(action.text)
|
|
ShadowTheAge@13
|
888 if GameTooltip:GetOwner() == btQuick then
|
|
ShadowTheAge@13
|
889 ShowTooltip(btQuick)
|
|
ShadowTheAge@0
|
890 end
|
|
ShadowTheAge@0
|
891 end
|
|
ShadowTheAge@0
|
892
|
|
ShadowTheAge@12
|
893
|
|
ShadowTheAge@13
|
894
|
|
ShadowTheAge@13
|
895
|
|
ShadowTheAge@13
|
896
|
|
ShadowTheAge@13
|
897
|
|
ShadowTheAge@13
|
898 -- Settings
|
|
ShadowTheAge@13
|
899
|
|
ShadowTheAge@13
|
900 local function toggleMinimapIcon(btn, arg1, arg2, checked)
|
|
ShadowTheAge@13
|
901 local hidden = not checked;
|
|
ShadowTheAge@13
|
902 db.global.minimap.hide = hidden;
|
|
ShadowTheAge@13
|
903 if hidden then
|
|
ShadowTheAge@13
|
904 DEFAULT_CHAT_FRAME:AddMessage("|cffff0000Type |cffffffff/cra |cffff0000in chat to open Cross Realm Assist without minimap button");
|
|
ShadowTheAge@13
|
905 minimapIcon:Hide("CrossRealmAssistMinimapIcon")
|
|
ShadowTheAge@13
|
906 else
|
|
ShadowTheAge@13
|
907 minimapIcon:Show("CrossRealmAssistMinimapIcon")
|
|
ShadowTheAge@13
|
908 end
|
|
ShadowTheAge@0
|
909 end
|
|
ShadowTheAge@0
|
910
|
|
ShadowTheAge@13
|
911 local function toggleQuickJoinHint(btn, arg1, arg2, checked)
|
|
ShadowTheAge@13
|
912 db.global.quickJoinHint = checked
|
|
ShadowTheAge@0
|
913 end
|
|
ShadowTheAge@0
|
914
|
|
ShadowTheAge@13
|
915 local function toggleQuickJoin(btn, arg1, arg2, checked)
|
|
ShadowTheAge@13
|
916 db.global.quickJoin[arg1] = checked
|
|
ShadowTheAge@13
|
917 end
|
|
ShadowTheAge@13
|
918
|
|
ShadowTheAge@13
|
919 local function ClearJoinHistory()
|
|
ShadowTheAge@13
|
920 recentgroups = {}
|
|
ShadowTheAge@13
|
921 addon:UpdateAutoButtonStatus()
|
|
ShadowTheAge@13
|
922 if lfgTable then lfgTable:Refresh() end
|
|
ShadowTheAge@13
|
923 end
|
|
ShadowTheAge@13
|
924
|
|
ShadowTheAge@13
|
925 --[[local function resetPos()
|
|
ShadowTheAge@13
|
926 db.global.widgetPos = DefaultWidgetPos
|
|
ShadowTheAge@13
|
927 if gui then
|
|
ShadowTheAge@13
|
928 gui:ClearAllPoints()
|
|
ShadowTheAge@13
|
929 gui:SetPoint(DefaultWidgetPos.to,DefaultWidgetPos.x,DefaultWidgetPos.y)
|
|
ShadowTheAge@0
|
930 end
|
|
ShadowTheAge@13
|
931 end]]
|
|
ShadowTheAge@13
|
932
|
|
ShadowTheAge@13
|
933 local function initMenu(self, level)
|
|
ShadowTheAge@13
|
934 if not level then return end
|
|
ShadowTheAge@13
|
935 if level == 1 then
|
|
ShadowTheAge@13
|
936 UIDropDownMenu_AddButton({text="Clear realm history",notCheckable=1,func=ClearRealmHistory}, level)
|
|
ShadowTheAge@13
|
937 UIDropDownMenu_AddButton({text="Clear join history",notCheckable=1,func=ClearJoinHistory}, level)
|
|
ShadowTheAge@13
|
938 UIDropDownMenu_AddButton({disabled=1,notCheckable=1}, level)
|
|
ShadowTheAge@13
|
939 UIDropDownMenu_AddButton({isTitle=1,text="Settings",notCheckable=1}, level)
|
|
ShadowTheAge@13
|
940 UIDropDownMenu_AddButton({text="Show Minimap Button",checked=not db.global.minimap.hide, func=toggleMinimapIcon,keepShownOnClick=true,isNotRadio=true}, level)
|
|
ShadowTheAge@13
|
941 UIDropDownMenu_AddButton({text="Show Quick Join Hint",checked=db.global.quickJoinHint, func=toggleQuickJoinHint,keepShownOnClick=true,isNotRadio=true}, level)
|
|
ShadowTheAge@13
|
942 UIDropDownMenu_AddButton({text="Quick join categories",notCheckable=1,hasArrow=1,value="qjc",keepShownOnClick=true}, level)
|
|
ShadowTheAge@13
|
943 elseif level == 2 then
|
|
ShadowTheAge@13
|
944 if UIDROPDOWNMENU_MENU_VALUE == "qjc" then
|
|
ShadowTheAge@13
|
945 for i=1,#lfgGroups do
|
|
ShadowTheAge@13
|
946 local groupId = lfgGroups[i]
|
|
ShadowTheAge@13
|
947 UIDropDownMenu_AddButton({text=(C_LFGList.GetCategoryInfo(groupId)),checked=db.global.quickJoin[groupId],arg1=groupId,func=toggleQuickJoin,keepShownOnClick=true,isNotRadio=true}, level)
|
|
ShadowTheAge@13
|
948 end
|
|
ShadowTheAge@13
|
949 end
|
|
ShadowTheAge@13
|
950 end
|
|
ShadowTheAge@13
|
951 end
|
|
ShadowTheAge@13
|
952
|
|
ShadowTheAge@13
|
953 function addon.ShowSettings(frame)
|
|
ShadowTheAge@13
|
954 if not settingsMenu then
|
|
ShadowTheAge@13
|
955 settingsMenu = CreateFrame("Frame", "CrossRealmAssistMenu")
|
|
ShadowTheAge@13
|
956 settingsMenu.displayMode = "MENU"
|
|
ShadowTheAge@13
|
957 settingsMenu.initialize = initMenu
|
|
ShadowTheAge@13
|
958 end
|
|
ShadowTheAge@13
|
959 ToggleDropDownMenu(1, nil, settingsMenu, frame, 10, 0)
|
|
ShadowTheAge@12
|
960 end |