WoW:Creating a slash command: Difference between revisions

From AddOn Studio
Jump to navigation Jump to search
No edit summary
 
m (Added lots of missing detail)
Line 1: Line 1:
This is very simple. In your OnLoad function of your script, put in the following:
== Simple Example ==
 
Suppose you have:
 
function MyScript_Command(cmd)
  DEFAULT_CHAT_FRAME:AddMessage("Command: " .. cmd);
end
In your OnLoad function of your script, put in the following:


  SLASH_MYSCRIPT1 = "/myscript";
  SLASH_MYSCRIPT1 = "/myscript";
  SlashCmdList["MYSCRIPT"] = MyChatHandlerFunction;
SLASH_MYSCRIPT2 = "/mys"; -- A shortcut or alias
  SlashCmdList["MYSCRIPT"] = MyScript_Command;
 
== The Details ==
 
Slash command parsing is done by the chat frame, and it works as follows.
 
* Special 'built in' slash commands for chat are handled first.
* The chat handler then iterates over the contents of the global table <b>SlashCmdList</b>
* The key of each entry is the <i>CommandId</i>. The parser then examines <b>SLASH_<i>&lt;CommandId&gt;</i>1</b>, <b>SLASH_<i>&lt;CommandId&gt;</i>2</b>, ... and so on, until it either finds a match, or gets a nil value (undefined) on the next <b>SLASH_<i>&lt;CommandId&gt;</i><i>&lt;Number&gt;</i></b>.
* If there was a hit, then the function value of <b>SlashCmdList["<i>&lt;CommandId&gt;</i>"]</b> is invoked, with the rest of the command line as its single parameter
* Otherwise, the next command is searched until a match is found or the list is exhausted.
 
== Conventions ==


Hope that helps.
* Command ID's are generally all caps, with underscores if necessary.
* Pick a command ID that's going to be unique to your addon, a common convention is ADDONNAME_COMMANDNAME, or if you just have one, then ADDONNAME (Where ADDONNAME is the name of your addon).
* The actual <b>SLASH_<i>&lt;CommandId&gt;</i><i>&lt;Number&gt;</i></b> values should be localizable if you plan on your addon being translated, but the command ID will remain the same.
* Be prudent about how many aliases you make for your command, and try and pick something that's unlikely to collide with someone else's.

Revision as of 08:50, 2 April 2005

Simple Example

Suppose you have:

function MyScript_Command(cmd)
  DEFAULT_CHAT_FRAME:AddMessage("Command: " .. cmd);
end

In your OnLoad function of your script, put in the following:

SLASH_MYSCRIPT1 = "/myscript";
SLASH_MYSCRIPT2 = "/mys"; -- A shortcut or alias
SlashCmdList["MYSCRIPT"] = MyScript_Command;

The Details

Slash command parsing is done by the chat frame, and it works as follows.

  • Special 'built in' slash commands for chat are handled first.
  • The chat handler then iterates over the contents of the global table SlashCmdList
  • The key of each entry is the CommandId. The parser then examines SLASH_<CommandId>1, SLASH_<CommandId>2, ... and so on, until it either finds a match, or gets a nil value (undefined) on the next SLASH_<CommandId><Number>.
  • If there was a hit, then the function value of SlashCmdList["<CommandId>"] is invoked, with the rest of the command line as its single parameter
  • Otherwise, the next command is searched until a match is found or the list is exhausted.

Conventions

  • Command ID's are generally all caps, with underscores if necessary.
  • Pick a command ID that's going to be unique to your addon, a common convention is ADDONNAME_COMMANDNAME, or if you just have one, then ADDONNAME (Where ADDONNAME is the name of your addon).
  • The actual SLASH_<CommandId><Number> values should be localizable if you plan on your addon being translated, but the command ID will remain the same.
  • Be prudent about how many aliases you make for your command, and try and pick something that's unlikely to collide with someone else's.