← All projects

Etsky's Combat Addon

Complete · Solo project, design and in-game testing (AI-assisted coding)

A standalone addon suite for the Wrath of the Lich King 3.3.5a client on an AzerothCore server. It began as an extension of an existing swing timer to cover Hunter Auto Shot and wand Shoot, and was rebuilt from scratch without library dependencies after the original failed to load. The suite has a melee and ranged swing timer, a LeashTracker that warns before a mob resets, and a resource bar for Energy, Mana, Rage and Runic Power, all toggled from a /ecom menu. I tested every build in-game and fed back errors and debug output, and I found the reference that showed UnitRangedDamage returns ranged attack speed.

PersonalGameModdingLua

Updates

Mobs don't leash by distance, they leash by time

After the swing timer, I wanted a warning before a mob I’m kiting resets and runs home. My assumption was that leashing is about distance: pull a mob too far and it gives up. So the first version of LeashTracker measured how far the target was from where the fight started.

It didn’t line up with what happened in game. Looking into how AzerothCore handles it showed why: the reset is mainly based on time. If no damage is exchanged in either direction for roughly 10 to 12 seconds, the mob evades and resets. There’s also a small inner radius where mobs never reset.

So LeashTracker was rebuilt around the right thing:

  • It tracks the time since the last damage exchange, not distance.
  • It learns per-mob timeouts by watching for the “Evade” aura being applied in the combat log.

Putting it together. By then I had a few separate addons, so they were merged into one: Etsky’s Combat Addon. It has:

  • the melee and ranged swing timer
  • LeashTracker
  • a resource bar for Energy, Mana, Rage and Runic Power, with a highlight near cap and a rough Five-Second-Rule indicator for mana users

A /ecom menu toggles each module and handles unlocking, locking and resetting bar positions. All debug commands were stripped out of the final version.

Lesson learned: check how the server actually implements a mechanic before building UI around how you think it works.

Why my ranged swing timer drifted

I play on a Wrath of the Lich King (3.3.5a) private server and wanted my swing timer to track ranged attacks as well as melee: Hunter Auto Shot and wand Shoot. It turned into a good lesson in not trusting your first approach. I built it with an AI coding assistant, and my job was testing every version in-game and reporting back what broke.

Problem 1: getting ranged speed. Melee is easy, because UnitAttackSpeed("player") gives you the swing speed directly. For ranged, the first plan was to read the weapon’s tooltip and pull out the “Speed” line. On this server the tooltip doesn’t have a Speed line at all. It goes name, ranged, damage, DPS, item level, and that’s it.

The fix came from a reference addon: the first value returned by UnitRangedDamage("player") is the ranged attack speed. No tooltip scanning needed.

Problem 2: drift. The timer originally reset on the RANGE_DAMAGE and RANGE_MISSED combat log events. Those fire when the shot lands, not when it’s fired, so on long shots the bar slowly fell out of sync with my actual attacks.

Switching to UNIT_SPELLCAST_SUCCEEDED and matching the spell name (“Auto Shot” or “Shoot”) fixed it. That event fires the moment the shot goes off, so projectile travel time no longer matters.

Other 3.3.5a gotchas. StatusBar:SetReverseFill doesn’t exist on this client, so the bars use a texture that’s anchored and resized manually instead. The original version also depended on a shared library that wouldn’t load, so I had it rebuilt as a standalone addon with no dependencies.

The takeaway: on old clients, assume nothing in modern addon tutorials exists until you’ve tested it in-game.