Tag Archives: Addons

These are the Things I Add-On.

Back a few years ago, I had a MacBook I used to play WoW on when traveling. At first, I foolishly thought, I won’t put addons on this computer. (It was a more complex process than on PC.) That decision lasted all of about 15 minutes when I got into the game. As it turned out, I relied on addons more than I remembered.

What are addons?

Addons are Lua programs players can write that traditionally change the game UI. They cannot play the game for you. But they can change things like the mini map, bags, and raid frames. You can find and download them from WoW Interface and Curse. They are unzipped and just copied into your Addons folder in the WoW directory. Once you log on, at the character screen, in the bottom left corner, you can choose which addons to turn on and off. When a new patch hits, addons go “out of date”. Sometimes they stop working, and sometimes they don’t. It depends on what the addon affects. It’s worth trying to keep them up to date though.

What addons do I use and why?

1- Postal.

Postal is a mailbox addon. It’s a bandaid to fix Blizzard’s subpar mailbox ui. If you plan on using the auction house at all, you need Postal.

2 – Deadly Boss Mods.

I raid. I run dungeons. This or Big Wigs is required to do these things at a high level. If you are only running LFR, this is less vital.

3 – Altoholic

Again, this is practically required because I have 22 alts. I have items and mats stored on other characters. Including heirlooms. This makes it easy to search other character’s bags and also to keep track of who has gold, who has mail, and who is fully rested.

4 – AffDots

My main is a warlock. This addon helps me track embers and play to the best of my ability. It’s really specific for my class though. Some other classes may need a different thing, or nothing at all.

5 – HealBot

I use this for raid frames and healing. There are several good options for this. I prefer keeping my ui as close to stock as possible, so this really wins for me.

6 – Master Plan

If running garrison missions this addon is almost vital. It is great for picking the best missions, finding useless followers, etc.

7 – Recount

Again, if you aren’t raiding, this addon is worthless. People argue about which is better, this or Skada, but I just stick with recount because I am familiar with how it works.

8 – Handy Notes

Handy Notes is amazing for finding hidden treasures, holidays, and all that random stuff found in the world. Really useful for leveling in WoD or Pandaria.

9 – Pet Journal Enhanced

I love pets and pet battling, and sadly the stock ui just doesn’t give me enough info. I like this one, because it gives me just enough info without getting to busy or wordy.

10 – Ask Mr Robot

I actually sub to his site, so being able to to load in what I have in bags and get my best loadout is very useful.

11 – TSM and it’s various bits + Auctionator

I am a gold baron on my server, so TSM is required for mass listing on the auction house. I wrote a post on how to set it up. It’s also useful for buying stuff in bulk as well.

12 – WoW Lua

I write my own addons, so this is one I use for that!

 

There are so many addons that do so many things. It’s best to look for ones frequently downloaded, and don’t be afraid to test things out.

Blizzard, Lua, and Addons.

After a rather amusing Twitter discussion, I realized that the little addon I wrote back in Wrath of the Lich King, to make sure I used Focus Magic, Mark of the Wild, and Trueshot Aura, when on those alts, was still something that was clearly needed for some in Cataclysm.

I hadn’t updated it, because honestly, I didn’t care. I only raid/run dungeons on 2-3 toons now (as opposed to Wrath when I ran the daily dungeon on *every.single.toon*) and so I didn’t need the reminders as much.

After someone mentioned wanting an addon to remind them to take off their chef’s hat, and someone else brought up the Dalaran rings, and then someone else mentioned forgetting their pets, it was clear I needed to buckle down and fix up my addon.

The things I learned this weekend:

1. I hate Lua when compared to the scripting language I use at work.

2. And/Or checks are always the first place to look for a mistake.

 

I got started by trying to figure out how to check for low level items. I hard coded it to pop on anything below item level 300 for a level 85. Seemed like a good marker for Cataclysm. I already did hard coded checks for Chef’s Hat, all Fishing Poles, and Dalaran Rings. If it found any, it would boot it out and give the player some snarky comment in their chat box about the item.

Then I hit my first problem. The little loop would run along fine, until it hit my character’s shirt slot. For those who don’t play WoW, there is a chest slot for armor, and a shirt slot for a shirt. The shirts in the game are a very specific piece of gear that is only worn there, and has no stats. So in this instance, it didn’t matter at all. My character doesn’t even *wear* a shirt, that’s how unimportant it is.

And that’s what caused the problem. See, the script would return nil on the shirt, then break trying to compare the nil value to 300. So I tried what I would have done at work. Essentially saying check the slot and if it’s the shirt, ignore it, and keep going. This would mean that it would never return on the shirt. This lead me to discover 2 things: 1. There is no way to get the slot number for a specific slot on the equipment screen without either just using it’s number or using it’s string name. This means I had to hard code it to just say, if it’s slot 4, keep going. Which lead me to number 2. Lua doesn’t have a “continue.” There is no way to say ignore this, and keep going on the loop, if it returns nil. So I had to go up and say, if this is nil AND this is slot 4, then handle the exception so it wouldn’t break the loop.

Now yes, I understand that it is good programming to handle exceptions like that, but at work, I could have simply scripted it to say, if nil, flow out 2. Meaning, if this would break, we are just going to ignore it, and move on to the next iteration of the loop. Is the way I was forced to code it better? Sure, it means that I know every single exception and deal with it. It means that if an item isn’t equipped, and one *should* be, then yes, it should return a warning.

After getting this running, I tried it out on several of my characters. It worked great. Sure, it got a bit spammy, and it would instantly remind you as soon as you equipped your fishing pole, but it seemed to do what I needed it to do.

So then I tested by logging on to several of my alts. All good, all good. OMG SPAM FROM HELL. I had logged onto my druid. My level 85 druid, who had exactly one item over level 300. I had gotten her to level 85, but I hadn’t even thought about her gear. So she had horrible gear.

Time to rethink my design.

So I went back to the code and instead, pulled the average item level (the same one used for queuing for dungeons) and instead checked to see if all your gear was within 30 points of that average. If it was lower, then it would warn you. This worked much better.

Alright, so on to testing.

As I played, I noticed something very odd. I was using an event, essentially a thing that triggers when something happens in game, called Player_Enters_World to recheck all the stuff RememberAll was supposed to be checking. This way, every time you hit a loading screen it would remind you of all the stuff you might need to change.

But every time you loaded in, it would trigger 3 times. I also noted that the information coming from my addon was doing very weird things. Including spamming once, correctly, then spamming a second time, only this time saying you were missing all the buffs you should have had, regardless of if you had them or not, then spamming a third time, once more missing all buffs.

As it turns out, when a player in WoW hitsĀ  a load screen, they are unloaded from their current zone, triggering the Player_Entering_World event for some reason, load into a “void zone” where the player exists, but they do not have buffs, etc, and then loading from there into the actual world, once it has been loaded in.