WoW:API and scripting quirks: Difference between revisions

m
Move page script moved page API and scripting quirks to WoW:API and scripting quirks without leaving a redirect
(Changed my "quirk")
m (Move page script moved page API and scripting quirks to WoW:API and scripting quirks without leaving a redirect)
 
(8 intermediate revisions by 7 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 code. 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 20: Line 22:
* Output to the outside world
* 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 "<tt>## [[SavedVariables]]:</tt>" header to indicate which data they wish to save.
** The only file output allowed is when the UI engine saves variables before it exits or reloads. Addons use the "<tt>## [[SavedVariables]]:</tt>" header to indicate which data they wish to save.
** Another way to output data is to save certain variables using the SetCVar() function.  This will immediatly do an export of the config.wtf file that contains various in game variables.  This will not allow you to create new variables to export out, just set non default values to certain in game variables.


* [[World of Warcraft API|Functions]]
* [[World of Warcraft API|Functions]]
Line 32: Line 33:
**** "|c" doesn't have the same problem, but will cause the text after it not to show.
**** "|c" doesn't have the same problem, but will cause the text after it not to show.


* Variables (not really a "quirk", more like a "need to know").
* Variables
** If you declare a local variable inside an IF block, it is only available inside that IF block.
** If you declare a local variable inside an code block (such as an IF block), it is only available inside that code block.
*** In Example 1, "Something" will never print. While in Example 2, "Something" does print.
** See [[Lua Scope]] for a complete description of the implications of Lua's variable scoping.
*** See [[Talk:API_and_scripting_quirks#Variables|Talk]] for more details.
    -- Example 1
    local someVar = true;
    if someVar then
        local someOtherVar = true; -- someOtherVar declared inside an IF block.
    end
    Print(tostring(someOtherVar)); -- Prints "nil" because the variable does not exist.
    if someOtherVar then
        Print("Something"); -- This never gets executed.
    end
 
    -- Example 2
    local someVar = true;
    local someOtherVar; -- someOtherVar declared before (outside) an IF block.
    if someVar then
        someOtherVar = true;
    end
    if someOtherVar then
        Print("Something"); -- This executes as expected.
    end
 
== Also See ==
 
* [[Interface Customization FAQ]]
 


<br>
[[Category:Interface customization]]
<br>
[[Category:Interface Customization]]
Anonymous user