Warlocks are a class of far too many key bindings and niche spells for niche situations. Having a solid knowledge of macros will help you intelligently combine multiple actions to a single key, increase your responsiveness to emergent situations, and, to an extent, automate tedious tasks.
My goal with this document is not only to list out what I have found to be the most commonly employed warlock macros, but to give you enough information so that you can begin to modify and even write your own macros going forward. For this reason, I strongly encourage you not to simply copy and paste these macros, and instead hope that you try to understand what the syntax means.
This document was originally written for the Classic Warlock Discord. Credits to @Dive#5157, @Anilusion#5842
Place the UI-Button macro in the hotbar slot you want said weapon in, click it, and it will return the “name” of the button in your chat to enter in on your weapon swap macro. This will be different depending on what UI addon you use for your hotbars. Regardless though, you must enter the returned text exactly as shown or it will not work. Equipping items Macro There are three commands for equipping items: /equip, /equipslot, and /equipset. /equip simply takes an item name and will equip it to the default slot as if you had right-clicked it in one of your bags. /equipslot takes an inventory slot ID and an item name, and equips the item to the specified slot. I have seen a diagram of equipment slot numbers before, and I have since forgotten where I ran across it. When I switch specs, I am currently using a macro to switch the weapons I wield, but I would also like to be able to switch armor with the same macro as well. This is my macro switching into PvE & combat spec: /equipslot 16 Seven-Fingered Claws.
Feb 29, 2020 MACRO equipslot - Wowpedia - Your wiki guide to the World of Warcraft. The numeric slot on your character to equip the item to. I have seen a diagram of equipment slot numbers before, and I have since forgotten where I ran across it. When I switch specs, I am currently using a macro to switch the weapons I wield, but I would also like to be able to switch armor with the same macro as well. This is my macro switching into PvE & combat spec: /equipslot 16 Seven-Fingered Claws.
Macro Basics
The macro editing window can be brought up by typing /m in the chat window. There you can write, edit, and store macros either for your entire account (if the macro is useful for multiple characters) or for just the current character (if you have a class-specific macro, for example).
Create a new macro by clicking “New”. Then you will have to give the macro a name and an icon. Personally, I don’t like text appearing over my skill icons so I tend to name my macros “ “ which is just a press of the spacebar. For the icon I typically suggest using the first icon, the red “?”. This icon is special, because it will adapt to the functionality of the macro. It will automatically attempt to find the appropriate icon based on the action performed by the macro.
First Macros
After you’ve chosen a name and icon for the macro, you must write the functionality of the macro – what will the macro do? In the big box at the bottom of the macro editor window (where it says “Enter Macro Commands”) you can type something as simple as:
/s Hi
Then, if you drag the icon for this macro to an action bar, and press/click it, your character should say “Hi”.
Now try something more useful. Create a macro that has the following command:
/cast Demon Armor
Now you’ve written a macro that will cast the warlock spell Demon Armor for you! You might not think this is very useful, since you could have just had the spell on your action bar in place of the macro. You’d be correct, but this macro’s functionality is more subtle and useful than you think. This macro will automatically use the highest rank of the spell! As you level, you will never need to replace Demon Armor with the new rank; just use this macro and you will automatically have the highest-rank spell available.
A More Useful Macro
Macros are only useful if they save you time, key presses, or action bar slots. Getting the most out of a macro means having a basic knowledge of what a macro can do. Here’s an example:
/cast [@player] Devour Magic
This macro will use the Felhunter’s Devour Magic spell (assuming he is the active summoned demon) on you, even if you have an enemy targeted.
Notice the “@player” inside the square brackets. This is called a conditional and it modifies the nature of the action being performed.
Actions
Most macros are meant to use and/or equip items, cast spells, announce your actions to appropriate chat channels. Here are some of the basic actions a macro can perform:
/cast Cast a spell. Probably going to be your most-used type of macro command.
/stopcasting Interrupts a spellcast. Useful in front of /cast or /use commands, to interrupt your cast and complete your next action faster.
/castsequence Cast several spells in a pre-determined order. You can have the sequence reset upon special circumstances.
/use Use an item, such as health/soul/spellstones, potions, food/water, trinkets, whatever.
/equip Equip an item from your bag. Will induce a 30-second cooldown on items with a Use effect.
/say Self-explanatory
/party Self-explanatory
/raid Self-explanatory
/r Responds to a whisper. Can make a macro that says “Leave me alone I’m watching Asmongold!”
/dismount Takes you off your mount. This is handy to put in front of a /cast macro for your opener spells.
/userandom Uses a random item from a list you specify. The only use I can think for this is to summon a random non-combat pet 😛
/petaggressive Set your demon to aggressive.
/petattack Command your demon to attack.
/petautocasttoggle One button to turn on/off autocast for a specific demon ability.
/petautocaston Turns autocast on for a specific demon ability.
/petautocastoff Turns autocast off for a specific demon ability.
/petfollow Recalls your pet to follow you.
/petpassive Set your pet to aggressive.
/petstay Command your pet to stay in place.
/targetlasttarget Targets your previous target, without having to find their name/unitframe/nameplate/character.
Conditionals
Here is the focus of the guide portion of this document. If you can understand this, you’ll be able to write useful macros for any situation, on any class (though of course you only play Warlock, right?).
You can chain these together to make very nice macros. Mix and match them to suit your needs.
Here are some of the most important conditionals, with a brief description of what they do:
Targeting
Target tags can be chained together as well. For example, @targettargetpettarget will cast at your target’s target’s pet’s target.
Key Modifiers
These conditionals completely change the function of the macro when a modifier-key is held before pressing the key of the original macro. For example, you might bind the /s Hi macro to the button F. You can add another line to the macro /s [mod:shift] Bye so that when you press Shift + F you say Bye instead of Hi.
IMPORTANT: The modified key combination must be available (not taken by any other action) in order for these macros to work. For example, you would not be able to put a macro on the 1 slot, and then use a shift modifier (resulting in the key press Shift + 1) because Shift + 1 is already bound to Action Page 1 by Blizzard Default. You must unbind the modified key combination to use these.
These are self-explanatory I think, so I won’t note them individually.
Demons
These conditionals change the function of the macro depending on which demon you currently have summoned. These are also self-explanatory.
Misc
These don’t fit nicely into the other sections but they are important in my opinion, so I’ve just thrown them in a pile here. You might find several useful. Several of these really benefit from using the ‘no’ prefix (example: noparty, noharm, noexists)
For a full list of macro conditionals, see this article (note that some of these may not work in Classic, as they are written with BfA context): https://wow.gamepedia.com/Macro_conditionals
Other Things
Concrete Examples and Actually Useful Classic Warlock Macros
Leveling Macros
Max Rank Spells
/cast spell_name
Spammable Wand
/castsequence !Shoot,!Shoot
Drain Soul / Delete Shards v1 (easily modifiable)
#showtooltip Drain Soul(Rank 1)
/cast Drain Soul(Rank 1)
/run local bN = GetBagName(4) if bN”Small Soul Pouch” or bN”Soul Pouch” or bN”Box of Souls” then local nS=GetContainerNumSlots(4) PickupContainerItem(4,nS) DeleteCursorItem() end
Repair only main hand weapon or wand
/click MerchantRepairItemButton
/click CharacterMainHandSlot or /click CharacterRangedSlot
Drain Soul / Delete Shards v2 (smarter)
/use [nochanneling:drain soul]Drain Soul(Rank 1)
/run for i=1,4 do n=GetBagName(i)if n then if n:find(‘[Sl][oca][ulk]’) then if GetContainerNumFreeSlots(i)0 then PickupContainerItem(i,GetContainerNumSlots(i))DeleteCursorItem()break end end end end
1-button Grinding
/castsequence reset=target Immolate, Curse of Agony, Corruption, Shoot
Drain Life without canceling itself
#showtooltip Drain Life
/cast [nochanneling:Drain Life] Drain Life
Unstuck + Hearthstone Warning
/run a,b=GetItemCooldown(6948)if a+b<GetTime()and GetItemCount(6948)>0 then message(“124cffff0000WARNING: USING HEARTHSTONE!124r”)PlaySoundFile(“SoundcreatureVoljinVoljinAggro01.ogg”)else PlaySound(8585)end
/click HelpFrameCharacterStuckStuck
XP bar text
/console xpBarText 1
Stones, Buffs, and Other Party-Support Macros
Soulstone clicking
/cast [button:1] Create Soulstone (Major)
/use [nomod,button:2] Major Soulstone; [mod:shift, @player, button:2] Major Soulstone
Self- and Target- Buffing
/cast [mod:shift, @player][] Detect Greater Invisibility
Summon Announcer (raid, party)
#showtooltip
/cast Ritual of Summoning
/run local msg=strjoin(“”,”Summoning “,UnitName(“target”),” to “,GetMinimapZoneText(),”, please assist.”) SendChatMessage(msg,(UnitInRaid(“player”) and “RAID” or “PARTY”))
Summon Announcer (say, whisper)
#showtooltip
/cast Ritual of Summoning
/run t=UnitName(“target”) msg=strjoin(” “,”Summoning you to”,GetMinimapZoneText()) SendChatMessage(msg,”WHISPER”,nil,t)
Curse of Recklessness Rank Control
/cast [group:raid] Curse of Recklessness; Curse of Recklessness(Rank 1)
Minimap Tracking Cycler
/castsequence Sense Demons, Find Minerals, Find Herbs
Unequip Everything
/script local t={1,3,5,6,7,8,9,10,16,17,18}; for k,v in pairs(t) do PickupInventoryItem(v); PutItemInBackpack(); end
PvP, Items, and Crowd-Control Macros
Use ALL the heals
/use Major Healthstone
/use Greater Healthstone
/use Healthstone
/use Major Healing Potion
/use Greater Healing Potion
/use Healing Potion
/use Furbolg Medicine Pouch
….
Mouseover spells
/cast [@mouseover,exists] spell_name
Mouseover/target cast toggle
/cast [mod:shift, @mouseover][] spell_name
Infernal on cursor
/cast [@cursor] Inferno
Rank 1 Rain of Fire on cursor
/cast [@cursor] Rain of Fire(Rank 1)
Iron Grenade on cursor, with interrupt
/use [@cursor] Iron Grenade
/stopcasting
Self trash-buff cycler
/castsequence [@player] Detect Greater Invisibility, Underwater Breathing
Shadow reflect downranker
/cast [mod:shift] Corruption(Rank 1); Corruption
Totem stomping
/petattack
/petattack [@mana tide totem]
/petattack [@windfury totem]
/petattack [@tremor totem]
/petattack [@grounding totem]
Spellstone equip/use/switch back to offhand (need testing)
/use Major Spellstone
/equip name_of_offhand
/equip Major Spellstone
Max camera distance
/console cameraDistanceMaxZoomFactor 3.5
Use equipment slot (for engi gadgets, trinkets, offhands, etc)
#showtooltip
/use number
Uses the item in the slot number number. 1 = helm, 6 = belt, 8 = boots, 17 = offhand, 13 = trinket1, 14 = trinket2. Feel free to add mouseover conditions and such to this!
Pet Macros
Pet-specific binds, with modifier set
#showtooltip
/cast [pet:imp] Fire Shield; [pet:voidwalker] Sacrifice; [pet:succubus] Seduction; [pet:felhunter] Spell Lock;
/cast [pet:imp,mod:shift] Firebolt; [pet:voidwalker,mod:shift] Torment; [pet:succubus,mod:shift] Lash of Pain; [pet:felhunter,mod:shift] Devour Magic;
Devour Magic on mouseover, targeted ally, self
/cast [@mouseover,exists][help][@player] Devour Magic
Pet Attack Mouse Over, Pet Attack Target, and Pet Return in one
/petfollow
/petattack
/petfollow [@pettarget,exists]
/petattack [@mouseover]
/script UIErrorsFrame:Clear()