Mercurial > wow > buffalo2
comparison Modules/PaperDoll.lua @ 133:86621c60512b v7.3.2-20171222
- Fixed AP calc tooltip appearing while hidden
- Fixed PaperDoll relic tooltips missing nether crucible info
author | Nenue |
---|---|
date | Fri, 22 Dec 2017 20:36:40 -0500 |
parents | 15a7f27b11e6 |
children | 4979b5cca6de |
comparison
equal
deleted
inserted
replaced
132:4cb1d2a0c110 | 133:86621c60512b |
---|---|
85 self:RegisterEvent('PLAYER_SPECIALIZATION_CHANGED') | 85 self:RegisterEvent('PLAYER_SPECIALIZATION_CHANGED') |
86 self:RegisterEvent('ARTIFACT_RELIC_INFO_RECEIVED') | 86 self:RegisterEvent('ARTIFACT_RELIC_INFO_RECEIVED') |
87 self:RegisterEvent('ARTIFACT_UPDATE') | 87 self:RegisterEvent('ARTIFACT_UPDATE') |
88 | 88 |
89 self:MarkForUpdate() | 89 self:MarkForUpdate() |
90 | |
91 | |
90 end | 92 end |
91 | 93 |
92 function VeneerPaperDollMixin:MarkForUpdate() | 94 function VeneerPaperDollMixin:MarkForUpdate() |
93 for frame, overlays in pairs(slot_overlays) do | 95 for frame, overlays in pairs(slot_overlays) do |
94 for slot, overlay in pairs(overlays) do | 96 for slot, overlay in pairs(overlays) do |
156 overlay:Hide() | 158 overlay:Hide() |
157 end | 159 end |
158 end | 160 end |
159 end | 161 end |
160 | 162 |
161 | |
162 | |
163 function VeneerPaperDollMixin:OnEvent(event, arg) | 163 function VeneerPaperDollMixin:OnEvent(event, arg) |
164 print(event, arg) | 164 print(event, arg) |
165 if event == 'ADDON_LOADED' then | 165 if event == 'ADDON_LOADED' then |
166 if arg == 'Blizzard_InspectUI' then | 166 if arg == 'Blizzard_InspectUI' then |
167 self:SetupInspectFrame() | 167 self:SetupInspectFrame() |
169 if arg == 'Blizzard_ArtifactUI' then | 169 if arg == 'Blizzard_ArtifactUI' then |
170 self:SetupArtifactUI() | 170 self:SetupArtifactUI() |
171 self:MarkForUpdate() | 171 self:MarkForUpdate() |
172 end | 172 end |
173 elseif event == 'ARTIFACT_UPDATE' then | 173 elseif event == 'ARTIFACT_UPDATE' then |
174 self:ScoopRelics() | |
174 if artifactSlot then | 175 if artifactSlot then |
175 artifactSlot:Update(true) | 176 artifactSlot.isDirty = true |
176 end | 177 end |
177 elseif event == 'ARTIFACT_RELIC_INFO_RECEIVED' then | 178 elseif event == 'ARTIFACT_RELIC_INFO_RECEIVED' then |
178 if artifactSlot then | 179 if artifactSlot then |
179 artifactSlot:Update(true) | 180 artifactSlot.isDirty = true |
180 end | 181 end |
181 else | 182 else |
182 if (event == 'PLAYER_SPECIALIZATION_CHANGED' or event == 'UNIT_INVENTORY_CHANGED') then | 183 if (event == 'PLAYER_SPECIALIZATION_CHANGED' or event == 'UNIT_INVENTORY_CHANGED') then |
183 if arg ~= 'player' then | 184 if arg ~= 'player' then |
184 return | 185 return |
193 | 194 |
194 function VeneerPaperDollSlotMixin:OnLoad() | 195 function VeneerPaperDollSlotMixin:OnLoad() |
195 self.SocketText = {} | 196 self.SocketText = {} |
196 self.SocketType = {} | 197 self.SocketType = {} |
197 self.SocketLink = {} | 198 self.SocketLink = {} |
199 self.SocketForge = {} | |
198 end | 200 end |
199 function VeneerPaperDollSlotMixin:OnShow() | 201 function VeneerPaperDollSlotMixin:OnShow() |
200 if self.isDirty then | 202 if self.isDirty then |
201 self:Update() | 203 self:Update() |
202 end | 204 end |
203 end | 205 end |
206 | |
207 function VeneerPaperDollSlotMixin:OnHide() | |
208 if GameTooltip:IsOwned(self) then | |
209 GameTooltip:Hide() | |
210 end | |
211 end | |
212 | |
204 function VeneerPaperDollSlotMixin:OnUpdate() | 213 function VeneerPaperDollSlotMixin:OnUpdate() |
205 if self.isDirty then | 214 if self.isDirty then |
206 --print('|cFF00FF00pushing update for', self:GetID()) | 215 --print('|cFF00FF00pushing update for', self:GetID()) |
207 self:Update() | 216 self:Update() |
208 end | 217 end |
209 | 218 |
210 if self.checkRelic then | 219 if self.checkRelic then |
211 self.tooltipLink = nil | 220 local setTip |
212 for i = 1, 3 do | 221 for i = 1, 3 do |
213 if self.SocketLink[i] and self.Sockets.SocketIcon[i]:IsMouseOver() then | 222 if self.SocketType[i] and self.Sockets.SocketIcon[i]:IsMouseOver() then |
214 self.tooltipLink = self.SocketLink[i] | 223 setTip = self.SocketForge[i] |
215 end | 224 end |
216 end | 225 end |
217 | 226 if setTip then |
218 if self.tooltipLink then | 227 GameTooltip:SetOwner(self, 'ANCHOR_RIGHT') |
219 if not GameTooltip:IsOwned(self) then | 228 for _, info in ipairs(setTip) do |
220 GameTooltip:SetOwner(self, 'ANCHOR_CURSOR') | 229 if type(info) == 'table' then |
221 GameTooltip:SetHyperlink(self.tooltipLink) | 230 GameTooltip:AddLine(unpack(info)) |
222 | 231 elseif type(info) == 'string' then |
223 GameTooltip:Show() | 232 GameTooltip:AddLine(info) |
224 end | 233 end |
225 else | 234 end |
226 if GameTooltip:IsOwned(self) then | 235 GameTooltip:Show() |
227 GameTooltip:Hide() | 236 elseif GameTooltip:IsOwned(self) then |
228 end | 237 GameTooltip:Hide() |
229 end | 238 end |
230 end | 239 end |
231 end | 240 end |
232 | 241 |
242 local tooltipName= 'VeneerPaperDollTooltip' | |
233 function VeneerPaperDollSlotMixin:UpdateRelicInfo() | 243 function VeneerPaperDollSlotMixin:UpdateRelicInfo() |
234 | 244 |
235 | 245 |
236 local itemID = GetInventoryItemID(self.unit, 16) | 246 local itemID = GetInventoryItemID(self.unit, 16) |
237 if not itemID then | 247 if not itemID then |
238 return | 248 return |
239 end | 249 end |
240 print('|cFF00FFFFRelic Sweep:', itemID) | 250 |
241 | 251 print('|cFF00FFFFRelic Info:', itemID) |
242 | 252 local guid = UnitGUID(self.unit or 'player') |
253 local relicCache = VeneerPaperDoll.KnownRelics[guid] and VeneerPaperDoll.KnownRelics[guid][itemID] | |
254 | |
255 if not relicCache then | |
256 relicCache = {} | |
257 VeneerPaperDoll.KnownRelics[guid] = VeneerPaperDoll.KnownRelics[guid] or {} | |
258 VeneerPaperDoll.KnownRelics[guid][itemID] = relicCache | |
259 end | |
260 | |
261 for i = 1, 3 do | |
262 if relicCache[i] then | |
263 local relicIcon, relicLevel, relicType, relicLink, relicForge = unpack(relicCache[i]) | |
264 | |
265 print('reading', i, unpack(relicCache[i])) | |
266 self.SocketInfo[i] = relicIcon | |
267 self.SocketText[i] = relicLevel | |
268 self.SocketType[i] = relicType | |
269 self.SocketLink[i] = relicLink | |
270 self.SocketForge[i] = self.SocketForge[i] or {} | |
271 if relicForge then | |
272 for l, info in ipairs(relicForge) do | |
273 self.SocketForge[i][l] = info | |
274 end | |
275 end | |
276 | |
277 end | |
278 end | |
279 end | |
280 | |
281 function VeneerPaperDollMixin:ScoopRelics() | |
282 | |
283 -- not a viewed artifact | |
284 local itemID = C_ArtifactUI.GetArtifactInfo() | |
285 if not itemID then | |
286 return | |
287 end | |
288 | |
289 print('|cFFFF00FFScoopRelics:|r', itemID) | |
243 local guid = UnitGUID(self.unit or 'player') | 290 local guid = UnitGUID(self.unit or 'player') |
244 local relicCache = VeneerPaperDoll.KnownRelics[guid] and VeneerPaperDoll.KnownRelics[guid][itemID] | 291 local relicCache = VeneerPaperDoll.KnownRelics[guid] and VeneerPaperDoll.KnownRelics[guid][itemID] |
245 if VeneerPaperDoll.KnownRelics[guid] then | 292 if VeneerPaperDoll.KnownRelics[guid] then |
246 for k, v in pairs(VeneerPaperDoll.KnownRelics[guid]) do | 293 for k, v in pairs(VeneerPaperDoll.KnownRelics[guid]) do |
247 if tonumber(k) and tonumber(k) < 72 then | 294 if tonumber(k) and tonumber(k) < 72 then |
258 end | 305 end |
259 | 306 |
260 local numRelics = C_ArtifactUI.GetNumRelicSlots() | 307 local numRelics = C_ArtifactUI.GetNumRelicSlots() |
261 local isEquipped = C_ArtifactUI.IsViewedArtifactEquipped() | 308 local isEquipped = C_ArtifactUI.IsViewedArtifactEquipped() |
262 local tooltip = VeneerPaperDollTooltip | 309 local tooltip = VeneerPaperDollTooltip |
263 tooltip:SetOwner(self, 'ANCHOR_NONE') | 310 |
264 self.hasRelicSlots = true | 311 for i = 1, numRelics do |
265 if numRelics and isEquipped then | 312 local relicName, relicIcon, relicType, relicLink = C_ArtifactUI.GetRelicInfo(i); |
266 print('Relic Query:', itemID, numRelics) | 313 local relicLevel = relicCache[i][2] or "" |
267 for i = 1, numRelics do | 314 local relicForge = relicCache[i][5] or {} |
268 local relicName, relicIcon, relicType, relicLink = C_ArtifactUI.GetRelicInfo(i); | 315 local relicType = C_ArtifactUI.GetRelicSlotType(i); |
269 local relicType = C_ArtifactUI.GetRelicSlotType(i); | 316 |
270 print(relicType) | 317 if relicType then |
271 if relicType then | 318 if relicLink then |
272 if relicLink then | 319 tooltip:SetSocketedRelic(i) |
273 tooltip:SetHyperlink(relicLink) | 320 print(tooltip:NumLines()) |
274 print(tooltip:NumLines()) | 321 |
275 | 322 local numLines = tooltip:NumLines() |
276 local line1 = _G['VeneerPaperDollTooltipTextLeft2'] | 323 if numLines >= 1 then |
277 local line2 = _G['VeneerPaperDollTooltipTextLeft3'] | 324 wipe(relicForge) |
278 local text1 = line1 and line1:GetText() | 325 local foundRank = 0 |
279 local text2 = line2 and line2:GetText() | 326 for line = 1, numLines do |
280 if text1 or text2 then | 327 --print( _G[tooltipName .. 'TextLeft' .. line]:GetText(), _G[tooltipName .. 'TextLeft' .. line]:GetTextColor()) |
281 self.SocketText[i] = text1:match('Item Level (%d+)') or text2:match('Item Level (%d+)') | 328 local lineText = _G[tooltipName .. 'TextLeft' .. line]:GetText() |
329 | |
330 if lineText then | |
331 local iLevel = lineText:match('Item Level (%d+)') | |
332 local rank = lineText:match('+1 Rank: (.+)') | |
333 | |
334 if iLevel then | |
335 relicLevel = iLevel | |
336 print('iLevel = ',iLevel) | |
337 end | |
338 | |
339 tinsert(relicForge, {lineText, _G[tooltipName .. 'TextLeft' .. line]:GetTextColor()}) | |
340 end | |
282 end | 341 end |
283 end | 342 end |
284 | 343 end |
285 self.SocketInfo[i] = relicIcon or 0 | 344 |
286 self.SocketType[i] = relicType | 345 print('storing', i, relicIcon, relicLevel, relicType, relicLink, relicForge) |
287 self.SocketLink[i] = relicLink | 346 |
288 print('storing', i, self.SocketInfo[i], self.SocketText[i], self.SocketType[i], self.SocketLink[i]) | 347 relicCache[i] = {relicIcon, relicLevel, relicType, relicLink, relicForge} |
289 else | 348 end |
290 | 349 end |
291 | 350 |
292 self.SocketInfo[i] = "Interface\\CharacterFrame\\TempPortraitAlphaMask" | 351 |
293 self.SocketType[i] = nil | 352 end |
294 self.SocketLink[i] = nil | 353 |
295 end | 354 function VeneerPaperDollSlotMixin:OnLeave() |
296 | 355 |
297 relicCache[i] = {self.SocketInfo[i], self.SocketText[i], self.SocketType[i], self.SocketLink[i]} | |
298 end | |
299 else | |
300 | |
301 for i = 1, 3 do | |
302 if relicCache[i] then | |
303 local relicIcon, relicText, relicType, relicLink = unpack(relicCache[i]) | |
304 | |
305 print('loading', i, relicIcon, relicText, relicType, relicLink) | |
306 self.SocketInfo[i] = relicIcon | |
307 self.SocketText[i] = relicText | |
308 self.SocketType[i] = relicType | |
309 self.SocketLink[i] = relicLink | |
310 end | |
311 end | |
312 end | |
313 end | 356 end |
314 | 357 |
315 function VeneerPaperDollSlotMixin:Update(forced) | 358 function VeneerPaperDollSlotMixin:Update(forced) |
316 local id = self:GetID() | 359 local id = self:GetID() |
317 | 360 |
332 local numTextures = 0 | 375 local numTextures = 0 |
333 local itemLevel | 376 local itemLevel |
334 local ignoreIL = IsAddOnLoaded("DejaCharacterStats") | 377 local ignoreIL = IsAddOnLoaded("DejaCharacterStats") |
335 local itemLevelLine | 378 local itemLevelLine |
336 --print('|cFFFFFF00Sockets scan:', numLines) | 379 --print('|cFFFFFF00Sockets scan:', numLines) |
337 for i = 1, numLines do | 380 for i = 1, numLines do |
338 local line = _G['VeneerPaperDollTooltipTextLeft'..i] | 381 local line = _G['VeneerPaperDollTooltipTextLeft'..i] |
339 local text = line and line:GetText() | 382 local text = line and line:GetText() |
340 if text and not ignoreIL then | 383 if text and not ignoreIL then |
341 itemLevel = text:match('Item Level (%d+)') | 384 itemLevel = text:match('Item Level (%d+)') |
342 if itemLevel then | 385 if itemLevel then |
343 self.ItemLevel:SetText(itemLevel) | 386 self.ItemLevel:SetText(itemLevel) |
344 break | 387 break |
345 end | 388 end |
346 end | 389 end |
347 | 390 |
348 local texture = _G['VeneerPaperDollTooltipTexture'..i] | 391 local texture = _G['VeneerPaperDollTooltipTexture'..i] |
349 if texture and texture:IsShown() then | 392 if texture and texture:IsShown() then |
350 numTextures = numTextures + 1 | 393 numTextures = numTextures + 1 |
351 --print('picked up socket', numTextures, texture:GetTexture()) | 394 --print('picked up socket', numTextures, texture:GetTexture()) |
352 self.SocketInfo[numTextures] = texture:GetTexture() | 395 self.SocketInfo[numTextures] = texture:GetTexture() |
353 end | 396 end |
354 end | 397 end |
398 | |
355 if self.checkRelic then | 399 if self.checkRelic then |
356 self:UpdateRelicInfo() | 400 self:UpdateRelicInfo() |
357 end | 401 end |
358 | 402 |
359 | 403 |