initial commit
This commit is contained in:
105
Core/Service/Banking/Mailing.lua
Normal file
105
Core/Service/Banking/Mailing.lua
Normal file
@@ -0,0 +1,105 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- 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
|
||||
Reference in New Issue
Block a user