initial commit
This commit is contained in:
132
Core/Service/Operations/Shopping.lua
Normal file
132
Core/Service/Operations/Shopping.lua
Normal file
@@ -0,0 +1,132 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster --
|
||||
-- https://tradeskillmaster.com --
|
||||
-- All Rights Reserved - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
local _, TSM = ...
|
||||
local Shopping = TSM.Operations:NewPackage("Shopping")
|
||||
local private = {}
|
||||
local L = TSM.Include("Locale").GetTable()
|
||||
local CustomPrice = TSM.Include("Service.CustomPrice")
|
||||
local Inventory = TSM.Include("Service.Inventory")
|
||||
local OPERATION_INFO = {
|
||||
restockQuantity = { type = "string", default = "0" },
|
||||
maxPrice = { type = "string", default = "dbmarket" },
|
||||
showAboveMaxPrice = { type = "boolean", default = true },
|
||||
restockSources = { type = "table", default = { alts = false, auctions = false, bank = false, guild = false } },
|
||||
}
|
||||
local MIN_RESTOCK_VALUE = 0
|
||||
local MAX_RESTOCK_VALUE = 50000
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Module Functions
|
||||
-- ============================================================================
|
||||
|
||||
function Shopping.OnInitialize()
|
||||
TSM.Operations.Register("Shopping", L["Shopping"], OPERATION_INFO, 1, private.GetOperationInfo)
|
||||
end
|
||||
|
||||
function Shopping.GetRestockRange()
|
||||
return MIN_RESTOCK_VALUE, MAX_RESTOCK_VALUE
|
||||
end
|
||||
|
||||
function Shopping.GetMaxPrice(itemString)
|
||||
local operationSettings = private.GetOperationSettings(itemString)
|
||||
if not operationSettings then
|
||||
return
|
||||
end
|
||||
return CustomPrice.GetValue(operationSettings.maxPrice, itemString)
|
||||
end
|
||||
|
||||
function Shopping.ShouldShowAboveMaxPrice(itemString)
|
||||
local operationSettings = private.GetOperationSettings(itemString)
|
||||
if not operationSettings then
|
||||
return
|
||||
end
|
||||
return operationSettings.showAboveMaxPrice
|
||||
end
|
||||
|
||||
function Shopping.IsFiltered(itemString, itemBuyout)
|
||||
local operationSettings = private.GetOperationSettings(itemString)
|
||||
if not operationSettings then
|
||||
return true
|
||||
end
|
||||
if operationSettings.showAboveMaxPrice then
|
||||
return false
|
||||
end
|
||||
local maxPrice = CustomPrice.GetValue(operationSettings.maxPrice, itemString)
|
||||
if itemBuyout > (maxPrice or 0) then
|
||||
return true, true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Shopping.ValidAndGetRestockQuantity(itemString)
|
||||
local operationSettings = private.GetOperationSettings(itemString)
|
||||
if not operationSettings then
|
||||
return false, nil
|
||||
end
|
||||
local isValid, err = CustomPrice.Validate(operationSettings.maxPrice)
|
||||
if not isValid then
|
||||
return false, err
|
||||
end
|
||||
local maxQuantity, restockQuantity = nil, nil
|
||||
restockQuantity, err = CustomPrice.GetValue(operationSettings.restockQuantity, itemString, true)
|
||||
if not restockQuantity then
|
||||
return false, err
|
||||
elseif restockQuantity < MIN_RESTOCK_VALUE or restockQuantity > MAX_RESTOCK_VALUE then
|
||||
return false, format(L["Your restock quantity is invalid. It must be between %d and %s."], MIN_RESTOCK_VALUE, MAX_RESTOCK_VALUE)
|
||||
end
|
||||
if restockQuantity > 0 then
|
||||
-- include mail and bags
|
||||
local numHave = Inventory.GetBagQuantity(itemString) + Inventory.GetMailQuantity(itemString)
|
||||
if operationSettings.restockSources.bank then
|
||||
numHave = numHave + Inventory.GetBankQuantity(itemString) + Inventory.GetReagentBankQuantity(itemString)
|
||||
end
|
||||
if operationSettings.restockSources.guild then
|
||||
numHave = numHave + Inventory.GetGuildQuantity(itemString)
|
||||
end
|
||||
local _, numAlts, numAuctions = Inventory.GetPlayerTotals(itemString)
|
||||
if operationSettings.restockSources.alts then
|
||||
numHave = numHave + numAlts
|
||||
end
|
||||
if operationSettings.restockSources.auctions then
|
||||
numHave = numHave + numAuctions
|
||||
end
|
||||
if numHave >= restockQuantity then
|
||||
return false, nil
|
||||
end
|
||||
maxQuantity = restockQuantity - numHave
|
||||
end
|
||||
if not operationSettings.showAboveMaxPrice and not CustomPrice.GetValue(operationSettings.maxPrice, itemString) then
|
||||
-- we're not showing auctions above the max price and the max price isn't valid for this item, so skip it
|
||||
return false, nil
|
||||
end
|
||||
return true, maxQuantity
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Private Helper Functions
|
||||
-- ============================================================================
|
||||
|
||||
function private.GetOperationInfo(operationSettings)
|
||||
if operationSettings.showAboveMaxPrice then
|
||||
return format(L["Shopping for auctions including those above the max price."])
|
||||
else
|
||||
return format(L["Shopping for auctions with a max price set."])
|
||||
end
|
||||
end
|
||||
|
||||
function private.GetOperationSettings(itemString)
|
||||
itemString = TSM.Groups.TranslateItemString(itemString)
|
||||
local operationName, operationSettings = TSM.Operations.GetFirstOperationByItem("Shopping", itemString)
|
||||
if not operationName then
|
||||
return
|
||||
end
|
||||
return operationSettings
|
||||
end
|
||||
Reference in New Issue
Block a user