Files
Guda-ClassicAPI/Data/BagScanner.lua
T
2025-11-16 15:41:03 +04:00

85 lines
2.0 KiB
Lua

-- Guda Bag Scanner
-- Scans and stores bag contents
local addon = Guda
local BagScanner = {}
addon.Modules.BagScanner = BagScanner
-- Scan all bags and return data
function BagScanner:ScanBags()
local bagData = {}
for _, bagID in ipairs(addon.Constants.BAGS) do
bagData[bagID] = self:ScanBag(bagID)
end
return bagData
end
-- Scan a single bag
function BagScanner:ScanBag(bagID)
local bag = {
slots = {},
numSlots = addon.Modules.Utils:GetBagSlotCount(bagID),
freeSlots = 0,
}
if not addon.Modules.Utils:IsBagValid(bagID) then
return bag
end
for slot = 1, bag.numSlots do
local itemData = self:ScanSlot(bagID, slot)
bag.slots[slot] = itemData
if not itemData then
bag.freeSlots = bag.freeSlots + 1
end
end
return bag
end
-- Scan a single slot
function BagScanner:ScanSlot(bagID, slot)
local texture, itemCount, locked, quality, readable, lootable = GetContainerItemInfo(bagID, slot)
if not texture then
return nil
end
-- In 1.12.1, must use GetContainerItemLink separately!
local itemLink = GetContainerItemLink(bagID, slot)
-- Get item info
local name, link, itemQuality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, iconTexture
if itemLink then
name, link, itemQuality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, iconTexture = addon.Modules.Utils:GetItemInfo(itemLink)
end
return {
link = itemLink,
texture = texture,
count = itemCount or 1,
quality = quality or itemQuality or 0,
name = name,
iLevel = iLevel,
class = class,
subclass = subclass,
equipSlot = equipSlot,
locked = locked,
}
end
-- Save current bags to database
function BagScanner:SaveToDatabase()
local bagData = self:ScanBags()
addon.Modules.DB:SaveBags(bagData)
end
-- Initialize (no auto-save, only save when bags are opened)
function BagScanner:Initialize()
addon:Debug("Bag scanner initialized")
end