101 lines
2.3 KiB
Lua
101 lines
2.3 KiB
Lua
-- Guda Bank Scanner
|
|
-- Scans and stores bank contents
|
|
|
|
local addon = Guda
|
|
|
|
local BankScanner = {}
|
|
addon.Modules.BankScanner = BankScanner
|
|
|
|
local bankOpen = false
|
|
|
|
-- Scan all bank bags and return data
|
|
function BankScanner:ScanBank()
|
|
if not bankOpen then
|
|
addon:Debug("Cannot scan bank - not open")
|
|
return {}
|
|
end
|
|
|
|
local bankData = {}
|
|
|
|
for _, bagID in ipairs(addon.Constants.BANK_BAGS) do
|
|
bankData[bagID] = self:ScanBankBag(bagID)
|
|
end
|
|
|
|
return bankData
|
|
end
|
|
|
|
-- Scan a single bank bag
|
|
function BankScanner:ScanBankBag(bagID)
|
|
-- Determine bag type
|
|
local bagType = "regular"
|
|
if addon.Modules.Utils:IsSoulBag(bagID) then
|
|
bagType = "soul"
|
|
elseif addon.Modules.Utils:IsAmmoQuiverBag(bagID) then
|
|
bagType = "ammo"
|
|
end
|
|
|
|
local bag = {
|
|
slots = {},
|
|
numSlots = addon.Modules.Utils:GetBagSlotCount(bagID),
|
|
freeSlots = 0,
|
|
bagType = bagType,
|
|
}
|
|
|
|
if not addon.Modules.Utils:IsBagValid(bagID) then
|
|
return bag
|
|
end
|
|
|
|
for slot = 1, bag.numSlots do
|
|
local itemData = addon.Modules.BagScanner:ScanSlot(bagID, slot)
|
|
bag.slots[slot] = itemData
|
|
|
|
if not itemData then
|
|
bag.freeSlots = bag.freeSlots + 1
|
|
end
|
|
end
|
|
|
|
return bag
|
|
end
|
|
|
|
-- Save current bank to database
|
|
function BankScanner:SaveToDatabase()
|
|
if not bankOpen then
|
|
return
|
|
end
|
|
|
|
local bankData = self:ScanBank()
|
|
addon.Modules.DB:SaveBank(bankData)
|
|
addon:Debug("Bank data saved")
|
|
end
|
|
|
|
-- Initialize bank scanner
|
|
function BankScanner:Initialize()
|
|
-- Bank opened - save bank data
|
|
addon.Modules.Events:OnBankOpen(function()
|
|
bankOpen = true
|
|
addon:Debug("Bank opened")
|
|
|
|
-- Delay scan to ensure bank is fully loaded
|
|
local frame = CreateFrame("Frame")
|
|
local elapsed = 0
|
|
frame:SetScript("OnUpdate", function()
|
|
elapsed = elapsed + arg1
|
|
if elapsed >= 0.5 then
|
|
frame:SetScript("OnUpdate", nil)
|
|
BankScanner:SaveToDatabase()
|
|
end
|
|
end)
|
|
end, "BankScanner")
|
|
|
|
-- Bank closed
|
|
addon.Modules.Events:OnBankClose(function()
|
|
bankOpen = false
|
|
addon:Debug("Bank closed")
|
|
end, "BankScanner")
|
|
end
|
|
|
|
-- Check if bank is currently open
|
|
function BankScanner:IsBankOpen()
|
|
return bankOpen
|
|
end
|