API and scripting quirks

World of Warcraft Scripting Quirks

 * Macros
 * Can only cast spells from a hotkey or mouse click
 * Macros cannot cast spells on a delay
 * /cast only works in Macros
 * only one spell or action can be triggered per button press


 * Slash Command
 * Can be use single in the Text Mode
 * Can be used in Macros


 * Frames
 * OnUpdate handlers are only called when the frame is visible.
 * OnUpdate handles are called every frame. Use with care.
 * When nesting frames, you can access the parent frame name in XML names with $parent, this is a textual substitution and cannot be used in Lua. The Lua equivalent to $parent is the GetParent method of the frame (e.g. getglobal(Frame:GetParent:GetName.."Button") is the same as $parentButton).
 * All Frames have a GetID function which will obtain the ID specified in the XML. ID's must be positive integers enclosed in quotes: ie. id="1" or id="20"
 * If you don't specify parent="UIParent" in your top-level frames, your frames won't be scaled according to the currently active UI scale. This can lead to some hair-pulling as you try to figure out why your fonts are so huge.  (But, in some cases, not having that scaling might be desirable.)
 * If you get no error output, but your addon is simply not being loaded, make sure you don't have a syntax error in your .xml file. A simple way to ensure that your xml is well-formed is to open it in Firefox; it will point out any XML structure errors to you. You can also check the contents of your Logs directory for errors.


 * Output to the outside world
 * The only file output allowed is when the UI engine saves variables before it exits or reloads. Addons use the "## SavedVariables:" header to indicate which data they wish to save.


 * Functions
 * x,y = GetCursorPosition; will return the current position of the mouse with respect to the object it currently is in. This means x will be 0 if the mouse is at the left edge of a frame or button, regardless of where that frame or button is.
 * x,y = GetCursorPosition(UIParent); will return the current position of the mouse with respect to the entire UI. This can be considered the absolute position..


 * ChatFrame
 * Trying to send colored text to other players will cause your client to disconnect. Not sure if Blizz's server is forcing the disconnect, or my client.
 * Example: /tell Name |cFF00FF00Hello|r.  The EditBox will show the text in green after replacing "||" with "|".  Pressing enter to send the info to the server chat channel results in the following:
 * "|r" causes the disconnect,
 * "|c" doesn't have the same problem, but will cause the text after it not to show.


 * Variables
 * If you declare a local variable inside an code block (such as an IF block), it is only available inside that code block.
 * See Lua Scope for a complete description of the implications of Lua's variable scoping.