Wednesday, December 12, 2012

Why Aren't Absorbs Tracked in Stats?

I'm writing this blog today to hopefully help clear up this issue.  This is by far the number one request and concern that I get via e-mail.  I'm sure there are others of you wondering the same thing, but just don't bother e-mailing about it, so I'm going to take a moment to address this issue.  Hopefully after you read this, you will be a little more knowledgeable on the inner-workings of a combat log (if you haven't looked inside one yourself already) and why absorbs are not tracked.

Note: In this post, when I speak of "absorbs," I am referring to spells such as Static Barrier and Force Armor.  This can also be extended to include other absorption spells for Smuggler, Imperial Agent, Tank Tree Talents, Shields (from gear), etc.  Any spell, item, or piece of gear that causes damage to be absorbed.

TL;DR: Absorbs are not tracked on the website because based on the current combat logging system, they are not possible to accurately track.  It may be possible to some extent, but it would be a lot of guess work and the numbers would be extremely inaccurate and unreliable.

The Full Post:

Unfortunately, the absorption stat is not tracked any better than just showing a number on the website because of the way this spell is tracked via the combat logging system.  This is the scenario that occurs:

  1. SorcBob casts "Static Barrier" on TankJoe.
  2. SorcBob's combat log shows that he cast "Static Barrier" on TankJoe.
  3. TankJoe's combat log shows that "Static Barrier" was cast on him by SorcBob.
  4. TankJoe gets hit and takes damage.
  5. TankJoe's combat log shows that he absorbed damage.
  6. TankJoe's combat log shows that he lost the spell "Static Barrier" from SorcBob (if the entire bubble was used).
  7. SorcBob's combat log shows that he removed the spell "Static Barrier" from TankJoe.
So, based on this scenario, you can see that once SorcBob cast his "Static Barrier" spell onto TankJoe, nothing shows up in SorcBob's combat log again until the spell "Static Barrier" is used up or expires from TankJoe.

Now, I'm going to show you what this actually looks like in the combat log.  Below each line of information, I will describe what it means to the best of my ability.

This is what a snippet of SorcBob's combat log looks like from the scenario above:

[16:37:15.940] [@SorcBob] [@SorcBob] [Static Barrier {808201175957504}] [Event {836045448945472}: AbilityActivate {836045448945479}] ()

This line is telling us that SorcBob activated the ability "Static Barrier".  It shows it as it activating on himself, but that's just the way the combat log shows ability activation (for some reason).

[16:37:15.940] [@SorcBob] [@SorcBob] [] [Spend {836045448945473}: Force {836045448938502}] (35)

This line tells us how many resources were used.  It may or may not be in reference to the previous spell cast, but it's a reasonable assumption to make (and usually correct).  In this case, he spent 35 force.

[16:37:15.940] [@SorcBob] [@TankJoe] [Static Barrier {808201175957504}] [ApplyEffect {836045448945477}: Static Barrier {808201175957504}] ()

This line tells us that SorcBob is "applying an effect" of Static Barrier onto TankJoe.  The spell was cast on him, makes sense.

[16:37:15.943] [@SorcBob] [@TankJoe] [Static Barrier {808201175957504}] [ApplyEffect {836045448945477}: Deionized {808201175957777}] ()

This line shows the resulting debuff from Static Barrier being cast onto TankJoe as well.

[16:37:16.366] [@TankJoe] [@SorcBob] [Static Barrier {808201175957504}] [RemoveEffect {836045448945478}: Static Barrier {808201175957504}] ()

This line shows the spell "Static Barrier" being removed.  Take note that the names are also in reverse.

This is what a snippet of TankJoe's combat log looks like from the scenario above:

[22:37:15.059] [@SorcBob] [@TankJoe] [Static Barrier {808201175957504}] [ApplyEffect {836045448945477}: Static Barrier {808201175957504}] ()

This line tells us that SorcBob is "applying an effect" of Static Barrier onto TankJoe.

[22:37:15.061] [@SorcBob] [@TankJoe] [Static Barrier {808201175957504}] [ApplyEffect {836045448945477}: Deionized {808201175957777}] ()

This line shows the resulting debuff from Static Barrier being applied to TankJoe by SorcBob.

[22:37:16.947] [@SorcBob] [@TankJoe] [Static Barrier {808201175957504}] [RemoveEffect {836045448945478}: Static Barrier {808201175957504}] ()

This line shows the spell Static Barrier as being removed from TankJoe by SorcBob.

[22:37:16.947] [Imperial Assassin Droid {2854138912178176}:564009248328] [@TankJoe] [Armed {2853992883290112}] [ApplyEffect {836045448945477}: Damage {836045448945501}] (5141 kinetic {836045448940873} (4338 absorbed {836045448945511})) <5141>

This line shows TankJoe getting hit by Imperial Assassin Droid for 5141 damage, of which 4338 was absorbed.

So, if you've never looked inside your combat log text file before, this can all be a tad overwhelming.  In a nutshell (hopefully enough to explain this post), you are given a few pieces of information per line of the combat log.  You are given the time (but not the server time, the local time of your own computer; side note: this is why I ask for the timezone of your computer and not the server), the "who" did it, to "whom" it was done, what action was done, the effect of that action, any resulting numbers caused by the action, and threat caused by the action.

(Another side note: The long string of digits are language references to the preceding text.  It is a unique ID that links to language files, and then pulls the correct word(s) based on which language your client is running.)

So, as you can see from the above information.  There is nothing that shows in SorcBob's combat log about how much damage was absorbed by TankJoe.  In TankJoe's combat log, it shows how much damage was absorbed, but it doesn't say what the source of the damage absorption was.  In this case, it's pretty obvious, but if TankJoe has any methods of absorbing damage on his own, there is no way to differentiate how the damage was absorbed.

(//end color coding)

So, with that said, this stat theoretically could be listed on the website.  In a solo setting (meaning only SorcBob uploaded his combat log, and no group parse was created), a lot of assumptions would have to be made.  These are some of the assumptions we could make, and also some questions we would have to ask:

  • "Static Barrier" lasts for 30 seconds, so based on the fact that it shows it being removed sooner than 30 seconds, we can assume that the entirety of the absorption effect of that spell was used.
  • If there is a combat log entry showing "Static Barrier" being removed exactly 30 seconds later, then we can assume that not all of the absorption effect of the spell was used.  But, what if SorcBob cast it on a DPS, and he just got hit by an add once, so some absorption was used, but not all of it?
  • What if I cast the spell on someone again at the 20 second mark after the debuff wears off? It shows the effect being removed before it is applied again if the spell still exists on the target, but did it absorb anything?
  • What level is the player? I can get a general ballpark based on the spells used, and sometimes exact if the right spells are logged.  We can also assume that most people that upload combat logs are level 50.
  • What does the player's gear look like? How much healing power does the player have? How much damage should the player's Static Barrier absorb based on gear?

So, as you can see, that's a lot of what if's and assumptions that need to be made.  So, at best, the stat could be tracked with the following assumptions made:

  • The player is level 50.
  • If the "Remove Effect" spell shows up at exactly the 30 second mark, that means no damage was absorbed.
  • The player is not wearing any healing power gear (or maybe an average player gear level is assumed).
  • If the "Remove Effect" shows up before the 30 second mark, that means the entirety of the damage absorption was used.

Making these assumptions, we could ballpark the stat, but it would be extremely inaccurate.

In a group setting, some of these questions could be answered for us.  With the proper coding, player spells could be tracked back and forth from player to player.  Assumptions may not have to be made about a lot of things.  In the case above, we can assume SorcBob's "Static Barrier" spell absorbs 4338 damage before it is removed, which makes all the other questions a moot point.  It would still be an inaccurate stat, because if TankJoe had another absorption spell on him (like a tank talent), and both were up at the same time he was hit, how would we determine which spell gets how much of the absorption amount.  But wait, what if TankJoe's shield works and he absorbs some damage that way?

So, I think you get the point.  It would require a lot of coding and in most cases a lot of guess work.  At some point in the future, I hope to be able to at least provide a ballpark estimation on this figure, but it is not something you will see tracked on the site any time soon.  I think most have seen me say this before, but I'm a one man team.  This is not my real life job, it is simply a hobby that I enjoy doing.  So, if I want to get anything accomplished on the site, I must prioritize everything and limit my scope to as few projects as I can at any given time.  This project would be an extreme undertaking because of other systems that would need to be coded first to derive this stat, and would ultimately end up as a stat that is extremely inaccurate.

I hope this helps clear up the issue and helps you understand why the stat is not tracked.  Please feel free to email me (or post below) if you have any concerns, questions or comments.  And please, if you know something I don't, I'm always open to criticism.

Or, maybe, ask BioWare to improve their combat logging system.  That would fix a lot of problems. :)

No comments:

Post a Comment