150 lines
5.9 KiB
Lua
150 lines
5.9 KiB
Lua
-- ------------------------------------------------------------------------------ --
|
|
-- TradeSkillMaster --
|
|
-- https://tradeskillmaster.com --
|
|
-- All Rights Reserved - Detailed license information included with addon. --
|
|
-- ------------------------------------------------------------------------------ --
|
|
|
|
local _, TSM = ...
|
|
local Inventory = TSM.Init("Service.Inventory")
|
|
local ItemString = TSM.Include("Util.ItemString")
|
|
local Settings = TSM.Include("Service.Settings")
|
|
local CustomPrice = TSM.Include("Service.CustomPrice")
|
|
local BagTracking = TSM.Include("Service.BagTracking")
|
|
local AuctionTracking = TSM.Include("Service.AuctionTracking")
|
|
local MailTracking = TSM.Include("Service.MailTracking")
|
|
local Sync = TSM.Include("Service.Sync")
|
|
local private = {
|
|
settings = nil,
|
|
callbacks = {},
|
|
}
|
|
local PLAYER_NAME = UnitName("player")
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Module Loading
|
|
-- ============================================================================
|
|
|
|
Inventory:OnSettingsLoad(function()
|
|
private.settings = Settings.NewView()
|
|
:AddKey("factionrealm", "internalData", "pendingMail")
|
|
:AddKey("factionrealm", "coreOptions", "ignoreGuilds")
|
|
:AddKey("factionrealm", "internalData", "guildVaults")
|
|
BagTracking.RegisterCallback(private.QuantityChangedCallback)
|
|
AuctionTracking.RegisterCallback(private.QuantityChangedCallback)
|
|
MailTracking.RegisterCallback(private.QuantityChangedCallback)
|
|
Sync.RegisterMirrorCallback(private.QuantityChangedCallback)
|
|
end)
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Module Functions
|
|
-- ============================================================================
|
|
|
|
function Inventory.RegisterCallback(callback)
|
|
tinsert(private.callbacks, callback)
|
|
end
|
|
|
|
function Inventory.GetBagQuantity(itemString, character, factionrealm)
|
|
return private.InventoryQuantityHelper(itemString, "bagQuantity", character, factionrealm)
|
|
end
|
|
|
|
function Inventory.GetBankQuantity(itemString, character, factionrealm)
|
|
return private.InventoryQuantityHelper(itemString, "bankQuantity", character, factionrealm)
|
|
end
|
|
|
|
function Inventory.GetReagentBankQuantity(itemString, character, factionrealm)
|
|
return private.InventoryQuantityHelper(itemString, "reagentBankQuantity", character, factionrealm)
|
|
end
|
|
|
|
function Inventory.GetAuctionQuantity(itemString, character, factionrealm)
|
|
return private.InventoryQuantityHelper(itemString, "auctionQuantity", character, factionrealm)
|
|
end
|
|
|
|
function Inventory.GetMailQuantity(itemString, character, factionrealm)
|
|
itemString = ItemString.GetBaseFast(itemString)
|
|
character = character or PLAYER_NAME
|
|
local pendingQuantity = itemString and private.settings.pendingMail[character] and private.settings.pendingMail[character][itemString] or 0
|
|
return private.InventoryQuantityHelper(itemString, "mailQuantity", character, factionrealm) + pendingQuantity
|
|
end
|
|
|
|
function Inventory.GetGuildQuantity(itemString, guild)
|
|
itemString = ItemString.GetBase(itemString)
|
|
if not itemString then
|
|
return 0
|
|
end
|
|
guild = guild or (IsInGuild() and GetGuildInfo("player") or nil)
|
|
if not guild or private.settings.ignoreGuilds[guild] then
|
|
return 0
|
|
end
|
|
return private.settings.guildVaults[guild] and private.settings.guildVaults[guild][itemString] or 0
|
|
end
|
|
|
|
function Inventory.GetPlayerTotals(itemString)
|
|
itemString = ItemString.GetBaseFast(itemString)
|
|
local numPlayer, numAlts, numAuctions, numAltAuctions = 0, 0, 0, 0
|
|
numPlayer = numPlayer + Inventory.GetBagQuantity(itemString)
|
|
numPlayer = numPlayer + Inventory.GetBankQuantity(itemString)
|
|
numPlayer = numPlayer + Inventory.GetReagentBankQuantity(itemString)
|
|
numPlayer = numPlayer + Inventory.GetMailQuantity(itemString)
|
|
numAuctions = numAuctions + Inventory.GetAuctionQuantity(itemString)
|
|
for _, factionrealm, character in Settings.ConnectedFactionrealmAltCharacterIterator() do
|
|
numAlts = numAlts + Inventory.GetBagQuantity(itemString, character, factionrealm)
|
|
numAlts = numAlts + Inventory.GetBankQuantity(itemString, character, factionrealm)
|
|
numAlts = numAlts + Inventory.GetReagentBankQuantity(itemString, character, factionrealm)
|
|
numAlts = numAlts + Inventory.GetMailQuantity(itemString, character, factionrealm)
|
|
local auctionQuantity = Inventory.GetAuctionQuantity(itemString, character, factionrealm)
|
|
numAltAuctions = numAltAuctions + auctionQuantity
|
|
numAuctions = numAuctions + auctionQuantity
|
|
end
|
|
return numPlayer, numAlts, numAuctions, numAltAuctions
|
|
end
|
|
|
|
function Inventory.GetGuildTotal(itemString)
|
|
itemString = ItemString.GetBaseFast(itemString)
|
|
if not itemString then
|
|
return 0
|
|
end
|
|
local numGuild = 0
|
|
for guild, data in pairs(private.settings.guildVaults) do
|
|
if not private.settings.ignoreGuilds[guild] then
|
|
numGuild = numGuild + (data[itemString] or 0)
|
|
end
|
|
end
|
|
return numGuild
|
|
end
|
|
|
|
function Inventory.GetTotalQuantity(itemString)
|
|
local numPlayer, numAlts, numAuctions = Inventory.GetPlayerTotals(itemString)
|
|
local numGuild = Inventory.GetGuildTotal(itemString)
|
|
return numPlayer + numAlts + numAuctions + numGuild
|
|
end
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Private Helper Functions
|
|
-- ============================================================================
|
|
|
|
function private.GetCharacterInventoryData(settingKey, character, factionrealm)
|
|
local scopeKey = character and Settings.GetSyncScopeKeyByCharacter(character, factionrealm) or nil
|
|
return Settings.Get("sync", scopeKey, "internalData", settingKey)
|
|
end
|
|
|
|
function private.InventoryQuantityHelper(itemString, settingKey, character, factionrealm)
|
|
itemString = ItemString.GetBase(itemString)
|
|
if not itemString then
|
|
return 0
|
|
end
|
|
local tbl = private.GetCharacterInventoryData(settingKey, character, factionrealm)
|
|
return tbl and tbl[itemString] or 0
|
|
end
|
|
|
|
function private.QuantityChangedCallback()
|
|
CustomPrice.OnSourceChange("NumInventory")
|
|
for _, callback in ipairs(private.callbacks) do
|
|
callback()
|
|
end
|
|
end
|