TradeSkillMaster/Core/Service/Banking/Mailing.lua

106 lines
3.9 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local _, TSM = ...
local Mailing = TSM.Banking:NewPackage("Mailing")
local TempTable = TSM.Include("Util.TempTable")
local Inventory = TSM.Include("Service.Inventory")
local PlayerInfo = TSM.Include("Service.PlayerInfo")
local private = {}
-- ============================================================================
-- Module Functions
-- ============================================================================
function Mailing.MoveGroupsToBank(callback, groups)
local items = TempTable.Acquire()
TSM.Banking.Util.PopulateGroupItemsFromBags(items, groups, private.GroupsGetNumToMoveToBank)
TSM.Banking.MoveToBank(items, callback)
TempTable.Release(items)
end
function Mailing.NongroupToBank(callback)
local items = TempTable.Acquire()
TSM.Banking.Util.PopulateItemsFromBags(items, private.NongroupGetNumToBank)
TSM.Banking.MoveToBank(items, callback)
TempTable.Release(items)
end
function Mailing.TargetShortfallToBags(callback, groups)
local items = TempTable.Acquire()
TSM.Banking.Util.PopulateGroupItemsFromOpenBank(items, groups, private.TargetShortfallGetNumToBags)
TSM.Banking.MoveToBag(items, callback)
TempTable.Release(items)
end
-- ============================================================================
-- Private Helper Functions
-- ============================================================================
function private.GroupsGetNumToMoveToBank(itemString, numHave)
-- move everything
return numHave
end
function private.NongroupGetNumToBank(itemString, numHave)
local hasOperations = false
for _ in TSM.Operations.GroupOperationIterator("Mailing", TSM.Groups.GetPathByItem(itemString)) do
hasOperations = true
end
return not hasOperations and numHave or 0
end
function private.TargetShortfallGetNumToBags(itemString, numHave)
local totalNumToSend = 0
for _, _, operationSettings in TSM.Operations.GroupOperationIterator("Mailing", TSM.Groups.GetPathByItem(itemString)) do
local numAvailable = numHave - operationSettings.keepQty
local numToSend = 0
if numAvailable > 0 then
if operationSettings.maxQtyEnabled then
if operationSettings.restock then
local targetQty = private.GetTargetQuantity(operationSettings.target, itemString, operationSettings.restockSources)
if PlayerInfo.IsPlayer(operationSettings.target) and targetQty <= operationSettings.maxQty then
numToSend = numAvailable
else
numToSend = min(numAvailable, operationSettings.maxQty - targetQty)
end
if PlayerInfo.IsPlayer(operationSettings.target) then
-- if using restock and target == player ensure that subsequent operations don't take reserved bag inventory
numHave = numHave - max((numAvailable - (targetQty - operationSettings.maxQty)), 0)
end
else
numToSend = min(numAvailable, operationSettings.maxQty)
end
else
numToSend = numAvailable
end
end
totalNumToSend = totalNumToSend + numToSend
numHave = numHave - numToSend
end
return totalNumToSend
end
function private.GetTargetQuantity(player, itemString, sources)
if player then
player = strtrim(strmatch(player, "^[^-]+"))
end
local num = Inventory.GetBagQuantity(itemString, player) + Inventory.GetMailQuantity(itemString, player) + Inventory.GetAuctionQuantity(itemString, player)
if sources then
if sources.guild then
num = num + Inventory.GetGuildQuantity(itemString, PlayerInfo.GetPlayerGuild(player))
end
if sources.bank then
num = num + Inventory.GetBankQuantity(itemString, player) + Inventory.GetReagentBankQuantity(itemString, player)
end
end
return num
end