Files
aux-addon-ClassicAPI/aux-addon/util/scan.lua
T
geojak 02cfc420dd aux auto bid and price heuristics
this commit does two things
1. it implements auto bid just like auto buy
2. it has some minimum pricing heuristics when posting items. this behavoiur actiaves when the post bid price is set to 0, the buyout price behaves like a minimum
2022-02-20 23:51:19 +01:00

82 lines
2.8 KiB
Lua

module 'aux.util.scan'
local T = require 'T'
local aux = require 'aux'
local info = require 'aux.util.info'
local filter_util = require 'aux.util.filter'
local scan = require 'aux.core.scan'
function M.test(record, index)
local auction_record = T.temp-info.auction(index, record.query_type)
return auction_record and auction_record.search_signature == record.search_signature
end
function M.find(auction_record, status_bar, on_abort, on_failure, on_success)
local queries = T.list(T.acquire())
if auction_record.blizzard_query then
local blizzard_query1 = aux.copy(auction_record.blizzard_query)
blizzard_query1.first_page = auction_record.page
blizzard_query1.last_page = auction_record.page
tinsert(queries, T.map('blizzard_query', blizzard_query1))
if auction_record.page > 0 then
local blizzard_query2 = aux.copy(auction_record.blizzard_query)
blizzard_query2.first_page = auction_record.page - 1
blizzard_query2.last_page = auction_record.page - 1
tinsert(queries, T.map('blizzard_query', blizzard_query2))
end
local item_query = item_query(auction_record.item_id, 0, 0)
if not aux.eq(auction_record.blizzard_query, item_query.blizzard_query) then
tinsert(queries, item_query)
end
end
local found
return scan.start{
type = auction_record.query_type,
queries = queries,
on_scan_start = function()
status_bar:update_status(0, 0)
status_bar:set_text('Searching auction...')
end,
on_start_query = function(query_index)
status_bar:update_status((query_index - 1) / getn(queries), 0)
end,
on_auction = function(record)
if test(auction_record, record.index) then
found = true
scan.stop()
status_bar:update_status(1, 1)
status_bar:set_text('Auction found')
return on_success(record.index)
end
end,
on_abort = function()
if not found then
status_bar:update_status(1, 1)
status_bar:set_text('Auction not found')
return on_abort()
end
end,
on_complete = function()
if not found then
status_bar:update_status(1, 1)
status_bar:set_text('Auction not found')
return on_failure()
end
end,
}
end
function M.item_query(item_id, first_page, last_page)
local item_info = info.item(item_id)
if item_info then
local query = filter_util.query(item_info.name .. '/exact')
query.blizzard_query.first_page = first_page
query.blizzard_query.last_page = last_page
return T.map('validator', query.validator, 'blizzard_query', query.blizzard_query)
end
end