106 lines
3.9 KiB
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
|