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@138
|
83
|
Nenue@138
|
84 -- mythic prog
|
Nenue@135
|
85 {
|
Nenue@138
|
86 13314, -- Mythic: Lady Jaina Proudmoore
|
Nenue@138
|
87 13313, -- Mythic: Stormwall Blockade
|
Nenue@138
|
88 13312, -- Mythic: Mekkatorque
|
Nenue@138
|
89 13311, -- Mythic: King Rastakhan
|
Nenue@138
|
90 13300, -- Mythic: Conclave of the Chosen
|
Nenue@138
|
91 13299, -- Mythic: Opulence
|
Nenue@138
|
92 13298, -- Mythic: Jadefire Masters (Alliance Only)
|
Nenue@138
|
93 13295, -- Mythic: Jadefire Masters (Horde Only)
|
Nenue@138
|
94 13293, -- Mythic: Grong
|
Nenue@138
|
95 13292, -- Mythic: Champion of the Light
|
Nenue@135
|
96
|
Nenue@138
|
97 12533, -- Mythic: Ghuun
|
Nenue@138
|
98 12532, -- Mythic: Mythrax
|
Nenue@138
|
99 12531, -- Mythic: Zul
|
Nenue@138
|
100 12530, -- Mythic: Fetid Devourer
|
Nenue@138
|
101 12529, --
|
Nenue@138
|
102 12527,
|
Nenue@138
|
103 12526,
|
Nenue@138
|
104 12524,
|
Nenue@138
|
105
|
Nenue@135
|
106 },
|
Nenue@138
|
107 -- Completion BfA
|
Nenue@138
|
108 {
|
Nenue@138
|
109 13323, -- Cutting Edge: Lady Jaina Proudmoore,
|
Nenue@138
|
110 13322, -- Ahead of the Curve: Lady Jaina Proudmoore,
|
Nenue@138
|
111 12535, -- Cutting Edge: Ghuun,
|
Nenue@138
|
112 12536, -- Ahead of the Curve: Ghuun,
|
Nenue@138
|
113
|
Nenue@138
|
114 }
|
Nenue@138
|
115
|
Nenue@138
|
116 ,
|
Nenue@138
|
117 -- Completion Legion
|
Nenue@135
|
118 {
|
Nenue@135
|
119 12111, -- CE Argus,
|
Nenue@135
|
120 11875, -- CE KJ
|
Nenue@135
|
121 11790 -- Deceiver's Fall,
|
Nenue@135
|
122
|
Nenue@135
|
123
|
Nenue@135
|
124 },
|
Nenue@135
|
125 -- Mythic+
|
Nenue@135
|
126 {
|
Nenue@138
|
127 13080, -- BfA Keystone Master 1
|
Nenue@135
|
128 }
|
Nenue@135
|
129 }
|
Nenue@135
|
130
|
Nenue@135
|
131 local invasion = {}
|
Nenue@135
|
132 local cheev = {}
|
Nenue@135
|
133
|
Nenue@135
|
134 function cheev:OnClick()
|
Nenue@135
|
135 local resultID = LFGListFrame.SearchPanel.selectedResult or self:GetParent().selectedID
|
Nenue@135
|
136 print('current selection = ', resultID)
|
Nenue@135
|
137 if ACTIVE_CHAT_EDIT_BOX then
|
Nenue@135
|
138 ChatEdit_InsertLink(self.link)
|
Nenue@135
|
139 elseif resultID then
|
Nenue@135
|
140 local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName = C_LFGList.GetSearchResultInfo(resultID);
|
Nenue@135
|
141 --print(name, comment, leaderName)
|
Nenue@135
|
142 ChatFrame_OpenChat("/w "..leaderName.." "..self.link, DEFAULT_CHAT_FRAME)
|
Nenue@135
|
143 end
|
Nenue@135
|
144 end
|
Nenue@135
|
145
|
Nenue@135
|
146 function invasion:OnClick()
|
Nenue@135
|
147 if not InCombatLockdown() then
|
Nenue@135
|
148 PVEFrame_ShowFrame("GroupFinderFrame", LFGListPVEStub);
|
Nenue@135
|
149 local panel = LFGListFrame.CategorySelection
|
Nenue@135
|
150 LFGListCategorySelection_SelectCategory(panel, 6, 0);
|
Nenue@135
|
151 LFGListCategorySelection_StartFindGroup(panel, self.searchText);
|
Nenue@135
|
152 end
|
Nenue@135
|
153
|
Nenue@135
|
154 end
|
Nenue@135
|
155
|
Nenue@135
|
156 local listed = {}
|
Nenue@135
|
157
|
Nenue@135
|
158
|
Nenue@135
|
159 function module:Update(forced)
|
Nenue@135
|
160 if self.GuildInfoDirty or forced then
|
Nenue@135
|
161 self:UpdateGuildInfo()
|
Nenue@135
|
162 end
|
Nenue@135
|
163 local numBlocks = 0
|
Nenue@135
|
164 if self.AchievementsDirty or forced then
|
Nenue@135
|
165 numBlocks = self:UpdateAchievementLinks(numBlocks)
|
Nenue@135
|
166 end
|
Nenue@135
|
167
|
Nenue@135
|
168
|
Nenue@135
|
169 local lastBlock
|
Nenue@135
|
170 local contentsHeight = 0
|
Nenue@135
|
171 for index, block in ipairs(self.blocks) do
|
Nenue@135
|
172 if index > numBlocks then
|
Nenue@135
|
173 block:Hide()
|
Nenue@135
|
174 else
|
Nenue@135
|
175 block:ClearAllPoints()
|
Nenue@135
|
176 if lastBlock then
|
Nenue@135
|
177 block:SetPoint('TOPLEFT', lastBlock, 'BOTTOMLEFT', 0, -2)
|
Nenue@135
|
178 else
|
Nenue@135
|
179 block:SetPoint('TOPLEFT', LFGListFrame, 'TOPRIGHT', 0, 0)
|
Nenue@135
|
180 end
|
Nenue@135
|
181 block:Show()
|
Nenue@135
|
182 lastBlock = block
|
Nenue@135
|
183
|
Nenue@135
|
184 contentsHeight = contentsHeight + block:GetHeight()
|
Nenue@135
|
185 end
|
Nenue@135
|
186 end
|
Nenue@135
|
187 self:SetHeight(contentsHeight)
|
Nenue@135
|
188 end
|
Nenue@135
|
189
|
Nenue@135
|
190
|
Nenue@135
|
191 function module:GetBlock(index)
|
Nenue@135
|
192
|
Nenue@135
|
193 local block =self.blocks[index]
|
Nenue@135
|
194 if not block then
|
Nenue@135
|
195 block = CreateFrame('Button', 'VeneerRosterKunBlock'..index, self, 'VeneerRosterKunBlock')
|
Nenue@135
|
196
|
Nenue@135
|
197 block:SetID(index)
|
Nenue@135
|
198 self.blocks[index] = block
|
Nenue@135
|
199 end
|
Nenue@135
|
200 return block
|
Nenue@135
|
201 end
|
Nenue@135
|
202
|
Nenue@135
|
203 function module:UpdateAchievementLinks(offset)
|
Nenue@135
|
204 print('UpdateAchievementLinks()')
|
Nenue@135
|
205 offset = offset or 0
|
Nenue@135
|
206 local resultID = LFGListFrame.SearchPanel.selectedResult or self.selectedID
|
Nenue@135
|
207 self:Show()
|
Nenue@135
|
208
|
Nenue@135
|
209
|
Nenue@135
|
210 local contentsHeight = 0
|
Nenue@135
|
211 for _, group in ipairs(cheevos) do
|
Nenue@135
|
212 for _, id in ipairs(group) do
|
Nenue@135
|
213 local _, name, points, completed, month, day, year, description, flags, icon = GetAchievementInfo(id)
|
Nenue@138
|
214 print('checking', id, name)
|
Nenue@135
|
215 if completed then
|
Nenue@135
|
216 -- if the highest mythic kill
|
Nenue@135
|
217 if listed[overlaps[id]] then
|
Nenue@135
|
218 break
|
Nenue@135
|
219 end
|
Nenue@135
|
220 offset = offset + 1
|
Nenue@135
|
221 local block = self:GetBlock(offset)
|
Nenue@135
|
222 block:SetScript('OnClick', cheev.OnClick)
|
Nenue@135
|
223 --print(index)
|
Nenue@135
|
224
|
Nenue@135
|
225 block.link = GetAchievementLink(id)
|
Nenue@135
|
226 block.Icon:SetTexture(icon)
|
Nenue@135
|
227 block.Label:SetText(name)
|
Nenue@135
|
228 block.buttonType = 'cheevo'
|
Nenue@135
|
229
|
Nenue@135
|
230 contentsHeight = contentsHeight + block:GetHeight()
|
Nenue@135
|
231
|
Nenue@135
|
232 --print(index, name, icon)
|
Nenue@135
|
233 listed[id] = true
|
Nenue@135
|
234 break;
|
Nenue@135
|
235 end
|
Nenue@135
|
236 end
|
Nenue@135
|
237 end
|
Nenue@135
|
238
|
Nenue@135
|
239 self.lastAchievement = lastBlock
|
Nenue@135
|
240
|
Nenue@135
|
241 return offset, contentsHeight
|
Nenue@135
|
242
|
Nenue@135
|
243 --[[
|
Nenue@135
|
244 --]]
|
Nenue@135
|
245
|
Nenue@135
|
246
|
Nenue@135
|
247 end
|
Nenue@135
|
248
|
Nenue@135
|
249 function module:SetupGuildUI()
|
Nenue@135
|
250 self:UnregisterEvent('ADDON_LOADED')
|
Nenue@135
|
251 end
|
Nenue@135
|
252 function module:OnEvent(event, ...)
|
Nenue@135
|
253 print('|cFFFF0088OnEvent()|r', event, ...)
|
Nenue@135
|
254 if event == 'ADDON_LOADED' then
|
Nenue@135
|
255 local addon = ...
|
Nenue@135
|
256 if addon == 'Blizzard_GuildUI' then
|
Nenue@135
|
257 self:SetupGuildUI()
|
Nenue@135
|
258 end
|
Nenue@135
|
259 elseif event == 'LFG_LIST_SEARCH_RESULTS_RECEIVED' then
|
Nenue@135
|
260 elseif event == 'LFG_LIST_SEARCH_RESULT_UPDATED' then
|
Nenue@135
|
261 end
|
Nenue@135
|
262 end |