Custom Warlock Macros for Vanilla World of Warcraft

The Warlock, like the Hunter, is a very efficient leveling class that is great fun to play solo. I find having a pet to manage makes the game much more interesting, but it can also be quite difficult in panic situations to keep all the actions of you and your pet straight. These macros greatly simplify managing your pet and all your other spells.

These macros are made for the 1.12.1 client version of World of Warcraft and make use of these addons very heavily:

  • SuperMacro allows the creation of longer macros than the default and the ability to run one macro from another, which is used in several macros below.
  • Zorlen is a function library that provides tons of benefits and they are used throughout all the macros.

Also, many of these macros use modifier keys to alter their functionality. You may want to switch those modifier keys depending on your preference. Those functions are:

  • IsShiftKeyDown()
  • IsAltKeyDown()
  • IsControlKeyDown()

Macro Tips

Action Bar Range and Cooldown

A really handy macro trick is to make the first line:

/run --CastSpellByName("Spell")

This will give the macro the cool down and range check on your action bar of the spell you put in the quotes. This doesn't actually cast the spell because the double dash is used as a comment delimiter and prevents the rest of the line from being executed. However, the World of Warcraft client simply looks for the first CastSpellByName reference, even if it is in a comment, to decide how the cool down and range check will be determined.

Target Nearest Enemy

This is a useful line to have in many macros. It simply targets the nearest enemy if you don't already have a target.

/run if GetUnitName("target")==nil then TargetNearestEnemy() end


Melee Attack

This simply targets the nearest enemy and starts attacking. Repeated use won't disable Attack. You can cancel Attack by holding Shift.

/run --CastSpellByName("Attack")
/run if GetUnitName("target")==nil then TargetNearestEnemy() end
/run if( IsShiftKeyDown() ) then stopAttack() else castAttack() end

Wand Attack

Similarly, this gets a target, if you don't already have one, but starts attacking with your wand.

/run --CastSpellByName("Shoot")
/run if GetUnitName("target")==nil then TargetNearestEnemy() end
/run if( IsShiftKeyDown() ) then stopShoot() else castShoot() end

Shadow Bolt

Casts Shadow Bolt and initiates melee combat.

/run --CastSpellByName("Shadow Bolt")
/run castShadowBolt()
/run castAttack()

DOT Spam

There are several Damage Over Time spells that the Warlock has to manage. Repeated use of this macro on a target will use all of your DOT spells, cast Shadow Bolt once all DOTs are applied, and casts Drain Soul if the target is low on health. If your Voidwalker is about to die, it will have it cast Sacrifice as well.

This is a very powerful macro and will become your main attack button for most encounters.

/run --CastSpellByName("Shadow Bolt")
/script zAutoSacrifice()if not Zorlen_WarlockDotSpam()and not Zorlen_isCastingOrChanneling()then castShadowBolt()end

Pet Control

This is an easy control macro for your pet. When you press it, the pet will attack your target. Press it again while your pet is in combat and your pet will stop attacking and follow you. This way you can pull your pet out of danger. Hold down shift to cast Health Funnel to heal your pet.

This consists of two macros and uses SuperMacro to link them together. You only need to put the first one on your action bar.


/run if IsShiftKeyDown() then CastSpellByName("Health Funnel") else RunMacro("PetAttack") end


/run if UnitExists("target") then if UnitIsFriend("player","target") then AssistUnit("target"); PetAttack(); else if UnitExists("pettarget") and UnitIsUnit("target", "pettarget") then PetFollow(); else PetAttack();  end; end; else PetFollow(); end


The Warlock is a lot of fun to play and these macros can really help make you a more efficient, tactical player.

You may also be interested in these World of Warcraft related pages:

World of Warcraft Macros

Question or Comment?