Skip to content

Commit 5788ef5

Browse files
committed
Retail: Support 11.2 character bank tabs
1 parent 10708ee commit 5788ef5

File tree

4 files changed

+114
-42
lines changed

4 files changed

+114
-42
lines changed

Core/Constants.lua

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,7 @@ Syndicator.Constants = {
66
Enum.BagIndex.Bag_3,
77
Enum.BagIndex.Bag_4,
88
},
9-
AllBankIndexes = {
10-
Enum.BagIndex.Bank,
11-
Enum.BagIndex.BankBag_1,
12-
Enum.BagIndex.BankBag_2,
13-
Enum.BagIndex.BankBag_3,
14-
Enum.BagIndex.BankBag_4,
15-
Enum.BagIndex.BankBag_5,
16-
Enum.BagIndex.BankBag_6,
17-
Enum.BagIndex.BankBag_7,
18-
},
9+
AllBankIndexes = {},
1910
AllWarbandIndexes = {},
2011

2112
IsRetail = WOW_PROJECT_ID == WOW_PROJECT_MAINLINE,
@@ -44,18 +35,40 @@ Syndicator.Constants = {
4435
Syndicator.Constants.IsBrokenTooltipScanning = false
4536

4637
if Syndicator.Constants.IsRetail then
38+
Syndicator.Constants.WarbandBankActive = true
39+
Syndicator.Constants.CharacterBankTabsActive = Enum.BagIndex.CharacterBankTab_1 ~= nil
4740
table.insert(Syndicator.Constants.AllBagIndexes, Enum.BagIndex.ReagentBag)
48-
table.insert(Syndicator.Constants.AllBankIndexes, Enum.BagIndex.Reagentbank)
4941
Syndicator.Constants.BagSlotsCount = 5
5042
Syndicator.Constants.MaxBagSize = 42
43+
if Syndicator.Constants.CharacterBankTabsActive then
44+
Syndicator.Constants.AllBankIndexes = {
45+
Enum.BagIndex.CharacterBankTab_1,
46+
Enum.BagIndex.CharacterBankTab_2,
47+
Enum.BagIndex.CharacterBankTab_3,
48+
Enum.BagIndex.CharacterBankTab_4,
49+
Enum.BagIndex.CharacterBankTab_5,
50+
Enum.BagIndex.CharacterBankTab_6,
51+
}
52+
else
53+
Syndicator.Constants.AllBankIndexes = {
54+
Enum.BagIndex.Bank,
55+
Enum.BagIndex.BankBag_1,
56+
Enum.BagIndex.BankBag_2,
57+
Enum.BagIndex.BankBag_3,
58+
Enum.BagIndex.BankBag_4,
59+
Enum.BagIndex.BankBag_5,
60+
Enum.BagIndex.BankBag_6,
61+
Enum.BagIndex.BankBag_7,
62+
Enum.BagIndex.Reagentbank,
63+
}
64+
end
5165
Syndicator.Constants.AllWarbandIndexes = {
5266
Enum.BagIndex.AccountBankTab_1,
5367
Enum.BagIndex.AccountBankTab_2,
5468
Enum.BagIndex.AccountBankTab_3,
5569
Enum.BagIndex.AccountBankTab_4,
5670
Enum.BagIndex.AccountBankTab_5,
5771
}
58-
Syndicator.Constants.WarbandBankActive = true
5972
end
6073

6174
if Syndicator.Constants.IsEra or KeyRingButtonIDToInvSlotID then
@@ -65,6 +78,9 @@ if Syndicator.Constants.IsEra then
6578
Syndicator.Constants.BankBagSlotsCount = 6
6679
end
6780
if Syndicator.Constants.IsClassic then
81+
Syndicator.Constants.AllBankIndexes = {
82+
Enum.BagIndex.Bank,
83+
}
6884
-- Workaround for the enum containing the wrong values for the bank bag slots
6985
for i = 1, Syndicator.Constants.BankBagSlotsCount do
7086
Syndicator.Constants.AllBankIndexes[i + 1] = NUM_BAG_SLOTS + i

Search/SearchEverywhere.lua

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ local function CacheCharacter(character, callback)
3434
table.insert(bankList, item)
3535
end
3636
end
37+
if characterData.bankTabs then
38+
for _, tab in ipairs(characterData.bankTabs) do
39+
for _, item in ipairs(tab.slots) do
40+
table.insert(bankList, item)
41+
end
42+
end
43+
end
3744

3845
finishCheck("bank", Syndicator.Search.GetBaseInfoFromList(bankList))
3946

Tracking/BagCache.lua

Lines changed: 78 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,27 @@ function SyndicatorBagCacheMixin:OnLoad()
4040
"BANKFRAME_OPENED",
4141
"BANKFRAME_CLOSED",
4242
"PLAYERBANKSLOTS_CHANGED",
43-
"PLAYERBANKBAGSLOTS_CHANGED",
4443
})
44+
if not Syndicator.Constants.CharacterBankTabsActive then
45+
self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED")
46+
end
4547
if Syndicator.Constants.IsRetail then
48+
if not Syndicator.Constants.CharacterBankTabsActive then
49+
self:RegisterEvent("REAGENTBANK_UPDATE")
50+
self:RegisterEvent("PLAYERREAGENTBANKSLOTS_CHANGED")
51+
end
4652
-- Bank items reagent bank updating
47-
self:RegisterEvent("REAGENTBANK_UPDATE")
48-
self:RegisterEvent("PLAYERREAGENTBANKSLOTS_CHANGED")
4953
self:RegisterEvent("TRADE_SKILL_ITEM_CRAFTED_RESULT")
5054
-- Keystone level changing due to start/end of an M+ dungeon
5155
self:RegisterEvent("ITEM_CHANGED")
5256
self:RegisterEvent("CHALLENGE_MODE_START")
5357
self:RegisterEvent("CHALLENGE_MODE_COMPLETED")
5458

55-
if Syndicator.Constants.WarbandBankActive then
56-
self:RegisterEvent("BANK_TABS_CHANGED")
57-
self:RegisterEvent("BANK_TAB_SETTINGS_UPDATED")
58-
self:RegisterEvent("PLAYER_ACCOUNT_BANK_TAB_SLOTS_CHANGED")
59-
end
59+
self:RegisterEvent("BANK_TABS_CHANGED")
60+
self:RegisterEvent("BANK_TAB_SETTINGS_UPDATED")
61+
self:RegisterEvent("PLAYER_ACCOUNT_BANK_TAB_SLOTS_CHANGED")
62+
else
63+
self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED")
6064
end
6165

6266
self.craftingTime = 0
@@ -95,7 +99,14 @@ function SyndicatorBagCacheMixin:OnEvent(eventName, ...)
9599
self:QueueCaching()
96100

97101
elseif eventName == "PLAYERBANKSLOTS_CHANGED" then
98-
if self.bankOpen then
102+
if Syndicator.Constants.CharacterBankTabsActive then
103+
if self.bankOpen or time() - self.craftingTime < craftingItemUpdateDelay then
104+
local tab = ...
105+
if tab then
106+
self.pending.bank[Syndicator.Constants.AllBankIndexes[tab]] = true
107+
end
108+
end
109+
elseif self.bankOpen then
99110
self.pending.bank[Enum.BagIndex.Bank] = true
100111
self:QueueCaching()
101112
end
@@ -123,19 +134,24 @@ function SyndicatorBagCacheMixin:OnEvent(eventName, ...)
123134

124135
elseif eventName == "BANK_TAB_SETTINGS_UPDATED" then
125136
if self.bankOpen then
126-
self:ScanWarbandSlots()
137+
self:ScanBankTabs()
127138
self:QueueCaching()
128139
end
129140

130141
-- Guessing that these events may be fired when a new warband tab is purchased
131-
elseif eventName == "BANK_TABS_CHANGED" or eventName == "PLAYER_ACCOUNT_BANK_TAB_SLOTS_CHANGED" then
142+
elseif eventName == "BANK_TABS_CHANGED" then
143+
if self.bankOpen then
144+
self:ScanBankTabs()
145+
self:QueueCaching()
146+
end
147+
148+
elseif eventName == "PLAYER_ACCOUNT_BANK_TAB_SLOTS_CHANGED" then
132149
if (self.bankOpen or time() - self.craftingTime < craftingItemUpdateDelay) and C_PlayerInfo.HasAccountInventoryLock() then
133-
self:ScanWarbandSlots()
134150
local tab = ...
135151
if tab then
136152
self.pending.warband[Syndicator.Constants.AllWarbandIndexes[tab]] = true
153+
self:QueueCaching()
137154
end
138-
self:QueueCaching()
139155
end
140156

141157
elseif eventName == "BANKFRAME_OPENED" then
@@ -149,7 +165,7 @@ function SyndicatorBagCacheMixin:OnEvent(eventName, ...)
149165
end
150166
end
151167
self:ScanContainerBagSlots()
152-
self:ScanWarbandSlots()
168+
self:ScanBankTabs()
153169
self:QueueCaching()
154170

155171
elseif eventName == "BANKFRAME_CLOSED" then
@@ -192,7 +208,7 @@ function SyndicatorBagCacheMixin:UpdateContainerSlots()
192208
end
193209
end
194210

195-
if self.bankOpen then
211+
if self.bankOpen and not Syndicator.Constants.CharacterBankTabsActive then
196212
local bank = SYNDICATOR_DATA.Characters[self.currentCharacter].bank
197213
for index, bagID in ipairs(Syndicator.Constants.AllBankIndexes) do
198214
local numSlots = C_Container.GetContainerNumSlots(bagID)
@@ -206,8 +222,24 @@ function SyndicatorBagCacheMixin:UpdateContainerSlots()
206222
self:QueueCaching()
207223
end
208224

209-
function SyndicatorBagCacheMixin:ScanWarbandSlots()
210-
if C_Bank == nil or C_Bank.FetchPurchasedBankTabData == nil or not C_PlayerInfo.HasAccountInventoryLock() then
225+
function SyndicatorBagCacheMixin:ScanBankTabs()
226+
if C_Bank == nil or C_Bank.FetchPurchasedBankTabData == nil then
227+
return
228+
end
229+
230+
local allTabs = C_Bank.FetchPurchasedBankTabData(Enum.BankType.Character)
231+
local bank = SYNDICATOR_DATA.Characters[self.currentCharacter].bankTabs
232+
233+
for index, tabDetails in ipairs(allTabs) do
234+
if not bank[index] then
235+
bank[index] = { slots = {}, iconTexture = QUESTION_MARK_ICON, name = "", depositFlags = 0 }
236+
end
237+
bank[index].iconTexture = tabDetails.icon
238+
bank[index].name = tabDetails.name
239+
bank[index].depositFlags = tabDetails.depositFlags
240+
end
241+
242+
if not C_PlayerInfo.HasAccountInventoryLock() then
211243
return
212244
end
213245

@@ -264,7 +296,7 @@ function SyndicatorBagCacheMixin:ScanContainerBagSlots()
264296
self.pending.containerBags.bags = true
265297
end
266298

267-
if self.bankOpen then
299+
if self.bankOpen and not Syndicator.Constants.CharacterBankTabsActive then
268300
containerInfo.bank = {}
269301
for index = 1, Syndicator.Constants.BankBagSlotsCount do
270302
local inventorySlot = BankButtonIDToInvSlotID(index, 1)
@@ -371,26 +403,42 @@ function SyndicatorBagCacheMixin:OnUpdate()
371403
end
372404
end
373405

374-
local bank = SYNDICATOR_DATA.Characters[self.currentCharacter].bank
375406

376-
if self.bankOpen then
407+
if not Syndicator.Constants.CharacterBankTabsActive then
408+
if self.bankOpen then
409+
local bank = SYNDICATOR_DATA.Characters[self.currentCharacter].bank
410+
for bagID in pairs(self.pending.bank) do
411+
local bagIndex = bankBags[bagID]
412+
bank[bagIndex] = {}
413+
local bagData = bank[bagIndex]
414+
if bagID ~= Enum.BagIndex.Reagentbank or IsReagentBankUnlocked() then
415+
for slotID = 1, C_Container.GetContainerNumSlots(bagID) do
416+
DoSlot(bagID, slotID, bagData)
417+
end
418+
end
419+
end
420+
elseif self.pending.bank[Enum.BagIndex.Reagentbank] and bank[bankBags[Enum.BagIndex.Reagentbank]] and IsReagentBankUnlocked() then
421+
local bank = SYNDICATOR_DATA.Characters[self.currentCharacter].bank
422+
local reagentBankData = bank[bankBags[Enum.BagIndex.Reagentbank]]
423+
for slotID in pairs(self.pending.reagentBankSlots) do
424+
if #reagentBankData >= slotID then
425+
DoSlot(Enum.BagIndex.Reagentbank, slotID, reagentBankData)
426+
end
427+
end
428+
end
429+
else
430+
local bankTabs = SYNDICATOR_DATA.Characters[self.currentCharacter].bankTabs
377431
for bagID in pairs(self.pending.bank) do
378432
local bagIndex = bankBags[bagID]
379-
bank[bagIndex] = {}
380-
local bagData = bank[bagIndex]
381-
if bagID ~= Enum.BagIndex.Reagentbank or IsReagentBankUnlocked() then
433+
if bankTabs[bagIndex] then
434+
bankTabs[bagIndex].slots = {}
435+
local bagData = bankTabs[bagIndex].slots
382436
for slotID = 1, C_Container.GetContainerNumSlots(bagID) do
383437
DoSlot(bagID, slotID, bagData)
384438
end
385439
end
386440
end
387-
elseif self.pending.bank[Enum.BagIndex.Reagentbank] and bank[bankBags[Enum.BagIndex.Reagentbank]] and IsReagentBankUnlocked() then
388-
local reagentBankData = bank[bankBags[Enum.BagIndex.Reagentbank]]
389-
for slotID in pairs(self.pending.reagentBankSlots) do
390-
if #reagentBankData >= slotID then
391-
DoSlot(Enum.BagIndex.Reagentbank, slotID, reagentBankData)
392-
end
393-
end
441+
SYNDICATOR_DATA.Characters[self.currentCharacter].bank = {}
394442
end
395443

396444
local warband = SYNDICATOR_DATA.Warband[1]

Tracking/Main.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ local function InitCurrentCharacter()
8686
characterData.mail = characterData.mail or {}
8787
characterData.equipped = characterData.equipped or {}
8888
characterData.containerInfo = characterData.containerInfo or {}
89+
characterData.bankTabs = characterData.bankTabs or {}
8990
characterData.currencies = characterData.currencies or {}
9091
characterData.currencyByHeader = characterData.currencyByHeader or {}
9192
characterData.void = characterData.void or {}

0 commit comments

Comments
 (0)