yellowfive@57
|
1 local Amr = LibStub("AceAddon-3.0"):GetAddon("AskMrRobot")
|
yellowfive@57
|
2 local L = LibStub("AceLocale-3.0"):GetLocale("AskMrRobot", true)
|
yellowfive@57
|
3 local AceGUI = LibStub("AceGUI-3.0")
|
yellowfive@57
|
4
|
yellowfive@57
|
5 local _frameShop
|
yellowfive@57
|
6 local _panelContent
|
yellowfive@57
|
7 local _cboPlayers
|
yellowfive@139
|
8 local _selectedSetup
|
yellowfive@81
|
9
|
yellowfive@57
|
10 local _specs = {
|
yellowfive@57
|
11 [1] = true,
|
yellowfive@81
|
12 [2] = true,
|
yellowfive@81
|
13 [3] = true,
|
yellowfive@81
|
14 [4] = true,
|
yellowfive@57
|
15 }
|
yellowfive@81
|
16
|
yellowfive@57
|
17 local _isAhOpen = false
|
yellowfive@57
|
18
|
yellowfive@89
|
19 local function incrementTableItem(tbl, key, inc)
|
yellowfive@89
|
20 tbl[key] = tbl[key] and tbl[key] + inc or inc
|
yellowfive@89
|
21 end
|
yellowfive@89
|
22
|
yellowfive@57
|
23 local function onShopFrameClose(widget)
|
yellowfive@57
|
24 AceGUI:Release(widget)
|
yellowfive@57
|
25 _frameShop = nil
|
yellowfive@57
|
26 _cboPlayers = nil
|
yellowfive@57
|
27 _panelContent = nil
|
yellowfive@57
|
28 end
|
yellowfive@57
|
29
|
yellowfive@57
|
30 function Amr:HideShopWindow()
|
yellowfive@57
|
31 if not _frameShop then return end
|
yellowfive@57
|
32 _frameShop:Hide()
|
yellowfive@57
|
33 end
|
yellowfive@57
|
34
|
yellowfive@57
|
35 local function onPlayerChange(widget, eventName, value)
|
yellowfive@139
|
36 _selectedSetup = value
|
yellowfive@57
|
37 Amr:RefreshShoppingUi()
|
yellowfive@57
|
38 end
|
yellowfive@57
|
39
|
yellowfive@57
|
40 local function onSpecClick(widget)
|
yellowfive@57
|
41 local spec = widget:GetUserData("spec")
|
yellowfive@57
|
42 _specs[spec] = not _specs[spec]
|
yellowfive@57
|
43
|
yellowfive@57
|
44 Amr:RefreshShoppingUi()
|
yellowfive@57
|
45 end
|
yellowfive@57
|
46
|
yellowfive@57
|
47 local function onItemClick(widget)
|
yellowfive@57
|
48 local name = widget:GetUserData("itemName")
|
yellowfive@57
|
49 if name then
|
yellowfive@177
|
50
|
yellowfive@177
|
51 local query = {}
|
yellowfive@177
|
52 query.searchString = name
|
yellowfive@177
|
53 query.sorts = {}
|
yellowfive@177
|
54 C_AuctionHouse.SendBrowseQuery(query)
|
yellowfive@177
|
55
|
yellowfive@177
|
56 --QueryAuctionItems(name)
|
yellowfive@57
|
57 end
|
yellowfive@57
|
58 end
|
yellowfive@57
|
59
|
yellowfive@124
|
60
|
yellowfive@57
|
61 function Amr:ShowShopWindow()
|
yellowfive@124
|
62
|
yellowfive@57
|
63 if not _frameShop then
|
yellowfive@57
|
64 _frameShop = AceGUI:Create("AmrUiFrame")
|
yellowfive@57
|
65 _frameShop:SetStatusTable(Amr.db.profile.shopWindow) -- window position is remembered in db
|
yellowfive@57
|
66 _frameShop:SetCallback("OnClose", onShopFrameClose)
|
yellowfive@57
|
67 _frameShop:SetLayout("None")
|
yellowfive@57
|
68 _frameShop:SetWidth(500)
|
yellowfive@57
|
69 _frameShop:SetHeight(500)
|
yellowfive@57
|
70 _frameShop:SetBorderColor(Amr.Colors.BorderBlue)
|
yellowfive@57
|
71 _frameShop:SetBackgroundColor(Amr.Colors.Bg)
|
yellowfive@57
|
72
|
yellowfive@61
|
73 if Amr.db.profile.options.uiScale ~= 1 then
|
yellowfive@61
|
74 local scale = tonumber(Amr.db.profile.options.uiScale)
|
yellowfive@61
|
75 _frameShop:SetScale(scale)
|
yellowfive@61
|
76 end
|
yellowfive@61
|
77
|
yellowfive@57
|
78 local lbl = AceGUI:Create("AmrUiLabel")
|
yellowfive@124
|
79 _frameShop:AddChild(lbl)
|
yellowfive@57
|
80 lbl:SetWidth(400)
|
yellowfive@57
|
81 lbl:SetFont(Amr.CreateFont("Bold", 28, Amr.Colors.White))
|
yellowfive@57
|
82 lbl:SetText(L.ShopTitle)
|
yellowfive@57
|
83 lbl:SetWordWrap(false)
|
yellowfive@57
|
84 lbl:SetJustifyH("CENTER")
|
yellowfive@57
|
85 lbl:SetPoint("TOP", _frameShop.content, "TOP", 0, 30)
|
yellowfive@57
|
86
|
yellowfive@57
|
87 lbl:SetCallback("OnMouseDown", function(widget) _frameShop:StartMove() end)
|
yellowfive@57
|
88 lbl:SetCallback("OnMouseUp", function(widget) _frameShop:EndMove() end)
|
yellowfive@57
|
89
|
yellowfive@57
|
90 -- player picker
|
yellowfive@57
|
91 _cboPlayers = AceGUI:Create("AmrUiDropDown")
|
yellowfive@57
|
92 _cboPlayers:SetWidth(400)
|
yellowfive@124
|
93 _frameShop:AddChild(_cboPlayers)
|
yellowfive@57
|
94 _cboPlayers:SetPoint("TOPLEFT", _frameShop.content, "TOPLEFT", 0, -30)
|
yellowfive@57
|
95
|
yellowfive@57
|
96 _panelContent = AceGUI:Create("AmrUiPanel")
|
yellowfive@57
|
97 _panelContent:SetLayout("None")
|
yellowfive@57
|
98 _panelContent:SetTransparent()
|
yellowfive@124
|
99 _frameShop:AddChild(_panelContent)
|
yellowfive@139
|
100 _panelContent:SetPoint("TOPLEFT", _cboPlayers.frame, "BOTTOMLEFT", 0, -10)
|
yellowfive@57
|
101 _panelContent:SetPoint("BOTTOMRIGHT", _frameShop.content, "BOTTOMRIGHT")
|
yellowfive@57
|
102
|
yellowfive@57
|
103 -- update shopping list data
|
yellowfive@57
|
104 local player = Amr:ExportCharacter()
|
yellowfive@57
|
105 Amr:UpdateShoppingData(player)
|
yellowfive@57
|
106
|
yellowfive@57
|
107 -- fill player list
|
yellowfive@57
|
108 local playerList = {}
|
yellowfive@139
|
109 local firstData = nil
|
yellowfive@139
|
110 for name, v in pairs(Amr.db.global.Shopping2) do
|
yellowfive@139
|
111 for setupName, data in pairs(v.setups) do
|
yellowfive@139
|
112 table.insert(playerList, { text = name .. " " .. setupName, value = name .. "@" .. setupName })
|
yellowfive@139
|
113 if not firstData then
|
yellowfive@139
|
114 firstData = name .. "@" .. setupName
|
yellowfive@139
|
115 end
|
yellowfive@139
|
116 end
|
yellowfive@57
|
117 end
|
yellowfive@57
|
118 _cboPlayers:SetItems(playerList)
|
yellowfive@57
|
119
|
yellowfive@57
|
120 -- set default selected player
|
yellowfive@139
|
121 local playerData = Amr.db.global.Shopping2[player.Name .. "-" .. player.Realm]
|
yellowfive@139
|
122 if playerData and playerData.setups then
|
yellowfive@139
|
123 _selectedSetup = Amr:GetActiveSetupLabel()
|
yellowfive@139
|
124 if not _selectedSetup then
|
yellowfive@139
|
125 Amr:PickFirstSetupForSpec()
|
yellowfive@139
|
126 _selectedSetup = Amr:GetActiveSetupLabel()
|
yellowfive@139
|
127 end
|
yellowfive@139
|
128 if _selectedSetup and not playerData.setups[_selectedSetup] then
|
yellowfive@139
|
129 _selectedSetup = nil
|
yellowfive@139
|
130 else
|
yellowfive@139
|
131 _selectedSetup = player.Name .. "-" .. player.Realm .. "@" .. _selectedSetup
|
yellowfive@139
|
132 end
|
yellowfive@139
|
133 end
|
yellowfive@139
|
134
|
yellowfive@139
|
135 if not _selectedSetup then
|
yellowfive@139
|
136 if playerData and playerData.setups then
|
yellowfive@139
|
137 for k,v in pairs(playerData.setups) do
|
yellowfive@139
|
138 _selectedSetup = player.Name .. "-" .. player.Realm .. "@" .. k
|
yellowfive@139
|
139 break
|
yellowfive@139
|
140 end
|
yellowfive@139
|
141 else
|
yellowfive@139
|
142 _selectedSetup = firstData
|
yellowfive@139
|
143 end
|
yellowfive@139
|
144 end
|
yellowfive@139
|
145 _cboPlayers:SelectItem(_selectedSetup)
|
yellowfive@57
|
146
|
yellowfive@57
|
147 Amr:RefreshShoppingUi()
|
yellowfive@57
|
148
|
yellowfive@57
|
149 -- set event on dropdown after UI has been initially rendered
|
yellowfive@57
|
150 _cboPlayers:SetCallback("OnChange", onPlayerChange)
|
yellowfive@139
|
151
|
yellowfive@139
|
152 -- set a timer to refresh a bit after opening b/c sometimes some item info isn't available
|
yellowfive@139
|
153 Amr.Wait(2, function()
|
yellowfive@139
|
154 if _frameShop then
|
yellowfive@139
|
155 Amr:RefreshShoppingUi()
|
yellowfive@139
|
156 end
|
yellowfive@139
|
157 end)
|
yellowfive@57
|
158 else
|
yellowfive@57
|
159 _frameShop:Show()
|
yellowfive@57
|
160 Amr:RefreshShoppingUi()
|
yellowfive@57
|
161 end
|
yellowfive@57
|
162
|
yellowfive@57
|
163 _frameShop:Raise()
|
yellowfive@57
|
164 end
|
yellowfive@57
|
165
|
yellowfive@57
|
166 -- helper to render a section of the shopping list
|
yellowfive@57
|
167 local function renderShopSection(list, scroll, header)
|
yellowfive@57
|
168 if not list or next(list) == nil then return end
|
yellowfive@57
|
169
|
yellowfive@57
|
170 local w = 440
|
yellowfive@57
|
171
|
yellowfive@57
|
172 local panel = AceGUI:Create("AmrUiPanel")
|
yellowfive@57
|
173 panel:SetLayout("None")
|
yellowfive@57
|
174 panel:SetTransparent()
|
yellowfive@57
|
175 panel:SetWidth(w)
|
yellowfive@57
|
176 panel:SetHeight(40)
|
yellowfive@57
|
177 scroll:AddChild(panel)
|
yellowfive@57
|
178
|
yellowfive@57
|
179 local lbl = AceGUI:Create("AmrUiLabel")
|
yellowfive@124
|
180 panel:AddChild(lbl)
|
yellowfive@57
|
181 lbl:SetWidth(w)
|
yellowfive@57
|
182 lbl:SetFont(Amr.CreateFont("Regular", 18, Amr.Colors.TextHeaderActive))
|
yellowfive@57
|
183 lbl:SetText(header)
|
yellowfive@57
|
184 lbl:SetPoint("BOTTOMLEFT", panel.content, "BOTTOMLEFT")
|
yellowfive@57
|
185
|
yellowfive@57
|
186 for itemId, count in pairs(list) do
|
yellowfive@57
|
187 panel = AceGUI:Create("AmrUiPanel")
|
yellowfive@57
|
188 panel:SetLayout("None")
|
yellowfive@57
|
189 panel:SetTransparent()
|
yellowfive@57
|
190 panel:SetWidth(w)
|
yellowfive@57
|
191 panel:SetHeight(30)
|
yellowfive@57
|
192 scroll:AddChild(panel)
|
yellowfive@57
|
193
|
yellowfive@57
|
194 lbl = AceGUI:Create("AmrUiLabel")
|
yellowfive@124
|
195 panel:AddChild(lbl)
|
yellowfive@89
|
196 lbl:SetWidth(40)
|
yellowfive@57
|
197 lbl:SetWordWrap(false)
|
yellowfive@57
|
198 lbl:SetFont(Amr.CreateFont("Bold", 20, Amr.Colors.White))
|
yellowfive@57
|
199 lbl:SetText(count .. "x")
|
yellowfive@57
|
200 lbl:SetPoint("LEFT", panel.content, "LEFT")
|
yellowfive@57
|
201
|
yellowfive@57
|
202 local icon = AceGUI:Create("AmrUiIcon")
|
yellowfive@57
|
203 icon:SetBorderWidth(1)
|
yellowfive@57
|
204 icon:SetIconBorderColor(Amr.Colors.White)
|
yellowfive@57
|
205 icon:SetWidth(18)
|
yellowfive@57
|
206 icon:SetHeight(18)
|
yellowfive@124
|
207 panel:AddChild(icon)
|
yellowfive@57
|
208 icon:SetPoint("LEFT", lbl.frame, "RIGHT", 5, 0)
|
yellowfive@57
|
209
|
yellowfive@57
|
210 local btn = AceGUI:Create("AmrUiTextButton")
|
yellowfive@57
|
211 btn:SetWidth(w - 30 - 18 - 15)
|
yellowfive@57
|
212 btn:SetJustifyH("LEFT")
|
yellowfive@57
|
213 btn:SetWordWrap(false)
|
yellowfive@57
|
214 btn:SetFont(Amr.CreateFont("Bold", 14, Amr.Colors.White))
|
yellowfive@57
|
215 btn:SetHoverFont(Amr.CreateFont("Bold", 14, Amr.Colors.White))
|
yellowfive@57
|
216 btn:SetCallback("OnClick", onItemClick)
|
yellowfive@57
|
217 panel:AddChild(btn)
|
yellowfive@124
|
218 btn:SetPoint("LEFT", icon.frame, "RIGHT", 5, 0)
|
yellowfive@57
|
219
|
yellowfive@131
|
220 local item = Item:CreateFromItemID(itemId)
|
yellowfive@131
|
221 if item then
|
yellowfive@131
|
222 local itemLink = item:GetItemLink()
|
yellowfive@131
|
223 if itemLink then
|
yellowfive@131
|
224 icon:SetIcon(item:GetItemIcon())
|
yellowfive@131
|
225 btn:SetText(itemLink:gsub("%[", ""):gsub("%]", ""))
|
yellowfive@131
|
226 btn:SetUserData("itemName", item:GetItemName())
|
yellowfive@131
|
227 Amr:SetItemTooltip(btn, itemLink)
|
yellowfive@131
|
228 end
|
yellowfive@131
|
229 end
|
yellowfive@57
|
230 end
|
yellowfive@57
|
231
|
yellowfive@57
|
232 end
|
yellowfive@57
|
233
|
yellowfive@89
|
234 -- get the number of a specified gem/enchant/material that the player currently owns
|
yellowfive@57
|
235 local function getOwnedCount(itemId)
|
yellowfive@57
|
236 local ret = 0
|
yellowfive@57
|
237
|
yellowfive@57
|
238 local list = Amr.db.char.BagItemsAndCounts
|
yellowfive@57
|
239 if list and list[itemId] then
|
yellowfive@57
|
240 ret = ret + list[itemId]
|
yellowfive@57
|
241 end
|
yellowfive@57
|
242
|
yellowfive@124
|
243 local bankBags = Amr.db.char.BankItemsAndCounts
|
yellowfive@124
|
244 if bankBags then
|
yellowfive@124
|
245 for bagId,bagList in pairs(bankBags) do
|
yellowfive@124
|
246 if bagList[itemId] then
|
yellowfive@124
|
247 ret = ret + bagList[itemId]
|
yellowfive@124
|
248 end
|
yellowfive@124
|
249 end
|
yellowfive@57
|
250 end
|
yellowfive@57
|
251
|
yellowfive@57
|
252 return ret
|
yellowfive@57
|
253 end
|
yellowfive@57
|
254
|
yellowfive@89
|
255 local function removeOwned(list, owned)
|
yellowfive@89
|
256
|
yellowfive@89
|
257 for itemId, count in pairs(list) do
|
yellowfive@89
|
258 -- load up how many of an item we have
|
yellowfive@89
|
259 if not owned.loaded[itemId] then
|
yellowfive@89
|
260 owned.counts[itemId] = getOwnedCount(itemId)
|
yellowfive@89
|
261 owned.loaded[itemId] = true
|
yellowfive@89
|
262 end
|
yellowfive@89
|
263
|
yellowfive@89
|
264 -- see how many we can remove from the required count
|
yellowfive@89
|
265 local used = math.min(owned.counts[itemId], count)
|
yellowfive@89
|
266
|
yellowfive@89
|
267 -- update owned count so we can't double-use something
|
yellowfive@89
|
268 owned.counts[itemId] = owned.counts[itemId] - used;
|
yellowfive@89
|
269
|
yellowfive@89
|
270 -- reduce the requirement, removing entirely if we have it completely covered
|
yellowfive@89
|
271 list[itemId] = list[itemId] - used;
|
yellowfive@89
|
272 if list[itemId] == 0 then
|
yellowfive@89
|
273 list[itemId] = nil
|
yellowfive@89
|
274 end
|
yellowfive@89
|
275 end
|
yellowfive@89
|
276 end
|
yellowfive@89
|
277
|
yellowfive@89
|
278 function Amr:RefreshShoppingUi()
|
yellowfive@89
|
279
|
yellowfive@89
|
280 -- clear out any previous data
|
yellowfive@89
|
281 _panelContent:ReleaseChildren()
|
yellowfive@89
|
282
|
yellowfive@139
|
283 local parts = { strsplit("@", _selectedSetup) }
|
yellowfive@139
|
284
|
yellowfive@139
|
285 local data = Amr.db.global.Shopping2[parts[1]].setups[parts[2]]
|
yellowfive@89
|
286 if not data then
|
yellowfive@89
|
287 _panelContent:SetLayout("None")
|
yellowfive@89
|
288
|
yellowfive@89
|
289 local lbl = AceGUI:Create("AmrUiLabel")
|
yellowfive@124
|
290 _panelContent:AddChild(lbl)
|
yellowfive@89
|
291 lbl:SetFont(Amr.CreateFont("Italic", 18, Amr.Colors.TextTan))
|
yellowfive@89
|
292 lbl:SetText(L.ShopEmpty)
|
yellowfive@89
|
293 lbl:SetJustifyH("CENTER")
|
yellowfive@89
|
294 lbl:SetPoint("TOP", _panelContent.content, "TOP", 0, -30)
|
yellowfive@89
|
295 else
|
yellowfive@89
|
296 local allStuff = { gems = {}, enchants = {}, materials = {} }
|
yellowfive@89
|
297 local hasStuff = false
|
yellowfive@89
|
298 local visited = {}
|
yellowfive@89
|
299
|
yellowfive@139
|
300 for inventoryId, stuff in pairs(data) do
|
yellowfive@139
|
301 hasStuff = true
|
yellowfive@139
|
302 if not visited[inventoryId] then
|
yellowfive@139
|
303 if stuff.gems then
|
yellowfive@139
|
304 for itemId, count in pairs(stuff.gems) do
|
yellowfive@139
|
305 incrementTableItem(allStuff.gems, itemId, count)
|
yellowfive@89
|
306 end
|
yellowfive@89
|
307 end
|
yellowfive@89
|
308
|
yellowfive@139
|
309 if stuff.enchants then
|
yellowfive@139
|
310 for itemId, count in pairs(stuff.enchants) do
|
yellowfive@139
|
311 incrementTableItem(allStuff.enchants, itemId, count)
|
yellowfive@139
|
312 end
|
yellowfive@139
|
313 end
|
yellowfive@139
|
314
|
yellowfive@139
|
315 if stuff.materials then
|
yellowfive@139
|
316 for itemId, count in pairs(stuff.materials) do
|
yellowfive@139
|
317 incrementTableItem(allStuff.materials, itemId, count)
|
yellowfive@139
|
318 end
|
yellowfive@139
|
319 end
|
yellowfive@139
|
320
|
yellowfive@139
|
321 -- make sure not to count the same physical item twice
|
yellowfive@139
|
322 if inventoryId ~= -1 then
|
yellowfive@139
|
323 visited[inventoryId] = true
|
yellowfive@139
|
324 end
|
yellowfive@89
|
325 end
|
yellowfive@89
|
326 end
|
yellowfive@89
|
327
|
yellowfive@89
|
328 if hasStuff then
|
yellowfive@89
|
329 -- remove what we already own
|
yellowfive@89
|
330 local owned = { counts = {}, loaded = {} }
|
yellowfive@89
|
331 removeOwned(allStuff.gems, owned)
|
yellowfive@89
|
332 removeOwned(allStuff.enchants, owned)
|
yellowfive@89
|
333 removeOwned(allStuff.materials, owned)
|
yellowfive@89
|
334
|
yellowfive@89
|
335 _panelContent:SetLayout("Fill")
|
yellowfive@89
|
336
|
yellowfive@89
|
337 local scroll = AceGUI:Create("AmrUiScrollFrame")
|
yellowfive@89
|
338 scroll:SetLayout("List")
|
yellowfive@89
|
339 _panelContent:AddChild(scroll)
|
yellowfive@89
|
340
|
yellowfive@89
|
341 renderShopSection(allStuff.gems, scroll, L.ShopHeaderGems)
|
yellowfive@89
|
342 renderShopSection(allStuff.enchants, scroll, L.ShopHeaderEnchants)
|
yellowfive@89
|
343 renderShopSection(allStuff.materials, scroll, L.ShopHeaderMaterials)
|
yellowfive@89
|
344 end
|
yellowfive@89
|
345 end
|
yellowfive@89
|
346
|
yellowfive@89
|
347 end
|
yellowfive@89
|
348
|
yellowfive@124
|
349 -- compare gear to everything the player owns, and return the minimum gems/enchants/materials needed to optimize,
|
yellowfive@124
|
350 -- grouped by inventory ID so that we can combine multiple specs without double-counting
|
yellowfive@131
|
351 local function getShoppingData(player, gear)
|
yellowfive@89
|
352
|
yellowfive@89
|
353 local ret = {}
|
yellowfive@89
|
354
|
yellowfive@89
|
355 -- used to prevent considering the same item twice
|
yellowfive@89
|
356 local usedItems = {}
|
yellowfive@89
|
357
|
yellowfive@89
|
358 for slotId, optimalItem in pairs(gear) do
|
yellowfive@124
|
359 local matchItem = Amr:FindMatchingItem(optimalItem, player, usedItems)
|
yellowfive@89
|
360 local inventoryId = optimalItem.inventoryId or -1
|
yellowfive@89
|
361
|
yellowfive@89
|
362 -- find gem/enchant differences on the best-matching item
|
yellowfive@89
|
363
|
yellowfive@124
|
364 -- gems
|
yellowfive@124
|
365 if not optimalItem.relicBonusIds and (not matchItem or not matchItem.relicBonusIds) then
|
yellowfive@124
|
366 for i = 1, 3 do
|
yellowfive@89
|
367 local g = optimalItem.gemIds[i]
|
yellowfive@131
|
368 local isGemEquipped = g == 0 or (matchItem and matchItem.gemIds and matchItem.gemIds[i] == g)
|
yellowfive@89
|
369 if not isGemEquipped then
|
yellowfive@89
|
370 if not ret[inventoryId] then
|
yellowfive@89
|
371 ret[inventoryId] = { gems = {}, enchants = {}, materials = {} }
|
yellowfive@89
|
372 end
|
yellowfive@89
|
373 incrementTableItem(ret[inventoryId].gems, g, 1)
|
yellowfive@89
|
374 end
|
yellowfive@89
|
375 end
|
yellowfive@89
|
376 end
|
yellowfive@89
|
377
|
yellowfive@89
|
378 -- enchant
|
yellowfive@89
|
379 if optimalItem.enchantId and optimalItem.enchantId ~= 0 then
|
yellowfive@89
|
380 local e = optimalItem.enchantId
|
yellowfive@89
|
381 local isEnchantEquipped = matchItem and matchItem.enchantId and matchItem.enchantId == e
|
yellowfive@89
|
382
|
yellowfive@89
|
383 if not isEnchantEquipped then
|
yellowfive@124
|
384 -- enchant info
|
yellowfive@124
|
385 local enchInfo = Amr.db.char.ExtraEnchantData[e]
|
yellowfive@89
|
386 if enchInfo then
|
yellowfive@89
|
387 if not ret[inventoryId] then
|
yellowfive@89
|
388 ret[inventoryId] = { gems = {}, enchants = {}, materials = {} }
|
yellowfive@89
|
389 end
|
yellowfive@89
|
390 incrementTableItem(ret[inventoryId].enchants, enchInfo.itemId, 1)
|
yellowfive@89
|
391
|
yellowfive@89
|
392 if enchInfo.materials then
|
yellowfive@89
|
393 for k, v in pairs(enchInfo.materials) do
|
yellowfive@89
|
394 incrementTableItem(ret[inventoryId].materials, k, v)
|
yellowfive@89
|
395 end
|
yellowfive@89
|
396 end
|
yellowfive@89
|
397 end
|
yellowfive@89
|
398 end
|
yellowfive@89
|
399 end
|
yellowfive@89
|
400 end
|
yellowfive@89
|
401
|
yellowfive@89
|
402 return ret
|
yellowfive@89
|
403 end
|
yellowfive@89
|
404
|
yellowfive@139
|
405 -- look at all gear sets and find stuff that a player needs to acquire to gem/enchant their gear for each setup
|
yellowfive@57
|
406 function Amr:UpdateShoppingData(player)
|
yellowfive@57
|
407
|
yellowfive@57
|
408 local required = {
|
yellowfive@139
|
409 setups = {}
|
yellowfive@57
|
410 }
|
yellowfive@139
|
411
|
yellowfive@139
|
412 for i, setup in ipairs(Amr.db.char.GearSetups) do
|
yellowfive@139
|
413 local gear = setup.Gear
|
yellowfive@124
|
414 if gear then
|
yellowfive@139
|
415 required.setups[setup.Label] = getShoppingData(player, gear)
|
yellowfive@124
|
416 end
|
yellowfive@57
|
417 end
|
yellowfive@139
|
418
|
yellowfive@139
|
419 Amr.db.global.Shopping2[player.Name .. "-" .. player.Realm] = required
|
yellowfive@57
|
420 end
|
yellowfive@57
|
421
|
yellowfive@57
|
422 Amr:AddEventHandler("AUCTION_HOUSE_SHOW", function()
|
yellowfive@57
|
423 _isAhOpen = true
|
yellowfive@57
|
424 if Amr.db.profile.options.shopAh then
|
yellowfive@57
|
425 Amr:ShowShopWindow()
|
yellowfive@57
|
426 end
|
yellowfive@57
|
427 end)
|
yellowfive@57
|
428
|
yellowfive@57
|
429 Amr:AddEventHandler("AUCTION_HOUSE_CLOSED", function()
|
yellowfive@57
|
430 _isAhOpen = false
|
yellowfive@57
|
431 if Amr.db.profile.options.shopAh then
|
yellowfive@57
|
432 Amr:HideShopWindow()
|
yellowfive@57
|
433 end
|
yellowfive@122
|
434 end)
|