Mercurial > wow > askmrrobot
comparison Junk.lua @ 163:f27a7c64b21f v76
Tweaks to item matching in junk list features.
author | yellowfive |
---|---|
date | Mon, 06 May 2019 18:05:16 -0700 |
parents | f66108c1f674 |
children | eec8032ba9df |
comparison
equal
deleted
inserted
replaced
162:f66108c1f674 | 163:f27a7c64b21f |
---|---|
22 local loc = ItemLocation.CreateEmpty() | 22 local loc = ItemLocation.CreateEmpty() |
23 | 23 |
24 if not usedItems[bagId] then | 24 if not usedItems[bagId] then |
25 usedItems[bagId] = {} | 25 usedItems[bagId] = {} |
26 end | 26 end |
27 | |
28 local bestMatchDiffs = 1000000 | |
29 local bestMatch = nil | |
30 local threshold | |
27 | 31 |
28 for slotId = 1, numSlots do | 32 for slotId = 1, numSlots do |
29 if not usedItems[bagId][slotId] then | 33 if not usedItems[bagId][slotId] then |
30 local _, itemCount, _, _, _, _, itemLink = GetContainerItemInfo(bagId, slotId) | 34 local _, itemCount, _, _, _, _, itemLink = GetContainerItemInfo(bagId, slotId) |
31 if itemLink ~= nil then | 35 if itemLink ~= nil then |
39 itemData.azerite = powers | 43 itemData.azerite = powers |
40 end | 44 end |
41 end | 45 end |
42 | 46 |
43 -- see if it matches | 47 -- see if it matches |
44 if Amr.CountItemDifferences(matchItem, itemData) == 0 then | 48 local diffs = Amr.CountItemDifferences(matchItem, itemData) |
49 if diffs == 0 then | |
45 usedItems[bagId][slotId] = true | 50 usedItems[bagId][slotId] = true |
46 itemData.bagId = bagId | 51 itemData.bagId = bagId |
47 itemData.slotId = slotId | 52 itemData.slotId = slotId |
48 return itemData | 53 return itemData |
54 elseif diffs < 10000 then | |
55 if itemData.azerite and #itemData.azerite > 0 then | |
56 threshold = 100 | |
57 else | |
58 threshold = 10000 | |
59 end | |
60 if diffs < threshold and diffs < bestMatchDiffs then | |
61 -- closest match we could find | |
62 bestMatchDiffs = diffs | |
63 itemData.bagId = bagId | |
64 itemData.slotId = slotId | |
65 bestMatch = itemData | |
66 end | |
49 end | 67 end |
50 end | 68 end |
51 end | 69 end |
52 end | 70 end |
53 end | 71 end |
54 | 72 |
55 return nil | 73 -- if we couldn't get a perfect match, take the best match that might have some small differences like |
74 -- an old school enchant or upgrade ID that didn't load | |
75 if bestMatch then | |
76 usedItems[bestMatch.bagId][bestMatch.slotId] = true | |
77 return bestMatch | |
78 else | |
79 return nil | |
80 end | |
56 end | 81 end |
57 | 82 |
58 -- | 83 -- |
59 -- Find a matching item in the player's bags | 84 -- Find a matching item in the player's bags |
60 -- | 85 -- |
404 end | 429 end |
405 end | 430 end |
406 end | 431 end |
407 | 432 |
408 -- check bank data | 433 -- check bank data |
434 local bestMatchDiffs = 100000 | |
435 local bestMatch = nil | |
436 local threshold | |
437 | |
409 if Amr.db.char.BankItems then | 438 if Amr.db.char.BankItems then |
410 for bagId, v in pairs(Amr.db.char.BankItems) do | 439 for bagId, v in pairs(Amr.db.char.BankItems) do |
411 if not usedItems[bagId] then | 440 if not usedItems[bagId] then |
412 usedItems[bagId] = {} | 441 usedItems[bagId] = {} |
413 end | 442 end |
414 | 443 |
415 for i, itemData in ipairs(v) do | 444 for i, itemData in ipairs(v) do |
416 if itemData and not usedItems[bagId][i] then | 445 if itemData and not usedItems[bagId][i] then |
417 -- see if it matches | 446 -- see if it matches |
418 if Amr.CountItemDifferences(matchItem, itemData) == 0 then | 447 local diffs = Amr.CountItemDifferences(matchItem, itemData) |
448 if diffs == 0 then | |
419 usedItems[bagId][i] = true | 449 usedItems[bagId][i] = true |
420 itemData.bagId = bagId | 450 itemData.bagId = bagId |
421 itemData.slotId = i | 451 itemData.slotId = i |
422 return itemData | 452 return itemData |
453 elseif diffs < 10000 then | |
454 if itemData.azerite and #itemData.azerite > 0 then | |
455 threshold = 100 | |
456 else | |
457 threshold = 10000 | |
458 end | |
459 if diffs < threshold and diffs < bestMatchDiffs then | |
460 -- closest match we could find | |
461 bestMatchDiffs = diffs | |
462 itemData.bagId = bagId | |
463 itemData.slotId = i | |
464 bestMatch = itemData | |
465 end | |
423 end | 466 end |
424 end | 467 end |
425 end | 468 end |
426 end | 469 end |
427 end | 470 end |
428 | 471 |
429 return nil | 472 -- if we couldn't get a perfect match, take the best match that might have some small differences like |
473 -- an old school enchant or upgrade ID that didn't load | |
474 if bestMatch then | |
475 usedItems[bestMatch.bagId][bestMatch.slotId] = true | |
476 return bestMatch | |
477 else | |
478 return nil | |
479 end | |
430 end | 480 end |
431 | 481 |
432 local function renderItem(item, itemLink, scroll) | 482 local function renderItem(item, itemLink, scroll) |
433 | 483 |
434 local panel = AceGUI:Create("AmrUiPanel") | 484 local panel = AceGUI:Create("AmrUiPanel") |