Wednesday, January 25, 2012

When Good People Do Nothing

I had the absolute worst luck in LFR last night. I was rotated from my regular raid so I decided to knock out the last half of LFR on the couple toons I wanted a weapon on. The first LFR I ran on my druid went swimmingly, but my polearm of embiggeration did not drop. Sadly I will not become bigger in a vigorous manner for at last another week. That first LFR on my druid the other tank even briefly discussed tanking strategy with me in the form of they let me know what they were doing and I acknowledged I heard them. There really isn't a need for tank communication in LFR, but it's nice when it happens.

My second LFR on my DK I got into a group on the last boss, which I originally thought was good because I only wanted loot off the last boss. There was a small group from Proudmoore in a guild called Hypnotic doing thier best to troll everyone (and they did a pretty good job). The specific players involved were: Riggnaros, Kfchicken, Sylisha, and Porkzqt. Obviously raid geared and knowing what they were doing, but mostly looking to make trouble. They needed on everything; which isn't a surprise, but they even needed on the greens. They bad mouthed everyone, they tried to incite the kicking of people that didn't really deserve it, including myself (it never even went to a vote).

The absolute worst though was when they purposefully wiped us. Three of them went directly to the last platform and DPSed the wing the entire time so that when the rest of the group finally got there we were getting stacks of blistering tentacle debuff before anyone could even kill the big tentacle add. Now anyone else I would assume they just wanted to see what happened, but they blamed just about everyone else and tried to get half the raid kicked. I'm not sure how many attempts they foiled before I got there, but I'd like to think that my calling them out on precisely why we wiped caused them to behave and actually get the boss down the next attempt.

OK I lied, that wasn't the worst part. After I was done with that LFR I was about to log off in disgust when my regular run finished and a bunch of guildies were going to queue for LFR. I decided to go along on my mage who hadn't yet done the first half and I wanted the option to do the second half in the future. Guess what 4 people were in that new group with me? Oh yeah. They were a lot less annoying in that run so far as what they were saying, but they also didn't have as many people feeding the trolls that run. We actually passed a vote to kick one of them, Kfchicken, who made a point of belittling everyone else's contributions each and every fight. That amused me a little.

Still, what I don't understand is why don't people just kick these types of people immediately? Not kicking them just encourages asshat behavior in LFR because they think they can get away with it. Worse than that, other closet asshats might think they can get away with it too and start griefing their next LFR. I think BBB did a much better job elaborating on the evils of encouraging bad behavior by inaction, read his posts here and here on the topic.

Monday, January 9, 2012

Self Modifying Macros: When One Focus isn't Enough

There are three main reasons people use their focus targets in macros: to be able to refresh crowd control without switching targets (self explanatory), to be able to refresh a buff on a friendly target without switching targets (earth shield, misdirection, etc.), and last but not least to track buffs/debuffs and/or spell casts of a specific target (i.e. a healer tracking a boss ability with focus target cast bars). The problem I've run into, and I am sure many others have as well, is that some classes could benefit from using their focus target in more than one way. We need a second focus target, and a third...

After much deliberation, preceded by a fair bit of procrastination, I've come up with a fairly elegant solution for "sharing" a single focus target; let's have the macro remember who to target. Self modifying macros have been a crazy idea in the back of my head for quite a long time, but I wasn't sure if it was possible no less feasible. Then I saw a very promising sentence on wowwiki describing the EditMacro function, "If this function is called from within the macro that is edited, the rest of the macro (from the final character's position of the /run command onward) will run the new version." Not only can you edit a macro while it is running, it will continue to run from the point it left off before being edited! This actually turned out to be a little bit of a bummer too, but more on that later.

So I have to write a macro which does what I want, leave room for an unknown player name up to 12 characters, and also leave room for some lua code to change the name on the fly; with only 255 characters total. It actually wasn't that bad, but a few more characters would have allowed for more thorough targeting conditionals.

Right off the bat there are a couple glaring limitations: you can't edit macros in combat and you can't use GUIDs to select targets (or in layman's terms some trash mobs have the same name, which one will your macro target?). I may eventually find a way around the latter, but I am pretty sure that all the target switching LUA functions are protected. Perhaps it's not really an issue either since how often are there multiple mobs in the same pull with the same name when it isn't an AOE group without CC? Still macros aren't going to be a great way to handle crowd control targets, but they are very good way to remember and retarget players; better than focus targets even if you know how annoying it can be to keep losing your focus between sections of the dragon soul raid.

So here's what I got so far: a misdirection macro for hunters and a tricks of the trade macro for rogues. Fully tested on my hunter and I really liked the way I didn't have to clutter up my UI with a focus frame I wasn't really using.

/use [btn:2];[@asecondfocus,help][help][@targettarget,help][@pet]Misdirection
/stopmacro [btn:1][noraid,noparty]
/run i=GetRunningMacro()EditMacro(i,nil,1,gsub(GetMacroBody(i),"%b@,","@"..UnitName("target")..",",1)..(" "):rep(24))

/use [btn:2];[@asecondfocus,help][help][@targettarget,help][]Tricks of the Trade
/stopmacro [btn:1][noraid,noparty]
/run i=GetRunningMacro()EditMacro(i,nil,1,gsub(GetMacroBody(i),"%b@,","@"..UnitName("target")..",",1)..(" "):rep(21))

The first couple lines look like a regular macro you'd find almost anywhere, with a few less checks perhaps (no room for those frills). I first try and target the "focus", then I try the current target and if it is a hostile I try and target it's target (hopefully a tank). For the misdirect macro I also try the pet as a last resort. If all the targeting checks fall through you'll get a hand to pick a target manually (that should almost never happen).

Then comes the LUA code which is run when the macro is right clicked. Could use a modifier instead and make the macro even shorter, but I prefer not to hit it on accident. Not to mention you can only edit macros out of combat so it's not a big deal to have it super accessible. The code is just a little pattern matching to find and replace the name, "asecondfocus" in the macros above, with the name of your current target. I do check to see if your current target is at least in your party/raid before changing it so you can't accidentally target an NPC.

Then comes this interesting block of code at the end that pads out the macro with spaces so that it is always exactly 255 characters long. This is where that "feature" that continues running a macro from where it left off before being edited comes in. If you right click on someone with a longer name that your previous target your macro text would become longer, but your macro continues running from the end of the old macro causing your character to /say those last few characters of the macro; quite annoying. For example if you target someone with a name that was 3 character longer your character would say something like, "s))". The extra spaces are inert so far as the lua code goes and they make sure the macro never changes length.

Enjoy the most advanced aggro redirection macros in existence; short of installing a plugin anyway. I prefer the macros because they are saved on the server so you can flip PCs and they are always there and you never have to update them after a patch.

Thursday, January 5, 2012

Mount Macros

The most recent incarnation of my mount macro includes combining it with another ability that is only used in combat. This serves three purposes: it cleans up my action bars, I can't accidentally hit my combat only ability out of combat, and I get a speedy hotkey to mount.

The ability I've chosen for all of my toons is a crowd control and/or snare removal ability. For druids this would be "power shifting" or shifting out of and back into your current form, expending a global cooldown in the process. Obviously shifting forms isn't something that burns a cooldown out of combat, but I'm just being consistent between toons. I've also got my mount combined with Cloak of Shadows (Rogue), Tremor Totem (Shaman), Lichborne (Death Knight), Fear Ward (Priest), Master's Call (Hunter), Escape Artist (Gnome), and Hand of Freedom (Paladin).

Right now everyone has 3-4 mounts they use on a regular basis: an Abyssal Seahorse, a flying mount, a ground mount, and perhaps an additional RP type mount. I know my Worgen have use an additional ground mount just for fun when they don't want to use Running Wild. So keeping all of these things in mind my mount macros look something like the following:

Worgen Rogue

/use [combat] Cloak of Shadows; [btn:2] Black Stallion; [swimming,mod] Abyssal Seahorse; [flyable,nomod] Magnificent Flying Carpet; Running Wild


/use [nocombat,swimming,mod] Abyssal Seahorse; [nocombat,flyable,nomod] Swift Flight Form; [nocombat] Swift Zulian Panther; [form:1] !Bear Form; [form:2] !Aquatic Form; [form:3] !Cat Form; [form:5] !Moonkin Form; !Travel Form

As you can see out of combat the Abyssal Seahorse will only be used if you are swimming and using a modifier key, otherwise if you can fly it will use your flying mount and otherwise your ground mount. In the case of my Worgen I use a right click to use an alternative ground mount. Using a modifier will also use your ground mount over your flying mount, sometimes it comes in handy. In combat these macros behave just like the ability or abilities you combined it with.