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.

158 lines
5.3 KiB

4 years ago
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Shopping --
-- http://www.curse.com/addons/wow/tradeskillmaster_shopping --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
TSM = LibStub("AceAddon-3.0"):NewAddon(TSM, "TSM_Shopping", "AceEvent-3.0", "AceConsole-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Shopping") -- loads the localization table
local AceGUI = LibStub("AceGUI-3.0")
local savedDBDefaults = {
global = {
optionsTreeStatus = {},
previousSearches = {},
treeGroupStatus = {},
favoriteSearches = {},
normalPostPrice = "150% dbmarket",
postBidPercent = 0.95,
quickPostingPrice = "100% dbmarket",
quickPostingDuration = 2,
quickPostingHideGrouped = true,
sidebarBtn = 1,
postUndercut = 1,
marketValueSource = "dbmarket",
destroyingTargetItems = {},
tooltip = true,
minDeSearchLvl = 1,
maxDeSearchLvl = 600,
maxDeSearchPercent = 1,
sniperVendorPrice = true,
sniperMaxPrice = true,
sniperCustomPrice = "0c",
},
}
function TSM:OnInitialize()
TSM.db = LibStub("AceDB-3.0"):New("AscensionTSM_ShoppingDB", savedDBDefaults)
4 years ago
for name, module in pairs(TSM.modules) do
TSM[name] = module
end
TSMAPI.AuctionControl.undercut = TSM.db.global.postUndercut
-- register with TSM
TSM:RegisterModule()
TSM.db.profile.dealfinding = nil
TSM.db.global.appInfo = nil
end
-- registers this module with TSM by first setting all fields and then calling TSMAPI:NewModule().
function TSM:RegisterModule()
TSM.operations = { maxOperations = 1, callbackOptions = "Options:Load", callbackInfo = "GetOperationInfo" }
TSM.auctionTab = { callbackShow = "Search:Show", callbackHide = "Search:Hide" }
TSM.tooltipOptions = { callback = "Options:LoadTooltipOptions" }
TSM.moduleAPIs = {
{ key = "runSearch", callback = "StartFilterSearch" },
{ key = "runDestroySearch", callback = "StartDestroySearch" },
{ key = "getSidebarPage", callback = "Sidebar:GetCurrentPage" },
{ key = "getSearchMode", callback = "Search:GetCurrentSearchMode" },
}
TSMAPI:NewModule(TSM)
end
TSM.operationDefaults = {
maxPrice = 1,
evenStacks = nil,
showAboveMaxPrice = nil,
ignorePlayer = {},
ignorerealm = {},
4 years ago
relationships = {},
}
function TSM:GetOperationInfo(operationName)
TSMAPI:UpdateOperation("Shopping", operationName)
local operation = TSM.operations[operationName]
if not operation then return end
if operation.showAboveMaxPrice and operation.evenStacks then
return format(L["Shopping for even stacks including those above the max price"])
elseif operation.showAboveMaxPrice then
return format(L["Shopping for auctions including those above the max price."])
elseif operation.evenStacks then
return format(L["Shopping for even stacks with a max price set."])
else
return format(L["Shopping for auctions with a max price set."])
end
end
function TSM:StartFilterSearch(searchQuery, callback)
if not TSMAPI:AHTabIsVisible("Shopping") then return end
TSM.Search:StartFilterSearch(searchQuery, nil, true)
TSM.moduleAPICallback = callback
end
function TSM:StartDestroySearch(searchQuery, callback)
if not TSMAPI:AHTabIsVisible("Shopping") then return end
local filters = TSM.Search:GetFilters(searchQuery)
if filters and #filters == 1 then
for itemString, name in pairs(TSM.db.global.destroyingTargetItems) do
if strlower(name) == strlower(filters.currentFilter) then
TSM.Destroying:StartDestroyingSearch(itemString, filters[1], true)
TSM.Search:SetSearchText(searchQuery)
TSM.moduleAPICallback = callback
return
end
end
end
end
function TSM:GetMaxPrice(operationPrice, itemString)
local price, err
if type(operationPrice) == "number" then
price = operationPrice
elseif type(operationPrice) == "string" then
local func, parseErr = TSMAPI:ParseCustomPrice(operationPrice)
err = parseErr
price = func and func(itemString)
end
return price ~= 0 and price or nil, err
end
function TSM:AddSidebarFeature(...)
TSM.modules.Sidebar:AddSidebarFeature(...)
end
function TSM:GetTooltip(itemString)
if not TSM.db.global.tooltip then return end
local text = {}
local moneyCoinsTooltip = TSMAPI:GetMoneyCoinsTooltip()
itemString = TSMAPI:GetBaseItemString(itemString, true)
local operations = TSMAPI:GetItemOperation(itemString, "Shopping")
if not operations then return end
local operationName = operations[1]
TSMAPI:UpdateOperation("Shopping", operationName)
local operation = TSM.operations[operationName]
if operation then
local maxPrice = TSM:GetMaxPrice(operation.maxPrice, itemString)
if maxPrice then
local priceText
if moneyCoinsTooltip then
priceText = (TSMAPI:FormatTextMoneyIcon(maxPrice, "|cffffffff", true) or "|cffffffff---|r")
else
priceText = (TSMAPI:FormatTextMoney(maxPrice, "|cffffffff", true) or "|cffffffff---|r")
end
tinsert(text, { left = " " .. L["Max Shopping Price:"], right = format("%s", priceText) })
end
end
if #text > 0 then
tinsert(text, 1, "|cffffff00" .. "TSM Shopping:")
return text
end
end