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