WoW:API and scripting quirks: Difference between revisions

From AddOn Studio
Jump to navigation Jump to search
m (catfix)
m (Move page script moved page API and scripting quirks to API and scripting quirks without leaving a redirect)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{cleanup|Mostly out of date and misguided; merge into relevant articles and delete}}
== World of Warcraft Scripting Quirks ==
== World of Warcraft Scripting Quirks ==
* [[Macros]]
* [[Macros]]
Line 13: Line 15:
** OnUpdate handlers are only called when the frame is visible.  
** OnUpdate handlers are only called when the frame is visible.  
** OnUpdate handles are called ''every'' frame. Use with care.
** OnUpdate handles are called ''every'' frame. Use with care.
** When nesting frames, you can access the parent frame name in XML names with 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).
** 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"
** 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 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.)
Line 35: Line 37:
** See [[Lua Scope]] for a complete description of the implications of Lua's variable scoping.
** See [[Lua Scope]] for a complete description of the implications of Lua's variable scoping.


== Also See ==
* [[Interface Customization FAQ]]
<br>
<br>
[[Category:Interface customization]]
[[Category:Interface customization]]

Latest revision as of 04:45, 15 August 2023


World of Warcraft Scripting Quirks[edit]

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