AuctioneerSuite/Auc-Advanced/Modules/Auc-Util-SimpleAuction/AucSimple.lua
2026-04-13 17:48:13 -04:00

289 lines
12 KiB
Lua

--[[
Auctioneer - Basic Auction Posting
Version: 5.9.4961 (WhackyWallaby)
Revision: $Id: AucSimple.lua 4840 2010-08-04 21:44:00Z Nechckn $
URL: http://auctioneeraddon.com/
This is an addon for World of Warcraft that adds a simple dialog for
easy posting of your auctionables when you are at the auction-house.
License:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program(see GPL.txt); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Note:
This AddOn's source code is specifically designed to work with
World of Warcraft's interpreted AddOn system.
You have an implicit license to use this AddOn with these facilities
since that is its designated purpose as per:
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
--]]
if not AucAdvanced then return end
local libType, libName = "Util", "SimpleAuction"
local lib,parent,private = AucAdvanced.NewModule(libType, libName)
if not lib then return end
local print,decode,_,_,replicate,empty,get,set,default,debugPrint,fill = AucAdvanced.GetModuleLocals()
local data, _
local ownResults = {}
local ownCounts = {}
function lib.Processor(callbackType, ...)
if (callbackType == "tooltip") then
lib.ProcessTooltip(...)
elseif (callbackType == "auctionui") then
private.CreateFrames(...)
elseif (callbackType == "config") then
private.SetupConfigGui(...)
elseif (callbackType == "configchanged") then
private.UpdateConfig(...)
elseif (callbackType == "inventory") then
elseif (callbackType == "scanstats") then
private.clearcache()
private.delayedUpdatePricing = true -- Note: calling private.UpdatePricing is unsafe inside "scanstats"
elseif (callbackType == "postresult") then
private.clearcache()
end
end
lib.Processors = {}
function lib.Processors.tooltip(callbackType, ...)
lib.ProcessTooltip(...)
end
function lib.Processors.auctionui(callbackType, ...)
private.CreateFrames(...)
end
function lib.Processors.config(callbackType, ...)
private.SetupConfigGui(...)
end
function lib.Processors.configchanged(callbackType, ...)
private.UpdateConfig(...)
end
function lib.Processors.scanstats(callbackType, ...)
private.clearcache()
private.delayedUpdatePricing = true -- Note: calling private.UpdatePricing is unsafe inside "scanstats"
end
function lib.Processors.postresult(callbackType, ...)
private.clearcache()
end
local function whitespace(length)
local spaces = ""
for index = length, 0, -1 do
spaces = spaces.." "
end
return spaces
end
function lib.ProcessTooltip(tooltip, name, link, quality, quantity, cost, additional)
if not get("util.simpleauc.tooltip") then return end
local realm = AucAdvanced.GetFaction()
local id = private.SigFromLink(link)
local settingstr = get("util.simpleauc."..realm.."."..id)
local market, seen, fixbuy, fixbid, stack
local imgseen, image, matchBid, matchBuy, lowBid, lowBuy, aSeen, aveBuy = private.GetItems(link)
local reason = "Market"
tooltip:SetColor(0.4, 1.0, 0.9)
market, seen = AucAdvanced.API.GetMarketValue(link)
if (not market) or (market <= 0) or (not (seen > 5 or aSeen < 3)) then
market = aveBuy
reason = "Current"
end
if (not market or market <= 0) and GetSellValue then
local vendor = GetSellValue(link)
if vendor and vendor > 0 then
market = vendor * 3
reason = "Vendor markup"
end
end
if not market or market <= 0 then
market = 0
reason = "No data"
end
local coinsBid, coinsBuy, coinsBidEa, coinsBuyEa = "no","no","no","no"
if market > 0 then
coinsBid = private.coins(market*0.8*quantity)
coinsBidEa = private.coins(market*0.8)
coinsBuy = private.coins(market*quantity)
coinsBuyEa = private.coins(market)
end
if quantity == 1 then
local text = string.format("%s: %s bid/%s buyout", libName, coinsBid, coinsBuy)
tooltip:AddLine(text)
else
local text = string.format("%s x%d: %s bid/%s buyout", libName, quantity, coinsBid, coinsBuy)
local textea = string.format("%s(Or individually: %s/%s)", whitespace(5), coinsBidEa, coinsBuyEa)
tooltip:AddLine(text)
tooltip:AddLine(textea, 0.3, 0.8, 0.7)
end
if settingstr then
fixbid, fixbuy, _, _, stack = strsplit(":", settingstr)
fixbid, fixbuy, stack = tonumber(fixbid), tonumber(fixbuy), tonumber(stack)
fixbid = ceil(fixbid/stack)
fixbuy = ceil(fixbuy/stack)
end
if fixbid then
coinsBuy = "no"
coinsBid = private.coins(fixbid*quantity)
if fixbuy then
coinsBuy = private.coins(fixbuy*quantity)
end
if quantity == 1 then
local text = string.format("%sFixed: %s bid/%s buyout", whitespace(12), coinsBid, coinsBuy)
tooltip:AddLine(text)
else
local text = string.format("%sFixed x%d: %s bid/%s buyout", whitespace(12), quantity, coinsBid, coinsBuy)
tooltip:AddLine(text)
end
end
if get("util.simpleauc.tooltip.undercut") then
if lowBid and lowBid > 0 then
coinsBuy = "no"
coinsBid = private.coins(lowBid*quantity)
if lowBuy and lowBuy > 0 then
coinsBuy = private.coins(lowBuy*quantity)
end
if quantity == 1 then
local text = string.format("%sUndercut: %s bid/%s buyout", whitespace(8), coinsBid, coinsBuy)
tooltip:AddLine(text)
else
local text = string.format("%sUndercut x%d: %s bid/%s buyout", whitespace(8), quantity, coinsBid, coinsBuy)
tooltip:AddLine(text)
end
else
tooltip:AddLine(" No Competition")
end
end
end
function lib.OnLoad()
--Default sizes for the scrollframe column widths
default("util.simpleauc.columnwidth.Seller", 89)
default("util.simpleauc.columnwidth.Left", 32)
default("util.simpleauc.columnwidth.Stk", 32 )
default("util.simpleauc.columnwidth.Min/ea", 65)
default("util.simpleauc.columnwidth.Cur/ea", 65)
default("util.simpleauc.columnwidth.Buy/ea", 65)
default("util.simpleauc.columnwidth.MinBid", 76)
default("util.simpleauc.columnwidth.CurBid", 76)
default("util.simpleauc.columnwidth.Buyout", 80)
default("util.simpleauc.columnwidth.BLANK", 0.05)
--Default options
default("util.simpleauc.clickhook", true)
default("util.simpleauc.clickhook.doubleclick", false)
default("util.simpleauc.scanbutton", true)
default("util.simpleauc.scanbutton.disable.wowecon", true)
default("util.simpleauc.tooltip", true)
default("util.simpleauc.tooltip.undercut", true)
default("util.simpleauc.auto.duration", 48)
default("util.simpleauc.auto.match", true)
default("util.simpleauc.auto.undercut", true)
default("util.simpleauc.undercut", "percent")
default("util.simpleauc.undercut.fixed", 1)
default("util.simpleauc.undercut.percent", 2.5)
default("util.simpleauc.displayauctiontab", true)
end
function private.UpdateConfig(setting, value)
if private.frame then
local frame = private.frame
local showing = false
if get("util.simpleauc.scanbutton") then
showing = true
if get("util.simpleauc.scanbutton.disable.wowecon") and IsAddOnLoaded("WOWEcon_PriceMod") then
showing = false
end
end
if showing then
frame.scanbutton:Show()
else
frame.scanbutton:Hide()
end
if setting == "util.simpleauc.displayauctiontab" then
if value then
AucAdvanced.AddTab(private.frame.tab, private.frame)
else
AucAdvanced.RemoveTab(private.frame.tab, private.frame)
end
end
end
end
function private.SetupConfigGui(gui)
local id = gui:AddTab(lib.libName, lib.libType.." Modules")
gui:MakeScrollable(id)
private.gui = gui
private.guiId = id
gui:AddHelp(id, "what simpleauc",
"What is SimpleAuction?",
"Simple Auction is a simplified, more automated way of posting items. It focuses it's emphasis on easy pricing and maximum sale speed with a minimum of configuration options and learning curve.\n"..
"It won't get you maximium profit, or ultimate configurability, but the values it provides are reasonable in most circumstances and it is primarily very easy to use.\n")
gui:AddControl(id, "Header", 0, lib.libName.." options")
gui:AddControl(id, "Subhead", 0, "")
gui:AddControl(id, "Checkbox", 0, 1, "util.simpleauc.displayauctiontab", "Show Post tab at the Auction House")
gui:AddTip(id, "Shows simple post tab on the auction house")
gui:AddControl(id, "Subhead", 0, "Tooltip")
gui:AddControl(id, "Checkbox", 0, 1, "util.simpleauc.tooltip", "Show prices in tooltip")
gui:AddTip(id, "Shows market price for the current item in the tooltip")
gui:AddControl(id, "Checkbox", 0, 2, "util.simpleauc.tooltip.undercut", "Show undercut prices in tooltip")
gui:AddTip(id, "Shows potential undercut price for the current item in the tooltip")
gui:AddControl(id, "Subhead", 0, "Shortcuts")
gui:AddControl(id, "Checkbox", 0, 1, "util.simpleauc.clickhook", "Allow alt-click item in bag instead of drag")
gui:AddTip(id, "Enables an alt-click mouse-hook so you can alt-click your inventory items into the SimpleAuction post frame")
gui:AddControl(id, "Checkbox", 0, 2, "util.simpleauc.clickhook.doubleclick", "Allow double-alt-clicking to auto-post the item")
gui:AddTip(id, "If you alt-click twice in succession, the item will be posted automatically at the current price")
gui:AddControl(id, "Subhead", 0, "Defaults")
gui:AddControl(id, "Checkbox", 0, 1, "util.simpleauc.auto.match", "Automatically match your current price if not remembering item price")
gui:AddTip(id, "When items are posted, if there is no remembered price, and you currently have auctioning items, your current price will be matched")
gui:AddControl(id, "Checkbox", 0, 1, "util.simpleauc.auto.undercut", "Automatically undercut the current price if not matching or remembering")
gui:AddTip(id, "When items are posted, if there is no remembered price and the item is not automatching, the competition will be undercut")
gui:AddControl(id, "Label", 0, 1, nil, "Automatically set the duration for an item unless remembering:")
gui:AddControl(id, "Selectbox", 0, 2, {{12, "12 hour"}, {24, "24 hour"}, {48, "48 hour"}}, "util.simpleauc.auto.duration", "Auto Duration")
gui:AddTip(id, "When items are posted, if there is no remembered price, the duration will default to this value")
gui:AddControl(id, "Subhead", 0, "Defaults")
gui:AddControl(id, "Label", 0, 1, nil, "Undercut basis:")
gui:AddControl(id, "Selectbox", 0, 2, {{"fixed", "Fixed value"}, {"percent", "Percentage"}}, "util.simpleauc.undercut", "Undercuts by")
gui:AddTip(id, "When the auction is to be undercut, specify how you want the lowest price to be undercut")
gui:AddControl(id, "Label", 0, 1, nil, "Fixed undercut value amount:")
gui:AddControl(id, "MoneyFramePinned", 0, 2, "util.simpleauc.undercut.fixed", 0, 999999999)
gui:AddTip(id, "This is the fixed amount to undercut the lowest auction by")
gui:AddControl(id, "Label", 0, 1, nil, "Percentage undercut amount:")
gui:AddControl(id, "NumeriWide", 0, 3, "util.simpleauc.undercut.percent", 0,100, 0.5, "Percentage: %s%%")
gui:AddTip(id, "This is the percentage to undercut the lowest auction by")
gui:AddControl(id, "Subhead", 0, "Scan button")
gui:AddControl(id, "Checkbox", 0, 1, "util.simpleauc.scanbutton", "Show big red scan button at bottom of browse window")
gui:AddTip(id, "Displays the old-style \"Scan\" button at the bottom of the browse window.")
gui:AddControl(id, "Checkbox", 0, 2, "util.simpleauc.scanbutton.disable.wowecon", "Except if WowEcon is loaded")
end
AucAdvanced.RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Auc-Util-SimpleAuction/AucSimple.lua $", "$Rev: 4840 $")