AuctioneerSuite/Auc-Filter-Basic/BasicFilter.lua

310 lines
11 KiB
Lua
Raw Permalink Normal View History

2026-04-13 17:48:13 -04:00
--[[
Auctioneer - BasicFilter
Version: 5.7.4568 (KillerKoala)
Revision: $Id: BasicFilter.lua 4901 2010-10-05 16:44:24Z Nechckn $
URL: http://auctioneeraddon.com/
This is an addon for World of Warcraft that adds statistical history to the auction data that is collected
when the auction is scanned, so that you can easily determine what price
you will be able to sell an item for at auction or at a vendor whenever you
mouse-over an item in the game
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 = "Filter", "Basic"
local lib,parent,private = AucAdvanced.NewModule(libType, libName)
if not lib then return end
local print,decode,_,_,replicate,empty,get,set,default,debugPrint,fill, _TRANS = AucAdvanced.GetModuleLocals()
if not AucAdvancedFilterBasic then AucAdvancedFilterBasic = {} end
if not AucAdvancedFilterBasic_IgnoreList then AucAdvancedFilterBasic_IgnoreList = {} end
local IgnoreList = {}
lib.Processors = {}
function lib.Processors.config(callbackType, ...)
private.SetupConfigGui(...)
end
function lib.AuctionFilter(operation, itemData)
local active = get("filter.basic.activated")
if not active or active ~= true then return end
local retval = false
-- Get the signature of this item and find it's stats.
local quality = AucAdvanced.GetLinkQuality(itemData.link)
local level = tonumber(itemData.itemLevel) or 0
local seller = itemData.sellerName
local ignoreself = get("filter.basic.ignoreself")
local minquality = tonumber(get("filter.basic.min.quality")) or 1
local minlevel = tonumber(get("filter.basic.min.level")) or 0
if (quality < minquality) then retval = true end
if (level < minlevel) then retval = true end
if (ignoreself and seller == UnitName("player")) then retval = true end
if lib.IsPlayerIgnored(seller) then retval = true end
if nLog and retval then
nLog.AddMessage("auc-"..libType.."-"..libName, "AuctionFilter", N_INFO, "Filtered Data", "Auction Filter Removed Data for ",
itemData.itemName, " from ", (itemData.sellerName or "UNKNOWN"), ", quality ", tostring(quality or 0), ", item level ", tostring(itemData.itemLevel or 0))
end
return retval
end
function lib.OnLoad(addon)
AucAdvanced.Settings.SetDefault("filter.basic.activated", true)
AucAdvanced.Settings.SetDefault("filter.basic.min.quality", 1)
AucAdvanced.Settings.SetDefault("filter.basic.min.level", 0)
AucAdvanced.Settings.SetDefault("filter.basic.ignoreself", false)
BF_IgnoreList_Load()
private.DataLoaded()
BasicFilter_IgnoreListFrame:RegisterEvent("PLAYER_LOGOUT")
end
function private.SetupConfigGui(gui)
-- The defaults for the following settings are set in the lib.OnLoad function
local id, last
id = gui:AddTab(libName, libType.." Modules")
gui:AddHelp(id, "what basic filter",
_TRANS('BASC_Help_WhatBasicFilter') ,--What is the Basic Filter?
_TRANS('BASC_Help_WhatBasicFilterAnswer') )--This filter allows you to specify certain minimums for an item to be entered into the data stream, such as the minimum item level, and the minimum quality (Junk, Common, Uncommon, Rare, etc). It also allows you to specify items from a certain seller to not be recorded. One use of this is if a particular seller posts all of his items well over or under the market price, you can ignore all of his/her items
gui:AddControl(id, "Header", 0, _TRANS('BASC_Interface_BasicFilterOptions') )--Basic filter options
last = gui:GetLast(id)
gui:AddControl(id, "Note", 0, 1, nil, nil, " ")
gui:AddControl(id, "Checkbox", 0, 1,"filter.basic.activated", _TRANS('BASC_Interface_EnableBasicFilter') )--Enable use of the Basic filter
gui:AddTip(id, _TRANS('BASC_HelpTooltip_EnableBasicFilterAnswer') )--Ticking this box will enable the basic filter to perform filtering of your auction scans
gui:AddControl(id, "Note", 0, 1, nil, nil, " ")
gui:AddControl(id, "Checkbox", 0, 1, "filter.basic.ignoreself", _TRANS('BASC_Interface_IgnoreOwnAuctions') )--Ignore own auctions
gui:AddTip(id, _TRANS('BASC_Help_IgnoreOwnAuctionsAnswer') )--Ticking this box will disable adding auctions that you posted yourself to the snapshot.
gui:AddControl(id, "Subhead", 0, _TRANS('BASC_Interface_FilterQuality') )--Filter by Quality
gui:AddControl(id, "Slider", 0, 1, "filter.basic.min.quality", 0, 4, 1, _TRANS('BASC_Interface_MinimumQuality') )--Minimum Quality: %d
gui:AddTip(id, _TRANS('BASC_HelpTooltip_MinimumQuality').."\n"..--Use this slider to choose the minimum quality to go into storage.
"\n"..
"0 = (|cff9d9d9d ".._TRANS('BASC_HelpTooltip_MinimumQualityJunk').."|r),\n"..--Junk
"1 = (|cffffffff ".._TRANS('BASC_HelpTooltip_MinimumQualityCommon').."|r),\n"..--Common
"2 = (|cff1eff00 ".._TRANS('BASC_HelpTooltip_MinimumQualityUncommon').."|r),\n"..--Uncommon
"3 = (|cff0070dd".._TRANS('BASC_HelpTooltip_MinimumQualityRare').."|r),\n"..--Rare
"4 = (|cffa335ee ".._TRANS('BASC_HelpTooltip_MinimumQualityEpic').."|r)")--Epic
gui:AddControl(id, "Subhead", 0, _TRANS('BASC_Interface_FilterItemLevel') )--Filter by Item Level
gui:AddControl(id, "NumberBox", 0, 1, "filter.basic.min.level", 0, 9, _TRANS('BASC_Interface_MinimumItemLevel') )--Minimum item level
gui:AddTip(id, _TRANS('BASC_HelpTooltip_MinimumItemLevel') )--Enter the minimum item level to go into storage.
gui:SetLast(id, last)
gui:AddControl(id, "Subhead", 0.55, _TRANS('BASC_Interface_IgnoreList') )--Ignore List
gui:AddControl(id, "Custom", 0.55, 0, BasicFilter_IgnoreListFrame); BasicFilter_IgnoreListFrame:SetParent(gui.tabs[id][3])
end
--[[ Local functions ]]--
function private.DataLoaded()
-- This function gets called when the data is first loaded. You may do any required maintenence
-- here before the data gets used.
end
--**************************************
-- Ignore List Frame Functionality
--**************************************
local numIgnoreButtons = 18
SelectedIgnore = 1
LastIgnoredPlayer = nil
function lib.IsPlayerIgnored(name)
if IgnoreList[name] then
return true
end
end
lib.IgnoreList_IsPlayerIgnored = lib.IsPlayerIgnored -- Deprecated - backward compatibility only
function BF_IgnoreList_Update()
local numIgnores = #IgnoreList
local nameText;
local name;
local ignoreButton;
if ( numIgnores > 0 ) then
if ( SelectedIgnore == 0 ) then
SelectedIgnore = 1
end
BasicFilter_IgnoreList_StopIgnoreButton:Enable();
else
BasicFilter_IgnoreList_StopIgnoreButton:Disable();
end
local ignoreOffset = FauxScrollFrame_GetOffset(BasicFilter_IgnoreList_ScrollFrame);
local ignoreIndex;
for i=1, numIgnoreButtons, 1 do
ignoreIndex = i + ignoreOffset;
ignoreButton = _G["BasicFilter_IgnoreList_IgnoreButton"..i];
ignoreButton:SetText(IgnoreList[ignoreIndex] or "");
ignoreButton:SetID(ignoreIndex);
-- Update the highlight
if ( ignoreIndex == SelectedIgnore ) then
ignoreButton:LockHighlight();
else
ignoreButton:UnlockHighlight();
end
if ( ignoreIndex > numIgnores ) then
ignoreButton:Hide();
else
ignoreButton:Show();
end
end
-- ScrollFrame stuff
FauxScrollFrame_Update(BasicFilter_IgnoreList_ScrollFrame, numIgnores, numIgnoreButtons, 16);
end
function BF_IgnoreList_IgnoreButton_OnClick( button )
SelectedIgnore = button:GetID()
BF_IgnoreList_Update()
end
function BF_IgnoreList_UnignoreButton_OnClick( button )
local name = IgnoreList[SelectedIgnore]
BF_IgnoreList_Remove(name)
end
function BF_IgnoreList_Load()
local realm = GetRealmName()
local faction = UnitFactionGroup("player")
--If the realm doesn't exist in the SV, create it
if not AucAdvancedFilterBasic_IgnoreList[realm] then
AucAdvancedFilterBasic_IgnoreList[realm] = {}
end
--If the faction doesn't exist in the SV, create it under the realm
if not AucAdvancedFilterBasic_IgnoreList[realm][faction] then
AucAdvancedFilterBasic_IgnoreList[realm][faction] = {}
end
--Get the ignore list for the current realm and faction
IgnoreList = AucAdvancedFilterBasic_IgnoreList[realm][faction]
lib.IgnoreList = IgnoreList --make current ignore list global for other addons *** Deprecated ***
for i, name in ipairs(IgnoreList) do
IgnoreList[name] = i
end
BF_IgnoreList_Update()
end
function BF_IgnoreList_OnEvent(self, event)
if event == "PLAYER_LOGOUT" then
for key in pairs(IgnoreList) do
if type(key) == "number" then
AucAdvancedFilterBasic_IgnoreList[realm][faction][key] = IgnoreList[key]
end
end
end
end
function BF_IgnoreList_Add(name)
-- name validity checks
if type(name) ~= "string" or #name < 2 then return end
-- This is stored in the SV with the first letter capitalized and the rest lowercased
-- This is how it should appear in the ScanData image, and how we want it displayed in our GUI
-- We must allow for UTF-8 encoding of first character
local firstbyte, split = name:byte(1), 1
if firstbyte >= 240 then -- quad
split = 4
elseif firstbyte >= 224 then -- triple
split = 3
elseif firstbyte >= 192 then -- double
split = 2
end
name = name:sub(1,split):upper()..name:sub(split+1):lower()
local currentSelection = IgnoreList[SelectedIgnore]
if not ( IgnoreList[name] ) then
table.insert(IgnoreList, name)
LastIgnoredPlayer = name
end
table.sort(IgnoreList)
for i, name in ipairs(IgnoreList) do
IgnoreList[name] = i
end
SelectedIgnore = IgnoreList[currentSelection] or 1
BF_IgnoreList_Update()
end
function BF_IgnoreList_Remove( name )
if ( IgnoreList[name] ) then
IgnoreList[name] = nil
for i, ignoreName in ipairs(IgnoreList) do
if ( ignoreName == name ) then
table.remove(IgnoreList, i)
end
end
SelectedIgnore = 1
end
table.sort(IgnoreList)
for i, name in ipairs(IgnoreList) do
IgnoreList[name] = i
end
BF_IgnoreList_Update()
end
StaticPopupDialogs["BASICFILTER_ADD_IGNORE"] = {
text = ADD_IGNORE_LABEL,
button1 = ACCEPT,
button2 = CANCEL,
hasEditBox = 1,
maxLetters = 12,
OnAccept = function(self)
BF_IgnoreList_Add(self.editBox:GetText())
end,
OnShow = function(self)
self.editBox:SetFocus()
end,
OnHide = function(self)
ChatEdit_FocusActiveWindow();
self.editBox:SetText("");
end,
EditBoxOnEnterPressed = function(self)
local parent = self:GetParent()
BF_IgnoreList_Add(parent.editBox:GetText())
parent:Hide()
end,
EditBoxOnEscapePressed = function(self)
self:GetParent():Hide();
end,
timeout = 0,
exclusive = 1,
whileDead = 1,
hideOnEscape = 1
}
AucAdvanced.RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Auc-Filter-Basic/BasicFilter.lua $", "$Rev: 4901 $")