GogoWatch

GogoWatch

2.3k Downloads

GogoWatch MVP

Gogo1951 opened this issue ยท 0 comments

commented

Project Brief

In Classic WoW, every spell and ability has a rank, and as Players go up in level they gain access to new ranks of abilities. In almost every case, Players should be using the highest rank ability they can.

Only trouble is, Blizzard doesn't automatically update the action bars as you level. So if you have a Rank 1, but then learn another rank, you have to drop Rank 2 on to where Rank 1 was. This gets especially annoying for abilities that you don't use very often, or on action bars for stances and forms that you don't use very regularly.

GogoWatch is a tool that will monitor the combat log of a party or raid, and send private messages to users who accidentally use incorrect rank abilities.

There used to be an addon called "RankWatch" that did the same thing.

MVP Scope

  • Review and Provide Ballpark Estimate
  • Familiarize with Combat Log and Spell IDs in Classic
  • Verify we Can Monitor Combat Log for Spell IDs in TBC Classic
  • Create List of Spells and IDs
  • Review RankWatch Code for Inspiration
  • Build Combat Log Monitoring Logic
  • Build Messaging Logic
  • Build Creator Message into Tooltips

Familiarize with Combat Log and Spell IDs in Classic

Here's a sample list of ranks for the Priest Spell "Resurrection":

https://classic.wowhead.com/spell=2006/resurrection Rank 1, available at Level 10
https://classic.wowhead.com/spell=2010/resurrection Rank 2, available at Level 22
https://classic.wowhead.com/spell=10880/resurrection Rank 3, available at Level 34
https://classic.wowhead.com/spell=10881/resurrection Rank 4, available at Level 46
https://classic.wowhead.com/spell=20770/resurrection Rank 5, available at Level 58

We'd want to watch the combat log, and every time it saw Resurrection cast make sure the Player casting it was using the correct rank. In the example above, after level 22, a player should be using Rank 2, and not Rank 1.

Verify we Can Monitor Combat Log for Spell IDs in TBC Classic

I had done some proof of concept testing in the past (pre-TBC release), so I'm 99% sure we can do this. But before we get too far along, it's worth verifying that we can pull IDs that represent different ranks of abilities. When I tested in the past, it worked as long as you were the same faction as the person casting.

Create List of Spells and IDs

We'll need to pull a data set of all the spells, and what levels they are available, and extract what level they should be used until. WoWHead has these, but other DBs do too. Importing this data from a common source should be pretty low risk; quality should be pretty standard at this point. Use whatever data source you're most comfortable with.

Quick question, is this something we can pull from the API? May be worth checking to see if we can build logic around that... but probably safe to assume we'll need to manually build out the list. (And I'm paranoid about combat log performance... so like I'd be worried about the logic check to see when the next spell kicked in... probably safer to build list manually is my gut feeling.)

I'd like to make sure the Monitor List is easy to edit and maintain... just the Spell ID, Level Spell is Available, Highest Level of Current Spell before New Spell becomes Available. Open to suggestions, but I think this works:

{2006,10,21}, -- Priest, Resurrection, Rank 1
{2010,22,33}, -- Priest, Resurrection, Rank 2
{10880,34,45}, -- Priest, Resurrection, Rank 3
{10881,46,57}, -- Priest, Resurrection, Rank 4
{20770,58,70}, -- Priest, Resurrection, Rank 5

Go ahead and include all the spells, but let's comment out all healing spells to start. Please also do include the names and ranks of all spells, ideally grouped by Class and Spell Name like in the example above, so they are easy for humans to read.

I can help comment out / remove abilities from the monitor list as we go.

Review RankWatch Code for Inspiration

Good to review this... lots of good call-outs in the code. Things to think about.

Good example:

-- For buffs and HoTs, it's the target's level that matters, not the caster's

Build Combat Log Monitoring Logic

Only spells on the monitor list would be evaluated for correct rank. Any spell not on the list, would hopefully just pass through the filter without any performance hit.

Notes:

  • Important that combat tools are highly performant and never cause significant lag.

  • Monitor Party or Raid Logs Only

  • Monitor Spells on Monitor List Only

  • Needs to be smart enough to understand that some spells have limits based on recipient's level, like buffs or heals. Shouldn't send alert if buffing a lower level toon with the highest level buff they can receive; but should alert when a lower rank buff is used on a max-rank player.

Build Messaging Logic

  • Report to players in Private Message; once per instance. BUT, if there's any performance hit around keeping another "ignore list" relevant to that instance, it's fine to just report it every time the ability is spotted. Rather annoy an offender vs. penalize performance of someone running the addon.

  • Don't worry about addon-to-addon communication, if multiple people have the addon. I don't want to worry about the performance hit about syncing who is going to tell the offender. It's OK if the offender gets a few messages.

Message copy format:

{rt7} GogoWatch : Hey Friend, you just used a low rank of [Ability Name]. Please check your Action Bar or visit your Class Trainer to make sure you've got the right ability for your level.

  • Good if we include the link to the spell the player cast.

  • "rt7" is X / Cross.

  • 255 Character count for messages, are there hidden characters included in a linked ability?

Build Creator Message into Tooltips

  • Good if it uses the same logic as GogoLoot so it's easy for me to update.

Tooltip copy:

{rt7} GogoWatch : Team Member

image

local creatorText = "\124TInterface\TargetingFrame\UI-RaidTargetingIcon_4.png:0\124t GogoLoot : Team Member"

Future Work

Rebuilding "RankWatch" is MVP... but next up I would like to build out a few tells focused around helping people play better, "Hey, you stood in shatter. Next time /range 20 to avoid this." Not the public shaming, per se, more the helpful guides so players know how to improve next run. Again, I think this list grows over time... we start off with a few abilities that we know can be avoided, and send a message to people who get hit by them.

Drawing inspiration from:

https://www.curseforge.com/wow/addons/phoenixstyle