Brian Koponen

Programming and Tech Tips

Custom Druid Macros for Vanilla World of Warcraft

I have created a new page for World of Warcraft: Classic Druid Macros.

Playing a Druid in Vanilla World of Warcraft, especially when solo questing, requires juggling a lot of spells spread across three different forms. It quickly gets tiring manually shapeshifting and finding the spell you want to cast. My goal was to create a set of macros that would simplify the combat as much as possible.

These macros are made for the 1.12.1 client version of World of Warcraft and are centered around the DoctorDruid and Zorlen addons, both of which provide functions that greatly simplify Druid combat. Especially when leveling, I want as easy a time as possible, so I can focus on the bigger picture.

To make the most of these macros, I highly recommend trying this amazing control scheme for World of Warcraft. It allows you to use tons of keybindings very easily, which is useful when you have a lot of macros like this.

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:


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


Main Attacks

These are the main attack functions across all forms. Attacks 1, 2 and 3 all use one of the DoctorDruid functions based on which form you are currently in.

Simple Attack

This won't cancel Attack if you hit it twice. It will target the nearest enemy if you don't have a target. Holding the shift key will cancel Attack.

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

Attack 1

In Bear form, this will use the attacks that are for single targets. In Cat form, this will use the abilities that work when you are in front of the enemy.

/run if GetUnitName("target")==nil then TargetNearestEnemy() end
/run if( isBearForm() or isDireBearForm() ) then DD__SlashCommandHandler("bear1") end
/run if( isCatForm() ) then DD__SlashCommandHandler("catinfront+") end
/run castAttack()

Attack 2

In Bear form, this will use the attacks for when you have multiple targets to hit. In Cat form, this will use the abilities for when you are behind the enemy.

/run if GetUnitName("target")==nil then TargetNearestEnemy() end
/run if( isBearForm() or isDireBearForm() ) then DD__SlashCommandHandler("bear2") end
/run if( isCatForm() ) then DD__SlashCommandHandler("catbehind+") end
/run castAttack()

Attack 3

In Bear form, this uses the configurable "Bear3" DoctorDruid attacks. You can set this up to use Enrage and Feral Charge, for instance. In Cat form, this will put you into prowl mode and use the abilities that work when prowling.

/run if GetUnitName("target")==nil then TargetNearestEnemy() end
/run if( isBearForm() or isDireBearForm() ) then DD__SlashCommandHandler("bear3"); castAttack(); end
/run if( isCatForm() ) then DD__SlashCommandHandler("catmulti") end


Shapeshifting

These macros will shift into a combat form and won't shift out of it, making them easy to spam while in combat.

Bear / Dire Bear

/run --CastSpellByName("Bear Form")
/run castBearForm()

Cat

/run --CastSpellByName("Cat Form")
/run castCatForm()

Moonkin

/run --CastSpellByName("Moonkin Form")
/run castMoonkinForm()

Travel / Aquatic / Mount

These will shift into Aquatic form if you are in the water or the fastest land form you have. Cat form before level 30, Travel form after level 30 with the option to mount by holding down the alt key at level 40.

(Before level 30)

/run castAquaticForm()
/run castCatForm()

(After level 30)

/dd travelaquatic

(With Mount)

Replace "Brown Kodo" with the name of your mount.

/run if( IsAltKeyDown() ) then Zorlen_useItemByName("Brown Kodo") else DD__SlashCommandHandler("travelaquatic") end


Offensive Spells

These macros will acquire the nearest target if nothing is selected, shift into Caster form, cast the spell and activate Auto Attack.

Moonfire

/run --CastSpellByName("Moonfire")
/run if GetUnitName("target")==nil then TargetNearestEnemy() end
/run castAttack()
/run castMoonfire()

Starfire

/run --CastSpellByName("Starfire")
/run if GetUnitName("target")==nil then TargetNearestEnemy() end
/run castAttack()
/run castStarfire()

Wrath

/run --CastSpellByName("Wrath")
/run if GetUnitName("target")==nil then TargetNearestEnemy() end
/run castAttack()
/run castWrath()

Faerie Fire

This will cast the appropriate Faerie Fire based on your current form.

/run --CastSpellByName("Faerie Fire")
/dd faeriefire


Heals

These will all shift into caster form, if necessary, and then cast the most appropriate rank of the healing spell on the target to prevent over healing. If you hold down shift, and aren't targeting a unit that can be healed by the spell, it will heal the member of your group that needs it the most.

Healing Touch

/run --CastSpellByName("Healing Touch")
/run castCasterForm()
/run if( IsShiftKeyDown() ) then castGroupHealingTouch() else castHealingTouch() end

Regrowth

/run --CastSpellByName("Regrowth")
/run castCasterForm()
/run if( IsShiftKeyDown() ) then castGroupRegrowth() else castRegrowth() end

Rejuvenation

/run --CastSpellByName("Rejuvenation")
/run castCasterForm()
/run if( IsShiftKeyDown() ) then castGroupRejuvenation() else castRejuvenation() end

Swiftmend

/run --CastSpellByName("Swiftmend")
/run castCasterForm()
/run if( IsShiftKeyDown() ) then castGroupSwiftmend() else castSwiftmend() end


Buffs

Mark of the Wild

This will first switch to Caster form, then cast Mark of the Wild on your target, if you have one, and then on each unbuffed party member (and pets) on repeated uses. Just spam this until it stops doing anything and everyone will be buffed.

If you hold down a modifier key, it will cycle through the nearby friendly targets. This is great for when you want to buff the random people you meet in the world.

/run --CastSpellByName("Mark of the Wild")
/run if IsShiftKeyDown() then TargetNearestFriend() else castCasterForm(); castGroupMarkOfTheWild() end

Thorns

This will cast the best level it can on the target (or whatever mana will allow).

/run --CastSpellByName("Thorns")
/run castCasterForm()
/dd thorns

Nature's Grasp

/run --CastSpellByName("Nature's Grasp")
/run castNaturesGrasp()


Crowd Control

Entangling Roots

/run --CastSpellByName("Entangling Roots")
/run castCasterForm()
/run castEntanglingRoots()

Hibernate

/run castCasterForm()
/run CastSpellByName("Hibernate")


Conclusion

I highly recommend digging deep into the DoctorDruid AddOn for more functions that it can do. There is a lot of configuration that can be done to match your exact play style, especially for the combat features.

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

World of Warcraft Macros

Question or Comment?