Nenue@135
|
1
|
Nenue@135
|
2 local print = DEVIAN_WORKSPACE and function(...) print('LFGFrame', ...) end or nop
|
Nenue@135
|
3
|
Nenue@135
|
4 VeneerRosterKunMixin = {
|
Nenue@135
|
5 anchorFrame = 'LFGListFrame',
|
Nenue@135
|
6 anchorPoint = 'TOPLEFT',
|
Nenue@135
|
7
|
Nenue@135
|
8 InvasionsDirty = true,
|
Nenue@135
|
9 AchievementsDirty = true,
|
Nenue@135
|
10 GuildInfoDirty = true,
|
Nenue@135
|
11 blocks = {},
|
Nenue@135
|
12 }
|
Nenue@135
|
13
|
Nenue@135
|
14
|
Nenue@135
|
15 local module = VeneerRosterKunMixin
|
Nenue@135
|
16
|
Nenue@135
|
17 function module:OnLoad()
|
Nenue@135
|
18 Veneer:AddHandler(self, self.anchorPoint)
|
Nenue@135
|
19 self:RegisterEvent('ADDON_LOADED')
|
Nenue@135
|
20
|
Nenue@135
|
21 hooksecurefunc("LFGListCategorySelection_StartFindGroup", function(panel, questID)
|
Nenue@135
|
22 print('LFGListCategorySelection_StartFindGroup', panel:GetParent(), questID)
|
Nenue@135
|
23 end)
|
Nenue@135
|
24 hooksecurefunc("LFGListCategorySelection_SelectCategory", function(panel, categoryID, filters)
|
Nenue@135
|
25 print('LFGListCategorySelection_SelectCategory', panel:GetParent(), categoryID, filters)
|
Nenue@135
|
26 print('\n',debugstack(3))
|
Nenue@135
|
27 end)
|
Nenue@135
|
28 hooksecurefunc("LFGListSearchPanel_SetCategory", function(panel, categoryID, filters, baseFilters)
|
Nenue@135
|
29 print('LFGListSearchPanel_SetCategory', panel:GetParent(), categoryID, filters, baseFilters)
|
Nenue@135
|
30 end)
|
Nenue@135
|
31 end
|
Nenue@135
|
32
|
Nenue@135
|
33 function module:Setup()
|
Nenue@135
|
34 VeneerHandlerMixin.Setup(self)
|
Nenue@135
|
35 self:SetParent(LFGListFrame)
|
Nenue@135
|
36 self:SetPoint('TOPLEFT', LFGListFrame,'TOPRIGHT')
|
Nenue@135
|
37 self:SetShown(true)
|
Nenue@135
|
38 end
|
Nenue@135
|
39
|
Nenue@135
|
40 function module:SetDirty()
|
Nenue@135
|
41 if self:IsVisible() then
|
Nenue@135
|
42 self:Update()
|
Nenue@135
|
43 else
|
Nenue@135
|
44 self.GuildInfoDirty = true
|
Nenue@135
|
45 self.AchievementsDirty = true
|
Nenue@135
|
46 self.InvasionsDirty = true
|
Nenue@135
|
47 end
|
Nenue@135
|
48 end
|
Nenue@135
|
49 local firstLoad = true
|
Nenue@135
|
50 function module:OnShow()
|
Nenue@135
|
51 print('|cFF00FFFFOnShow()|r')
|
Nenue@135
|
52 self:Update(firstLoad)
|
Nenue@135
|
53 firstLoad = nil
|
Nenue@135
|
54
|
Nenue@135
|
55 local locationName = GetRealZoneText()
|
Nenue@135
|
56
|
Nenue@135
|
57 if not C_LFGList.GetActiveEntryInfo() and locationName and locationName:match('Invasion') and not InCombatLockdown() then
|
Nenue@135
|
58 PVEFrame_ShowFrame("GroupFinderFrame", LFGListPVEStub);
|
Nenue@135
|
59 local panel = LFGListFrame.CategorySelection
|
Nenue@135
|
60 LFGListCategorySelection_SelectCategory(panel, 6, 0);
|
Nenue@136
|
61
|
Nenue@136
|
62 local bossName = locationName:match('Greater Invasion Point: (.+)')
|
Nenue@136
|
63
|
Nenue@136
|
64 LFGListCategorySelection_StartFindGroup(panel, bossName or locationName);
|
Nenue@135
|
65 end
|
Nenue@135
|
66 end
|
Nenue@135
|
67
|
Nenue@135
|
68 function module:UpdateGuildInfo()
|
Nenue@135
|
69 local numMembers = GetNumGuildMembers()
|
Nenue@135
|
70 print(numMembers)
|
Nenue@135
|
71 for i = 1, numMembers do
|
Nenue@135
|
72 --print(GetGuildRosterInfo(i))
|
Nenue@135
|
73 end
|
Nenue@135
|
74 self.GuildInfoDirty = nil
|
Nenue@135
|
75 end
|
Nenue@135
|
76
|
Nenue@135
|
77 -- cheevos to link
|
Nenue@135
|
78 local overlaps = {
|
Nenue@135
|
79 [11781] = 11875,
|
Nenue@135
|
80 [12002] = 12111,
|
Nenue@135
|
81 }
|
Nenue@135
|
82 local cheevos = {
|
Nenue@135
|
83 -- Mythic Prog
|
Nenue@135
|
84 {
|
Nenue@135
|
85 -- Antorus
|
Nenue@135
|
86 12002, -- argus
|
Nenue@135
|
87 12001, -- aggramar
|
Nenue@135
|
88 12000, -- coven
|
Nenue@135
|
89 11999, -- barry
|
Nenue@135
|
90 11998, -- kin'garoth
|
Nenue@135
|
91 11997, -- imonar
|
Nenue@135
|
92 11996, -- eonar
|
Nenue@135
|
93 11995, -- portal keeper
|
Nenue@135
|
94 11994, -- high command
|
Nenue@135
|
95 11993, -- doggos
|
Nenue@135
|
96 11992, -- worldbreaker
|
Nenue@135
|
97
|
Nenue@135
|
98 -- Tomb of Sargeras
|
Nenue@135
|
99 11781, -- kj
|
Nenue@135
|
100 11780, -- avatar
|
Nenue@135
|
101 11779, -- maiden
|
Nenue@135
|
102 11776, -- mistress
|
Nenue@135
|
103 11778, -- host,
|
Nenue@135
|
104 11777, -- sisters
|
Nenue@135
|
105 11775, -- harjatan,
|
Nenue@135
|
106 11774, -- di,
|
Nenue@135
|
107 11773, -- goroth
|
Nenue@135
|
108 },
|
Nenue@135
|
109 -- Completion
|
Nenue@135
|
110 {
|
Nenue@135
|
111 12111, -- CE Argus,
|
Nenue@135
|
112 12110, -- AotC Argus,
|
Nenue@135
|
113 11875, -- CE KJ
|
Nenue@135
|
114 11874, -- AotC KJ
|
Nenue@135
|
115 11790 -- Deceiver's Fall,
|
Nenue@135
|
116
|
Nenue@135
|
117
|
Nenue@135
|
118 },
|
Nenue@135
|
119 -- Mythic+
|
Nenue@135
|
120 {
|
Nenue@135
|
121 11162, -- master
|
Nenue@135
|
122 11185, -- conqueror
|
Nenue@135
|
123 }
|
Nenue@135
|
124 }
|
Nenue@135
|
125
|
Nenue@135
|
126 local invasion = {}
|
Nenue@135
|
127 local cheev = {}
|
Nenue@135
|
128
|
Nenue@135
|
129 function cheev:OnClick()
|
Nenue@135
|
130 local resultID = LFGListFrame.SearchPanel.selectedResult or self:GetParent().selectedID
|
Nenue@135
|
131 print('current selection = ', resultID)
|
Nenue@135
|
132 if ACTIVE_CHAT_EDIT_BOX then
|
Nenue@135
|
133 ChatEdit_InsertLink(self.link)
|
Nenue@135
|
134 elseif resultID then
|
Nenue@135
|
135 local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName = C_LFGList.GetSearchResultInfo(resultID);
|
Nenue@135
|
136 --print(name, comment, leaderName)
|
Nenue@135
|
137 ChatFrame_OpenChat("/w "..leaderName.." "..self.link, DEFAULT_CHAT_FRAME)
|
Nenue@135
|
138 end
|
Nenue@135
|
139 end
|
Nenue@135
|
140
|
Nenue@135
|
141 function invasion:OnClick()
|
Nenue@135
|
142 if not InCombatLockdown() then
|
Nenue@135
|
143 PVEFrame_ShowFrame("GroupFinderFrame", LFGListPVEStub);
|
Nenue@135
|
144 local panel = LFGListFrame.CategorySelection
|
Nenue@135
|
145 LFGListCategorySelection_SelectCategory(panel, 6, 0);
|
Nenue@135
|
146 LFGListCategorySelection_StartFindGroup(panel, self.searchText);
|
Nenue@135
|
147 end
|
Nenue@135
|
148
|
Nenue@135
|
149 end
|
Nenue@135
|
150
|
Nenue@135
|
151 local listed = {}
|
Nenue@135
|
152
|
Nenue@135
|
153
|
Nenue@135
|
154 function module:Update(forced)
|
Nenue@135
|
155 if self.GuildInfoDirty or forced then
|
Nenue@135
|
156 self:UpdateGuildInfo()
|
Nenue@135
|
157 end
|
Nenue@135
|
158 local numBlocks = 0
|
Nenue@135
|
159 if self.AchievementsDirty or forced then
|
Nenue@135
|
160 numBlocks = self:UpdateAchievementLinks(numBlocks)
|
Nenue@135
|
161 end
|
Nenue@135
|
162
|
Nenue@135
|
163 if self.InvasionsDirty or forced then
|
Nenue@135
|
164 numBlocks = self:UpdateInvasionButtons(numBlocks)
|
Nenue@135
|
165 end
|
Nenue@135
|
166
|
Nenue@135
|
167 local lastBlock
|
Nenue@135
|
168 local contentsHeight = 0
|
Nenue@135
|
169 for index, block in ipairs(self.blocks) do
|
Nenue@135
|
170 if index > numBlocks then
|
Nenue@135
|
171 block:Hide()
|
Nenue@135
|
172 else
|
Nenue@135
|
173 block:ClearAllPoints()
|
Nenue@135
|
174 if lastBlock then
|
Nenue@135
|
175 block:SetPoint('TOPLEFT', lastBlock, 'BOTTOMLEFT', 0, -2)
|
Nenue@135
|
176 else
|
Nenue@135
|
177 block:SetPoint('TOPLEFT', LFGListFrame, 'TOPRIGHT', 0, 0)
|
Nenue@135
|
178 end
|
Nenue@135
|
179 block:Show()
|
Nenue@135
|
180 lastBlock = block
|
Nenue@135
|
181
|
Nenue@135
|
182 contentsHeight = contentsHeight + block:GetHeight()
|
Nenue@135
|
183 end
|
Nenue@135
|
184 end
|
Nenue@135
|
185 self:SetHeight(contentsHeight)
|
Nenue@135
|
186 end
|
Nenue@135
|
187
|
Nenue@135
|
188
|
Nenue@135
|
189 function module:GetBlock(index)
|
Nenue@135
|
190
|
Nenue@135
|
191 local block =self.blocks[index]
|
Nenue@135
|
192 if not block then
|
Nenue@135
|
193 block = CreateFrame('Button', 'VeneerRosterKunBlock'..index, self, 'VeneerRosterKunBlock')
|
Nenue@135
|
194
|
Nenue@135
|
195 block:SetID(index)
|
Nenue@135
|
196 self.blocks[index] = block
|
Nenue@135
|
197 end
|
Nenue@135
|
198 return block
|
Nenue@135
|
199 end
|
Nenue@135
|
200
|
Nenue@135
|
201 function module:UpdateInvasionButtons(offset)
|
Nenue@135
|
202 print('UpdateInvasionButtons()')
|
Nenue@135
|
203 offset = offset or 0
|
Nenue@135
|
204 local lastBlock = self.lastAchievement
|
Nenue@135
|
205
|
Nenue@135
|
206 local contentsHeight = 0
|
Nenue@135
|
207 local areaPOIs = C_WorldMap.GetAreaPOIForMap(GetCurrentMapAreaID(), 1);
|
Nenue@135
|
208 if areaPOIs then
|
Nenue@135
|
209
|
Nenue@135
|
210
|
Nenue@135
|
211 for i, areaPoiID in ipairs(areaPOIs) do
|
Nenue@135
|
212 local poiInfo = C_WorldMap.GetAreaPOIInfo(GetCurrentMapAreaID(), areaPoiID, 1);
|
Nenue@135
|
213
|
Nenue@135
|
214 offset = offset + 1
|
Nenue@135
|
215 --print(index)
|
Nenue@135
|
216 local block = self:GetBlock(offset)
|
Nenue@135
|
217 block:SetScript('OnClick', invasion.OnClick)
|
Nenue@135
|
218 block.Label:SetText(poiInfo.description)
|
Nenue@135
|
219 block.Icon:SetAtlas(poiInfo.atlasName)
|
Nenue@135
|
220 block.searchText = poiInfo.description
|
Nenue@135
|
221 block.buttonType = 'group-poi'
|
Nenue@135
|
222 end
|
Nenue@135
|
223 end
|
Nenue@135
|
224 return offset, contentsHeight
|
Nenue@135
|
225 end
|
Nenue@135
|
226
|
Nenue@135
|
227 function module:UpdateAchievementLinks(offset)
|
Nenue@135
|
228 print('UpdateAchievementLinks()')
|
Nenue@135
|
229 offset = offset or 0
|
Nenue@135
|
230 local resultID = LFGListFrame.SearchPanel.selectedResult or self.selectedID
|
Nenue@135
|
231 self:Show()
|
Nenue@135
|
232
|
Nenue@135
|
233
|
Nenue@135
|
234 local contentsHeight = 0
|
Nenue@135
|
235 for _, group in ipairs(cheevos) do
|
Nenue@135
|
236 for _, id in ipairs(group) do
|
Nenue@135
|
237 local _, name, points, completed, month, day, year, description, flags, icon = GetAchievementInfo(id)
|
Nenue@135
|
238 if completed then
|
Nenue@135
|
239 -- if the highest mythic kill
|
Nenue@135
|
240 if listed[overlaps[id]] then
|
Nenue@135
|
241 break
|
Nenue@135
|
242 end
|
Nenue@135
|
243 offset = offset + 1
|
Nenue@135
|
244 local block = self:GetBlock(offset)
|
Nenue@135
|
245 block:SetScript('OnClick', cheev.OnClick)
|
Nenue@135
|
246 --print(index)
|
Nenue@135
|
247
|
Nenue@135
|
248 block.link = GetAchievementLink(id)
|
Nenue@135
|
249 block.Icon:SetTexture(icon)
|
Nenue@135
|
250 block.Label:SetText(name)
|
Nenue@135
|
251 block.buttonType = 'cheevo'
|
Nenue@135
|
252
|
Nenue@135
|
253 contentsHeight = contentsHeight + block:GetHeight()
|
Nenue@135
|
254
|
Nenue@135
|
255 --print(index, name, icon)
|
Nenue@135
|
256 listed[id] = true
|
Nenue@135
|
257 break;
|
Nenue@135
|
258 end
|
Nenue@135
|
259 end
|
Nenue@135
|
260 end
|
Nenue@135
|
261
|
Nenue@135
|
262 self.lastAchievement = lastBlock
|
Nenue@135
|
263
|
Nenue@135
|
264 return offset, contentsHeight
|
Nenue@135
|
265
|
Nenue@135
|
266 --[[
|
Nenue@135
|
267 --]]
|
Nenue@135
|
268
|
Nenue@135
|
269
|
Nenue@135
|
270 end
|
Nenue@135
|
271
|
Nenue@135
|
272 function module:SetupGuildUI()
|
Nenue@135
|
273 self:UnregisterEvent('ADDON_LOADED')
|
Nenue@135
|
274 end
|
Nenue@135
|
275 function module:OnEvent(event, ...)
|
Nenue@135
|
276 print('|cFFFF0088OnEvent()|r', event, ...)
|
Nenue@135
|
277 if event == 'ADDON_LOADED' then
|
Nenue@135
|
278 local addon = ...
|
Nenue@135
|
279 if addon == 'Blizzard_GuildUI' then
|
Nenue@135
|
280 self:SetupGuildUI()
|
Nenue@135
|
281 end
|
Nenue@135
|
282 elseif event == 'LFG_LIST_SEARCH_RESULTS_RECEIVED' then
|
Nenue@135
|
283 elseif event == 'LFG_LIST_SEARCH_RESULT_UPDATED' then
|
Nenue@135
|
284 end
|
Nenue@135
|
285 end |