comparison Modules/PaperDoll.lua @ 80:bb6b532c5d2f

- added "world state" frame for zone-specific currencies and context-based artifact/experience progress
author Nenue
date Tue, 11 Oct 2016 08:03:41 -0400
parents 83b3cdaae6a5
children 65ec88b30eb8
comparison
equal deleted inserted replaced
79:0784b87f9722 80:bb6b532c5d2f
1 -- Veneer 1 -- Veneer
2 -- PaperDoll.lua 2 -- PaperDoll.lua
3 -- Created: 8/16/2016 8:18 AM 3 -- Created: 8/16/2016 8:18 AM
4 -- %file-revision% 4 -- %file-revision%
5 -- Displays item levels by equipment slots 5 -- Displays the item level and modifications of character sheet equipment, including artifact power
6 -- Requires tooltip scraping to obtain these numbers, meaning any currently active tooltip will be cleared.
7 6
8 local plugin = CreateFrame('Frame', 'VeneerPaper', UIParent) 7 local plugin = CreateFrame('Frame', 'VeneerPaper', UIParent)
9 local vn, print = LibStub("LibKraken").register(Veneer, plugin) 8 local vn, print = LibStub("LibKraken").register(Veneer, plugin)
10 9
11 local slot_anchors = { 10 local slot_anchors = {
52 local ticker 51 local ticker
53 local vnslot = {} 52 local vnslot = {}
54 local pendingSlots = {} 53 local pendingSlots = {}
55 54
56 55
56 local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
57 local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
58 local tooltip = CreateFrame('GameTooltip', 'VeneerTooltip', UIParent, 'GameTooltipTemplate')
57 local jewel = {} 59 local jewel = {}
60
61 local artifactBar_OnEvent = function (self)
62 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
63 if not itemID then
64 self:Hide()
65 return
66 end
67
68 local numRelicSlots = C_ArtifactUI.GetNumRelicSlots() or 0;
69
70
71 local pointsAvailable = 0
72 local nextRankCost = GetCostForPointAtRank(pointsSpent + pointsAvailable) or 0
73
74 while totalXP >= nextRankCost do
75 totalXP = totalXP - nextRankCost
76 pointsAvailable = pointsAvailable + 1
77 nextRankCost = GetCostForPointAtRank(pointsSpent + pointsAvailable) or 0
78 end
79 self.Header:SetText(name)
80 self.Level:SetText(pointsSpent)
81 self.ProgressText:SetFormattedText("|cFF00FFFF%d|r / %d", totalXP, nextRankCost)
82
83 self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()*(totalXP/nextRankCost), 0)
84 self.ProgressBar:SetColorTexture(1,.5,0)
85
86 self:Show()
87 end
88
89
90 local artifactBar = CreateFrame('Frame', 'VnPaperDollArtifact', CharacterModelFrame, 'VeneerStatusBarTemplate')
91 artifactBar:ClearAllPoints()
92 artifactBar:SetHeight(28)
93 artifactBar:SetPoint('LEFT', CharacterModelFrame, 'LEFT', 30, 0)
94 artifactBar:SetPoint('RIGHT', CharacterModelFrame, 'RIGHT', -30, 0)
95 artifactBar:SetPoint('BOTTOM', CharacterMainHandSlotFrame, 'TOP', 0, 1)
96 artifactBar.ProgressBG:SetColorTexture(0.5, 0.5, 0.5)
97 artifactBar.Header:Show()
98 artifactBar:RegisterEvent('ARTIFACT_UPDATE')
99 artifactBar:SetScript('OnEvent', artifactBar_OnEvent)
100
101 plugin.artifactBar = artifactBar
102 print(CharacterMainHandSlotFrame:GetPoint(1))
103 print(artifactBar:GetPoint(3))
104
105 for i = 1, 3 do
106 local relicSlot = CreateFrame('Frame', 'VnPaperDollRelic'..i, artifactBar)
107 relicSlot:SetSize(40,40)
108 relicSlot:SetPoint('BOTTOM', artifactBar, 'TOP', (i-2)*40, 24)
109 relicSlot.relicArt = relicSlot:CreateTexture(nil, 'BACKGROUND')
110 artifactBar['RelicSlot'..i] = relicSlot
111 end
112
113
114 artifactBar:EnableMouse(true)
115 artifactBar:SetScript('OnMouseUp', function()
116 SocketInventoryItem(16)
117 end)
118
58 local UpdateVeneer = function(itemslot, frame) 119 local UpdateVeneer = function(itemslot, frame)
59 local slot = itemslot:GetID() 120 local slot = itemslot:GetID()
60 if itemslot.hasItem then 121 if itemslot.hasItem then
61 frame.link = GetInventoryItemLink('player', slot) 122 local unit = frame.target.unit or 'player'
62 123 frame.link = GetInventoryItemLink(unit, slot)
63 local name, link, something, ilevel = GetItemInfo(frame.link) 124 tooltip:SetOwner(frame, 'ANCHOR_NONE')
64 frame.label:SetText(ilevel) 125 tooltip:SetInventoryItem(unit, slot)
65 -- todo: test GetExtendedItemInfo() 126 tooltip:Show()
66 127 --print(tooltip:NumLines())
67 local item = {strsplit(":", link)} 128 if tooltip:NumLines() >= 3 then
68 local _, itemId, enchantId, jewelId1, jewelId2, jewelId3, jewelId4, suffixId, 129
69 uniqueId, linkLevel, specializationID, instanceDifficultyId, numBonusIds, bonusId1, bonusId2, upgradeValue 130 local ilvl
70 131 if _G['VeneerTooltipTextLeft2'] then
71 specializationID, instanceDifficultyId, numBonusIds = item[11], item[12], item[13] 132 ilvl = _G['VeneerTooltipTextLeft2']:GetText():match("Item Level (%d+)")
72 jewel[1], jewel[2], jewel[3], jewel[4] = item[4], item[5], item[6], item[7] 133 --print('l2', ilvl)
73 --vn:print(jewelId1, jewelId2, jewelId3, jewelId4) 134 end
74 for i = 1, 4 do 135
75 local gemslot = frame.gemslot[i] 136 if _G['VeneerTooltipTextLeft3'] then
76 if tonumber(jewel[i]) ~= nil then 137 if not ilvl then
77 if not gemslot then 138 ilvl = _G['VeneerTooltipTextLeft3']:GetText():match("Item Level (%d+)")
78 gemslot = frame:CreateTexture(itemslot:GetName()..'Gem'..i, 'ARTWORK') 139 --print('l3', ilvl)
79 gemslot:SetSize(16,16)
80 local posx = 3 + (i-1)*16
81 if slot_anchors[slot]:match('RIGHT') then
82 posx = posx * -1
83 end
84 gemslot:SetPoint(slot_anchors[slot], frame.label, slot_relative[slot], posx, 0)
85 frame.gemslot[i] = gemslot
86 end 140 end
87 gemslot:SetTexture(GetItemIcon(jewel[i]))
88 gemslot:Show()
89 else
90 if gemslot then
91 gemslot:Hide()
92 end
93
94 end 141 end
95 end 142
96 --[[ 143 if ilvl then
97 print(link) 144 frame.label:SetText(ilvl)
98 local difftag = '?'
99 if tonumber(numBonusIds) ~= nil then
100 local name, groupType, isHeroic, isChallengeMode, displayHeroic, displayMythic, toggleDifficultyID = GetDifficultyInfo(numBonusIds)
101 difftag = (name or '??') .. (isHeroic and ' (Heroic)' or '')
102 end
103
104 print(instanceDifficultyId, '|cFF00FFFF', difftag, numBonusIds)
105 --if tonumber(numBonusIds) ~= nil then
106 for i = 8, #item do
107 print(i..'-', item[i])
108 end 145 end
109 --end 146 end
110 147
111 --]] 148 local quality = GetInventoryItemQuality(unit, slot)
149 if slot == 16 and quality == LE_ITEM_QUALITY_ARTIFACT then
150 artifactBar_OnEvent(plugin.artifactBar)
151 end
152
153
154
112 155
113 frame:Show() 156 frame:Show()
114 else 157 else
115 frame:Hide() 158 frame:Hide()
116 end 159 end
140 local name = self:GetName() 183 local name = self:GetName()
141 local slot = self:GetID() 184 local slot = self:GetID()
142 if not slot_anchors[slot] then 185 if not slot_anchors[slot] then
143 return 186 return
144 end 187 end
145 188 print(self:GetName())
146 189
147 local frame = _G[name .. 'Veneer'] 190 local frame = _G[name .. 'Veneer']
148 191
149 if not frame then 192 if not frame then
150 193
152 vnslot[slot] = frame 195 vnslot[slot] = frame
153 196
154 frame.label = frame:CreateFontString(nil, 'OVERLAY', 'VeneerNumberFont') 197 frame.label = frame:CreateFontString(nil, 'OVERLAY', 'VeneerNumberFont')
155 frame.gemslot = {} 198 frame.gemslot = {}
156 199
157 local anchor, relative, x, y = slot_anchors[slot], slot_relative[slot], 8, -4 200
158 if anchor:match('RIGHT') then 201 frame.target = self
159 x = -x
160 end
161 if anchor:match('BOTTOM') then
162 y = 4
163 end
164
165 frame.gemslot = {} 202 frame.gemslot = {}
166 frame:SetPoint(anchor, self, relative, x, y) 203 frame:SetAllPoints(self)
167 frame:SetSize(200,24) 204 frame:SetParent(self)
168 frame.label:ClearAllPoints() 205 frame.label:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', 2, 2)
169 frame.label:SetPoint(slot_anchors[slot], frame, slot_anchors[slot])
170 206
171 tinsert(pendingSlots, frame) 207 tinsert(pendingSlots, frame)
172 end 208 end
173 209
174 end 210 UpdateVeneer(self, frame)
175 211
212 end
213
214 local PaperDollFrame_UpdateStats = function()
215
216 end
176 217
177 218
178 219
179 plugin.event = function(self, event, ...) 220 plugin.event = function(self, event, ...)
180 print(self, event, flag, slot) 221 print(self, event, ...)
181 222
182 if event == 'PLAYER_EQUIPMENT_CHANGED' then 223 if event == 'PLAYER_EQUIPMENT_CHANGED' then
183 local slot, hasItem = ... 224 local slot, hasItem = ...
184 if vnslot[slot] then 225 if vnslot[slot] then
185 UpdateVeneer(vnslot[slot]:GetParent(), vnslot[slot]) 226 UpdateVeneer(vnslot[slot]:GetParent(), vnslot[slot])
186 plugin.ticker() 227
187 end 228 end
188 229
189 elseif event == 'PLAYER_ENTERING_WORLD' then 230 elseif event == 'PLAYER_ENTERING_WORLD' then
190 UpdateAll() 231 UpdateAll()
191 232
192 end 233 end
193 234
235 end
236 local artifactBarCreated
237 plugin.init = function()
238 LoadAddOn('Blizzard_ArtifactUI')
194 end 239 end
195 240
196 --plugin:SetScript('OnEvent', plugin.event) 241 --plugin:SetScript('OnEvent', plugin.event)
197 plugin:RegisterEvent('PLAYER_EQUIPMENT_CHANGED') 242 plugin:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
198 plugin:RegisterEvent('PLAYER_ENTERING_WORLD') 243 plugin:RegisterEvent('PLAYER_ENTERING_WORLD')
199 244
200 245
201 --hooksecurefunc("PaperDollItemSlotButton_Update", PaperDollItemSlotButton_Update) 246 hooksecurefunc("PaperDollItemSlotButton_Update", PaperDollItemSlotButton_Update)
247
248 hooksecurefunc("PaperDollFrame_UpdateStats", PaperDollFrame_UpdateStats)