Vanilla WoW Lazy Hunter Macros
Vanilla WoW Lazy Hunter Macros

Guide originally from TKA Something.

The fact that I am a lazy, lazy, LAZY player means I set these up the bomb, requiring minimal effort to use. I’m of the school of thought that says the easier your user interface is to manipulate, the more you will use it, the quicker you can learn changes to it and the more you can focus on the tactical situation of the battlefield rather than the micromanagement of millions of buttons. For players not adept at mouse use (and for some who are), hitting hotkeys can be daunting but ultimately MUCH more effective, especially when you should be using the mouse to select targets and mouse look only. There are limitations with this setup, so it may not be for you, and I will try to point out the limitations when I come to them.

– Amalachite of Archimonde

Not all of these are mine. I didn’t invent the internet nor the macro system. I’m merely showing you which, in the sea of macros, helps you become a lazier hunter. I’d say more on this, but… well… I’ve mastered being lazy. Thank you to Rinaewen of Sargeras for the updated format and many of the new macros listed here. Additionally, you will see the command ‘/run’ used in several of these macros – ‘/run’ is an alias for ‘/script’ and can be used interchangeably. Use /run when you want to further shrink the size of your macro. Sarf has written an article which can be found here, entitled “HOWTO: Shrink a Macro” which details ways to make your macros smaller (use less letters). For best results, please cut/paste these macros – to ensure you’re getting them exactly right, unless otherwise noted.

  1. Buffs
  2. Ranged
  3. Melee/Survival
  4. Pets
  5. Miscellaneous
  6. Notes

Items marked with a (Z) require Zorlen’s Hunter Functions

1. Buffs

Switching between Hawk and Monkey aspects
Option 1
/script if(UnitBuff(“player”,1)==nil)then CastSpellByName(“Aspect of the Hawk”)elseif(string.find(UnitBuff(“player”,1), “Raven”))then CastSpellByName(“Aspect of the Monkey”)elseif(UnitBuff(“player”,1))then CastSpellByName(“Aspect of the Hawk”);end

Option 2
/run h=0 for i=1,16 do b=UnitBuff(“player”,i) if not b then break elseif string.find(b,”Raven”) then h=1 break end end if h==1 then CastSpellByName(“Aspect of the Monkey”) else CastSpellByName(“Aspect of the Hawk”) end

Switching between Monkey and Cheetah aspects
Option 1
Tip: No buffs can be active before you use this, or you must cancel any you have, as it looks at Slot 1 in your buff list for the string “Mon”. If it’s not there, it won’t swap to Cheetah.
/script if (string.find(UnitBuff(“player”, 1), “Mon”)) then CastSpellByName(“Aspect of the Cheetah”); else CastSpellByName(“Aspect of the Monkey”);end
/cast Aspect of the Monkey

(Z) Option 2
/script if (not castMonkey()) then castCheetah();end

(Z) Option 3
/script if (isMonkActive(“Player”)) then CastSpellByName(“Aspect of the Cheetah”); else CastSpellByName(“Aspect of the Monkey”);end

Switching between Hawk and Cheetah aspects
Option 1
Tip: No buffs can be active before you use this, or you must cancel any you have, as it looks at Slot 1 in your buff list for the string “Raven” (instead of Hawk for whatever reason). If it’s not there, it won’t swap to Cheetah.
/script if (string.find(UnitBuff(“player”, 1), “Raven”)) then CastSpellByName(“Aspect of the Cheetah”); else CastSpellByName(“Aspect of the Hawk”);end
/cast Aspect of the Hawk

(Z) Option 2
/script if (not castHawk()) then castCheetah();end

(Z) Option 3
/script if (isHawkActive(“Player”)) then CastSpellByName(“Aspect of the Cheetah”); else CastSpellByName(“Aspect of the Hawk”); end

(Z) Option 4
Tip: Add your critical Ranged Attack Skills into Action Bar 1
/script if (ZorlencanAttack()) then CastSpellByName(“Auto Shot”);if (not castHawk()) then castCheetah(); CURRENTACTIONBAR_PAGE=1; ChangeActionBarPage();end end

Aspects & Mounting
Option 1
Tip: Casts Aspect of the Monkey before or after you mount/dismount. B = Bag from right-to-left, 0-thru-4, backpack being 0. S = Slot. You must have some sort of buff active in the first slot (it does not need to be an aspect) or this macro will return an error.
/script if (not string.find(UnitBuff(“player”, 1), “Mon”)) then CastSpellByName(“Aspect of the Monkey”);end
/script CURRENTACTIONBARPAGE = 2;
/script ChangeActionBarPage();
/script UseContainerItem(B,S)

Option 2
/script if (not string.find(UnitBuff(“player”, 1), “Raven”)) then CastSpellByName(“Aspect of the Hawk”);end
/script CURRENTACTIONBARPAGE = 2;
/script ChangeActionBarPage();
/script UseContainerItem(B,S)

2. Ranged

Sniper Shot – Only Applies to Night Elves
Option 1
Tip: Shadowmeld only works if you’re not in combat. So the (not PlayerFrame.inCombat) checks to see it and then only casts Shadowmeld. If you are already in combat, you can still press the macro again to launch Multi-Shot or Concussive Shot. It makes it much more efficient to use in or out of combat.
/script if (not PlayerFrame.inCombat) then CastSpellByName(“Shadowmeld(Racial)”);end
/cast Multi-Shot

Option 2
/script if (not PlayerFrame.inCombat) then CastSpellByName(“Shadowmeld(Racial)”);end
/cast Concussive Shot

Option 3
/script if (not PlayerFrame.inCombat) then CastSpellByName(“Shadowmeld(Racial)”);end
/script PetPassiveMode(); PetAttack()
/cast Multi-Shot
/script CastSpellByName(“Hunter’s Mark”);

(Z) Option 4
/script if (canTrap()) then CastSpellByName(“Shadowmeld(Racial)”);if (isMeld()) then CastSpellByName(“Hunter’s Mark”);PetPassiveMode();PetAttack();end;end
/cast Aimed Shot

Concussive & Serpent
Option 1
/cast Concussive Shot
/cast Serpent Sting

Option 2
Tip: This will not attempt to fire a Concussive Shot if the target was already Wing Clipped by you. Other snares, however, will still screw this macro up and you won’t be able to fire. If you don’t like that, swap the order of the lines.
/script if (not isClipped(“target”)) then CastSpellByName(“Concussive Shot”); end
/cast Serpent Sting

Concussive Shot & Arcane Shot
Option 1
/cast Concussive Shot
/cast Arcane Shot

(Z) Option 2
Tip: Replace 12 (the cooldown of Concussive Shot) with whatever your actual Concussive Shot cooldown is (if it is modified by gear).
/script if (GetActionCooldown(i)<12) and ((not isClipped()) or (not isConned())) then CastSpellByName(“Concussive Shot”) else castArcane();end

Multi Shot & Arcane Shot
Tip: With this macro, you can’t jump shot Arcane unless you are on Multi Shot cooldown. If jump shots are more important to you, swap the order. The reason Multi Shot is first because the macro button will show the cooldown of the first spell in the list.
/cast Multi-Shot
/cast Arcane Shot

Arcane Shot w/Ammo Switch
Tip: An arrow saver macro, with the first line picking up the inexpensive arrows and the last line picking up the DPS ones. Replace the numbers with where said arrows are, bags going right to left, with the first bag counting as 0, and slots within the bag going from left to right. Make sure it’s targetting the last stack of arrows it will grab, else it will use them until that stack is gone and leave the rest alone.
/script UseContainerItem (1,1)
/cast Arcane Shot
/script UseContainerItem (1,13)

Pulling
Option 1
/script CastSpellByName(“Arcane Shot(Rank 1)”); SpellStopCasting();

(Z) Option 2
/script castMark();PetAttack();
/script if (not castSerpent()) then castArcane();end

Option 3
Tip: This macro casts the highest rank Arcane Shot. However, if pulling, simply hold down CTRL while using the macro. It will then cast the lowest rank Arcane Shot and announce the pull to the raid/party.
/script if IsControlKeyDown() then if (GetNumRaidMembers()>0) then chan=”RAID” else chan=”PARTY” end CastSpellByName(“Arcane Shot(Rank 1)”) SendChatMessage(“— Incoming: “..UnitName(“target”)..” —“,chan) else CastSpellByName(“Arcane Shot(Rank 8)”) end

Viper & Serpent
Tip: If the target has mana, it hits it with Viper and if not, it hits it with Serpent.
Option 1
/script if UnitPowerType(“target”)==0 then CastSpellByName(“Viper Sting”) else CastSpellByName(“Serpent Sting”); end

(Z) Option 2
/script if (UnitPowerType(‘target’) == 0) then castViper() else castSerpent() ;end

Viper & Scorpid
Tip: If the target has mana, it hits it with Viper and if not, it hits it with Scorpid.
Option 1
/script if UnitPowerType(‘target’)>0 then CastSpellByName(“Scorpid Sting”); else CastSpellByName(“Viper Sting”); end

Option 2
/script if UnitPowerType(“target”)==0 then CastSpellByName(“Viper Sting”) else CastSpellByName(“Scorpid Sting”); end

(Z) Scorpid & Arcane
/script if (not castScorpid()) then castArcane();end

Auto Shot & Aspect of the Hawk
Tip: Starts Auto Shot and checks to see if Aspect of the Hawk is up. If it is, it will NOT cast Aspect of the Hawk.
/cast Auto Shot
/script if (not string.find(UnitBuff(“player”, 1), “Raven”)) then CastSpellByName(“Aspect of the Hawk()”);end

Aimed Shot
Tip: Use this to replace Aimed Shot (or any insta-shot). This way it will check before combat if you have Hawk up already. You can use this for any insta arrow or even switch it around for Raptor Strike & Monkey. If the correct aspect wasn’t up on the first press of this macro, it will be up when you press it a second time. You can’t use this for every special shot because then you won’t be able to see when you are out of range (the # goes red when you are out of range). So pick the most frequently used “primary” attacks. Usually Aimed Shot or Concussive are the choice first strikes. This macro works best when you use it only for one or the other (either Aimed shot or Arcane Shot) because the timer is the same for both of those shots so you can tell when one or the other is ready even if one of them is replaced with a macro key. It doesn’t work so well for Raptor Strike/Monkey because then you can’t easily tell if Raptor Strike is ready again after the first use.
/script if (not string.find(UnitBuff(“player”, 1), “Raven”)) then CastSpellByName(“Aspect of the Hawk()”); else CastSpellByName(“Aimed Shot()”);end

Scatter Shot
Option 1
Tip: PetWait is used instead of PetFollow, so the pet is near the opponent when they regains their senses, not running heave-ho slobbering like nuts back at you.
/cast Scatter Shot
/script PetWait()
/script PetPassiveMode()

Option 2
/script if UnitIsUnit(“target”,”pettarget”) then PetFollow(); end; CastSpellByName(“Scatter Shot”);

Action Bar Switch (Ranged)
Tip: Replace 3 with the # of your ranged action bar.
/cast Auto Shot
/script if (string.find(UnitBuff(“player”, 1), “Raven”)) then CastSpellByName (“Auto Shot”); else CastSpellByName (“Aspect of the Hawk”) end;
/script CURRENTACTIONBARPAGE=3;
/script ChangeActionBarPage();

Action Bar Switch (range dependant)
Option 1
Tip: Switches you current action bar page if the target is anywhere from 8-35 yards. XX = slot in which you have Auto Shot, YY = slot you have Scare Beast. While X(1)= Range Page and X(2)= Melee Page.
/script if (IsActionInRange(XX)) == 1 then CastSpellByName(“Auto Shot”); CastSpellByName(“Aspect of the Hawk”); PetAttack(); CURRENTACTIONBARPAGE = X; ChangeActionBarPage(); elseif (IsActionInRange(YY)) == 1 then AttackTarget(); PetAttack(); end

Option 2
Tip: Switches you current action bar page if the target is within 0-8 yards. XX = slot in which you have Auto Shot, YY = slot you have Scare Beast. While X(1)= Range Page and X(2)= Melee Page.
/script if (IsActionInRange(XX)) == 1 then CastSpellByName(“Auto Shot”); CastSpellByName(“Aspect of the Hawk”); PetAttack(); elseif (IsActionInRange(YY)) == 1 then AttackTarget(); PetAttack(); CURRENTACTIONBARPAGE = X; ChangeActionBarPage(); end

Assist Player
Option 1
Tip: Change Player Name to the name of the player you want to assist (MT or whoever you choose).
/assist Player Name
/script PetAttack()
/cast Auto Shot
/cast Hunter’s Mark()

Option 2
Tip: Finds the party member with the lowest health, assists them (selects the enemy they currently have selected), casts Hunter’s Mark on that enemy, and sends pet to attack.
/script P=1;T=’player’;function F(a)h=UnitHealth(a);p=h/UnitHealthMax(a);if h>0 and P>p then P=p;T=a;end end F(T);for i=1,4 do p=’party’..i;if p then F(p);end end TargetUnit(T)
/assist
/cast Hunter’s Mark()
/script PetAttack()

Option 3
/assist Player Name
/cast Scorpid Sting

Option 4
/assist Player Name
/script PetAttack();
/script if (CheckInteractDistance(“target”,1)) then CastSpellByName (“Attack”) else CastSpellByName (“Auto Shot”) end;

Attack Last Target
Tip: Mainly for when you lose your target due to Fear, Polly, Feign Death, or other such effects.
/script TargetLastEnemy()
/script PetAttack()
/cast Auto Shot
/cast Hunter’s Mark()

Aggro Spam
Tip: Used when you’re trying to keep NPCs off the non-tanks (priests, mages, etc).
/cast Concussive Shot
/cast Distracting Shot

3. Melee/Survival

Feign Death/Freeze Trap Variants*
Tip: These macros are meant to be spam-hit to work. When Freezing Trap is placed first, when you’re not in combat, you can still use this macro. Just spam/mash this macro a few times to Feign Death if you’re in combat.
Option 1
/cast Freezing Trap
/script PetWait(); PetPassiveMode();
/cast Feign Death

Option 2
/cast Freezing Trap
/script PetFollow(); PetPassiveMode();
/cast Feign Death

Option 3
/script PetFollow()
/script PetPassiveMode()
/cast Feign Death
/cast Freezing Trap

Option 4
/cast Feign Death
/script PetFollow(); PetPassiveMode();
/cast Freezing Trap

Option 5
/script if UnitAffectingCombat(“player”) then CastSpellByName(“Feign Death”); PetFollow(); PetPassiveMode();else CastSpellByName(“Freezing Trap”);end

Option 6
/script PetFollow(); PetPassiveMode();
/cast Scatter Shot
/cast Feign Death
/cast Freezing Trap
/cast Aspect of the Cheetah

(Z) Option 7
/script if canTrap() then castFreezingTrap() else castFreezingTrapWithPetPassive() end; –CastSpellByName(“Freezing Trap”)

(Z) Frost Trap
/script if (canTrap()) then CastSpellByName(“Frost Trap”) else CastSpellByName(“Feign Death”)end if (not canTrap()) then PetPassiveMode()end

(Z) Explosive Trap
/script if (canTrap()) then CastSpellByName(“Explosive Trap”) else CastSpellByName(“Feign Death”)end if (not canTrap()) then PetPassiveMode()end

(Z) Immolation Trap
/script if (canTrap()) then CastSpellByName(“Immolation Trap”) else CastSpellByName(“Feign Death”)end if (not canTrap()) then PetPassiveMode()end

Melee Spam
Tip: Casts “Aspect of the Monkey” if you’re not buffed, and each hit of the macro launches you through Raptor Strike, Mongoose Bite and Wing Clip where applies. If you want to have your pet attacking with you, add /script PetAttack(); as the last line.
Option 1
/script if (not string.find(UnitBuff(“player”, 1), “Mon”)) then CastSpellByName(“Aspect of the Monkey”);end
/script if (not PlayerFrame.inCombat) then CastSpellByName(“Attack”); end
/cast Raptor Strike
/cast Mongoose Bite
/cast Wing Clip

Option 2
/cast Raptor Strike
/cast Mongoose Bite
/cast Wing Clip

Option 3
/cast Raptor Strike()
/cast Wing Clip()

Option 4
Tip: Replace the numbers 9/10 with the appropriate action bar ID numbers.
/script if (IsUsableAction(9)) then CastSpellByName(“Counterattack”); end
/script if (IsUsableAction(10)) then CastSpellByName(“Mongoose Bite”); end
/script CastSpellByName(“Raptor Strike”); CastSpellByName(“Wing Clip”);

(Z) Option 5
Tip: Replace “Mongoose Bite” with “CounterAttack” if you have it. Replace i with the slot number of where this macro is placed in your action bar.
/script castMonkey();if (GetActionCooldown(i)<6) then CastSpellByName(“Raptor Strike”);else if (not isClipped()) then CastSpellByName(“Wing Clip”);CastSpellByName(“Mongoose Bite”);end end

(Z) Option 6
/script if (GetActionCooldown(i)<6) then CastSpellByName(“Raptor Strike”); else CastSpellByName(“Wing Clip”); end
/cast Counterattack
/script if (not isClipped(“target”)) then CastSpellByName(“Wing Clip”); end

(Z) Option 7
/script if ((not isConned()) or (not isClipped())) then CastSpellByName(“Wing Clip”)if (GetActionCooldown(i)<6) then CastSpellByName(“Raptor Strike”) else CastSpellByName(“Wing Clip”);CastSpellByName(“Mongoose Bite”);end end

(Z) Option 8
/script castMonkey();if (GetActionCooldown(9)<6) then CastSpellByName(“Raptor Strike”);else if (not isClipped()) then CastSpellByName(“Wing Clip”);end end
/script castMong();
/script PetAttack();

(Z) Option 9
/script if (GetActionCooldown(i)<6) then CastSpellByName(“Raptor Strike”);else if (not isClipped()) then CastSpellByName(“Wing Clip”);end ;end
/cast Deterrence
/cast Mongoose Bite

Option 10(Orcs only)
/cast Raptor Strike()
/cast Wing Clip()
/cast Blood Fury(Racial)

Combat
Tip: This replaces melee attack button, use this instead of the default button to begin autoswinging with melee weapon. Checks to see if Aspect of the Monkey is already up, and if it is it won’t cast it. So if Hawk or Pack/Cheetah is up, you’ll cast Aspect of the Monkey and begin attacking with your melee weapon. Also if you are already in combat with melee weapons, this macro will NOT drop you out of combat.
/script if (not string.find(UnitBuff(“player”, 1), “Mon”)) then CastSpellByName(“Aspect of the Monkey”);end
/script if (not PlayerFrame.inCombat) then CastSpellByName(“Attack”);end

Aspect of the Monkey & Deterrence
Option 1
/script if (not string.find(UnitBuff(“player”, 1), “Mon”)) then CastSpellByName(“Aspect of the Monkey”);CastSpellByName(“Deterrence”);end

(Z) Option 2
/script castMonkey();CastSpellByName(“Deterrence”);end

Action Bar Switch (Melee)
Option 1
Tip: The # is where you put in the page number where the skills you want to use are.
/cast Aspect of the Monkey();
/script CURRENTACTIONBARPAGE = #;
/script ChangeActionBarPage();

Option 2
/cast Raptor Strike
/script if (string.find(UnitBuff(“player”, 1), “Monkey”)) then CastSpellByName (“Attack”); else CastSpellByName (“Aspect of the Monkey”) end;
/script CURRENTACTIONBARPAGE=#;
/script ChangeActionBarPage();

Disengage
Option 1
Tip: Disengages from combat, sets pet to passive so you can run away, and switches to your melee Action Bar (so substitute X for whichever bar that would be).
/cast Disengage
/script backOff()
/script CURRENTACTIONBARPAGE=X;
/script ChangeActionBarPage()

Option 2
/script if (not PlayerFrame.inCombat) then CastSpellByName(“Attack”) else CastSpellByName(“Disengage”); end

(Z) Wing Clip
/script if (not isClipped() and not isConned()) then castClip() end

Couterattack
Tip: Will cast Couterattack if available, and if not Wing Clip.
/cast Counterattack
/cast Wing Clip

Mongoose Bite/Raptor Strike
Tip: Will cast Mongoose Bite if available, and if not Raptor Strike.
/cast Mongoose Bite
/cast Raptor Strike

4. Pets

Uber Pet Attack
Option 1
Tip: Hit the macro on a Friendly Target, it will send your Pet to assist Friendly Target. Hit the macro on a Hostile Target, it will sic your Pet on that Hostile Target. Hit the macro again, it’ll recall your Pet. This works irregardless of your Pet’s Mode (Aggressive/Defensive/Passive).
/script 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;

Option 2
/script if UnitExists(“target”) then if UnitExists(“pettarget”) and UnitIsUnit(“target”, “pettarget”) then PetFollow();else PetAttack();end;else PetFollow();end;

Hunter’s Mark -> Pet Attack -> Shoot
Option 1
/script CastSpellByName(“Hunter’s Mark”);PetAttack();CastSpellByName(“Auto Shot”);

Option 2
The actions correspond to your pet bar, going from left to right (so for example, prowl, then dash).
/cast Hunter’s Mark
/script CastPetAction (6)
/script CastPetAction (7)
/script PetAttack()
/cast Auto Shot

Option 3
/cast Hunter’s Mark
/script PetAttack()
/cast Auto Shot

Option 4
Tip: Tells pet to attack target and if in ranged attack distance, it will cast viper or serpent, depending on whether or not the target has mana. If in melee range, it will cast Wing Clip.
/script PetAttack();
/script if (UnitPowerType(‘target’) == 0) then CastSpellByName(“Viper Sting”) else CastSpellByName(“Serpent Sting”) ;end
/cast Wing Clip

Option 5
/script local u=0,b,z;z=”; repeat b=GetPlayerBuffTexture(u);if(b==nil)then break end; z=z..b; u=u+1;until u==15;if(string.find(z,’Raven’))then CastSpellByName (“Hunter’s Mark”);PetAttack();else CastSpellByName (“Aspect of the Hawk”);end

(Z) Option 6
/script castMark();PetAttack();CastSpellByName(“Auto Shot”);

(Z) Option 7
Tip: Replace “?” and “%” with the respective shot’s slot number on the bar, and change 12 to whatever your actual cooldown of Concussive Shot is (if it is modified by gear).
/script PetAttack()
/script if(not isMarked()) then castMark();end
/script if(GetActionCooldown(?)<12) or (not isClipped(“target”) or isConned(“target”)) then CastSpellByName(“Concussive Shot”);end
/script if (GetActionCooldown(%)<6) then castArcane(); end

Cast Pet Action and Attack
Option 1
Tip: Replace “Aimed Shot” with “Arcane Shot” if you don’t have “Aimed Shot”. Replace “InsertDesirePetSpellHere” with Prowl, Screech, Furious Howl, Lightning Breath or Scorpid Poison (depending on your pet/situation).
/script CastSpellByName(“InsertDesiredPetSpellHere”);CastSpellByName(“Aimed Shot”);

Option 2 (With Shadowmeld)
/script CastSpellByName(“InsertDesiredPetSpellHere”);if (not PlayerFrame.inCombat) then CastSpellByName(“Shadowmeld(Racial)”);end

Dungeon Marking
Tip: Use this to either Mark your target and keep your pet with you (when in a dungeon or mob-heavy area) or to bring your pet back to you.
/cast Hunter’s Mark()
/script PetFollow()

Assist Pet
Option 1
Tip: Replace X with the name of your pet.
/target X
/assist
/cast Auto Shot

Option 2
/script TargetUnit (“pet”);
/assist
/cast Auto Shot

Option 3
Tip: This cause you to attack whatever your pet is attacking with a ranged weapon, unless you’re in melee range where it will simply attack.
/script TargetUnit (“pet”);
/assist
/script if (CheckInteractDistance(“target”,1)) then CastSpellByName(“Attack”) else CastSpellByName (“Auto Shot”) end;

Revive/Mend Pet
Tip: If your pet is dead, Revive Pet. Otherwise, if it’s alive, Mend Pet.
/script if not UnitExists(“pet”) then CastSpellByName(“Revive Pet”); else if UnitIsDead(“pet”) then CastSpellByName(“Revive Pet”);else CastSpellByName(“Mend Pet”);end;end

Call/Dismiss Pet
Option 1
Tip: If your pet is out, Dismiss pet otherwise Call Pet.
/script if PetCanBeAbandoned() then CastSpellByName(“Dismiss Pet”) else CastSpellByName(“Call Pet”);end

Option 2
/script if(HasPetUI()) then CastSpellByName(“Dismiss Pet”) else CastSpellByName(“Call Pet”);end

Option 3
/script if UnitExists(“pet”) then CastSpellByName(“Dismiss Pet”) else CastSpellByName(“Call Pet”);end

Option 4
/cast Dismiss Pet
/cast Call Pet

Feed Pet
Tip: It checks if you’re in combat or not. Then it looks for the item in Slot Y in Bag No. X and feeds your pet the food. If there’s nothing there, the bag will open prompting for attention. Replace X = Your Bag slot, starting with “0”, reads from Right to Left. Replace Y = Your Item Slot in your bag, starting with “1”, reads from Left to Right, top to bottom row.
Option 1
/script if (not PlayerFrame.inCombat) then if (not GetContainerItemLink(X,Y)) then OpenBag(X); else CastSpellByName(“Feed Pet”); PickupContainerItem(X,Y); end end

Option 2
/cast Feed Pet
/script PickupContainerItem (X,Y);

Option 3
Tip: This only requires you replace “Roasted Quail” with the exact name of the food that you are feeding your pet.
/script for b=0,4 do for s=1,GetContainerNumSlots(b) do if (string.find(GetContainerItemLink(b,s) or ” “, “Roasted Quail”)) then PickupContainerItem(b,s) DropItemOnUnit(“pet”) b=4 break end end end

Recall Pet
/script PetPassiveMode()
/script PetFollow()

Toggle Pet Abilities
Tip: Toggles the abilities in the pet bar to Auto Cast or not. The “X” and “Y” correspond to positions on the pet bar. Set your “X” and “Y” to have one Auto Cast and the other not, then this will swap them.
/script TogglePetAutocast(X)
/script TogglePetAutocast(Y)

Beastial Wrath (Cats only)
Tip: Leave Dash on autocast and make sure to leave leave Prowl off, so that your pet doesn’t remain stealthed and slow all the time.
/cast Bestial Wrath();
/cast Prowl();
/script PetAttack();

Furious Howl (Wolves/Worgs only)
Option 1
Tip: A macro for Furious Howl with Multi-Shot, since they are both on a 10 second cooldown.
/cast Furious Howl
/cast Multi-Shot

Option 2
/script if ( UnitCreatureFamily(“pet”) == “Wolf” ) then CastSpellByName(“Furious Howl”);end
/cast Multi-Shot

Option 3
Tip: Replace 7 with the position of Furious Howl on the pet bar (going from left to right).
/cast Multi-Shot
/script if UnitCreatureFamily(“pet”) ~= “Wolf” or UnitIsDead(“pet”) then return; end; local ,dur, = GetPetActionCooldown(7); if dur == 0 and UnitMana(“pet”) >= 60 then CastSpellByName(“Furious Howl”); end;

Hide (Night Elves/Cats only)
Option 1
/cast Shadowmeld(Racial)
/cast Prowl();

Option 2
/script SpellStopTargeting();
/script PetFollow();
/cast Prowl();
/script CastSpellByName(“Shadowmeld”);

5. Miscellaneous

Ultimate, Everything Super
/pity
/golfclap

Eye of Naraxxis
Tip: Hit as soon as you see “The living are here!” in Stratholme.
/target Eye
/cast Arcane Shot

Pulling Announcement
/script smsg=”<< Incoming >> << %t >>”; if (GetNumRaidMembers() > 0) then SendChatMessage(smsg,”RAID”) elseif (GetNumPartyMembers() > 0) then SendChatMessage(smsg,”PARTY”) end

Anti-Rogue
Option 1
Tip: Hear the stealth noise? Run away and click this macro. It will target the rogue, mark him, and send your pet at him. You’re running, he’s slow in stealth mode, just jump shot at your leisure.
/script TargetNearestEnemy();
/cast Hunter’s Mark
/script PetAttack();

(Z) Option 2
/script TargetNearestEnemy(); if UnitIsPlayer(“target”) then if (UnitClass(“target”) == “Rogue”) then if (isMarked()) then CastSpellByName(“Wing Clip”) else castMark(); end; end; end

Battleground Preperation
Tip: Ensures you’re ready to do PVP battle. This will call your pet, turn on the aspect of your choice (Hawk or Monkey) and turn on humanoid tracking.
Option 1 (Hawk)
/run CN=CastSpellByName;if not(HasPetUI()) then CN(“Call Pet”) end
/run h=0 for i=1,16 do b=UnitBuff(“player”,i) if not b then break elseif string.find(b,”Raven”) then h=1 break end end if h==1 then CN(“Track Humanoids”) else CN(“Aspect of the Hawk”) end

Option 2 (Monkey)
/run CN=CastSpellByName;if not(HasPetUI()) then CN(“Call Pet”) end
/run h=0 for i=1,16 do b=UnitBuff(“player”,i) if not b then break elseif string.find(b,”Mon”) then h=1 break end end if h==1 then CN(“Track Humanoids”) else CN(“Aspect of the Monkey”) end

First Aid
Option 1
Tip: This is one click, self First Aid that will not cause you to lose your target that you are currently engaged with.
/script UseContainerItem(X,Y); SpellTargetUnit(“player”);

Option 2
Tip: Bandages a friendly target or yourself, then retargets last/nearest. Change the slot you keep bandaids in for this.
/script p=”player”;t=”target”;if not(UnitIsFriend(p,t)) then TargetUnit(p); end if UnitPlayerControlled(t) then UseContainerItem(3,14);end TargetLastEnemy(); if UnitIsDead(t) then TargetNearestEnemy();end

Option 3
Tip: Replace 3 and 1 with your bag and slot numbers respectively.
/script TargetUnit(“player”); UseContainerItem(3,1);TargetLastEnemy();

Tracking
Option 1 (Cycles Track Demons -> Elementals -> Dragonkin)
/script x=GetTrackingTexture();y=”InterfaceIcons”;a=”Demons”;if x==y..”SpellShadowSummonFelHunter” then a=”Elementals”;else if x==y..”SpellFrostSummonWaterElemental” then a=”Dragonkin”;end;end CastSpellByName(“Track “..a)

Option 2 (Cycles Track Humanoids -> Beasts -> Undead)
/script x= GetTrackingTexture();y= “InterfaceIcons”;a=”Humanoids”;if x==y..”SpellHolyPrayerOfHealing” then a=”Beasts”;else if x==y..”Ability_Tracking” then a=”Undead”;end;end CastSpellByName(“Track “..a)

Option 3 (Cycles Track Humanoids -> Beasts -> Hidden)
/script x= GetTrackingTexture();y= “InterfaceIcons”;a=”Humanoids”;if x==y..”SpellHolyPrayerOfHealing” then a=”Beasts”;else if x==y..”Ability_Tracking” then a=”Hidden”;end;end CastSpellByName(“Track “..a)

Option 4 (Cycles Track Hidden -> Undead -> Giants)
/script x=GetTrackingTexture();y=”InterfaceIcons”;a=”Hidden”;if x==y..”AbilityStealth” then a=”Undead”;else if x==y..”SpellShadow_DarkSummoning” then a=”Giants”;end;end CastSpellByName(“Track “..a)

Seek and Destroy
Tip: This macro takes a little bit of explaination. Ever been in a situation where you’re looking for a specific spawn (or player) but don’t have the will to make a new /target macro every single time? With the first press of this macro, it will ‘activate’ the script. Then, in your General chat window, type /find (playername/NPC). If you’re out of range, you’ll receive the message ‘Unknown unit’. Since Blizzard’s targetting system allows you to target pretty much any creature that is in the MOB Clip plane it works as an effective form of radar/searching – so continue to press the macro until whatever you’re looking for pops up on target. It will then Hunter’s Mark your target.
/script if(not SlashCmdList[“FIND”]) then SlashCmdList[“FIND”] = function(msg) ftarget=msg; end; SLASHFIND1 = “/find”; DEFAULTCHAT_FRAME:AddMessage(“Find Macro Enabled!”,0,0,.5); end; if(ftarget) then TargetByName(ftarget);end
/cast Hunter’s Mark

Untraceable (Night Elves only)
Tip: Activates both Aspect of the Beast & Shadowmeld.
/script local u=0,b,z;z=”; repeat b=GetPlayerBuffTexture(u);if(b==nil)then break end; z=z..b; u=u+1;until u==15;if(string.find(z,’PinkTiger’))then CastSpellByName (“Shadowmeld”);else CastSpellByName (“Aspect of the Beast”);end

Devilsaur Eye
Option 1
Tip: The Devilsaur Eye trinket needs to be in the first trinket slot (this macro can be used with other trinkets as well, so long as the trinket is in the first slot.)
/script UseInventoryItem(13)
/cast Rapid Fire

Option 2 (Wolves/Worgs only)
/script UseInventoryItem(13); if (GetActionCooldown(13)<300) then CastSpellByName(“Rapid Fire”);end CastSpellByName(“Aimed Shot”); CastSpellByName(“Furious Howl”)

Kiting in Blackwing Lair
Option 1
/script AssistUnit(“target”); if (UnitClass(“target”) == “Hunter”) then TargetLastEnemy(); else TargetLastEnemy(); CastSpellByName(“Arcane Shot”);end

Remove bow then equip again (for Nefarian)
Tip: Requires first main bag slot to be clear.
/script PickupInventoryItem(18) if ( CursorHasItem() ) then PickupContainerItem(0, 1); else PickupContainerItem(0, 1); PickupInventoryItem(18);end

Nefarian, Stage 1
Tip: This should keep you on the right target and firing as quickly as possible. Obviously it’s not 100% foolproof, as if Arcane/Multi cooldowns aren’t up you’ll have to invoke Auto Shot manually. In the end, all you have to do to keep the damage flowing is click/hotkey this button repeatedly and toggle on Auto Shot if it’s ever off.
/assist PlayerName
/cast Arcane Shot()
/cast Multi-Shot()
/script PetAttack()

6. Notes

  • Replace “i” with the index number of the macro in the action bar it’s in. If you put the macro in Slot 5 on your action bar, then put 5 there for example. Replace “C” as the seconds left in the cooldown on the ability, which will be whichever ability in slot “i” or the first ability in slot “i” if it’s a macro with more than one action.)
  • Replace X’s listed with the rank of spell you want to use.
  • Many of these macros require more than one push to activate the complete ‘sequence’ within the macro. For example, the Freeze Trap/Feign Death macros require one push to feign and another to set the trap (or vice versa) – so two presses total.
  • It is important to set-up your hotkeys to be comfortable for YOU. Comfort = lazy. Look at your hands. Which finger requires the least effort to use? Then, look at your abilities. Which should require the least thinking to do in heat of battle? Ok, now pair the two. For example, my melee spam macro is essential and needs to be pressed many times. My ring finger moves from the A in WASD to the Q easily, and without letting go of W to continue running I can Wing Clip and keep moving. With a quick mouse flick, I can Wing Clip a chaser and hardly look back while I keep running.
  • Organize your macros thematically. I’m too lazy to use multiple action bars, it confuses me. Middle mouse to swap Monkey. Roll mouse wheel up to change bars, and middle mouse to swap Hawk. That’s keeping in theme. F to fire conc macro. Roll up F for auto-shot. Roll down F for Serpent Sting only. Easy! So easy to learn that even if you remember the order wrong, just keep mindless pounding F because it sure does something! Not a good attitude, but action bars are frequently not on the right page. A true lazy hunter is too lazy to even look at their bars because the battlefield situation is more important.
  • Have fun! These macros aren’t a great setup for one on one, hardcore XXX action. It’s meant to free your mind up and focus on being able to multi-task in a hectic environment. It’s one style of macro setup, and I hope it’s useful for some.

Leave a Reply