Page 1 of 3
  1. #1

    Deciphering Macros


    Macros can be confusing at first glance to people who are unfamiliar with them, but just like anything in life, they are easy to master once you have enough practice with them!

    Many newer and casuals who don't play very often get overwhelmed by them and just do not use them at all which is a shame because they can increase dps in fights, make you CC faster and more efficiently, and heal better too!

    There are thousands of macros for WoW all over the internet, you've probably used some of them via copy+paste. This guide isn't going to show you "paste this macro and it works", but how to understand them so you no longer have to search for a macro when you need something, and can start writing your own. You will understand exactly what the macro is doing.

    Mouseover Macros

    Let's get down to it! There is no better way to learn something than to get hands on experience.

    We will be gradually creating a mouseover macro in this example. We will be using a druid, but if you play another class then use a different ability. The reason the mouseover macro is the main focus is because this is the most common macro in WoW for anyone to use. Whether it's for healing, dpsing, tanking.

    In here we will be building the macro from nothing at all, this should be easy for even the newest of macro makers to create as no knowledge of macros is required to follow this guide.

    • Type /macro in your chat box to open the macro creation box.
    • Next hit "New" at the bottom right.
    • It will open a window that allows you to enter a macro name. For this example we will use "Roots" as the name.
    • For now, pick any icon you like. It doesn't have to match the tooltip's image.

    • In the text box, type in the following and then drag the macro to your action bar

    /cast Entangling Roots

    Test the macro. Target a monster, and hit the macro. The monster will become rooted to the ground. Success!

    Now let's make it into a mouseover macro so we don't actually have to select the monster as our target
    • hit /macro to open up the window, and choose the macro we just made.
    • now add the following in red to the macro in the same area. @mouseover to the game means "target=mouseover"
    /cast [@mouseover] Entangling Roots
    You do not have to drag the macro back to the action bar, it should update. Hit escape to stop the text cursor blinking and your macro will live update.

    Test the macro again, this time put your mouse over a monster and hit the roots macro we made. Success! The monster we mouseovered just got rooted to the ground.

    Congratulations, you've made your first mouseover macro!

    ....... Except now we have a problem. "What's the problem???" you might think, I'll show you. Target a monster (by selecting it) and move your mouse off the monster into a neutral area of the screen such as the floor. Hit the macro. Oh no! It tells us you must have a target. But we do have a target, right? Well our human brains know this, but currently the only thing WoW knows is "perform this action when this button is pressed" and we've told it "Only use entangling roots on a mouseovered target, nothing else".
    Back to our macro! Open the screen, and let's start editing.
    At the end of our macro, add a semicolon ; and then type Entangling Roots again. The macro should look like this :

    /cast [@mouseover] Entangling Roots; Entangling Roots
    When you add the semi colon, the game will go to the next statement in your macro after the first condition is met.

    Let's test our macro now. Have a monster targeted but mouseover a separate monster. Hit your macro and you will see the macro will use roots on the monster we mouseovered despite having a target. Now let's do it again, but do not have a monster mouseovered. Have a monster targeted and hit the macro. Hmmm, it still doesn't work!

    Oh I know why! Because the game is stuck thinking about the first condition. It is stuck on looking for a mouseover, we didn't tell it to check if there was a mouseover or not.

    /cast [@mouseover,exists]Entangling Roots;Entangling Roots
    Before, the game was thinking like this :
    Waiting for mouseover, no mouseover so I can't use entangling Roots
    Waiting for mouseover, no mouseover so I can't use entangling Roots
    Waiting for mouseover, no mouseover so I can't use entangling Roots
    Waiting for mouseover, no mouseover so I can't use entangling Roots

    Now the game is thinking like this.
    Checking for mouseover, there is no mouseover, go to the next statement in the macro.

    Try the macro again. Target a monster, have no mouseovered monster, and press the macro. It should finally work! Phew!

    .... but it's not perfect yet, oh no! "But it's working fine" you might say. I beg to differ! Kill a monster. Target a second monster. Mouseover the first monster that is dead. Use the macro.
    Oh no! Invalid target.

    Back to the drawing board we go.

    /cast [@mouseover,exists,nodead]Entangling Roots;Entangling Roots
    having nodead there checks if the monster is dead or alive. If it's not dead it'll execute in this case.

    Now the nodead in this example is kinda useless because you'll rarely ever be mousing over dead monsters frequently, however I left this example in here so you know why this happens when you get an invalid target error. The macro will now understand that the monster is dead, and to just continue to the next line.

    We're not done yet! There is still one more important error to overcome.
    Select a monster, have it in your target window. Now mouseover a friendly target and hit your macro. Invalid target. This is because we still haven't told the game to see if our target is friend or foe yet, so right now it's currently trying to use roots on a friendly target which is not possible.

    Final check we will add for this macro
    /cast [@mouseover,exists,nodead,harm]Entangling Roots;Entangling Roots

    This will now see if your mouseover is friendly. If it is indeed friendly it will skip the mouseover and go to your selected target instead.

    If any of these conditions are against the possibilities of making the first one happen, the macro will end the first segment and move to the second.

    Phew! You do not have to add all those checks into the macro as I stated earlier, over time you will learn which ones are good for you to use and which ones aren't.

    Now a final thing to add to this macro! Remember at the start how I told you to choose any icon you like? You dragged the macro to your actionbar, you mouseovered it and it just says "ROOTS" or whatever you decided to name it. If you like it this way, there is no need to change a thing. But if you want to see what's going on then let's do the following.

    Change the icon of the image to the Question Mark. By default it's the first icon in the list.
    add the first line on top of your macro
    /cast [@mouseover,exists,nodead,harm]Entangling Roots;Entangling Roots
    what #showtooltip (with nothing after it) does is shows the tooltip of the current ability that's available to be used. If you add a name of the action after it, it will show the tooltip of the action/spell you want to use.

    An example of when you want to use the name after it :
    If you macro an item to a spell (for example engineering glove enchant) you will want to show the tooltip of your spell, as leaving it blank will show a glove icon and that can be confusing since I have those gloves macro'd to multiple abilities!

    Here is my starfire macro with a static tooltip

    If I left out "starfire" from "#showtooltip starfire" it'd show the gloves because "/use 10" comes before "/cast starfire" (/use 10 is because I have an engineering tinker btw).

    Sometimes though it's good to show it dynamically changing.
    A great example of this is the following macro

    /cast [swimming] Aquatic Form;Travel Form
    What this macro says is if I'm swimming, change into my Aquatic form, and if I'm on land, change into travel form. It's the same single macro, and it's performing two different things depending on the condition, so the tooltip changes if I'm in water.

    ALT, CTRL, SHIFT modifiers
    You've probably heard people talking about modifiers. These will change the macro depending on the button you are pressing.

    Let's say, you want to use entangling roots, but if you hold alt you want to use hibernate. How do we do that?

    /cast [mod:alt]Hibernate;Entangling Roots
    That's it! Remember to keep #showtooltip clear so that your macro dynamically changes the icon. Test this macro out (remember non druids can use any two abilities they want for testing purposes).

    What this macro is doing is saying "Is alt pressed? Hibernate, otherwise go to the next statement "
    You can have multiple conditions in the same macro.

    /cast [mod:alt]Hibernate; [mod:shift]Entangling Roots;[mod:ctrl]Soothe;Wrath
    All the modifiers are on the one line separated by semicolons (important!).
    Make this macro (remember to leave the icon as the default question mark) and drag it on your bar. Even without a monster you can test to see if the macro is working. Press shift, alt, ctrl dynamically and watch your macro update the icon on the bar.

    You can also combine mouseovers, with alt/shift/ctrl modifiers.
    Here is an example

    /cast [mod:alt, @mouseover,harm,exists]Hibernate; [@mouseover,harm,exists]Entangling Roots;
    This macro checks if alt is pressed > checks if my mouseover exists > is harmful > Hibernates. No alt? Does the alternative.

    The problem with making these macros is you're left with a question mark icon on your action bar, these are unaesthetic to have. I like to give these macros "insurance" to work, so I want it to do something like "If I don't have any mouseovers, fall back on my selected target".

    So my macro will end up looking like this :

    /cast [mod:alt, target=mouseover,harm,exists]Hibernate; [@mouseover,harm,exists]Entangling Roots; 
    /cast [mod:alt,harm,exists]Hibernate;Entangling Roots
    First it checks alt+mouseovers, then mouseovers, then mod+alt and no mouseover but selected monster, then nothing but selected monster. This way you always have a tooltip and the correct mod press (alt in this case) will bring up the other.

    Mouseover and mod:shift/alt/ctrl macros are the most commonly used ones. Hopefully this guide helped you learn to decipher the macros so you can use them yourself or edit them without worry. There are many websites that have complex macros (I use a few complex ones myself) but now you should have enough of an understanding to tailor them to your needs.

    Now that you've read this, continue to research how other macros are made if being a macro master is what you're after. Feel free to help other people and guildies because macros CAN be the difference of a raid wipe or not (for example, is the healer clicking on a person first, pressing a button later, or are they using mouseover heals which means less time between their reaction and the heal going off?)

    A few quick examples of other types of conditions to be met for a macro :
    /cast [combat,dead,help]Rebirth;Revive
    In combat it'll always try to rebirth. Otherwise it'll use revive. Great for druids

    /cast [nostealth]Rip ;[stealth] Ravage
    Note when using stealth macros, your action bar might change depending on your addon setup which makes this macro useless unless you use it on a nonshifting bar.

    /cast [@mouseover,exists,help]Swiftmend;Swiftmend
    Opposite of the harm check, it checks if the target is helpful for this, and will swiftmend them. Otherwise it'll just swiftmend whoever is your target.

    /cast [Stance:1]Flash Heal;Shadowform
    This says "If I'm in stance1(Shadowform for priests), Flash heal. If I'm in no stance, use Shadowform. Basically an emergency self heal button for priests and then return to shadow form right after the single heal. Remember stances too can change the actionbar completely so only use these macros on non shifting bars.
    Use this link to check your class's stance

    Target's Target
    This is now useful for healers since they have dps quirks to them. For this example I'll use a disc priest in smite spec.
    /cast [@targettarget,harm,exists]Smite;Smite
    With a tank or DPS friendly target, the macro will check what their target is, and if it's a foe then it proceeds to smite. Just be careful when using this, last thing you want to do is smite a monster that someone is targetting to CC.

    DO NOT USE THESE WITHOUT TESTING THEM FIRST! The worst thing you can do is be another dud that makes the heroic that much more painful.

    RAZER NAGA MOUSE : It's not a bug with the mouse, it's a bug with windows. If you have a razer naga mouse and set it to numpad mode, you can not use shift key modifiers as windows counts shift+numpad as arrow+up arrow+down etc.

    There you have it! These are the absolute basics to macroing. If you want to learn more, there is tonnes of information out there in google searches and on many class specific websites. Hopefully now you have more of an understanding. Happy gaming!

    Addons for those curious : Health/Actionbars = Tukui, Nameplates = Tidyplates. Yes, I know my action bars are a mess.

  2. #2
    This is brilliant. Nice and simple, showing how a macro does what it does so that we can create other ones. Also handy that you're a druid as I'm a druid and all that needs multiple forms being a tank and a healer.

    Time to get the drawing board out! :-)

  3. #3
    nice guide!

    there wasn't anything really new for me, but it's nice to have a source to go to, if i forgot one of the conditions again^^

    and would definitely be a good choice to look at this guide, for people who never really used them.

  4. #4
    man your guide is really great and simple and easy to understand.
    really good job

  5. #5
    Thank you for telling about the question mark icon!

    Here I've been scrolling down to find the right icon for years, while all you needed to do was select the question mark..

  6. #6
    glad I could help

  7. #7
    Very nice guide. A useful site for testing/explaining macros is: Copy and paste a couple of the examples from this guide and see what I mean.

    Note: It's not a key logger and I'm in no way associated with the site, but I'm posting here as it's rather useful for this type of stuff.
    I do not suffer from insanity, I enjoy every minute of it.

  8. #8
    Start It Up xCev's Avatar
    Join Date
    Jan 2011
    a mentil asilum ;`)
    Nice guide -- excellent place for a macro-newb to come to quickly and efficiently learn the meaning and use of the many conditionals involved.

    You should add something about [nochanneling] macros too, though.

    Example: Using this macro will make the tooltip & ability icon appear as "?" for the duration of the spells channel.
    #showtooltip Mind Flay
    /cast [nochanneling:Mind Flay] Mind Flay

    You can also chop and change like so;
    #showtooltip Flash Heal
    /cast [nochanneling:Penance] Flash Heal
    The above macro will restrict the use of Flash Heal whenever Penance is being channeled. In this example, Penance and Flash Heal would have different bindings, so the only real use of the macro used in this instance would be mana conservation and efficiency.

    This macro is purely to prevent the use of Flash Heal while Penance is being channeled -- once the Penance is finished channeling, Flash Heal can be used as normal, with it's usual binding.

    Also, you can change the spell names to that of the class you play correspondingly, but keep in mind that the ability you include inside the parentheses ([nochanneling:<spell>]) MUST be a channeled spell.

    TLDR -- check these out if you find yourself frequently clipping your channeled spells.

    Just an idea. :O

  9. #9

    A couple things I'd add, even if it's a beginner guide:

    "harm" and "help" imply "exists". "(at)mouseover,harm,exists" can therefore be condensed to "(at)mouseover,harm"

    You could also mention that "((at)mouseover,harm) Entangling Roots; Entangling Roots" = "((at)mouseover,harm)()Entangling Roots".

    When you get into macros, condensing quickly becomes your top priority.

    (sorry if post reads incoherently, stupid forums forcing me to remove basically everything from my macros)

  10. #10
    Quote Originally Posted by Phrencys View Post

    A couple things I'd add, even if it's a beginner guide:

    "harm" and "help" imply "exists". "(at)mouseover,harm,exists" can therefore be condensed to "(at)mouseover,harm"

    You could also mention that "((at)mouseover,harm) Entangling Roots; Entangling Roots" = "((at)mouseover,harm)()Entangling Roots".

    When you get into macros, condensing quickly becomes your top priority.

    (sorry if post reads incoherently, stupid forums forcing me to remove basically everything from my macros)
    You can alleviate this problem by typing "code" inside [ ] instead of parenthesis right before the macro and then "/code" inside [ ] right after the macro, for example:

    ---------- Post added 2011-01-18 at 03:26 PM ----------

    Quote Originally Posted by Mythodious View Post
    You can alleviate this problem by typing "code" inside [ ] instead of quotations right before the macro and then "/code" inside [ ] right after the macro, for example:
    fixed... stupid semantics...

  11. #11
    Nice guide! Most of these are great for healing, however there are several conditional statements I use when playing my DPS classes as well. Targeting what the tank is targeting is something that a lot of people miss out on. Myself I like to make sure I'm always assisting the tank or a main assist, but also not jumping around from target to target. So I've incorporated the following in to nearly every opening, or spammable ability I have on all my characters. I don't really use this on finishers, or unique abilities as we're limited to 18 macros per character.

    These macros in general assume that I set a tank or main assist as my focus target. If you use a lot of focus macros, this might not be for you, however I have found this to be my best use for focus in raids and 5 mans.

    I appologize ahead of time, but because this is my first time posting I cannot include the character "at" anywhere in my post....

    /target ["at"target, exists, nodead, harm] ["at"targettarget, exists, nodead, harm] ["at"focustarget, exists, nodead, harm]
    /targetenemy [noexists] [dead]
    /cast Lightning Bolt

    So, like before it goes a little something like this. First we show the correct icon and tool tip using #showtooltip. Then we go on to target selection. It can be tricky to follow the logic, so make sure to read the whole argument explanation.

    Target my own target ("at"playertarget) if it exists, it's not dead and it's harmful (or basically don't change targets so long as my target is still alive and an enemy. I read above that harm also verifies exists, so I'll have to give that a shot to save space).
    So, basically now if my target is dead, or I don't have a target, we move on to the next set of arguments, which look at my target's target ("at"targettarget), if their target exists, is alive and is harmful. I use this so that I give priority to assists. Back in Ulduar as a caster, it was hard for me to target XT's heard from a distance. But there was a rogue who was always on it like Johnny on the Spot. So I could just select his raid frame and start spamming. But what if I don't have a target or I don't want to assist someone, I just want to spam pew pew. Well the next part is pretty much the ez mode built in. With my main tank or my main assist set as my focus, the next set of arguments looks at my Focus' target ("at"focustarget) for, you guessed it, if it's alive, it exists and if it's harmful. But what if I don't have a focus target, or he's targeting a friendly. Well that's the last little bit here. I can use /targetenemy, and this is basically like hitting the tab key for me, selecting the next enemy target, though this doesn't choose enemy player for those thinking to use it in pvp, so it will target pets and totems and all that other crap that people throw all over when they focus my Shaman. That is /targetenemyplayer I believe, can't remember at the moment. However, I also check here to make sure to only do this if my current target doesn't exist or is dead as well. I have to check this again here because this is a new "slash" command we're calling. If I didn't have the arguments here, everything I did above would be negated.

    Now as for helpful spells I do pretty much exactly what was listed in the artical

    /cast ["at"mouseover, nodead, help] ["at"target, nodead, help] ["at"player] Riptide

    This is the helpful version of my macros. It give priority to my mouse over, if that doesn't exist, it looks at my target, and finally if I don't have a mouse over or a target, it will cast the final part, the spell on myself, in this case Riptide. At each target selection, again we make a series of arguments, that include verifying if the target is alive and if it's a friend.

    Hope this helps, like I said I thought the article was extremely informative!

    ---------- Post added 2011-01-18 at 03:44 PM ----------

    I just read this...I can't seem to find an edit post button.

  12. #12
    Quote Originally Posted by Revelations View Post
    Thank you for telling about the question mark icon!

    Here I've been scrolling down to find the right icon for years, while all you needed to do was select the question mark.. have I!! Thanks for that hint!

  13. #13
    I suspect someone has brought this up already, but I'm too lazy to read the thread. You don't need to include both exists and harm. If a macro checks if the target is hostile, it automatically checks if it exists, too.

  14. #14
    I was wondering if it was possible to put a range limit on spells for macros.

    #showtooltip Scourge Strike
    /cast [target=pettarget,harm,nodead][] Claw
    /cast Scourge Strike

    When this is spammed after combat, the ghoul might run off on some far away mob... needless to say, it doesnt end well.

  15. #15
    Keyboard Turner
    Join Date
    Jan 2011
    Shadow Council US


    Ever since a highly embarrassing incident in the Scarlet monastery that involved accidentally sending a pet through three packs in a row, I've much preferred keeping pet controls in a macro distinct from those involved in using any other player abilities. A mouseover macro solely responsible for setting the pet's target and sending it in to attack, basically.

    Anyhow, serous question for the budding macro-enabled healer: Do mouseover conditions require you to be mousing over a unit in the game world, or will mouseover also detect unit frames?

  16. #16
    Either works with them.

  17. #17
    Keyboard Turner Sanctuz's Avatar
    Join Date
    Nov 2010
    Awesome guide you've done there!
    It helped me alot, I just have one off-topic question:
    What UI are you using? It looks so smooth I want to cuddle with it!

  18. #18
    Quote Originally Posted by eddym3103 View Post
    I was wondering if it was possible to put a range limit on spells for macros.

    #showtooltip Scourge Strike
    /cast [target=pettarget,harm,nodead][] Claw
    /cast Scourge Strike

    When this is spammed after combat, the ghoul might run off on some far away mob... needless to say, it doesnt end well.
    The problem here is the [] before the Claw that will let the ghoul acquire a target of its own if it doesn't already have one.
    Try adding "target=playertarget,harm,nodead" in there. I can't test in-game ATM but this could do the trick.

    You might also have to add it to the Scourge Strike cast, because Scourge Strike will make you autoacquire a target of your own, and send the Ghoul in.

    Modifying the macro as such will force you to Tab or click target, though.

  19. #19
    Finally I see an example for a target's target macro I tried with no success to do a macro to do trick of the trade to the tank in the middle of the fight and doing to the focus if right clicked. With this guide I could do wonders xD

    Thanks for your guide

  20. #20
    since there seem to be quite a few people here who are versed with macros, what about the "!" condition?

    for example:
    #showtooltip Death Strike
    /cast !Rune Strike
    /cast Death Strike
    i'm not really versed myself, but as far as i know, it would mean runestrike is only used if possible, but ignored if not possible, which can be handy in quite a few macros. or am i wrong?^^

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts