124 lines
4.9 KiB
Lua
124 lines
4.9 KiB
Lua
|
-- ------------------------------------------------------------------------------ --
|
||
|
-- TradeSkillMaster --
|
||
|
-- https://tradeskillmaster.com --
|
||
|
-- All Rights Reserved - Detailed license information included with addon. --
|
||
|
-- ------------------------------------------------------------------------------ --
|
||
|
|
||
|
local _, TSM = ...
|
||
|
local Auctioning = TSM.Banking:NewPackage("Auctioning")
|
||
|
local TempTable = TSM.Include("Util.TempTable")
|
||
|
local BagTracking = TSM.Include("Service.BagTracking")
|
||
|
local Inventory = TSM.Include("Service.Inventory")
|
||
|
local private = {}
|
||
|
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
-- Module Functions
|
||
|
-- ============================================================================
|
||
|
|
||
|
function Auctioning.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 Auctioning.PostCapToBags(callback, groups)
|
||
|
local items = TempTable.Acquire()
|
||
|
TSM.Banking.Util.PopulateGroupItemsFromOpenBank(items, groups, private.GetNumToMoveToBags)
|
||
|
TSM.Banking.MoveToBag(items, callback)
|
||
|
TempTable.Release(items)
|
||
|
end
|
||
|
|
||
|
function Auctioning.ShortfallToBags(callback, groups)
|
||
|
local items = TempTable.Acquire()
|
||
|
TSM.Banking.Util.PopulateGroupItemsFromOpenBank(items, groups, private.GetNumToMoveToBags, true)
|
||
|
TSM.Banking.MoveToBag(items, callback)
|
||
|
TempTable.Release(items)
|
||
|
end
|
||
|
|
||
|
function Auctioning.MaxExpiresToBank(callback, groups)
|
||
|
local items = TempTable.Acquire()
|
||
|
TSM.Banking.Util.PopulateGroupItemsFromBags(items, groups, private.MaxExpiresGetNumToMoveToBank)
|
||
|
TSM.Banking.MoveToBank(items, callback)
|
||
|
TempTable.Release(items)
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
-- Private Helper Functions
|
||
|
-- ============================================================================
|
||
|
|
||
|
function private.GroupsGetNumToMoveToBank(itemString, numHave)
|
||
|
-- move everything
|
||
|
return numHave
|
||
|
end
|
||
|
|
||
|
function private.GetNumToMoveToBags(itemString, numHave, includeAH)
|
||
|
local totalNumToMove = 0
|
||
|
local numAvailable = numHave
|
||
|
local numInBags = BagTracking.CreateQueryBagsItem(itemString)
|
||
|
:VirtualField("autoBaseItemString", "string", TSM.Groups.TranslateItemString, "itemString")
|
||
|
:Equal("autoBaseItemString", itemString)
|
||
|
:SumAndRelease("quantity") or 0
|
||
|
if includeAH then
|
||
|
numInBags = numInBags + select(3, Inventory.GetPlayerTotals(itemString)) + Inventory.GetMailQuantity(itemString)
|
||
|
end
|
||
|
|
||
|
for _, _, operationSettings in TSM.Operations.GroupOperationIterator("Auctioning", TSM.Groups.GetPathByItem(itemString)) do
|
||
|
local maxExpires = TSM.Auctioning.Util.GetPrice("maxExpires", operationSettings, itemString)
|
||
|
local operationHasExpired = false
|
||
|
if maxExpires and maxExpires > 0 then
|
||
|
local numExpires = TSM.Accounting.Auctions.GetNumExpiresSinceSale(itemString)
|
||
|
if numExpires and numExpires > maxExpires then
|
||
|
operationHasExpired = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local postCap = TSM.Auctioning.Util.GetPrice("postCap", operationSettings, itemString)
|
||
|
local stackSize = (TSM.IsWowClassic() and TSM.Auctioning.Util.GetPrice("stackSize", operationSettings, itemString)) or (not TSM.IsWowClassic() and 1)
|
||
|
if not operationHasExpired and postCap and stackSize then
|
||
|
local numNeeded = stackSize * postCap
|
||
|
if numInBags > numNeeded then
|
||
|
-- we can satisfy this operation from the bags
|
||
|
numInBags = numInBags - numNeeded
|
||
|
numNeeded = 0
|
||
|
elseif numInBags > 0 then
|
||
|
-- we can partially satisfy this operation from the bags
|
||
|
numNeeded = numNeeded - numInBags
|
||
|
numInBags = 0
|
||
|
end
|
||
|
|
||
|
local numToMove = min(numAvailable, numNeeded)
|
||
|
if numToMove > 0 then
|
||
|
numAvailable = numAvailable - numToMove
|
||
|
totalNumToMove = totalNumToMove + numToMove
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return totalNumToMove
|
||
|
end
|
||
|
|
||
|
function private.MaxExpiresGetNumToMoveToBank(itemString, numHave)
|
||
|
local numToKeepInBags = 0
|
||
|
for _, _, operationSettings in TSM.Operations.GroupOperationIterator("Auctioning", TSM.Groups.GetPathByItem(itemString)) do
|
||
|
local maxExpires = TSM.Auctioning.Util.GetPrice("maxExpires", operationSettings, itemString)
|
||
|
local operationHasExpired = false
|
||
|
if maxExpires and maxExpires > 0 then
|
||
|
local numExpires = TSM.Accounting.Auctions.GetNumExpiresSinceSale(itemString)
|
||
|
if numExpires and numExpires > maxExpires then
|
||
|
operationHasExpired = true
|
||
|
end
|
||
|
end
|
||
|
local postCap = TSM.Auctioning.Util.GetPrice("postCap", operationSettings, itemString)
|
||
|
local stackSize = (TSM.IsWowClassic() and TSM.Auctioning.Util.GetPrice("stackSize", operationSettings, itemString)) or (not TSM.IsWowClassic() and 1)
|
||
|
if not operationHasExpired and postCap and stackSize then
|
||
|
numToKeepInBags = numToKeepInBags + stackSize * postCap
|
||
|
end
|
||
|
end
|
||
|
return max(numHave - numToKeepInBags, 0)
|
||
|
end
|