AuctioneerSuite/Enchantrix/EnxCommand.lua
2026-04-13 17:48:13 -04:00

385 lines
13 KiB
Lua

--[[
Enchantrix Addon for World of Warcraft(tm).
Version: 5.9.4961 (WhackyWallaby)
Revision: $Id: EnxCommand.lua 4051 2009-02-08 04:17:50Z ccox $
URL: http://enchantrix.org/
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 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
]]
Enchantrix_RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Enchantrix/EnxCommand.lua $", "$Rev: 4051 $")
-- Global functions
local addonLoaded -- Enchantrix.Command.AddonLoaded()
local auctioneerLoaded -- Enchantrix.Command.AuctioneerLoaded()
local handleCommand -- Enchantrix.Command.HandleCommand()
-- Local functions
local chatPrintHelp
local onOff
local clear
local default
local genVarSet
local tooltip = LibStub("nTipHelper:1")
-- GUI Init Variables (Added by MentalPower)
Enchantrix.State.GUI_Registered = nil
function addonLoaded()
end
function auctioneerLoaded()
-- Make sure we have a usable version of Auctioneer loaded (3.4 or higher)
if AucAdvanced and AucAdvanced.Version then
local major,minor,patch,revision = strsplit('.', AucAdvanced.Version, 4)
local major = tonumber(major) or 0
local minor = tonumber(minor) or 0
if patch == "DEV" then
minor = minor + 1
patch = 0
revision = 0
end
if major >= 5 then
Enchantrix.State.Auctioneer_Loaded = true
Enchantrix.State.Auctioneer_Five = true
end
elseif Auctioneer and Auctioneer.Version then
local major,minor,patch,revision = strsplit('.', Auctioneer.Version, 4)
local major = tonumber(major) or 0
local minor = tonumber(minor) or 0
if patch == "DEV" then
minor = minor + 1
patch = 0
revision = 0
end
if major >= 5 then
Enchantrix.State.Auctioneer_Loaded = true
Enchantrix.State.Auctioneer_Five = true
elseif major > 3 or (major == 3 and minor >= 4) then
Enchantrix.State.Auctioneer_Loaded = true
end
end
if not Enchantrix.State.Auctioneer_Loaded then
-- Don't complain if we are still waiting for Auctioneer to load
local aucLoadPending = (not Auctioneer and Stubby.GetConfig("Auctioneer", "LoadType") == "always")
or (not AucAdvanced and Stubby.GetConfig("Auc-Advanced", "LoadType") == "always")
if not aucLoadPending 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
end
return
end
-- ccox - with this enabled, we'll warn the user every single time they log in
-- that's very, very annoying
-- EnchantConfig.displayedAuctioneerWarning = nil
end
-- TODO - ccox - merge this somewhere sane
-- we have too many locations for these commands
-- can we use commandmap for this?
local commandToSettingLookup = {
-- ['terse'] = 'ToolTipTerseFormat',
['embed'] = 'ToolTipEmbedInGameTip',
['valuate'] = 'TooltipShowValues',
['valuate-hsp'] = 'TooltipShowAuctValueHSP',
['valuate-median'] = 'TooltipShowAuctValueMedian',
['valuate-baseline'] = 'TooltipShowBaselineValue',
['levels'] = 'TooltipShowDisenchantLevel',
['materials'] = 'TooltipShowDisenchantMats',
}
-- 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 cmd, param, param2 = command:match("^([%w%-]+)%s*([^%s]*)%s*(.*)$");
cmd = cmd or command or ""
param = param or ""
param2 = param2 or ""
--delocalize the command so we can work on it in English in here
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");
end
end
elseif (cmd == 'show' or cmd == 'config') then
-- show or hide our settings UI
Enchantrix.Settings.MakeGuiConfig()
local gui = Enchantrix.Settings.Gui
if (gui:IsVisible()) then
gui:Hide()
else
gui:Show()
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)
else
-- lookup conversion to internal variable names
if (commandToSettingLookup[cmd]) then
cmd = commandToSettingLookup[cmd];
end
-- try direct access
if (Enchantrix.Settings.GetDefault(cmd) ~= nil) then
genVarSet(cmd, param, chatprint);
elseif (chatprint) then
Enchantrix.Util.ChatPrint(_ENCH('FrmtActUnknown'):format(cmd));
end
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(" |cffffffff/enchantrix ".._ENCH('ConfigUI').."|r - " .. _ENCH('HelpShowUI'));
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('ShowEmbed'), Enchantrix.Locale.GetLocalizedFilterVal('embed'), _ENCH('HelpEmbed')));
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('ShowDELevels'), Enchantrix.Locale.GetLocalizedFilterVal('levels'), _ENCH('HelpShowDELevels')));
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('ShowDEMaterials'), Enchantrix.Locale.GetLocalizedFilterVal('materials'), _ENCH('HelpShowDEMaterials')));
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('ShowValue'), Enchantrix.Locale.GetLocalizedFilterVal('valuate'), _ENCH('HelpValue')));
if AucAdvanced then
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('ShowGuessAuctioneerVal'), Enchantrix.Locale.GetLocalizedFilterVal('valuate-val'), _ENCH('HelpGuessAuctioneer5Val')));
end
if Auctioneer and Enchantrix.State.Auctioneer_Loaded then
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('ShowGuessAuctioneerHsp'), Enchantrix.Locale.GetLocalizedFilterVal('valuate-hsp'), _ENCH('HelpGuessAuctioneerHsp')));
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('ShowGuessAuctioneerMed'), Enchantrix.Locale.GetLocalizedFilterVal('valuate-median'), _ENCH('HelpGuessAuctioneerMedian')));
end
if not AucAdvanced and not (Auctioneer and Enchantrix.State.Auctioneer_Loaded) then
Enchantrix.Util.ChatPrint(_ENCH('HelpGuessNoauctioneer'));
end
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('ShowGuessBaseline'), Enchantrix.Locale.GetLocalizedFilterVal('valuate-baseline'), _ENCH('HelpGuessBaseline')));
lineFormat = " |cffffffff/enchantrix %s %s|r - %s";
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('CmdLocale'), _ENCH('OptLocale'), _ENCH('HelpLocale')));
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('CmdClear'), _ENCH('OptClear'), _ENCH('HelpClear')));
Enchantrix.Util.ChatPrint(lineFormat:format(_ENCH('CmdDefault'), _ENCH('OptDefault'), _ENCH('HelpDefault')));
Enchantrix.Util.ChatPrint(lineFormat:format(_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.Settings.SetSetting('all', state);
elseif (state == "toggle") then
Enchantrix.Settings.SetSetting('all', not Enchantrix.Settings.GetSetting('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.Settings.GetSetting('all')
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
DisenchantList = {}
EnchantedLocal = {}
EnchantedBaseItems = {}
if (chatprint) then
Enchantrix.Util.ChatPrint(_ENCH('FrmtActClearall'));
end
else
local items = Enchantrix.Util.GetItemHyperlinks(param);
if (items) then
for pos, itemKey in ipairs(items) do
local sig = Enchantrix.Util.GetSigFromLink(itemKey)
local itemID = Enchantrix.Util.GetItemIdFromSig(sig)
EnchantedLocal[sig] = nil
EnchantedBaseItems[itemID] = nil
if (chatprint) then
Enchantrix.Util.ChatPrint(_ENCH('FrmtActClearOk'):format(itemKey))
end
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"
else
paramLocalized = param
param = Enchantrix.Locale.DelocalizeCommand(param)
Enchantrix.Settings.SetSetting(param, nil)
end
if (chatprint) then
if (param == "all") then
Enchantrix.Util.ChatPrint(_ENCH('FrmtActDefaultAll'));
Enchantrix.Settings.SetSetting('profile.default', true );
else
Enchantrix.Util.ChatPrint(_ENCH('FrmtActDefault'):format(paramLocalized));
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.Settings.SetSetting(variable, param);
elseif (param == 'toggle' or param == nil or param == "") then
Enchantrix.Settings.SetSetting(variable, not Enchantrix.Settings.GetSetting(variable))
end
if (chatprint) then
if (Enchantrix.Settings.GetSetting(variable)) then
Enchantrix.Util.ChatPrint(_ENCH('FrmtActEnable'):format(Enchantrix.Locale.LocalizeCommand(variable)));
else
Enchantrix.Util.ChatPrint(_ENCH('FrmtActDisable'):format(Enchantrix.Locale.LocalizeCommand(variable)));
end
end
end
Enchantrix.Command = {
Revision = "$Revision: 4051 $",
AddonLoaded = addonLoaded,
AuctioneerLoaded = auctioneerLoaded,
HandleCommand = handleCommand,
ChatPrintHelp = chatPrintHelp,
}