view Modules/AuctionHouse.lua @ 138:7d258c041b11

Fixed an issue with /ia invested that caused all items to display twice. This was introduced by the fix in Ticket 42. At this point ItemAuditor watches mail for auctions sold or purchased, watches for buy/sell (money and 1 item type change) and conversions/tradeskills. Milling isn't working yet because there is too much time between the first event and the last event.
author Asa Ayers <Asa.Ayers@Gmail.com>
date Sat, 02 Oct 2010 20:34:07 -0700
parents 4f26dc55455d
children
line wrap: on
line source
local ItemAuditor = select(2, ...)
local AuctionHouse = ItemAuditor:NewModule("AuctionHouse")

local Utils = ItemAuditor:GetModule("Utils")

local addon_options
local function getAddons()
	-- this will ensure that the addons are only scanned once per session.
	if not addon_options then
		addon_options = {}
		local total = 0
		local lastKey
		if AucAdvanced and AucAdvanced.Version then
			addon_options['auctioneer'] = 'Auctioneer'
			total = total + 1
			lastKey = 'auctioneer'
		end
		if GetAuctionBuyout ~= nil then
			addon_options['other'] = 'Other (GetAuctionBuyout compatibile)'
			total = total + 1
			lastKey = 'other'
		end

		if total == 1 or not ItemAuditor.db.profile.auction_addon then
			ItemAuditor.db.profile.auction_addon = lastKey
		end
	end

	return addon_options
end

local function getSelected()
	-- just making sure ItemAuditor.db.profile.auction_addon is set if there is only one addon
	if not addon_options then
		getAddons()
	end

	return ItemAuditor.db.profile.auction_addon
end

local function setAddon(info, value)
	ItemAuditor.db.profile.auction_addon = value
end

local function getPricingMethods()
	if ItemAuditor.db.profile.auction_addon == 'other' then
		return {
			low = 'Lowest Price',
		}
	else
		return {
			low = 'Lowest Price',
			market = 'Market Price',
		}
	end
end

ItemAuditor.Options.args.auction_house = {
	name = "Auction House",
	type = 'group',
	args = {
		ah_addon = {
			type = "select",
			name = "Addon",
			desc = "",
			values = getAddons,
			get = getSelected,
			set = setAddon,
			order = 0,
		},
		pricingMethod = {
			type = "select",
			name = "Pricing Method",
			desc = "",
			values = getPricingMethods,
			get = function() return ItemAuditor.db.profile.pricing_method end,
			set = function(info, value) ItemAuditor.db.profile.pricing_method = value end,
			order = 1,
		}
		
	},
}

local function clearSnatch()
	ItemAuditor:Print('clearing snatch')
	local Snatch = AucAdvanced.Modules.Util.SearchUI.Searchers.Snatch
	local snatchList = Snatch.Private.snatchList

	for itemLink in pairs(snatchList) do
		local link = select(2, GetItemInfo('item:'..itemLink))
		Snatch.RemoveSnatch(link)
	end
end

function AuctionHouse.Snatch()
	if not AucAdvanced or not AucAdvanced.Version then
		ItemAuditor:Print("The snatch command requires Auctioneer.")
		return
	end
	
	local Snatch = AucAdvanced.Modules.Util.SearchUI.Searchers.Snatch
	if not Snatch.Private.frame then
		ItemAuditor:Print("You must visit the Auction House before you can update Auctioneer's snatch list.")
		return
	end
	clearSnatch()

	local snatchList = {}
	local function Export(data)
		if data.haveMaterials < data.queue then
			for id, reagent in pairs(data.reagents) do
				if reagent.need > 0 and not snatchList[reagent.link] then
					snatchList[reagent.link] = true
					ItemAuditor:Print("Adding %s for %s", reagent.link, Utils.FormatMoney(reagent.price))
					Snatch.AddSnatch(reagent.link, reagent.price)
				end
			end
		end
	end
	ItemAuditor:UpdateCraftingTable()
	ItemAuditor:GetModule("Crafting").Export(Export)
end

ItemAuditor.Options.args.snatch = {
	type = "execute",
	handler = AuctionHouse,
	name = "snatch",
	desc = "Replace Auctioner's snatch list with all the reagents you need for crafting.",
	func = "Snatch",
	guiHidden = true,
}

function AuctionHouse:GetAuctionPrice(itemLink)
	local link = select(2, GetItemInfo(itemLink))
	assert(link, 'Invalid item link: '..itemLink)
	local addon = getSelected()
	local prices = ItemAuditor.db.profile.pricing_method or 'low'
	if GetAuctionBuyout ~= nil and addon == 'other' then
		return GetAuctionBuyout(link)
	elseif AucAdvanced and AucAdvanced.Version and addon == 'auctioneer' then
		if prices == 'low' then
			local _, _, _, _, _, lowBuy= AucAdvanced.Modules.Util.SimpleAuction.Private.GetItems(link)
			return lowBuy
		else
			return AucAdvanced.API.GetMarketValue(link)
		end
	end
	return nil
end