WoW:Macro

From ISBoxer
Jump to: navigation, search

This page describes features in ISBoxer that apply to World of Warcraft macros. If you have no idea how to make a World of Warcraft macro, or what goes in one, wowpedia's HOWTO: Make a Macro might be a good place to start.

World of Warcraft supports a fairly comprehensive macroing system in the game, and additionally allows creation of Addons to customize the WoW client in various ways. ISBoxer can use these features to generate and manage WoW Macros, via the ISBoxer Addon. When the Addon is created (when you Export to Inner Space), ISBoxer can also fill in some final details of each macro for you, such as Character names.

Several WoW Macros are created for you when using the Quick Setup Wizard for WoW. The generated macros are placed in the World of Warcraft Macro Library in a Macro Set called Quick Setup 38 (corresponding to ISBoxer 38). These macros generally come with Descriptions that help explain their function.

Prior to ISBoxer 38, most WoW Macros in ISBoxer were kept in individual WoW Macro Actions and spread across various Mapped Keys. That is no longer recommended, since it makes it hard for you to find your WoW Macros and decide who should have them. It is now recommended to create your macros through the World of Warcraft Macro Library and use them with Named World of Warcraft Macro Actions.

Dynamic macros

Dynamic Macros are those that include variables. Variables are resolved at the time the ISBoxer Addon is generated, when you Export to Inner Space. Any of the pre-defined variables can be used anywhere in your Macro, and will be replaced for the final Macro with the desired value. For example, if you place the text {CHARACTER} in your Macro, it will be replaced with the name of the Character it is executed on, e.g.:

/say Hi, my name is {CHARACTER}

... might translate to:

/say Hi, my name is Bob

or

/say Hi, my name is Alice

... depending on the name of the Character.

List of Variables

The following is a complete list of available variables:

  • {SLOT} will be replaced with the current Slot number, e.g. 1
  • {SLOTS} will be replaced with the number of Slots assigned to the current Character Set, e.g. 5
  • {SLOT#} where # is a number, e.g. {SLOT1}, will be replaced with the name of the Character in that Slot, e.g. Alice
  • {CHARACTER} will be replaced with the current Character name, e.g. Alice
  • {CHARACTERSET} will be replaced with the current Character Set name, e.g. Team Bob and Alice
  • {FTL} will be replaced with FTL conditionals as defined by the Character Set, e.g. [nomod:alt,mod:lshift,mod:lctrl]ToonA;[mod:lalt,nomod:shift,mod:lctrl]ToonB
  • {MYFTL} will be replaced with FTL conditionals as defined by the Character Set for the current Slot, e.g. [nomod:alt,mod:lshift,mod:lctrl]
  • {FTL#} where # is a number, e.g. {FTL1}, will be replaced with FTL conditionals as defined by the Character Set for that Slot, e.g. [nomod:alt,mod:lshift,mod:lctrl]
  • {ASSISTHOTCHARACTER} will be replaced with /assist {FTL} or /assist focus, depending on whether FTL is enabled for the Mapped Key
  • {TARGETHOTCHARACTER} will be replaced with /targetexact {FTL} or /target focus, depending on whether FTL is enabled for the Mapped Key
  • {SET#} where # is a number, e.g. {SET1}, will be replaced with a linked Character Set name. SET1 is the main Character Set, SET2 is the first in the main Character Set's Also Launch list, SET3 is the second, and so on
  • {SET#SLOT#} where # are numbers, e.g. {SET1SLOT1}, will be replaced with the name of the Character in that Slot in the specified Character Set (as described above)
  • {SET#FTL#} where # are numbers, e.g. {SET1FTL1}, will be replaced with FTL conditionals as defined by that Character Set (as described above) for that Slot

Variables are case sensitive -- they must be in upper case as shown.

Conditional Macros

Conditional Macros are those that may include or omit lines depending on available conditions.

Conditions are resolved at the time the ISBoxer Addon is generated, when you Export to Inner Space, so when using ATG groups, the character will need to be in the group at the time of export.


The following are types of conditions that can be tested:

  • Is there a Character in Slot #? (e.g. Slot 1) Note that if a Character Set does not have 5 slots, the answer to "Is there a Character in Slot 5?" is no.
  • Is a Character (the current Character, any Character by name, or the Character in a Slot #) in..
    • .. a given Action Target Group? (any Action Target Group by name)
    • .. a given Character Set? (the current Character Set, or any Character Set by name)
  • Is the Character in Slot # (e.g. Slot 1) the same as a given Character? (the current Character, any Character by name)
  • Is FTL enabled for the Mapped Key?

Conditionals are comprised of keywords or operators, and strings enclosed in quotes. Strings are resolved contextually, based on the operators used on them, as a Character, a Character Set, or an Action Target Group. If no operator is used on the string, it is resolved as a Character. Variables may be used in the strings, but this should not be necessary under normal circumstances. These are not case sensitive, but using lower case for keywords is recommended for clarity.

Specifying a Character in conditionals

Character strings can use certain special words to grab a specific Character, by Slot number, or for the current Character. This can also be done using variables.

  • "me" (including quotes) is equivalent to "{CHARACTER}" (including quotes) is equivalent to character (no quotes, this is a Keyword from the list in the next section).
  • "slot #" (including quotes, where # is a number such as 1) is equivalent to "{SLOT#}" (including quotes, where # is a number such as 1)
  • Otherwise, the name of the Character is used to indicate a specific Character, such as "Alice"

List of Keywords

The following keywords are available (if it says "operates on" it is an operator, if it says "evaluates to" it :

not
Operates on whatever is immediately to the right of it, and giving it the opposite meaning.
and
Operates on whatever is to the left and right of it, meaning that both conditions must be met.
or
Operates on whatever is to the left and right of it, meaning that either of the conditions must be met.
is
Operates on a Character to the left of it, and a Character to the right of it, to test equality. Can be combined with not as follows: is not, isnt or isn't for a relatively natural English feel. Examples: "Character A" is "Character B" or "Character A" is not "Character B"
in
Operates on a Character to the left of it, and a Character Set or Action Target Group to the right of it, to test whether a Character is in a given Character Set or Action Target Group. Can be combined with is and not as follows: is in, is not in, isnt in, or isn't in for a relatively natural English feel. Examples: "Character A" is in "deathkights" or "Character B" is not in "shamans" or "Character C" is not in "My Character Set"
ftl
Evaluates as true if FTL Modifiers are enabled for the Mapped Key, otherwise false
character
Evaluates to the name of the Character the Macro is being generated for (if it will be generated for multiple Characters, will resolve to the name of each Character individually). Examples: character is "ToonA" or character in "deathknights". Equivalent to "{CHARACTER}" (including quotes).
character set
Evaluates to the name of the Character Set the Macro is being generated for (if it will be generated for multiple Character Sets, will resolve to the name of each Character Set individually). Examples: "Someone" is in characterset. Equivalent to "{CHARACTERSET}" (including quotes).

Operator precedence and grouping

Operators are processed in order of precedence, to arrive at the final result of the conditions (true or false). This means that if operators are not manually grouped with parentheses, grouping is implied by order of precedence.

Operators are processed in the following order
  1. in, is
  2. not
  3. and
  4. or

Conditions may be grouped by using parentheses.

Applying conditions

Conditions may be applied on a per-line basis. Conditional state from the previous line is kept in order to handle chaining, however no nesting is allowed, and there are no code blocks (see the description of !also).

Lines starting with ! are interpreted as conditional statements. Available conditional statements are as follows:

!if (conditions) /command
The given command will only be applied to the macro if the given conditions are met. Examples: !if (character is in "deathknights") /cast Icy Touch, or !if (ftl or not ftl) /say That is the question...
!elseif (conditions) /command
The given command will only be applied to the macro if the given conditions are met and the previously chained conditions were not met. Example: !elseif (character is in "paladins") /startattack
!else /command
The given command will only be applied to the macro if the previously chained conditions were not met. Example: !else /petattack
!also /command
The given command will only be applied to the macro if the previously chained line was also applied (using any of !if, !elseif, !else, or !also). Example: !also /cast Auto Shot

Example Advanced Macros

Universal 5-man /invite macro

Invites all 5 Characters in a 5-man Set
/invite {SLOT1}
/invite {SLOT2}
/invite {SLOT3}
/invite {SLOT4}
/invite {SLOT5}

Universal up-to-5-man /invite macro

This version has conditions to a) not invite current character, and b) not invite if the slot is empty (which it can't be when exported, but for example...) or the Character Set doesn't have that many slots
!if ("slot 1" and character is not "slot 1") /invite {SLOT1}
!if ("slot 2" and character is not "slot 2") /invite {SLOT2}
!if ("slot 3" and character is not "slot 3") /invite {SLOT3}
!if ("slot 4" and character is not "slot 4") /invite {SLOT4}
!if ("slot 5" and character is not "slot 5") /invite {SLOT5}

Combined multi-class attack macro

I made up different attacks, you'd probably want your own
!if (character is in "shamans") /cast Lightning Bolt
!elseif (character is in "deathknights") /startattack
!also /cast Icy Touch
!elseif (character is in "paladins") /startattack
!elseif (character is in "rogues") /startattack
!also /cast Sinister Strike
!elseif (character is in "druids") /cast Wrath
This will resolve to the following
  • shamans
/cast Lightning Bolt
  • deathknights
/startattack
/cast Icy Touch
  • paladins
/startattack
  • rogues
/startattack
/cast Sinister Strike
  • druids
/cast Wrath

See Also