vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Enchantrix Addon for World of Warcraft(tm).
Version: 3.6.1 (Platypus)
Revision: $Id: EnxCommand.lua 944 2006-07-11 03:31:50Z mentalpower $
Slash command and GUI functions.
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 GLP.txt); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
]]
-- Global functions
local addonLoaded -- Enchantrix.Command.AddonLoaded()
local auctioneerLoaded -- Enchantrix.Command.AuctioneerLoaded()
local handleCommand -- Enchantrix.Command.HandleCommand()
local register -- Enchantrix.Command.Register()
local resetKhaos -- Enchantrix.Command.ResetKhaos()
local setKhaosSetKeyValue -- Enchantrix.Command.SetKhaosSetKeyValue()
local setKhaosSetKeyParameter -- Enchantrix.Command.SetKhaosSetKeyParameter()
-- Local functions
local getKhaosLocaleList
local getKhaosLoadList
local registerKhaos
local registerAuctioneerOptions
local chatPrintHelp
local onOff
local clear
local default
local genVarSet
local percentLessFilter
local bidBrokerFilter
local profitComparisonSort
local bidBrokerSort
local doBidBroker
local doPercentLess
local getAuctionItemDisenchants
-- GUI Init Variables (Added by MentalPower)
Enchantrix.State.GUI_Registered = nil
Enchantrix.State.Khaos_Registered = nil
-- Local variables
local optionSet
local profitMargins
-- Local constants
local MAX_BUYOUT_PRICE = 800000;
local MIN_PROFIT_MARGIN = 1000;
local MIN_PERCENT_LESS_THAN_HSP = 20; -- 20% default
local MIN_PROFIT_PRICE_PERCENT = 10; -- 10% default
function addonLoaded()
if IsAddOnLoaded("Khaos") then
registerKhaos()
end
end
function getKhaosLocaleList()
local options = { [_ENCH('CmdDefault')] = 'default' };
for locale, data in EnchantrixLocalizations do
options[locale] = locale;
end
return options
end
function getKhaosLoadList()
return {
[_ENCH('GuiLoad_Always')] = 'always',
[_ENCH('GuiLoad_Never')] = 'never',
}
end
function registerKhaos()
optionSet = {
id="Enchantrix";
text="Enchantrix";
helptext=function()
return _ENCH('GuiMainHelp');
end;
difficulty=1;
default={checked=true};
options={
{
id="Header";
text="Enchantrix";
helptext=function()
return _ENCH('GuiMainHelp')
end;
type=K_HEADER;
difficulty=1;
};
{
id="all";
type=K_TEXT;
text=function()
return _ENCH('GuiMainEnable')
end;
helptext=function()
return _ENCH('HelpOnoff')
end;
callback=function(state)
if (state.checked) then
onOff('on');
else
onOff('off');
end
end;
feedback=function(state)
if (state.checked) then
return _ENCH('StatOn');
else
return _ENCH('StatOff');
end
end;
check=true;
default={checked=Enchantrix.Config.GetFilterDefaults('all')};
disabled={checked=false};
difficulty=1;
};
{
id="barker";
type=K_TEXT;
text=function()
return _ENCH('GuiBarker') -- "Enable Barker"
end;
helptext=function()
return _ENCH('HelpBarker') -- "Turn Enchantrix Barker on or off"
end;
callback=function(state)
genVarSet('barker', state.checked)
end;
feedback=function(state)
if (state.checked) then
return _ENCH('BarkerOn')
else
return _ENCH('BarkerOff')
end
end;
check=true;
default={checked=Enchantrix.Config.GetFilterDefaults('barker')};
disabled={checked=false};
difficulty=1;
};
{
id="locale";
type=K_PULLDOWN;
setup = {
options = getKhaosLocaleList;
multiSelect = false;
};
text=function()
return _ENCH('GuiLocale')
end;
helptext=function()
return _ENCH('HelpLocale')
end;
callback = function(state)
end;
feedback = function (state)
Enchantrix.Config.SetLocale(state.value);
return string.format(_ENCH('FrmtActSet'), _ENCH('CmdLocale'), state.value);
end;
default = {
value = Enchantrix.Config.GetLocale();
};
disabled = {
value = Enchantrix.Config.GetLocale();
};
dependencies={all={checked=true;}};
difficulty=2;
};
{
id="LoadSettings";
type=K_PULLDOWN;
setup = {
options = getKhaosLoadList;
multiSelect = false;
};
text=function()
return _ENCH('GuiLoad')
end;
helptext=function()
return _ENCH('HelpLoad')
end;
callback=function(state) end;
feedback=function(state)
handleCommand("load " .. state.value, "GUI");
end;
default={value = 'always'};
disabled={value = 'never'};
difficulty=1;
};
{
id="embed";
type=K_TEXT;
text=function()
return _ENCH('GuiEmbed')
end;
helptext=function()
return _ENCH('HelpEmbed')
end;
callback=function(state)
genVarSet('embed', state.checked);
end;
feedback=function(state)
if (state.checked) then
return (string.format(_ENCH('FrmtActEnable'), _ENCH('ShowEmbed')));
else
return (string.format(_ENCH('FrmtActDisable'), _ENCH('ShowEmbed')));
end
end;
check=true;
default={checked=Enchantrix.Config.GetFilterDefaults('embed')};
disabled={checked=false};
dependencies={all={checked=true;}};
difficulty=1;
};
{
id="terse";
type=K_TEXT;
text=function()
return _ENCH('GuiTerse')
end;
helptext=function()
return _ENCH('HelpTerse')
end;
callback=function(state)
genVarSet('terse', state.checked);
end;
feedback=function(state)
if (state.checked) then
return (string.format(_ENCH('FrmtActEnable'), _ENCH('ShowTerse')));
else
return (string.format(_ENCH('FrmtActDisable'), _ENCH('ShowTerse')));
end
end;
check=true;
default={checked=Enchantrix.Config.GetFilterDefaults('terse')};
disabled={checked=false};
dependencies={all={checked=true;}};
difficulty=2;
};
{
id="counts";
type=K_TEXT;
text=function()
return _ENCH('GuiCount')
end;
helptext=function()
return _ENCH('HelpCount')
end;
callback=function(state)
genVarSet('counts', state.checked);
end;
feedback=function(state)
if (state.checked) then
return (string.format(_ENCH('FrmtActEnable'), _ENCH('ShowCount')));
else
return (string.format(_ENCH('FrmtActDisable'), _ENCH('ShowCount')));
end
end;
check=true;
default={checked=Enchantrix.Config.GetFilterDefaults('counts')};
disabled={checked=false};
dependencies={all={checked=true;}};
difficulty=3;
};
{
id="EnchantrixValuateHeader";
type=K_HEADER;
text=function()
return _ENCH('GuiValuateHeader')
end;
helptext=function()
return _ENCH('HelpValue')
end;
difficulty=2;
};
{
id="valuate";
type=K_TEXT;
text=function()
return _ENCH('GuiValuateEnable')
end;
helptext=function()
return _ENCH('HelpValue').."\n".._ENCH('HelpGuessNoauctioneer')
end;
callback=function(state)
genVarSet('valuate', state.checked);
end;
feedback=function(state)
if (state.checked) then
return (string.format(_ENCH('FrmtActEnable'), _ENCH('ShowValue')));
else
return (string.format(_ENCH('FrmtActDisable'), _ENCH('ShowValue')));
end
end;
check=true;
default={checked=Enchantrix.Config.GetFilterDefaults('valuate')};
disabled={checked=false};
dependencies={all={checked=true;}};
difficulty=1;
};
{
id="valuate-baseline";
type=K_TEXT;
text=function()
return _ENCH('GuiValuateBaseline')
end;
helptext=function()
return _ENCH('HelpGuessBaseline')
end;
callback=function(state)
genVarSet('valuate-baseline', state.checked);
end;
feedback=function(state)
if (state.checked) then
return (string.format(_ENCH('FrmtActEnable'), _ENCH('ShowGuessBaseline')));
else
return (string.format(_ENCH('FrmtActDisable'), _ENCH('ShowGuessBaseline')));
end
end;
check=true;
default={checked=Enchantrix.Config.GetFilterDefaults('valuate-baseline')};
disabled={checked=false};
dependencies={valuate={checked=true;}, all={checked=true;}};
difficulty=2;
};
{
id="EnchantrixOtherHeader";
type=K_HEADER;
text=function()
return _ENCH('GuiOtherHeader')
end;
helptext=function()
return _ENCH('GuiOtherHelp')
end;
difficulty=1;
};
{
id="EnchantrixClearAll";
type=K_BUTTON;
setup={
buttonText = function()
return _ENCH('GuiClearallButton')
end;
};
text=function()
return _ENCH('GuiClearall')
end;
helptext=function()
return _ENCH('GuiClearallHelp')
end;
callback=function()
clear(_ENCH('CmdClearAll'));
end;
feedback=function()
return string.format(_ENCH('FrmtActClearall'), _ENCH('GuiClearallNote'));
end;
dependencies={all={checked=true;}};
difficulty=3;
};
{
id="DefaultAll";
type=K_BUTTON;
setup={
buttonText = function()
return _ENCH('GuiDefaultAllButton')
end;
};
text=function()
return _ENCH('GuiDefaultAll')
end;
helptext=function()
return _ENCH('GuiDefaultAllHelp')
end;
callback=function()
default(_ENCH('CmdClearAll'));
end;
feedback=function()
return _ENCH('FrmtActDefaultAll');
end;
dependencies={all={checked=true;}};
difficulty=1;
};
{
id="printframe";
type=K_PULLDOWN;
setup = {
options = Enchantrix.Config.GetFrameNames;
multiSelect = false;
};
text=function()
return _ENCH('GuiPrintin')
end;
helptext=function()
return _ENCH('HelpPrintin')
end;
callback=function(state)
Enchantrix.Config.SetFrame(state.value);
end;
feedback=function(state)
local _, frameName = Enchantrix.Config.GetFrameNames(state.value)
return string.format(_ENCH('FrmtPrintin'), frameName);
end;
default = {
value=Enchantrix.Config.GetFrameIndex();
};
disabled = {
value=Enchantrix.Config.GetFrameIndex();
};
dependencies={all={checked=true;}};
difficulty=3;
};
{
id="DefaultOption";
type=K_EDITBOX;
setup = {
callOn = {"tab", "escape", "enter"};
};
text=function()
return _ENCH('GuiDefaultOption')
end;
helptext=function()
return _ENCH('HelpDefault')
end;
callback = function(state)
default(state.value);
end;
feedback = function (state)
if (state.value == _ENCH('CmdClearAll')) then
return _ENCH('FrmtActDefaultAll');
else
return string.format(_ENCH('FrmtActDefault'), state.value);
end
end;
default = {
value = "";
};
disabled = {
value = "";
};
dependencies={all={checked=true;}};
difficulty=4;
};
};
};
Khaos.registerOptionSet("tooltip",optionSet);
Enchantrix.State.Khaos_Registered = true;
Khaos.refresh();
return true;
end
function registerAuctioneerOptions()
local insertPos
for key, value in ipairs(optionSet.options) do
if value.id == "valuate" then
insertPos = key + 1
end
end
if (optionSet.options[insertPos].id == 'valuate-hsp') then
return
end
local AuctioneerOptions = {
{
id="valuate-hsp";
type=K_TEXT;
text=function()
return _ENCH('GuiValuateAverages')
end;
helptext=function()
return _ENCH('HelpGuessAuctioneerHsp')
end;
callback=function(state)
genVarSet('valuate-hsp', state.checked);
end;
feedback=function(state)
if (state.checked) then
return (string.format(_ENCH('FrmtActEnable'), _ENCH('ShowGuessAuctioneerHsp')));
else
return (string.format(_ENCH('FrmtActDisable'), _ENCH('ShowGuessAuctioneerHsp')));
end
end;
check=true;
default={checked = Enchantrix.Config.GetFilterDefaults('valuate-hsp')};
disabled={checked = false};
dependencies={valuate={checked=true;}, all={checked=true;}};
difficulty=2;
};
{
id="valuate-median";
type=K_TEXT;
text=function()
return _ENCH('GuiValuateMedian')
end;
helptext=function()
return _ENCH('HelpGuessAuctioneerMedian')
end;
callback=function(state)
genVarSet('valuate-median', state.checked);
end;
feedback=function(state)
if (state.checked) then
return (string.format(_ENCH('FrmtActEnable'), _ENCH('ShowGuessAuctioneerMed')));
else
return (string.format(_ENCH('FrmtActDisable'), _ENCH('ShowGuessAuctioneerMed')));
end
end;
check=true;
default={checked = Enchantrix.Config.GetFilterDefaults('valuate-median')};
disabled={checked = false};
dependencies={valuate={checked=true;}, all={checked=true;}};
difficulty=2;
};
};
optionSet.options[insertPos - 1].helptext = function() return _ENCH('HelpValue') end;
for i, opt in ipairs(AuctioneerOptions) do
tinsert(optionSet.options, insertPos + i - 1, opt);
end
Khaos.unregisterOptionSet("Enchantrix");
Khaos.registerOptionSet("tooltip", optionSet);
Khaos.refresh();
end
function auctioneerLoaded()
Stubby.UnregisterAddOnHook("Auctioneer", "Enchantrix")
-- Make sure we have a usable version of Auctioneer loaded (3.4 or higher)
if Auctioneer and Auctioneer.Version then
local ver = Enchantrix.Util.Split(Auctioneer.Version, ".")
local major = tonumber(ver[1]) or 0
local minor = tonumber(ver[2]) or 0
if ver[3] == "DEV" then minor = minor + 1 end
if major > 3 or (major >= 3 and minor >= 4) then
Enchantrix.State.Auctioneer_Loaded = true
end
end
if not Enchantrix.State.Auctioneer_Loaded then
-- Old version of Auctioneer
if not EnchantConfig.displayedAuctioneerWarning then
-- Yell at the user, but only once
message(_ENCH('MesgAuctVersion'))
EnchantConfig.displayedAuctioneerWarning = true
else
Enchantrix.Util.ChatPrint(_ENCH('MesgAuctVersion'))
end
return
end
EnchantConfig.displayedAuctioneerWarning = nil
if Enchantrix.State.Khaos_Registered then
registerAuctioneerOptions()
end
end
function setKhaosSetKeyParameter(key, parameter, value)
if (Enchantrix.State.Khaos_Registered) then
if (Khaos.getSetKey("Enchantrix", key)) then
Khaos.setSetKeyParameter("Enchantrix", key, parameter, value)
else
EnhTooltip.DebugPrint("setKhaosSetKeyParameter(): key " .. key .. " does not exist")
end
end
end
function setKhaosSetKeyValue(key, value)
if (Enchantrix.State.Khaos_Registered) then
local kKey = Khaos.getSetKey("Enchantrix", key)
if (not kKey) then
EnhTooltip.DebugPrint("setKhaosSetKeyParameter(): key " .. key .. " does not exist")
elseif (kKey.checked ~= nil) then
-- EnhTooltip.DebugPrint("setKhaosSetKeyParameter(): setting ", value, " for key ", key)
Khaos.setSetKeyParameter("Enchantrix", key, "checked", value)
elseif (kKey.value ~= nil) then
Khaos.setSetKeyParameter("Enchantrix", key, "value", value)
else
EnhTooltip.DebugPrint("setKhaosSetKeyParameter(): don't know how to update key ", key)
end
end
end
-- Cleaner Command Handling Functions (added by MentalPower)
function handleCommand(command, source)
-- To print or not to print, that is the question...
local chatprint = nil;
if (source == "GUI") then
chatprint = false;
else
chatprint = true;
end;
-- Divide the large command into smaller logical sections (Shameless copy from the original function)
local i,j, cmd, param = string.find(command, "^([^ ]+) (.+)$")
if (not cmd) then cmd = command end
if (not cmd) then cmd = "" end
if (not param) then param = "" end
cmd = Enchantrix.Locale.DelocalizeCommand(cmd)
if ((cmd == "") or (cmd == "help")) then
-- /enchantrix help
chatPrintHelp();
return;
elseif ((cmd == "on") or (cmd == "off") or (cmd == "toggle")) then
-- /enchantrix on|off|toggle
onOff(cmd, chatprint);
elseif (cmd == 'disable') then
-- /enchantrix disable
Enchantrix.Util.ChatPrint(_ENCH('MesgDisable'));
Stubby.SetConfig("Enchantrix", "LoadType", "never");
elseif (cmd == 'load') then
-- /enchantrix load always|never
if (param == "always") or (param == "never") then
Stubby.SetConfig("Enchantrix", "LoadType", param);
if (chatprint) then
Enchantrix.Util.ChatPrint("Setting Enchantrix to "..param.." load for this toon");
setKhaosSetKeyValue("LoadSettings", param)
end
end
elseif (cmd == 'clear') then
-- /enchantrix clear
clear(param, chatprint);
elseif (cmd == 'locale') then
-- /enchantrix locale
Enchantrix.Config.SetLocale(param, chatprint);
elseif (cmd == 'default') then
-- /enchantrix default
default(param, chatprint);
elseif (cmd == 'print-in') then
-- /enchantrix print-in
Enchantrix.Config.SetFrame(param, chatprint)
elseif (cmd == 'bidbroker' or cmd == 'bb') then
-- /enchantrix bidbroker
doBidBroker(param);
elseif (cmd == 'percentless' or cmd == 'pl') then
doPercentLess(param);
elseif (Enchantrix.Config.GetFilterDefaults(cmd) ~= nil) then
genVarSet(cmd, param, chatprint);
elseif (chatprint) then
Enchantrix.Util.ChatPrint(string.format(_ENCH('FrmtActUnknown'), cmd));
end
end
-- Help ME!! (The Handler) (Another shameless copy from the original function)
function chatPrintHelp()
Enchantrix.Util.ChatPrint(_ENCH('FrmtUsage'));
local onOffToggle = " (".._ENCH('CmdOn').."|".._ENCH('CmdOff').."|".._ENCH('CmdToggle')..")";
local lineFormat = " |cffffffff/enchantrix %s "..onOffToggle.."|r |cff2040ff[%s]|r - %s";
Enchantrix.Util.ChatPrint(" |cffffffff/enchantrix "..onOffToggle.."|r |cff2040ff["..Enchantrix.Locale.GetLocalizedFilterVal('all').."]|r - " .. _ENCH('HelpOnoff'));
Enchantrix.Util.ChatPrint(" |cffffffff/enchantrix ".._ENCH('CmdDisable').."|r - " .. _ENCH('HelpDisable'));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('CmdBarker'), Enchantrix.Locale.GetLocalizedFilterVal('barker'), _ENCH('HelpBarker')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('ShowCount'), Enchantrix.Locale.GetLocalizedFilterVal('counts'), _ENCH('HelpCount')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('ShowTerse'), Enchantrix.Locale.GetLocalizedFilterVal('terse'), _ENCH('HelpTerse')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('ShowEmbed'), Enchantrix.Locale.GetLocalizedFilterVal('embed'), _ENCH('HelpEmbed')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('ShowValue'), Enchantrix.Locale.GetLocalizedFilterVal('valuate'), _ENCH('HelpValue')));
if Enchantrix.State.Auctioneer_Loaded then
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('ShowGuessAuctioneerHsp'), Enchantrix.Locale.GetLocalizedFilterVal('valuate-hsp'), _ENCH('HelpGuessAuctioneerHsp')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('ShowGuessAuctioneerMed'), Enchantrix.Locale.GetLocalizedFilterVal('valuate-median'), _ENCH('HelpGuessAuctioneerMedian')));
else
Enchantrix.Util.ChatPrint(_ENCH('HelpGuessNoauctioneer'));
end
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('ShowGuessBaseline'), Enchantrix.Locale.GetLocalizedFilterVal('valuate-baseline'), _ENCH('HelpGuessBaseline')));
lineFormat = " |cffffffff/enchantrix %s %s|r - %s";
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('CmdLocale'), _ENCH('OptLocale'), _ENCH('HelpLocale')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('CmdClear'), _ENCH('OptClear'), _ENCH('HelpClear')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('CmdFindBidauct'), _ENCH('OptFindBidauct'), _ENCH('HelpFindBidauct')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('CmdFindBuyauct'), _ENCH('OptFindBuyauct'), _ENCH('HelpFindBuyauct')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('CmdDefault'), _ENCH('OptDefault'), _ENCH('HelpDefault')));
Enchantrix.Util.ChatPrint(string.format(lineFormat, _ENCH('CmdPrintin'), _ENCH('OptPrintin'), _ENCH('HelpPrintin')));
end
--[[
The onOff(state, chatprint) function handles the state of the Enchantrix AddOn (whether it is currently on or off)
If "on" or "off" is specified in the "state" variable then Enchantrix's state is changed to that value,
If "toggle" is specified then it will toggle Enchantrix's state (if currently on then it will be turned off and vice-versa)
If a boolean (or nil) value is passed as the first argument the conversion is as follows:
"true" is the same as "on"
"false" is the same as "off"
"nil" is the same as "toggle"
If chatprint is "true" then the state will also be printed to the user.
]]
function onOff(state, chatprint)
if (type(state) == "string") then
state = Enchantrix.Locale.DelocalizeFilterVal(state)
elseif (state == true) then
state = 'on'
elseif (state == false) then
state = 'off'
elseif (state == nil) then
state = 'toggle'
end
if (state == 'on') or (state == 'off') then
Enchantrix.Config.SetFilter('all', state);
elseif (state == "toggle") then
Enchantrix.Config.SetFilter('all', not Enchantrix.Config.GetFilter('all'))
end
-- Print the change and alert the GUI if the command came from slash commands. Do nothing if they came from the GUI.
if (chatprint) then
state = Enchantrix.Config.GetFilter('all')
setKhaosSetKeyParameter('all', "checked", state);
if (state) then
Enchantrix.Util.ChatPrint(_ENCH('StatOn'));
else
Enchantrix.Util.ChatPrint(_ENCH('StatOff'));
end
end
return state;
end
-- The following functions are almost verbatim copies of the original functions but modified in order to make them compatible with direct GUI access.
function clear(param, chatprint)
if (param == _ENCH('CmdClearAll')) or (param == "all") then
EnchantedLocal = {}
if (chatprint) then
Enchantrix.Util.ChatPrint(_ENCH('FrmtActClearall'));
end
else
for link in string.gfind(param, "|c%x+|Hitem:%d+:%d+:%d+:%d+|h%b[]|h|r") do
local sig = Enchantrix.Util.GetSigFromLink(link)
EnchantedLocal[sig] = nil
if (chatprint) then
Enchantrix.Util.ChatPrint(string.format(_ENCH('FrmtActClearOk'), link))
end
end
end
end
-- This function was added by MentalPower to implement the /enx default command
function default(param, chatprint)
local paramLocalized
if (param == nil) or (param == "") then
return
elseif (param == _ENCH('CmdClearAll')) or (param == "all") then
param = "all"
EnchantConfig.filters = {}
else
paramLocalized = param
param = Enchantrix.Locale.DelocalizeCommand(param)
Enchantrix.Config.SetFilter(param, nil)
end
if (chatprint) then
if (param == "all") then
Enchantrix.Util.ChatPrint(_ENCH('FrmtActDefaultAll'));
for k,v in pairs(EnchantConfig.filters) do
setKhaosSetKeyValue(k, Enchantrix.Config.GetFilter(k));
end
else
Enchantrix.Util.ChatPrint(string.format(_ENCH('FrmtActDefault'), paramLocalized));
setKhaosSetKeyValue(param, Enchantrix.Config.GetFilter(param));
end
end
end
function genVarSet(variable, param, chatprint)
param = Enchantrix.Locale.DelocalizeFilterVal(param);
if (param == 'on' or param == 'off' or param == true or param == false) then
Enchantrix.Config.SetFilter(variable, param);
elseif (param == 'toggle' or param == nil or param == "") then
Enchantrix.Config.SetFilter(variable, not Enchantrix.Config.GetFilter(variable))
end
if (chatprint) then
if (Enchantrix.Config.GetFilter(variable)) then
Enchantrix.Util.ChatPrint(string.format(_ENCH('FrmtActEnable'), Enchantrix.Locale.LocalizeCommand(variable)));
setKhaosSetKeyParameter(variable, "checked", true);
else
Enchantrix.Util.ChatPrint(string.format(_ENCH('FrmtActDisable'), Enchantrix.Locale.LocalizeCommand(variable)));
setKhaosSetKeyParameter(variable, "checked", false);
end
end
end
---------------------------------------
-- Auctioneer dependant commands --
---------------------------------------
function percentLessFilter(percentLess, signature)
local filterAuction = true;
local id,rprop,enchant, name, count,min,buyout,uniq = Auctioneer.Core.GetItemSignature(signature);
local disenchantsTo = getAuctionItemDisenchants(signature, true);
if not disenchantsTo.totals then return filterAuction; end
local hspValue = disenchantsTo.totals.hspValue or 0;
local medValue = disenchantsTo.totals.medValue or 0;
local mktValue = disenchantsTo.totals.mktValue or 0;
local confidence = disenchantsTo.totals.conf or 0;
local myValue = confidence * (hspValue + medValue + mktValue) / 3;
local margin = Auctioneer.Statistic.PercentLessThan(myValue, buyout/count);
local profit = (myValue * count) - buyout;
local results = {
buyout = buyout,
count = count,
value = myValue,
margin = margin,
profit = profit,
conf = confidence
};
if (buyout > 0) and (margin >= tonumber(percentLess)) and (profit >= MIN_PROFIT_MARGIN) then
filterAuction = false;
profitMargins[signature] = results;
end
return filterAuction;
end
function bidBrokerFilter(minProfit, signature)
local filterAuction = true;
local id,rprop,enchant, name, count,min,buyout,uniq = Auctioneer.Core.GetItemSignature(signature);
local currentBid = Auctioneer.Statistic.GetCurrentBid(signature);
local disenchantsTo = getAuctionItemDisenchants(signature, true);
if not disenchantsTo.totals then return filterAuction; end
local hspValue = disenchantsTo.totals.hspValue or 0;
local medValue = disenchantsTo.totals.medValue or 0;
local mktValue = disenchantsTo.totals.mktValue or 0;
local confidence = disenchantsTo.totals.conf or 0;
local myValue = confidence * (hspValue + medValue + mktValue) / 3;
local margin = Auctioneer.Statistic.PercentLessThan(myValue, currentBid/count);
local profit = (myValue * count) - currentBid;
local profitPricePercent = math.floor((profit / currentBid) * 100);
local results = {
buyout = buyout,
count = count,
value = myValue,
margin = margin,
profit = profit,
conf = confidence
};
if (currentBid <= MAX_BUYOUT_PRICE) and (profit >= tonumber(minProfit)) and (profit >= MIN_PROFIT_MARGIN) and (profitPricePercent >= MIN_PROFIT_PRICE_PERCENT) then
filterAuction = false;
profitMargins[signature] = results;
end
return filterAuction;
end
function profitComparisonSort(a, b)
if (not a) or (not b) then return false; end
local aSig = a.signature;
local bSig = b.signature;
if (not aSig) or (not bSig) then return false; end
local aEpm = profitMargins[aSig];
local bEpm = profitMargins[bSig];
if (not aEpm) and (not bEpm) then return false; end
local aProfit = aEpm.profit or 0;
local bProfit = bEpm.profit or 0;
local aMargin = aEpm.margin or 0;
local bMargin = bEpm.margin or 0;
local aValue = aEpm.value or 0;
local bValue = bEpm.value or 0;
if (aProfit > bProfit) then return true; end
if (aProfit < bProfit) then return false; end
if (aMargin > bMargin) then return true; end
if (aMargin < bMargin) then return false; end
if (aValue > bValue) then return true; end
if (aValue < bValue) then return false; end
return false;
end
function bidBrokerSort(a, b)
if (not a) or (not b) then return false; end
local aTime = a.timeLeft or 0;
local bTime = b.timeLeft or 0;
if (aTime > bTime) then return true; end
if (aTime < bTime) then return false; end
return profitComparisonSort(a, b);
end
function doPercentLess(percentLess)
if not Auctioneer then
Enchantrix.Util.ChatPrint("You do not have Auctioneer installed. Auctioneer must be installed to do an enchanting percentless scan");
return;
elseif not (Auctioneer.Filter or Auctioneer.Filter.QuerySnapshot) then
Enchantrix.Util.ChatPrint("You do not have the correct version of Auctioneer installed, this feature requires Auctioneer v3.3.0.0675 or later");
return;
end
if not percentLess or percentLess == "" then percentLess = MIN_PERCENT_LESS_THAN_HSP end
local output = string.format(_ENCH('FrmtPctlessHeader'), percentLess);
Enchantrix.Util.ChatPrint(output);
Enchantrix.Storage.Price_Cache = {t=time()};
profitMargins = {};
local targetAuctions = Auctioneer.Filter.QuerySnapshot(percentLessFilter, percentLess);
-- sort by profit based on median
table.sort(targetAuctions, profitComparisonSort);
-- output the list of auctions
for _,a in targetAuctions do
if (a.signature and profitMargins[a.signature]) then
local quality = EnhTooltip.QualityFromLink(a.itemLink);
if (quality and quality >= 2) then
local id,rprop,enchant, name, count,_,buyout,_ = Auctioneer.Core.GetItemSignature(a.signature);
local value = profitMargins[a.signature].value;
local margin = profitMargins[a.signature].margin;
local profit = profitMargins[a.signature].profit;
local output = string.format(_ENCH('FrmtPctlessLine'), Auctioneer.Util.ColorTextWhite(count.."x")..a.itemLink, EnhTooltip.GetTextGSC(value * count), EnhTooltip.GetTextGSC(buyout), EnhTooltip.GetTextGSC(profit * count), Auctioneer.Util.ColorTextWhite(margin.."%"));
Enchantrix.Util.ChatPrint(output);
end
end
end
Enchantrix.Util.ChatPrint(_ENCH('FrmtPctlessDone'));
end
function doBidBroker(minProfit)
if not Auctioneer then
Enchantrix.Util.ChatPrint("You do not have Auctioneer installed. Auctioneer must be installed to do an enchanting percentless scan");
return;
elseif not (Auctioneer.Filter and Auctioneer.Filter.QuerySnapshot) then
Enchantrix.Util.ChatPrint("You do not have the correct version of Auctioneer installed, this feature requires Auctioneer v3.3.0.0675 or later");
return;
end
if not minProfit or minProfit == "" then minProfit = MIN_PROFIT_MARGIN; else minProfit = tonumber(minProfit) * 100; end
local output = string.format(_ENCH('FrmtBidbrokerHeader'), EnhTooltip.GetTextGSC(minProfit));
Enchantrix.Util.ChatPrint(output);
Enchantrix.Storage.Price_Cache = {t=time()};
profitMargins = {};
local targetAuctions = Auctioneer.Filter.QuerySnapshot(bidBrokerFilter, minProfit);
-- sort by profit based on median
table.sort(targetAuctions, bidBrokerSort);
-- output the list of auctions
for _,a in targetAuctions do
if (a.signature and profitMargins[a.signature]) then
local quality = EnhTooltip.QualityFromLink(a.itemLink);
if (quality and quality >= 2) then
local id,rprop,enchant, name, count, min, buyout,_ = Auctioneer.Core.GetItemSignature(a.signature);
local currentBid = Auctioneer.Statistic.GetCurrentBid(a.signature);
local value = profitMargins[a.signature].value;
local margin = profitMargins[a.signature].margin;
local profit = profitMargins[a.signature].profit;
local bidText = _ENCH('FrmtBidbrokerCurbid');
if (currentBid == min) then
bidText = _ENCH('FrmtBidbrokerMinbid');
end
local output = string.format(_ENCH('FrmtBidbrokerLine'), Auctioneer.Util.ColorTextWhite(count.."x")..a.itemLink, EnhTooltip.GetTextGSC(value * count), bidText, EnhTooltip.GetTextGSC(currentBid), EnhTooltip.GetTextGSC(profit * count), Auctioneer.Util.ColorTextWhite(margin.."%"), Auctioneer.Util.ColorTextWhite(Auctioneer.Util.GetTimeLeftString(a.timeLeft)));
Enchantrix.Util.ChatPrint(output);
end
end
end
Enchantrix.Util.ChatPrint(_ENCH('FrmtBidbrokerDone'));
end
function getAuctionItemDisenchants(auctionSignature, useCache)
local id,rprop,enchant, name, count,min,buyout,uniq = Auctioneer.Core.GetItemSignature(auctionSignature);
local sig = string.format("%d:%d:%d", id, enchant, rprop);
return Enchantrix.Storage.GetItemDisenchants(sig, name, useCache);
end
Enchantrix.Command = {
Revision = "$Revision: 944 $",
AddonLoaded = addonLoaded,
AuctioneerLoaded = auctioneerLoaded,
HandleCommand = handleCommand,
Register = register,
SetKhaosSetKeyValue = setKhaosSetKeyValue,
SetKhaosSetKeyParameter = setKhaosSetKeyParameter,
SetKhaosSetKeyValue = setKhaosSetKeyValue,
}