Skip to content

Commit 16485b3

Browse files
committed
feat: update the check logic again
1 parent 3b73194 commit 16485b3

File tree

2 files changed

+45
-13
lines changed

2 files changed

+45
-13
lines changed

.luarc.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
"ITEM_LEVEL",
5757
"ITEM_LEVEL_ABBR",
5858
"ITEM_LEVEL_PLUS",
59+
"ITEM_PET_KNOWN",
5960
"ITEM_SPELL_KNOWN",
6061
"LEGSSLOT",
6162
"LEVEL",
@@ -91,7 +92,7 @@
9192
"TRINKET1SLOT_UNIQUE",
9293
"UNKNOWN",
9394
"WAISTSLOT",
94-
"WRISTSLOT"
95+
"WRISTSLOT",
9596
],
9697
"diagnostics.disable": [
9798
"inject-field",
@@ -100,4 +101,4 @@
100101
"diagnostics.ignoredFiles": "Disable",
101102
"diagnostics.libraryFiles": "Disable",
102103
"format.enable": false
103-
}
104+
}

Modules/Item/AlreadyKnown.lua

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
local W, F, E, L = unpack((select(2, ...))) ---@type WindTools, Functions, ElvUI, LocaleTable
22
local AK = W:NewModule("AlreadyKnown", "AceEvent-3.0", "AceHook-3.0") ---@class AlreadyKnown : AceModule, AceEvent-3.0, AceHook-3.0
33

4-
-- Some check logic references code from Legion Remix Helper.
4+
-- Some check logic references code from Legion Remix Helper & AlreadyKnown
55

66
local _G = _G
77
local ceil = ceil
88
local format = format
9+
local ipairs = ipairs
910
local mod = mod
1011
local select = select
1112
local strfind = strfind
1213
local strmatch = strmatch
1314
local tonumber = tonumber
1415

16+
local ContainsIf = ContainsIf
1517
local GetBuybackItemInfo = GetBuybackItemInfo
1618
local GetBuybackItemLink = GetBuybackItemLink
1719
local GetCurrentGuildBankTab = GetCurrentGuildBankTab
@@ -21,12 +23,15 @@ local GetMerchantItemLink = GetMerchantItemLink
2123
local GetMerchantNumItems = GetMerchantNumItems
2224
local GetNumBuybackItems = GetNumBuybackItems
2325
local PlayerHasToy = PlayerHasToy
26+
local RunNextFrame = RunNextFrame
2427
local SetItemButtonDesaturated = SetItemButtonDesaturated
2528
local SetItemButtonTextureVertexColor = SetItemButtonTextureVertexColor
2629

2730
local C_AddOns_IsAddOnLoaded = C_AddOns.IsAddOnLoaded
2831
local C_Item_GetItemInfoInstant = C_Item.GetItemInfoInstant
32+
local C_Item_GetItemInventoryTypeByID = C_Item.GetItemInventoryTypeByID
2933
local C_Item_GetItemLearnTransmogSet = C_Item.GetItemLearnTransmogSet
34+
local C_Item_IsCosmeticItem = C_Item.IsCosmeticItem
3035
local C_MerchantFrame_GetItemInfo = C_MerchantFrame.GetItemInfo
3136
local C_MountJournal_GetMountFromItem = C_MountJournal.GetMountFromItem
3237
local C_MountJournal_GetMountInfoByID = C_MountJournal.GetMountInfoByID
@@ -39,23 +44,44 @@ local C_TransmogCollection_PlayerHasTransmogByItemInfo = C_TransmogCollection.Pl
3944
local C_TransmogSets_GetSetInfo = C_TransmogSets.GetSetInfo
4045
local C_Transmog_GetAllSetAppearancesByID = C_Transmog.GetAllSetAppearancesByID
4146

47+
local Enum_ItemClass_Battlepet = Enum.ItemClass.Battlepet
4248
local BUYBACK_ITEMS_PER_PAGE = BUYBACK_ITEMS_PER_PAGE
4349
local COLLECTED = COLLECTED
44-
local Enum_ItemClass_Battlepet = Enum.ItemClass.Battlepet
4550
local ITEM_SPELL_KNOWN = ITEM_SPELL_KNOWN
51+
local PET_SEARCH_PATTERN = strmatch(ITEM_PET_KNOWN, "[^%((]+")
4652
local MAX_GUILDBANK_SLOTS_PER_TAB = 98
4753
local NUM_SLOTS_PER_GUILDBANK_GROUP = 14
4854

4955
local knowables = {
5056
[Enum.ItemClass.Consumable] = true,
57+
[Enum.ItemClass.Armor] = true,
58+
[Enum.ItemClass.ItemEnhancement] = true,
5159
[Enum.ItemClass.Recipe] = true,
5260
[Enum.ItemClass.Miscellaneous] = true,
53-
[Enum.ItemClass.ItemEnhancement] = true,
61+
[Enum.ItemClass.Battlepet] = true,
62+
}
63+
64+
local transmogInventoryTypes = {
65+
[Enum.InventoryType.IndexBodyType] = true,
66+
[Enum.InventoryType.IndexTabardType] = true,
5467
}
68+
5569
local knowns = {}
5670

5771
local function isPetCollected(speciesID)
58-
return speciesID and speciesID ~= 0 and C_PetJournal_GetNumCollectedInfo(speciesID) > 0
72+
local num = speciesID and C_PetJournal_GetNumCollectedInfo(speciesID)
73+
return num and num > 0
74+
end
75+
76+
local function isTransmogCollected(itemID, link)
77+
if not C_Item_IsCosmeticItem(itemID) then
78+
local inventoryType = C_Item_GetItemInventoryTypeByID(itemID)
79+
if not transmogInventoryTypes[inventoryType] then
80+
return false
81+
end
82+
end
83+
84+
return C_TransmogCollection_PlayerHasTransmogByItemInfo(itemID)
5985
end
6086

6187
local function isTransmogSetCollected(itemID)
@@ -85,7 +111,7 @@ end
85111

86112
local function isMountCollected(itemID)
87113
local mountID = C_MountJournal_GetMountFromItem(itemID)
88-
return mountID and mountID ~= 0 and select(11, C_MountJournal_GetMountInfoByID(mountID))
114+
return mountID and select(11, C_MountJournal_GetMountInfoByID(mountID))
89115
end
90116

91117
local function isToyCollected(itemID)
@@ -120,27 +146,32 @@ local function isAlreadyKnown(link, index)
120146
return true
121147
end
122148

149+
if not knowables[classID] then
150+
return
151+
end
152+
123153
if
124154
isMountCollected(linkID)
125155
or isToyCollected(linkID)
126156
or isPetItemCollected(linkID)
157+
or isTransmogCollected(linkID)
127158
or isTransmogSetCollected(linkID)
128159
then
129160
knowns[link] = true
130161
return true
131162
end
132163

133-
if not knowables[classID] then
134-
return
135-
end
136-
137164
-- Final check via tooltip parsing
138-
local data = C_TooltipInfo_GetHyperlink(link, nil, nil, true)
165+
local data = C_TooltipInfo_GetHyperlink(link)
139166
if data then
140167
for _, line in ipairs(data.lines) do
141168
local text = line.leftText
142169
if text then
143-
if strfind(text, COLLECTED, 1, true) or strfind(text, ITEM_SPELL_KNOWN, 1, true) then
170+
if
171+
strfind(text, COLLECTED, 1, true)
172+
or strfind(text, ITEM_SPELL_KNOWN, 1, true)
173+
or strmatch(text, PET_SEARCH_PATTERN)
174+
then
144175
knowns[link] = true
145176
return true
146177
end

0 commit comments

Comments
 (0)