You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
7.0 KiB
253 lines
7.0 KiB
|
5 years ago
|
local WIT, core = ...
|
||
|
|
|
||
|
|
local TSMHelper = {}
|
||
|
|
|
||
|
|
core.TSMHelper = TSMHelper
|
||
|
|
|
||
|
|
local cache = { ItemValues = {}, ItemVendorBuyPrice = {}, ItemVendorSellPrice = {}, ItemDestroyingPrice = {}, ItemSellRates = {}, ItemNames = {} }
|
||
|
|
local version = nil
|
||
|
|
local priceSource = nil
|
||
|
|
|
||
|
|
local priceSources = {
|
||
|
|
'DBMinBuyout',
|
||
|
|
'DBMarket',
|
||
|
|
'DBHistorical',
|
||
|
|
'DBRegionMinBuyoutAvg',
|
||
|
|
'DBRegionMarketAvg',
|
||
|
|
'DBRegionHistorical',
|
||
|
|
'DBRegionSaleAvg'
|
||
|
|
}
|
||
|
|
|
||
|
|
TSMHelper.PetCageItemId = 82800
|
||
|
|
|
||
|
|
function TSMHelper.Initialize()
|
||
|
|
version = GetAddOnMetadata("TradeSkillMaster", "Version")
|
||
|
|
priceSource = WITDB.Settings.PricingSelect
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetItemPrice(item)
|
||
|
|
if not TSM_API then
|
||
|
|
error("TSM addon not found")
|
||
|
|
end
|
||
|
|
|
||
|
|
if not priceSource or priceSource ~= WITDB.Settings.PricingSelect then
|
||
|
|
if not WITDB.Settings.PricingSelect or not TSM_API.IsCustomPriceValid(WITDB.Settings.PricingSelect) then
|
||
|
|
error("Invalid price source")
|
||
|
|
end
|
||
|
|
|
||
|
|
priceSource = WITDB.Settings.PricingSelect
|
||
|
|
|
||
|
|
TSMHelper.ClearValueCache()
|
||
|
|
end
|
||
|
|
|
||
|
|
if cache.ItemValues[item] ~= nil then
|
||
|
|
return cache.ItemValues[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
local itemId = type(item) == "number" and "i:" .. item or item
|
||
|
|
local itemPriceSource = item > 152500 and WITDB.Settings.PricingSelect or WITDB.Settings.LegacyPricingSelect
|
||
|
|
|
||
|
|
cache.ItemValues[item] = TSM_API.GetCustomPriceValue(itemPriceSource, itemId)
|
||
|
|
|
||
|
|
if cache.ItemValues[item] == nil or cache.ItemValues[item] == 0 then
|
||
|
|
local isMoreGeneral = false
|
||
|
|
|
||
|
|
for _, alternativePriceSource in pairs(priceSources) do
|
||
|
|
if isMoreGeneral and (cache.ItemValues[item] == nil or cache.ItemValues[item] == 0) then
|
||
|
|
cache.ItemValues[item] = TSM_API.GetCustomPriceValue(alternativePriceSource, itemId)
|
||
|
|
end
|
||
|
|
|
||
|
|
if alternativePriceSource == itemPriceSource then
|
||
|
|
isMoreGeneral = true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return cache.ItemValues[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetItemVendorBuyPrice(item)
|
||
|
|
if not TSM_API then
|
||
|
|
error("TSM addon not found")
|
||
|
|
end
|
||
|
|
|
||
|
|
if cache.ItemVendorBuyPrice[item] ~= nil then
|
||
|
|
return cache.ItemVendorBuyPrice[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
local itemId = type(item) == "number" and "i:" .. item or item
|
||
|
|
|
||
|
|
cache.ItemVendorBuyPrice[item] = TSM_API.GetCustomPriceValue('vendorBuy', itemId)
|
||
|
|
|
||
|
|
return cache.ItemVendorBuyPrice[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetItemVendorSellPrice(item)
|
||
|
|
if not TSM_API then
|
||
|
|
error("TSM addon not found")
|
||
|
|
end
|
||
|
|
|
||
|
|
if cache.ItemVendorSellPrice[item] ~= nil then
|
||
|
|
return cache.ItemVendorSellPrice[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
local itemId = type(item) == "number" and "i:" .. item or item
|
||
|
|
|
||
|
|
cache.ItemVendorSellPrice[item] = TSM_API.GetCustomPriceValue('vendorSell', itemId)
|
||
|
|
|
||
|
|
return cache.ItemVendorSellPrice[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetItemDestroyingPrice(item)
|
||
|
|
if not TSM_API then
|
||
|
|
error("TSM addon not found")
|
||
|
|
end
|
||
|
|
|
||
|
|
if cache.ItemDestroyingPrice[item] ~= nil then
|
||
|
|
return cache.ItemDestroyingPrice[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
local itemId = type(item) == "number" and "i:" .. item or item
|
||
|
|
|
||
|
|
cache.ItemDestroyingPrice[item] = TSM_API.GetCustomPriceValue('Destroy', itemId)
|
||
|
|
|
||
|
|
return cache.ItemDestroyingPrice[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetItemSellRate(item)
|
||
|
|
if not TSM_API then
|
||
|
|
error("TSM addon not found")
|
||
|
|
end
|
||
|
|
|
||
|
|
if cache.ItemSellRates[item] ~= nil then
|
||
|
|
return cache.ItemSellRates[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
local itemId = type(item) == "number" and "i:" .. item or item
|
||
|
|
|
||
|
|
cache.ItemSellRates[item] = TSM_API.GetCustomPriceValue('DBregionsaleRate*1000', itemId) or 0
|
||
|
|
|
||
|
|
return cache.ItemSellRates[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetItemSoldPerDay(item)
|
||
|
|
if not TSM_API then
|
||
|
|
error("TSM addon not found")
|
||
|
|
end
|
||
|
|
|
||
|
|
if cache.ItemSellRates[item] ~= nil then
|
||
|
|
return cache.ItemSellRates[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
local itemId = type(item) == "number" and "i:" .. item or item
|
||
|
|
|
||
|
|
cache.ItemSellRates[item] = TSM_API.GetCustomPriceValue('DBRegionSoldPerDay', itemId)
|
||
|
|
|
||
|
|
return cache.ItemSellRates[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetItemLink(item)
|
||
|
|
if not TSM_API then
|
||
|
|
error("TSM addon not found")
|
||
|
|
end
|
||
|
|
|
||
|
|
local id = type(item) == "number" and "i:" .. item or item
|
||
|
|
|
||
|
|
return TSM_API.GetItemLink(id)
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetItemName(item)
|
||
|
|
if not TSM_API then
|
||
|
|
error("TSM addon not found")
|
||
|
|
end
|
||
|
|
|
||
|
|
if cache.ItemNames[item] ~= nil then
|
||
|
|
return cache.ItemNames[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
local id = type(item) == "number" and "i:" .. item or item
|
||
|
|
|
||
|
|
cache.ItemNames[item] = TSM_API.GetItemName(id)
|
||
|
|
|
||
|
|
return cache.ItemNames[item]
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.ToMoneyString(value)
|
||
|
|
if not TSM_API then
|
||
|
|
error("TSM addon not found")
|
||
|
|
end
|
||
|
|
|
||
|
|
return value ~= nil and TSM_API.FormatMoneyString(value) or ''
|
||
|
|
end
|
||
|
|
|
||
|
|
local function GetItemBelowTresholdValue()
|
||
|
|
local price = core.TSMHelper.GetItemVendorSellPrice(id)
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetInventoryValue()
|
||
|
|
local sum = 0
|
||
|
|
local isValidData = true
|
||
|
|
|
||
|
|
for bag = 0, 4 do
|
||
|
|
local slots=GetContainerNumSlots(bag)
|
||
|
|
|
||
|
|
for slot=1,slots do
|
||
|
|
local _,c,_,q,_,_,link,_,_,id = GetContainerItemInfo(bag,slot)
|
||
|
|
|
||
|
|
if c and id then
|
||
|
|
local _, _, _, _, _, _, _, _, _, _, itemSellPrice = GetItemInfo(link)
|
||
|
|
local isBound = C_Item.IsBound(ItemLocation:CreateFromBagAndSlot(bag, slot))
|
||
|
|
local price = nil
|
||
|
|
|
||
|
|
if isBound or (Scrap and Scrap:IsJunk(id)) or (q ~= nil and q or -1) < core.Config.GetBagValueMinQuality() or (core.TSMHelper.GetItemPrice(id) or 0) < core.Config.GetBagValueMinPrice() * 10000 then
|
||
|
|
local belowTresholdValue = core.Config.GetBelowTresholdValue()
|
||
|
|
if belowTresholdValue == 1 then
|
||
|
|
price = itemSellPrice or 0
|
||
|
|
elseif belowTresholdValue == 2 then
|
||
|
|
price = core.TSMHelper.GetItemDestroyingPrice(id) or itemSellPrice or 0
|
||
|
|
else
|
||
|
|
price = 0
|
||
|
|
end
|
||
|
|
else
|
||
|
|
price = core.TSMHelper.GetItemPrice(id)
|
||
|
|
end
|
||
|
|
|
||
|
|
if price ~= nil then
|
||
|
|
sum = sum + price * c;
|
||
|
|
elseif not isBound then
|
||
|
|
core.GetString("NoPriceForItem"):format(link)
|
||
|
|
end
|
||
|
|
elseif GetContainerItemID(bag,slot) then
|
||
|
|
isValidData = false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if isValidData then
|
||
|
|
return sum
|
||
|
|
else
|
||
|
|
return nil
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.GetPriceSources()
|
||
|
|
return priceSources
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.DefaultPriceSource()
|
||
|
|
return priceSources[2]
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.IsTSMAPIAvailable()
|
||
|
|
return TSM_API ~= nil
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.IsTSMDBAvailable()
|
||
|
|
-- checks if historical price for copper ore or current content ore is available
|
||
|
|
return (TSM_API.GetCustomPriceValue('DBHistorical', "i:2770") or TSM_API.GetCustomPriceValue('DBHistorical', "i:152512")) ~= nil
|
||
|
|
end
|
||
|
|
|
||
|
|
function TSMHelper.ClearValueCache()
|
||
|
|
cache.ItemValues = {}
|
||
|
|
cache.ItemSellRates = {}
|
||
|
|
end
|