Jump to content
Raziya

Hunter Macros & Tips [Redux]

Recommended Posts

Thanks for the reply Raz. Seems like I'm out of luck for a one-press solution, but I agree the two-press stop casting macro is not a terrible alternative. 

The purpose of this is a "pull shot" consisting of rank 1 Arcane Shot and nothing further. Instant and thus castable on the move, low aggro generation, low mana use. Good for pulling mobs into traps or for pulling in general when for whatever reason the tank can't (or won't). There may be other reasons for wanting to turn off Auto Shot, but that's what I had in mind. 

While I've got your attention though, I wonder if you could answer another question. I'm intrigued by your "situational sting" macro, and wonder how it could be modified to behave like this: if the target is a player character who uses mana, fire viper sting; if the target is a player character who does not use mana, fire scorpid sting; but if the target is an NPC, fire serpent sting.

I've got some ideas on this I'm going to try - will report results. The purpose behind this of course is that in the PvE setting, with rare exception, I don't think using viper or scorpid is particularly effective and would rather just dot the mob. But in the PvP setting the switch up seems useful. This would provide an "all stings on one button" solution. 

Share this post


Link to post
Share on other sites

If you're just wanting a "pull shot" why not use Distracting Shot rank 1 instead of Arcane Shot rank 1?  Costs less mana (20 versus 25, but who's counting, eh?) and doesn't put Arcane Shot on cooldown if you want to use it later for straight up damage.

Share this post


Link to post
Share on other sites
35 minutes ago, Roxanne Flowers said:

If you're just wanting a "pull shot" why not use Distracting Shot rank 1 instead of Arcane Shot rank 1?  Costs less mana (20 versus 25, but who's counting, eh?) and doesn't put Arcane Shot on cooldown if you want to use it later for straight up damage.

Because Distracting Shot would generate more threat and no hunter should be using Arcane Shot for dps (imho). Both turn on Auto Shot in any event. 

Share this post


Link to post
Share on other sites
4 hours ago, Jellydonut said:

Thanks for the reply Raz. Seems like I'm out of luck for a one-press solution, but I agree the two-press stop casting macro is not a terrible alternative. 

The purpose of this is a "pull shot" consisting of rank 1 Arcane Shot and nothing further. Instant and thus castable on the move, low aggro generation, low mana use. Good for pulling mobs into traps or for pulling in general when for whatever reason the tank can't (or won't). There may be other reasons for wanting to turn off Auto Shot, but that's what I had in mind. 

While I've got your attention though, I wonder if you could answer another question. I'm intrigued by your "situational sting" macro, and wonder how it could be modified to behave like this: if the target is a player character who uses mana, fire viper sting; if the target is a player character who does not use mana, fire scorpid sting; but if the target is an NPC, fire serpent sting.

I've got some ideas on this I'm going to try - will report results. The purpose behind this of course is that in the PvE setting, with rare exception, I don't think using viper or scorpid is particularly effective and would rather just dot the mob. But in the PvP setting the switch up seems useful. This would provide an "all stings on one button" solution. 

Uhh, I think I can come up with something like that, but you'll probably need more than 255 characters to make a macro like that. Here:
http://vanilla-wow.wikia.com/wiki/World_of_Warcraft_API

In the API listing, you can see a "UnitIsPlayer" function. The function in a script would look like this: /script class=UnitClass("target"); if UnitIsPlayer("target") and if ((class=="Rogue") or (class=="Warrior")) then CastSpellByName blah blah blah blah blah. You get the idea.

I should warn you however that raid leaders will request that you DO NOT Serpent Sting because of debuff counters. It deals poor damage and wastes mana when you could be using more important things. Viper Sting does come in handy in places like AQ on the Obsidian Sphinx-type mobs, and some raids even mana drain The Prophet Skeram, but Serpent Sting? Nah, that's about as rare. Only in BWL on nature-vulnerable mobs, which is totally random, or on Emperor Vek'lor because debuff slots are halved due to the nature of the encounter, but you have better things to do on that fight anyway.

About the Arcane Shot thing, he's right, Roxanne. Arcane Shot rank 1 is superior as a pull shot. It deals extremely insignificant threat which is important for certain pulls where you need the tank to be able to pull off you with a little Bloodrage and Shout. Rank 1 Distracting Shot will generate too much threat. And yes, Arcane Shot should not be used for damage unless you're SP build, but that's a PvP thing. I've tried it myself with the Zandalarian Hero Charm, it's pretty fun, but pardon me, I don't mean to get off topic.

I have rank 1 Arcane Shot keep Auto Shot enabled because I always use it on the move, and I usually high-tail it outta there the moment my shot goes off. If I want to fire Auto Shot, I'll stop. If not, I'll do what I normally do and keep running. If I don't run, I'm dead. That's the way it goes. ...Well, Deterrence really helps on that, sure, but you get the idea. Running is what I SHOULD be doing, regardless of how well the rest of the raid can cover me or how long I can stall with dangerous elites trying to hit me.

Once you get a mob back to your raid, you may as well have kept Auto Shot on so it resumes the moment you stop moving. If your tank cannot hold aggro over a hunter whose one Auto Shot was the first thing to fly out post-target acquisition, that's their problem. Not your's. And in all likelihood, the melee DPS are going to be busy eating skull alive long before you get in position.

Edit: Oh, and don't worry about having my attention! I check the forums and my YouTube regularly in case of stuff I need to reply to. I usually reply and then go do stuff for another several hours at least before taking another quick look, soooo... any time you need something, drop it somewhere and I'll get around to it when I can. :)

Share this post


Link to post
Share on other sites

Thanks a ton Raz. I'm still leveling my hunter so most of this applies to solo play or dungeons (or PvP) - I know raiding will be a whole different ballgame ;).

Share this post


Link to post
Share on other sites
1 minute ago, Jellydonut said:

Thanks a ton Raz. I'm still leveling my hunter so most of this applies to solo play or dungeons (or PvP) - I know raiding will be a whole different ballgame ;).

Oh, why, of course! It's my pleasure :D

Share this post


Link to post
Share on other sites
13 hours ago, Jellydonut said:

Further edit: I understand what you mean now by "toggle" with the stop casting script, but I'm looking for a one-press solution.

I envisioned you double-tapping the key to get the functionality you're after since you don't have to wait for the special to fire to cancel auto.

Share this post


Link to post
Share on other sites

By the way, if you're a night elf and you want your cat to go stealth with you, you can modify the spammable shadowmeld macro a bit:

/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Ambush" then x=1 end i=i+1 end if x==0 then CastSpellByName("Shadowmeld") CastPetAction(7) else end
 

Assuming your pet has "Prowl" in the 7'th slot. And when you're out of shadowmeld, pressing it again will make your pet drop stealth.

Share this post


Link to post
Share on other sites
3 hours ago, Oakenlix said:

By the way, if you're a night elf and you want your cat to go stealth with you, you can modify the spammable shadowmeld macro a bit:

/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Ambush" then x=1 end i=i+1 end if x==0 then CastSpellByName("Shadowmeld") CastPetAction(7) else end
 

Assuming your pet has "Prowl" in the 7'th slot. And when you're out of shadowmeld, pressing it again will make your pet drop stealth.

Yo, dude! I've been wanting to fix that macro up for ages. Thanks so much, I'll add this to the OP right now. ^^

Edit: Done.

Share this post


Link to post
Share on other sites
5 minutes ago, Raziya said:

Yo, dude! I've been wanting to fix that macro up for ages. Thanks so much, I'll add this to the main thread right now. ^^

Glad I could contribute to this great guide. :) It helped me a lot.

Share this post


Link to post
Share on other sites
1 minute ago, Oakenlix said:

Glad I could contribute to this great guide. :) It helped me a lot.

You're most welcome, and thank you again. :D

Share this post


Link to post
Share on other sites

Greetings, Raziya.

I posted on your thread back in the days, and we tried a target and clear target macro that I was writing. Alas, it did not work! I'm back here to share some of my personal macros that I've found to be quite... useful. But, I also have a question regarding a macro that I'm trying to create.

Growl

/cast Growl
/run local i,g=1,0 while GetSpellName(i,"pet") do if GetSpellName(i,"pet")=="Growl" then g=i end 
i=i+1 end local _,y = GetSpellAutocast(g,"pet") if not y then ToggleSpellAutocast(g,"pet") else 
ToggleSpellAutocast(g,"pet") end

This casts growl, but you can also toggle it on and off. It is one of your, or a contributors in one of your threads, macro. The only thing I added was the toggle at the end.

Pet Attack

/script CastPetAction(2);
/script CastPetAction(10);
/script if UnitExists("target") then if a==0 then PetAttack(target) a=1 else if UnitExists("pettarget") 
and UnitIsUnit("target", "pettarget") then PetFollow("Cheela") a=0 else PetAttack(target) end;end; else 
PetFollow("Cheela") a=0 end;

This is a pet attack macro that attacks the target if it isn't attacking. If it is attacking then it returns/follows you. If you target another target it attacks that target. I got this macro from some source on Google. Can't remember the url.

Charge

/run local i,g=1,0 while GetSpellName(i,"pet") do if GetSpellName(i,"pet")=="Charge" then g=i 
end i=i+1 end local _,y = GetSpellAutocast(g,"pet") if y then ToggleSpellAutocast(g,"pet") else 
ToggleSpellAutocast(g,"pet") end

This is the same as the Growl macro, but I had the ingenious idea of switching it to Charge from Growl. This gives me more control and can be applicable to other toggle abilities on the pet. Really useful for charge since it is based on range.

I have some problems with two of your macros, however:

/script if (not PlayerFrame.inCombat) then AttackTarget() end
/cast Raptor Strike
/cast Mongoose Bite

and

/script if GetUnitName("target")==nil then TargetNearestEnemy() end
/script if UnitIsFriend("player", "target") then UseContainerItem(0, 16) else 
CastSpellByName("Scare Beast") end

The first one toggles the auto attack off, and requires that I click it twice, which is a big hassle. However, I think I can fix that. But, if you have some suggestions then they might be quicker and more efficient. The second macro doesn't allow me to bandage myself. If I click it nothing happens when I or any other friendly player is targeted. If I click a second time it puts one bandage from the stack to another bag space. This I could really use some help for since I can't find anything wrong with it.

Now to the macro that I'm trying to create, and why!

Assist Pet

%%Placeholder

-Target Pet (there is a keybind shift-F1 for this)
-Assist Target (which would be pet)

The problem is to target the Pet. Do you know any way to do this? /target name doesn't work and is unreliable since my pet sometimes become known as 'Unknown'. This macro would really be useful when a lot of mobs are around my pet, and it allows for better micromanagement overall. I've been in several situations when this would be great to have.

Cheers,
Scarab

Share this post


Link to post
Share on other sites

I'm gonna have to leave a "Contributors" list in the OP and direct people to specific pages just so awesome lists like these can be found. :p

I could actually use that pet attack macro. I'd change it so if the pet is attacking the target already, don't send the attack command again... that way, it'll prevent the use of Dash or Dive redundantly.

About the macros you're having trouble with, here's my Raptor Strike macro:

Quote

/run if x==9 then CastSpellByName("Raptor Strike") else end
/script if not IsAutoRepeatAction(10) then CastSpellByName("Attack"); end
/cast Raptor Strike
/cast Counterattack(rank 1)
/cast Mongoose Bite

And here's my Scare Beast macro:

Quote

script if GetUnitName("target")==nil then TargetNearestEnemy() end
/script if UnitIsFriend("player", "target") then UseContainerItem(0, 16) else CastSpellByName("Scare Beast") end

About the Raptor Strike macro, it was screwed up for me too. I got an addon and that fixed it. Here's an analysis:
 - The first line only shows the cooldown of Raptor Strike. It's pointless except for that purpose.
 - The second line is meant to keep attack enabled. That's the line that doesn't work.
 - The third, fourth, and fifth lines cast Raptor Strike, Counterattack(rank 1), and Mongoose Bite with respective priority.

Here's the addon that fixes Auto Attack, and then this macro should work as intended:
https://github.com/shirsig/notoggle

As for the Scare Beast macro, as you said, there's nothing wrong with it... I dunno why it wouldn't be working. You've gotta target yourself or your friend, and have the bandages in the lower right slot in your backpack, but other than that...

As for the assist pet macro, I made one for Skeram. Pets will stay on the right Skeram even though all the marks and such disappear, so it's very useful for picking the right target immediately if I spam the key with my pet on the real one prior to a split. Here's the macro:

Quote

/script AssistUnit("Pet")
/run SetRaidTarget("target", 4)

The first line assists your pet. The second line places a Triangle raid marker on the target selected. Adjust however you'd like.

By the way, there's an API list if you're not sure what functions exist. I found the AssistUnit function through the list, so here's a link:
http://vanilla-wow.wikia.com/wiki/World_of_Warcraft_API

I hope that helps! :D

Share this post


Link to post
Share on other sites

Here's a little something that I've been working on for my melee Hunter, but which I'd like to add an IF-THEN conditional to for casting Disengage.

Quote

/cast Disengage
/script CastPetAction(2);
/script CastPetAction(10);
/script TogglePetAutocast(5);
/script TogglePetAutocast(7);
/script PetAttack(target)

In this case, my Owl pet has Cower in slot 5 and Growl in slot 7, while slot 2 is Follow and slot 10 is Passive mode.  The intended purpose is to have only one of these two toggles active at any given time.  So I manually toggle on one of them and then just use the macro to flip between them.

The wrinkle here is that I'm wanting to key this to use of Disengage, because when I use Disengage I'm wanting to transfer aggro from myself to my Pet.  This means I want to reduce my Threat while increasing it on my Pet.  The basic idea here is that I want to be able to "tandem tank" with my Pet and trade aggro with them.

Default behavior is to have Cower On and Growl Off so as to get mobs to aggro on my Hunter in order to proc Mongoose Bite and Counterattack.  But there are also times when I want my Pet to pull aggro off me, and in those cases I'd want to use Disengage to reduce my threat while simultaneously commanding my Pet to switch to a Cower Off and Growl On profile.

Unfortunately, this isn't a symmetrically reversible situation ... because if I want to change from Cower Off and Growl On (so Pet tanking) back to a Cower On and Growl Off (so Hunter tanking) dynamic, I don't want to cast Disengage.  This means that I want to cast Disengage to shed aggro onto my Pet, but I don't want to cast Disengage when I'm ready to regain aggro from my Pet.

Essentially what I'm looking for is an IF-THEN conditional statement that will cause Disengage to be cast only if Cower is auto ON before toggling it off later in the macro.  If Cower is auto OFF then Disengage is not cast.  This way I can use a single macro to cover both cases to toggle between aggro management states.

How would such an IF-THEN statement to check the autocast state for Cower need to be parsed?

Quote

GetSpellAutocast(index, bookIndex)   - Check wether the specified pet ability autocasts or not.

Share this post


Link to post
Share on other sites

I'm not sure how you'd work it with auto casts, but I think you could do it via conditionals. For example, if your target's target is you, cast Disengage and Growl. Vice versa for if your target's target is your pet.

Lemme see... something like this?

Quote

/script if UnitExists("target") and UnitIsUnit("targetoftarget", "player") then CastSpellByName("Growl") else end

I don't think "targetoftarget" is a thing, and I cannot test for long right now, but something like this. If you come up with something, lemme know :D

Share this post


Link to post
Share on other sites
8 hours ago, Raziya said:

<Just some awesome Hunter stuff>

Thank you for the answer. I managed to solve a few things this morning.

The Scare Beast macro was on the Shift-R keybind. Since I use Lazypig I can't put the bandages on a Shift- keybind, but apparently the use of pots work. Probably because the pots are not part of a macro that looks for a particular bag space and use the item there. I put it on Alt-Middle Mouse Button instead and it is now working as intended. :P

The Raptor Strike macro didn't work with the Addon !toggle, so I modified it into the following: 

/run if x==9 then CastSpellByName("Raptor Strike") else end
/script IsAutoRepeatAction(61) then CastSpellByName("Attack"); end
/cast Raptor Strike
/cast Counterattack(rank 1)
/cast Mongoose Bite

The first /run line isn't needed, and I'm not sure what it does, but I kept it there to show the CD and tooltip of Raptor Strike. Might have been the reason why you put it there?

And thank you for the AssistUnit("Pet") function. Works amazingly. By the way, I've looked at some of your dungeon videos, and you (raid target) mark really quickly. What do you use for that?

Cheers,
Scarab/Cheela

Share this post


Link to post
Share on other sites
5 minutes ago, Nirinia said:

probably just keybinds, they're in the default keybindings menu just keep scrolling down

Happens on all Shift- keybinds I have, and I have no keybinds set for LazyPig. I tried that out since I figured that might have been the problem, but it wasn't. Either way, I managed to fix it by not keybinding it to a Shift modifier. (:

Share this post


Link to post
Share on other sites
2 minutes ago, Nirinia said:

I was referring to the quick marking, you can have each raid mark keybound, personally I use t-i and g-k

Ahhh. Thank you. Will probably have to check which keys I'll go with since I use some of them for other things. (: Maybe the F1, F2, etc. buttons.

Share this post


Link to post
Share on other sites
1 hour ago, Scarab said:

Thank you for the answer. I managed to solve a few things this morning.

The first /run line isn't needed, and I'm not sure what it does, but I kept it there to show the CD and tooltip of Raptor Strike. Might have been the reason why you put it there?

And thank you for the AssistUnit("Pet") function. Works amazingly. By the way, I've looked at some of your dungeon videos, and you (raid target) mark really quickly. What do you use for that?

Cheers,
Scarab/Cheela

No problem! Glad it helped.

Yes, that is indeed why I put it there. It does nothing, it's just meant to show the cooldown for Raptor Strike.

Nirinia is correct. I just have a bunch of random binds on the right side of my keyboard I hit when I wanna mark stuff up. I've been doing it a while and since I do the pulls and marks for my guild in raids, I'm in good practice. Not that those vids are by any means modern, they're actually from quite a while ago on Kronos, it just takes ages for me to edit the footage. :p I'd love to get Gnomeregan done some time before next century...

Share this post


Link to post
Share on other sites

Think I might have found the functionality of what I was looking for, repurposed from a mashup of checking to see if Growl is enabled for autoattack or not, so as to turn it on or off.  This was the functionality I started with, inspired by none other that Raziya's older work, apparently.

Quote

/run local i,g=1,0 while GetSpellName(i,"pet") do if GetSpellName(i,"pet")=="Cower" then g=i end i=i+1 end local _,y = GetSpellAutocast(g,"pet") if y and UnitIsUnit("targettarget", "player") then CastSpellByName("Disengage") end

What this line does is it searches through your Pet's spellbook to find the spell ID for Cower in an incremental fashion and then stores that value in variable g.  In this case, the spell being searched for is Cower.  It then follows up with checking to see if Cower is on autocast AND if your current Target is targeting your Hunter.  If Cower is on autocast and your Target is targeting you, then Disengage is cast (note that if your Hunter is not in melee range, Disengage will not successfully be cast).  I then wanted to take that and pair it up with all of the other functionality I wanted where Cower and Growl would toggle themselves ON/OFF interspersed in with the "standard" casting Follow (action 2) and go Passive (action 10) followed by commanding my Pet to Attack my currently selected Target.

Quote

/run local i,g=1,0 while GetSpellName(i,"pet") do if GetSpellName(i,"pet")=="Cower" then g=i end i=i+1 end local _,y = GetSpellAutocast(g,"pet") if y and UnitIsUnit("targettarget", "player") then CastSpellByName("Disengage") end
/script CastPetAction(2);
/script CastPetAction(10);
/script TogglePetAutocast(5);
/script TogglePetAutocast(7);
/script PetAttack(target)

Well ... as you can imagine, that much text EASILY exceeded the 255 character limit.  It did what I was wanting, but it took too much programming to do "legally" in the "as is" macro system, short of building a macro that will as its last step invoke a second macro ... which would have looked like a Disengage? (Y/N) function on the first macro which then at the end would invoke a second macro handling all the Pet action and autocast toggling work.

Obviously the problem was that I was spending very nearly all of my 255 character budget on searching through my Pet's spellbook in an automated way in the first line.  If I could cut the "search" out of it, because I knew exactly which Pet spellbook slot I'm wanting to reference, I'd be able to chop my way down to something that only did exactly what I needed it to do, rather than being an omni-tool.  So I carved my way down to the absolute minimum I'd want to be using for the functionality I needed and eventually got to the following.

JnNiDLM.jpg I wound up using my entire 255 character budget anyway.

x9U2Y3d.jpg

Quote

/run local _,y = GetSpellAutocast(2,"pet") if y and UnitIsUnit("targettarget", "player") then CastSpellByName("Disengage") end
/script TogglePetAutocast(5)
/script TogglePetAutocast(7)
/script if UnitExists("target") then PetAttack(target) end
/cast Dive

So what this macro does is it first goes to my Pet's spellbook and checks to see if the Pet Skill in slot 2 (in this case, Cower) is toggled on.  The number for spellbook slots is top-down on the left then top-down on the right (basically alphabetical order in this case).  It then returns a boolean value for that which gets put into variable y.  This is then followed by an IF-THEN statement testing to see if y is TRUE (which it would be if Cower is toggled on) AND tests to see if my Target is targeting my Hunter.  If both of these conditionals are true, then my Hunter casts Disengage ... if either of them are false, then Disengage is not cast (side note, Disengage is a melee range spell, so if my Target is beyond melee range, Disengage won't actually be cast).

W13KHoR.jpg

After that the macro flips the Autocast Toggles for Pet Skillbar Slots 5 (Cower) and 7 (Growl) every time without conditionals, counting the skillbar slots from the left.  The macro then commands my Pet to attack my Target and then finally cast Dive to get to the Target as fast as possible (in case my Pet was not fighting right beside me) WITHOUT overwriting any previously established Follow/Stay or Aggressive/Defensive/Passive stance commands, so as to use either Cower or Growl on whatever I've been targeting as soon as my Pet gets into melee range with whatever I'm Disengaging from.

If I had a bigger macro budget than 255 characters, presumably I could do some sort of /run if CheckInteractDistance("target", 3) conditional check, except invert it such that the conditional would need to return a FALSE result in order to command Dash or Dive to cast, and have it checking the distance from your PET to your Target (which, presumably, is not something you can do with CheckInteractDistance since that's a Player Only function).  Basic idea being that Dash or Dive would only be cast when distance from Pet to Target exceeded the threshold value of 9.9 yards ... meaning your Pet would only Dash or Dive to cover distances of 10+ yards to THEIR target quickly, but wouldn't use it to move less than 10 yards fast.  Doing that would probably require some straight up LUA scripting to do, which is way beyond my capacities as a novice macro writer, so ... moving on.

I tested this new Disengage macro setup on an Ashenvale Wolf, so I could get aggro on myself to test the UnitIsUnit("targettarget", "player") parsing was correct and sure enough not only did my Hunter cast Disengage but my Pet also toggled off Cower and toggled on Growl and immediately seized aggro from me.  Actually commanding a /cast Growl or a /cast Cower was not necessary because that function gets handled by the autoattack "hands free" as it were.  As a side note, use of Disengage on a melee range Target will also cancel my Hunter's Auto Attack automatically, so at that point only my Pet was (still) attacking the Wolf that I'd engaged to get aggro from and then Disengaged.  So the transfer aggro from my Hunter to my Pet part of this is working out beautifully.

I then went to Darkshore to test the reverse case setup on a Critter (Rabbits mainly) to check to see if the UnitIsUnit("targettarget", "player") parsing would prevent Disengage from being used against something that was not targeting my Hunter while letting the rest of the macro execute to flip the toggles between Cower and Growl and so on.  Again, the macro performed as intended and my Hunter did NOT cast Disengage when using the macro to toggle my Pet from Growl ON/Cower OFF over to a Growl OFF/Cower On posture.  The test Critters all immediately died when my Pet attacked them, even though my Hunter "did nothing" besides invoke the macro, so that part was working.

I edited the /script if UnitExists("target") then PetAttack(target) end line for convenience so as to minimize the annoyance of getting "I need a target" warnings when using the macro to flip Cower and Growl between their ON/OFF states when I have no target selected.  If I spam this macro with no target selected, the only warning message I'll get is that Dive might not be off cooldown yet, since the macro always commands Dive to be executed whether it is off cooldown or not.

Admittedly, because of the pressure of the character limits, this macro is so ... specialized/tailored ... that I can essentially only use it with a Pet (in this case, an Owl) with skills in the configuration I've shown.  It has to be as specialized as it is simply because of the 255 character limit and needing to do a LOT of stuff all in a single keypress using a single macro.  I'm sure that with a system of "chaining" where macros can call other macros, that 255 character limit can be overcome so as to refine the automation of the conditionals checking even further to the point where you can IF-THEN check for Pet Skills regardless of which Pet you're using, but for right now, this is good enough for what I need a Disengage macro to do while playing a Melee Hunter build.  It lets me "trade aggro magnet duty" with my Pet via use of Disengage and gives me a single keybind click to flip between Cower and Growl.

Note that this macro should work perfectly fine for Hunters who work at range (Beastmasters, Marksman specs) if they have both Cower and Growl on their Pet, since the purpose of the macro is to toggle between autoattacks of Cower and Growl, allowing you to "fine tune their aggro magnetism" (so to speak).  Combining use of this Disengage macro with Distracting Shot on a target that your Pet is tanking (at a distance) could easily result in a ping-pong of aggro between your Hunter and your Pet in solo PvE play, should such a thing be desirable, with the potential to repeatedly trade aggro between your Hunter and your Pet, depending on the Player's skill level at handling their UI setup.  In some kiting situations, that might be a useful thing to do, although executing such a plan of action would no doubt be more complicated than most Players have the patience for.  Definitely an edge case possibility, since almost NO ONE puts Cower on their Pet.

Obviously, if using this macro for different Pets, particularly ones with different Skills, a customization edit of the macro's parameters will be needed in order to produce an Exact Match Fit for the specific Pet you're using.  This is why I wanted to explain which parameters correspond to what functionality as transparently as I have, because I know that there are a lot of Players out there who are not intimately versed in the parsing of macro command language and syntax (since I'm one of them!).

 

(Specialized) Disengage macro for toggling between Cower and Growl autocasting

Quote

/run local _,y = GetSpellAutocast(2,"pet") if y and UnitIsUnit("targettarget", "player") then CastSpellByName("Disengage") end
/script TogglePetAutocast(5)
/script TogglePetAutocast(7)
/script if UnitExists("target") then PetAttack(target) end
/cast Dive

 

Share this post


Link to post
Share on other sites

Upon further reflection (and having the time to do so) I realized that the whole GetSpellAutocast portion of line 1 of my macro here was basically superfluous.  It doesn't actually matter if Cower is on autoattack or not.  That's because what matters is whether your selected Target is Targeting You (the Hunter) ... or not.

If your Target is Targeting You, use Disengage, because your Hunter is tanking for your Pet and you want to switch.
If your Target is NOT Targeting You, do not use Disengage, because your Pet is tanking for your Hunter and you want to switch.

With that in mind, I pared the above macro down even further to 214 characters long.  And if I change all the /script commands to be /run instead, I'll save another 9 characters bringing me down to 205 characters used, with room to spend 50 characters on doing a conditional for Dive.

Quote

/run if UnitIsUnit("targettarget", "player") then CastSpellByName("Disengage") end
/run CastPetAction(10)
/run TogglePetAutocast(5)
/run TogglePetAutocast(7)
/run if UnitExists("target") then PetAttack(target) end
/cast Dash
/cast Dive

This yields a parsimonious (for this macro) character count of 235/255 and can be used with either Dashing or Diving Pets so long as Cower and Growl are in slots 5 and 7 on the Pet Bar.  This particular macro is one where if I'm wanting to do any sort of ON/OFF toggling of Cower for Growl (or the reverse) the Pet is going to have to attack my Target in melee range in order to do so.  Including the Passive command to also "disengage" my Pet from whatever they're doing before giving them a new target to attack and then Dash/Dive upon ought to make for the "cleanest" possible use of this macro for trading Threat with my Pet.

Share this post


Link to post
Share on other sites
4 minutes ago, Roxanne Flowers said:

Upon further reflection (and having the time to do so) I realized that the whole GetSpellAutocast portion of line 1 of my macro here was basically superfluous.  It doesn't actually matter if Cower is on autoattack or not.  That's because what matters is whether your selected Target is Targeting You (the Hunter) ... or not.

If your Target is Targeting You, use Disengage, because your Hunter is tanking for your Pet and you want to switch.
If your Target is NOT Targeting You, do not use Disengage, because your Pet is tanking for your Hunter and you want to switch.

With that in mind, I pared the above macro down even further to 214 characters long.  And if I change all the /script commands to be /run instead, I'll save another 9 characters bringing me down to 205 characters used, with room to spend 50 characters on doing a conditional for Dive.

This yields a parsimonious (for this macro) character count of 235/255 and can be used with either Dashing or Diving Pets so long as Cower and Growl are in slots 5 and 7 on the Pet Bar.  This particular macro is one where if I'm wanting to do any sort of ON/OFF toggling of Cower for Growl (or the reverse) the Pet is going to have to attack my Target in melee range in order to do so.  Including the Passive command to also "disengage" my Pet from whatever they're doing before giving them a new target to attack and then Dash/Dive upon ought to make for the "cleanest" possible use of this macro for trading Threat with my Pet.

I prefer to use SuperMacro, which could give you the ability to use more than 255 characters. Very helpful/useful AddOn. I assume you already know of its existance, but thought I would let you know regardless. 

Really interesting read, and something I'll tinker with. Three thumbs up 

Share this post


Link to post
Share on other sites
10 hours ago, Raziya said:

No problem! Glad it helped.

Yes, that is indeed why I put it there. It does nothing, it's just meant to show the cooldown for Raptor Strike.

Nirinia is correct. I just have a bunch of random binds on the right side of my keyboard I hit when I wanna mark stuff up. I've been doing it a while and since I do the pulls and marks for my guild in raids, I'm in good practice. Not that those vids are by any means modern, they're actually from quite a while ago on Kronos, it just takes ages for me to edit the footage. :p I'd love to get Gnomeregan done some time before next century...

I'll have to play around with raid targeting since I think it is an important skill to develop. The end goal is to build a reputation as a Hunter, after all, and every skill matters. (:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×