Advertisement

AddOn Spotlight: ThatJustHappened


AddOn Spotlight takes a look at the little bits of Lua and XML that make our interfaces special. From bar mods to unit frames and beyond, if it goes in your AddOns folder, we'll cover it here.

For those of you who have ever tried to macro together a message with a skill, you know that it can sometimes be awkward. The skill might still be on cooldown and the macro sends the message anyways. Other times, you decide mid-cast to change your mind, but the message already went off. If you're raiding, this can cause a lot of problems as the macro might announce you're putting up your shield wall, but you really didn't. Some class or role specific addons exist out there for helping out with this purpose, but the free form ones are few and far between.


ThatJustHappened (sorry, WoWInterface doesn't have a copy of it) by belleboom is an addon that can help with this type of thing. Much like Power Auras, it allows you to setup custom warnings and messages when conditions are met. The main thing is its ability to 'spam' messages across party, raid, custom channels, or even in whispers about what's going on. These can be warnings that you've been hit with a very evil debuff that must be healed through or just letting the raid know that you're rezzing Bob. It could even just be a cool quote to add flavor when using Army of the Dead like I had pictured in the opening.

What it does right...
The addon provides several dynamic variables for use in your rules and messages. While these don't always work due to limitations of the spell or the information the addon has access to, they are able to make things much easier. These variables are *source, *target, *spell, and *event. The *target variable is the one I end up using the most as I can announce that I put a particular buff on someone or put them as my selected channel and it will send them a tell directly (see the Innervate example below). I also use *spell a lot because when making the rules, you might not feel like typing out "Hand of Protection" or "Ritual of Refreshment" when it comes to setting up the message. It is also handy in that it keeps the messages shorter for the most part. While I don't use *event all that often, I do find use in *source. This one is especially handy when tracking things like Divine Intervention as you'll want to know both who cast it and whom it was cast on.

Where it needs some work...

While the features this addon offers are handy, the interface and rule editing leaves much to be desired. First off, when you install the addon and it defaults to off within its own settings. This can cause a lot headache when testing a batch of rules on a new character as you'll inevitably forget to either hit the enable button or just type /tjh on to start it up. This is bad design as you want your users to be able to use your product right out of the box.

My primary gripe is that there is no way to edit your existing rules. In order to make a change to an existing rule, you load the existing rule into the interface, create your altered rule, and then delete the original rule. Also, the only way to list your existing rules is to have it send them to your chat window. If you have a sizeable number of rules, this can cause a lot of issues. Also, there is no way to disable a rule or set of rules without either deleting them or disabling the addon from processing. Because of these limitations, swapping in and out rules for battlegrounds, raids, or just soloing can be a real pain as there is no access to any sort of profile system with it. One way to get around this is to create macros to load the rules back into ThatJustHappened and just clear it each time you need to swap.

It's complex, but it kind of has to be...
Like Power Auras, creating new rules is not for the faint of heart. While it does provide an interface to input the conditions, sometimes you've got to do a bit of tweaking for it to work correctly. The addon goes through and looks at the combat log to see which events happened, to who, from whom, and what their relation to you is in order to trigger these messages. It's not the most intuitive interface due to this fact, but trial and error will usually win out. While I could show how to create the rules here, it would be a very long and involved process that would deserve a post of its own just on that topic (that's not to say I won't do one in the future if there is interest. However, there is a very long description on how to create the rules for this addon as well as a lot of examples available on the Maintankadin forums. Most of these are aimed at tanking and raiding, but being able to sort through the large number of examples might help you create your own.



Examples...

I've created several rules for each class as well as looked up a few for classes I don't have access to at 80. Your mileage may vary as I threw these together during the week and feel free to alter and tweak them for your own purposes. You'll also notice that in some of the tanking messages I setup that I use the warrior skill names instead. This is because most healers will be familiar with the warrior skills and what they do, but not necessarily with the paladin, death knight, or druid tanking cooldowns that do almost the exact same thing. If you'd rather have it announce the correct skill or just change any of the messages in any way.

To use these rules, just copy each line from here and paste it into your chat window one at a time.

Death Knight:
/tjh rule SPELL_CAST_SUCCESS;;;Army of the Dead;self;YELL;Rise, my soldiers! Rise and fight once more!;
/tjh rule SPELL_AURA_APPLIED;;;Icebound Fortitude;self;AUTO;*** Shield Wall! ***;
/tjh rule SPELL_AURA_APPLIED;;;Unbreakable Armor;self;AUTO;*spell up!;
/tjh rule SPELL_AURA_APPLIED;;;Vampiric Blood;self;AUTO;*** Last Stand! ***;

Druid:
/tjh rule SPELL_CAST_START;;;Rebirth;self;AUTO;Battle-Rezzing %t.;
/tjh rule SPELL_CAST_START;;;Revive;self;AUTO;Rezzing %t;
/tjh rule SPELL_AURA_APPLIED;;;Survival Instincts;self;AUTO;*** Last Stand! ***;
/tjh rule SPELL_AURA_APPLIED;;;Barkskin;self;AUTO;*** Shield Wall! ***;
/tjh rule SPELL_AURA_APPLIED;;;Hibernate;target;say;*target is going to be taking a little nap. Do not disturb!;
/tjh rule SPELL_CAST_SUCCESS;;;Innervate;self;*target;Enjoy the Innervate.;
/tjh rule SPELL_AURA_APPLIED;;;Cyclone;target;SAY;*target distracted with a Cyclone for a moment.;

Hunter:
/tjh rule SPELL_CAST_SUCCESS;;;Misdirection;self;AUTO;Misdirecting to *target!;
/tjh rule SPELL_AURA_APPLIED;;;Deterrence;self;AUTO;*spell active!;

Mage (I found these, but we unable to test them myself):
/tjh rule SPELL_CAST_SUCCESS;;;Ritual of Refreshment;self;say;Click here to summon a magical vending machine!;1
/tjh rule SPELL_AURA_APPLIED;;;Mirror Image;self;AUTO;Don't mind me and my three identical siblings...
/tjh rule SPELL_CAST_SUCCESS;;;Sheep;self;say;Sheeped *target! No touchy!;

Paladin:
/tjh rule SPELL_AURA_APPLIED;;;Ardent Defender;self;AUTO;Ardent Defender is gone. I'm mortal for 2 minutes!;
/tjh rule SPELL_CAST_SUCCESS;;;Divine Intervention;raid;SELF;*source has cast *spell on *target!;
/tjh rule SPELL_CAST_SUCCESS;;;Divine Intervention;self;AUTO;*spell cast on *target!;
/tjh rule SPELL_CAST_START;;;Redemption;self;AUTO;Rezzing %t;
/tjh rule SPELL_AURA_APPLIED;;;Divine Protection;self;AUTO;*** Shield Wall Up ***;
/tjh rule SPELL_CAST_SUCCESS;;;Divine Sacrifice;self;AUTO;Raid Wall: Divine Sacrifice active!;
/tjh rule SPELL_CAST_SUCCESS;;;Hand of Salvation;self;*target;I just cast *spell on you to lower your threat.;
/tjh rule SPELL_CAST_SUCCESS;;;Hand of Sacrifice;self;AUTO;Hand of Sacrifice on *target! Don't be shocked when I start taking damage.;
/tjh rule SPELL_AURA_APPLIED;;;Repentance;target;say;Repent, *target! For your end is near.;

Priest:
/tjh rule SPELL_CAST_START;;;Resurrection;self;AUTO;Rezzing %t.;
/tjh rule SPELL_CAST_SUCCESS;;;Guardian Spirit;self;AUTO;*spell cast on *target!;
/tjh rule SPELL_CAST_SUCCESS;;;Pain Suppression;self;AUTO;*spell cast on *target!;
/tjh rule SPELL_CAST_SUCCESS;;;Hymn of Hope;self;AUTO;Casting *spell! Cover me on heals!;
/tjh rule SPELL_CAST_SUCCESS;;;Divine Hymn;self;AUTO;Casting *spell!;
/tjh rule SPELL_AURA_APPLIED;;;Shackle;target;say;Shackled *target! No touchy!;

Rogue (I found this, but we unable to test it myself):
/tjh rule SPELL_CAST_SUCCESS;;;Tricks of the Trade;self;AUTO;Tricking to *target!

Shaman:
/tjh rule SPELL_CAST_START;;;Ancestral Spirit;self;AUTO;Rezzing %t.;
/tjh rule SPELL_CAST_SUCCESS;;;Bloodlust;self;AUTO;>>> BLOODLUST! <<<;
/tjh rule SPELL_CAST_SUCCESS;;;Heroism;self;AUTO;>>> HEROISM! <<<;
/tjh rule SPELL_AURA_APPLIED;;;Hex;target;SAY;Hexed *target! Aren't you such a cute critter?;

Warlock (I found these, but we unable to test them myself):
/tjh rule SPELL_CAST_SUCCESS;;;Ritual of Souls;self;AUTO;Click here to summon a bucket of demonic candy!;1
/tjh rule SPELL_CAST_SUCCESS;;;Ritual of Summoning;self;AUTO;Click here to summon the demonic wardrobe!;1
/tjh rule SPELL_CAST_SUCCESS;;;Soulstone Resurrection;friend;AUTO;*target is now stoned.;1

Warrior:
/tjh rule SPELL_AURA_APPLIED;;;Shield Wall;self;AUTO;*** Shield Wall Up ***;
/tjh rule SPELL_AURA_APPLIED;;;Last Stand;self;AUTO;*** Last Stand! ***;

%Gallery-75813%