comparison Shopping.lua @ 131:318c93e0cd6b v61

Fixed an issue with the shopping list.
author yellowfive
date Wed, 18 Jul 2018 15:19:04 -0700
parents e31b02b24488
children a0894ffebd15
comparison
equal deleted inserted replaced
130:559f1d35bc72 131:318c93e0cd6b
208 btn:SetHoverFont(Amr.CreateFont("Bold", 14, Amr.Colors.White)) 208 btn:SetHoverFont(Amr.CreateFont("Bold", 14, Amr.Colors.White))
209 btn:SetCallback("OnClick", onItemClick) 209 btn:SetCallback("OnClick", onItemClick)
210 panel:AddChild(btn) 210 panel:AddChild(btn)
211 btn:SetPoint("LEFT", icon.frame, "RIGHT", 5, 0) 211 btn:SetPoint("LEFT", icon.frame, "RIGHT", 5, 0)
212 212
213 Amr.GetItemInfo(itemId, function(obj, name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture) 213 local item = Item:CreateFromItemID(itemId)
214 -- set icon, name, and a tooltip 214 if item then
215 obj.itemIcon:SetIcon(texture) 215 local itemLink = item:GetItemLink()
216 obj.itemText:SetText(link:gsub("%[", ""):gsub("%]", "")) 216 if itemLink then
217 obj.itemText:SetUserData("itemName", name) 217 icon:SetIcon(item:GetItemIcon())
218 Amr:SetItemTooltip(obj.itemText, link) 218 btn:SetText(itemLink:gsub("%[", ""):gsub("%]", ""))
219 end, { itemIcon = icon, itemText = btn }) 219 btn:SetUserData("itemName", item:GetItemName())
220 Amr:SetItemTooltip(btn, itemLink)
221 end
222 end
220 end 223 end
221 224
222 end 225 end
223 226
224 -- get the number of a specified gem/enchant/material that the player currently owns 227 -- get the number of a specified gem/enchant/material that the player currently owns
360 363
361 end 364 end
362 365
363 -- compare gear to everything the player owns, and return the minimum gems/enchants/materials needed to optimize, 366 -- compare gear to everything the player owns, and return the minimum gems/enchants/materials needed to optimize,
364 -- grouped by inventory ID so that we can combine multiple specs without double-counting 367 -- grouped by inventory ID so that we can combine multiple specs without double-counting
365 local function getShoppingData(player, gear, spec) 368 local function getShoppingData(player, gear)
366 369
367 local ret = {} 370 local ret = {}
368 371
369 -- used to prevent considering the same item twice 372 -- used to prevent considering the same item twice
370 local usedItems = {} 373 local usedItems = {}
377 380
378 -- gems 381 -- gems
379 if not optimalItem.relicBonusIds and (not matchItem or not matchItem.relicBonusIds) then 382 if not optimalItem.relicBonusIds and (not matchItem or not matchItem.relicBonusIds) then
380 for i = 1, 3 do 383 for i = 1, 3 do
381 local g = optimalItem.gemIds[i] 384 local g = optimalItem.gemIds[i]
382 local isGemEquipped = g ~= 0 and matchItem and matchItem.gemIds and matchItem.gemIds[i] == g 385 local isGemEquipped = g == 0 or (matchItem and matchItem.gemIds and matchItem.gemIds[i] == g)
383
384 if not isGemEquipped then 386 if not isGemEquipped then
385 if not ret[inventoryId] then 387 if not ret[inventoryId] then
386 ret[inventoryId] = { gems = {}, enchants = {}, materials = {} } 388 ret[inventoryId] = { gems = {}, enchants = {}, materials = {} }
387 end 389 end
388 incrementTableItem(ret[inventoryId].gems, g, 1) 390 incrementTableItem(ret[inventoryId].gems, g, 1)
426 } 428 }
427 429
428 local enchantItemIdToId = {} 430 local enchantItemIdToId = {}
429 431
430 for i, spec in ipairs(required.specs) do 432 for i, spec in ipairs(required.specs) do
431 local gear = Amr.db.char.GearSets[spec] 433 local gear = Amr.db.char.GearSets[i]
432 if gear then 434 if gear then
433 required.stuff[i] = getShoppingData(player, gear, spec) 435 required.stuff[i] = getShoppingData(player, gear)
434 else 436 else
435 required.stuff[i] = {} 437 required.stuff[i] = {}
436 end 438 end
437 end 439 end
438 440