329 lines
10 KiB
Lua
329 lines
10 KiB
Lua
--[[
|
|
Auctioneer - Search UI - Searcher General
|
|
Version: 5.9.4961 (WhackyWallaby)
|
|
Revision: $Id: SearcherGeneral.lua 4446 2009-09-13 09:33:34Z brykrys $
|
|
URL: http://auctioneeraddon.com/
|
|
|
|
This is a plugin module for the SearchUI that assists in searching by refined paramaters
|
|
|
|
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
|
|
--]]
|
|
-- Create a new instance of our lib with our parent
|
|
local lib, parent, private = AucSearchUI.NewSearcher("General")
|
|
if not lib then return end
|
|
local print,decode,_,_,replicate,empty,_,_,_,debugPrint,fill = AucAdvanced.GetModuleLocals()
|
|
local get,set,default,Const = AucSearchUI.GetSearchLocals()
|
|
lib.tabname = "General"
|
|
|
|
function private.getTypes()
|
|
if not private.typetable then
|
|
private.typetable = {GetAuctionItemClasses()}
|
|
table.insert(private.typetable,1, "All")
|
|
end
|
|
return private.typetable
|
|
end
|
|
|
|
function private.getSubTypes()
|
|
local subtypetable, typenumber
|
|
local typename = get("general.type")
|
|
local typetable = private.getTypes()
|
|
if typename ~= "All" then
|
|
for i, j in pairs(typetable) do
|
|
if j == typename then
|
|
typenumber = i
|
|
break
|
|
end
|
|
end
|
|
end
|
|
if typenumber then
|
|
subtypetable = {GetAuctionItemSubClasses(typenumber-1)}-- subtract 1 because 1 is the "All" category
|
|
table.insert(subtypetable, 1, "All")
|
|
else
|
|
subtypetable = {[1]="All"}
|
|
end
|
|
return subtypetable
|
|
end
|
|
|
|
function private.getQuality()
|
|
return {
|
|
{-1, "All"},
|
|
{0, "Poor"},
|
|
{1, "Common"},
|
|
{2, "Uncommon"},
|
|
{3, "Rare"},
|
|
{4, "Epic"},
|
|
{5, "Legendary"},
|
|
{6, "Artifact"},
|
|
}
|
|
end
|
|
|
|
function private.getTimeLeft()
|
|
return {
|
|
{0, "Any"},
|
|
{1, "less than 30 min"},
|
|
{2, "2 hours"},
|
|
{3, "12 hours"},
|
|
{4, "48 hours"},
|
|
}
|
|
end
|
|
|
|
-- Set our defaults
|
|
default("general.name", "")
|
|
default("general.name.exact", false)
|
|
default("general.name.regexp", false)
|
|
default("general.name.invert", false)
|
|
default("general.type", "All")
|
|
default("general.subtype", "All")
|
|
default("general.quality", -1)
|
|
default("general.timeleft", 0)
|
|
default("general.ilevel.min", 0)
|
|
default("general.ilevel.max", 300)
|
|
default("general.ulevel.min", 0)
|
|
default("general.ulevel.max", 80)
|
|
default("general.seller", "")
|
|
default("general.seller.exact", false)
|
|
default("general.seller.regexp", false)
|
|
default("general.seller.invert", false)
|
|
default("general.minbid", 0)
|
|
default("general.minbuy", 0)
|
|
default("general.maxbid", 999999999)
|
|
default("general.maxbuy", 999999999)
|
|
|
|
-- This function is automatically called when we need to create our search generals
|
|
function lib:MakeGuiConfig(gui)
|
|
-- Get our tab and populate it with our controls
|
|
local id = gui:AddTab(lib.tabname, "Searchers")
|
|
|
|
-- Add the help
|
|
gui:AddSearcher("General", "Search for items by general properties such as name, level etc", 100)
|
|
gui:AddHelp(id, "general searcher",
|
|
"What does this searcher do?",
|
|
"This searcher provides the ability to search for specific items that are in the scan database by name, level, type, subtype, seller, price, timeleft and other similar generals.")
|
|
|
|
gui:MakeScrollable(id)
|
|
gui:AddControl(id, "Header", 0, "Search criteria")
|
|
|
|
local last = gui:GetLast(id)
|
|
gui:SetControlWidth(0.35)
|
|
gui:AddControl(id, "Text", 0, 1, "general.name", "Item name")
|
|
local cont = gui:GetLast(id)
|
|
gui:SetLast(id, last)
|
|
gui:AddControl(id, "Checkbox", 0.11, 0, "general.name.exact", "Exact")
|
|
gui:SetLast(id, last)
|
|
gui:AddControl(id, "Checkbox", 0.21, 0, "general.name.regexp", "Regexp")
|
|
gui:SetLast(id, last)
|
|
gui:AddControl(id, "Checkbox", 0.35, 0, "general.name.invert", "Invert")
|
|
|
|
gui:SetLast(id, cont)
|
|
last = cont
|
|
|
|
gui:AddControl(id, "Note", 0.0, 1, 100, 14, "Type:")
|
|
gui:AddControl(id, "Selectbox", 0.0, 1, private.getTypes, "general.type", "ItemType")
|
|
gui:SetLast(id, last)
|
|
gui:AddControl(id, "Note", 0.3, 1, 100, 14, "SubType:")
|
|
gui:AddControl(id, "Selectbox", 0.3, 1, private.getSubTypes, "general.subtype", "ItemSubType")
|
|
gui:SetLast(id, last)
|
|
gui:AddControl(id, "Note", 0.7, 1, 100, 14, "TimeLeft:")
|
|
gui:AddControl(id, "Selectbox", 0.7, 1, private.getTimeLeft(), "general.timeleft", "TimeLeft")
|
|
|
|
gui:AddControl(id, "Note", 0.0, 1, 100, 14, "Quality:")
|
|
gui:AddControl(id, "Selectbox", 0.0, 1, private.getQuality(), "general.quality", "ItemQuality")
|
|
|
|
last = gui:GetLast(id)
|
|
gui:SetControlWidth(0.37)
|
|
gui:AddControl(id, "NumeriSlider", 0, 1, "general.ilevel.min", 0, 300, 1, "Min item level")
|
|
gui:SetControlWidth(0.37)
|
|
gui:AddControl(id, "NumeriSlider", 0, 1, "general.ilevel.max", 0, 300, 1, "Max item level")
|
|
cont = gui:GetLast(id)
|
|
|
|
gui:SetLast(id, last)
|
|
gui:SetControlWidth(0.17)
|
|
gui:AddControl(id, "NumeriSlider", 0.6, 0, "general.ulevel.min", 0, 80, 1, "Min user level")
|
|
gui:SetControlWidth(0.17)
|
|
gui:AddControl(id, "NumeriSlider", 0.6, 0, "general.ulevel.max", 0, 80, 1, "Max user level")
|
|
|
|
gui:SetLast(id, cont)
|
|
|
|
last = gui:GetLast(id)
|
|
gui:SetControlWidth(0.35)
|
|
gui:AddControl(id, "Text", 0, 1, "general.seller", "Seller name")
|
|
cont = gui:GetLast(id)
|
|
gui:SetLast(id, last)
|
|
gui:AddControl(id, "Checkbox", 0.13, 0, "general.seller.exact", "Exact")
|
|
gui:SetLast(id, last)
|
|
gui:AddControl(id, "Checkbox", 0.23, 0, "general.seller.regexp", "Regexp")
|
|
gui:SetLast(id, last)
|
|
gui:AddControl(id, "Checkbox", 0.37, 0, "general.seller.invert", "Invert")
|
|
|
|
gui:SetLast(id, cont)
|
|
gui:AddControl(id, "MoneyFramePinned", 0, 1, "general.minbid", 0, 999999999, "Minimum Bid")
|
|
gui:SetLast(id, cont)
|
|
gui:AddControl(id, "MoneyFramePinned", 0.5, 1, "general.minbuy", 0, 999999999, "Minimum Buyout")
|
|
last = gui:GetLast(id)
|
|
gui:AddControl(id, "MoneyFramePinned", 0, 1, "general.maxbid", 0, 999999999, "Maximum Bid")
|
|
gui:SetLast(id, last)
|
|
gui:AddControl(id, "MoneyFramePinned", 0.5, 1, "general.maxbuy", 0, 999999999, "Maximum Buyout")
|
|
end
|
|
|
|
function lib.Search(item)
|
|
private.debug = ""
|
|
if private.NameSearch("name", item[Const.NAME])
|
|
and private.TypeSearch(item[Const.ITYPE], item[Const.ISUB])
|
|
and private.TimeSearch(item[Const.TLEFT])
|
|
and private.QualitySearch(item[Const.QUALITY])
|
|
and private.LevelSearch("ilevel", item[Const.ILEVEL])
|
|
and private.LevelSearch("ulevel", item[Const.ULEVEL])
|
|
and private.NameSearch("seller", item[Const.SELLER])
|
|
and private.PriceSearch("Bid", item[Const.PRICE])
|
|
and private.PriceSearch("Buy", item[Const.BUYOUT]) then
|
|
return true
|
|
else
|
|
return false, private.debug
|
|
end
|
|
end
|
|
|
|
function private.LevelSearch(levelType, itemLevel)
|
|
local min = get("general."..levelType..".min")
|
|
local max = get("general."..levelType..".max")
|
|
|
|
if itemLevel < min then
|
|
private.debug = levelType.." too low"
|
|
return false
|
|
end
|
|
if itemLevel > max then
|
|
private.debug = levelType.." too high"
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
function private.NameSearch(nametype,itemName)
|
|
local name = get("general."..nametype)
|
|
|
|
-- If there's no name, then this matches
|
|
if not name or name == "" then
|
|
return true
|
|
end
|
|
|
|
-- Lowercase the input
|
|
name = name:lower()
|
|
itemName = itemName:lower()
|
|
|
|
-- Get the matching options
|
|
local nameExact = get("general."..nametype..".exact")
|
|
local nameRegexp = get("general."..nametype..".regexp")
|
|
local nameInvert = get("general."..nametype..".invert")
|
|
|
|
-- if we need to make a non-regexp, exact match:
|
|
if nameExact and not nameRegexp then
|
|
-- If the name matches or we are inverted
|
|
if name == itemName and not nameInvert then
|
|
return true
|
|
elseif name ~= itemName and nameInvert then
|
|
return true
|
|
end
|
|
private.debug = nametype.." is not exact match"
|
|
return false
|
|
end
|
|
|
|
local plain, text
|
|
text = name
|
|
if not nameRegexp then
|
|
plain = 1
|
|
elseif nameExact then
|
|
text = "^"..name.."$"
|
|
end
|
|
|
|
local matches = itemName:find(text, 1, plain)
|
|
if matches and not nameInvert then
|
|
return true
|
|
elseif not matches and nameInvert then
|
|
return true
|
|
end
|
|
private.debug = nametype.." does not match critia"
|
|
return false
|
|
end
|
|
|
|
function private.TypeSearch(itype, isubtype)
|
|
local searchtype = get("general.type")
|
|
if searchtype == "All" then
|
|
return true
|
|
elseif searchtype == itype then
|
|
local searchsubtype = get("general.subtype")
|
|
if searchsubtype == "All" then
|
|
return true
|
|
elseif searchsubtype == isubtype then
|
|
return true
|
|
else
|
|
private.debug = "Wrong Subtype"
|
|
return false
|
|
end
|
|
else
|
|
private.debug = "Wrong Type"
|
|
return false
|
|
end
|
|
end
|
|
|
|
function private.TimeSearch(iTleft)
|
|
local tleft = get("general.timeleft")
|
|
if tleft == 0 then
|
|
return true
|
|
elseif tleft == iTleft then
|
|
return true
|
|
else
|
|
private.debug = "Time left wrong"
|
|
return false
|
|
end
|
|
end
|
|
|
|
function private.QualitySearch(iqual)
|
|
local quality = get("general.quality")
|
|
if quality == -1 then
|
|
return true
|
|
elseif quality == iqual then
|
|
return true
|
|
else
|
|
private.debug = "Wrong Quality"
|
|
return false
|
|
end
|
|
end
|
|
|
|
function private.PriceSearch(buybid, price)
|
|
local minprice, maxprice
|
|
if buybid == "Bid" then
|
|
minprice = get("general.minbid")
|
|
maxprice = get("general.maxbid")
|
|
else
|
|
minprice = get("general.minbuy")
|
|
maxprice = get("general.maxbuy")
|
|
end
|
|
if (price <= maxprice) and (price >= minprice) then
|
|
return true
|
|
elseif price < minprice then
|
|
private.debug = buybid.." price too low"
|
|
else
|
|
private.debug = buybid.." price too high"
|
|
end
|
|
return false
|
|
end
|
|
AucAdvanced.RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Auc-Util-SearchUI/SearcherGeneral.lua $", "$Rev: 4446 $")
|