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