WoW:API and scripting quirks


World of Warcraft Scripting QuirksEdit

  • 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
  • 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.