This post goes over ways to pull specific types of lines from combat logs of the current raid tier so that you are only looking key information from a fight. Viewing raw log data may seem simplistic compared to the flashy summed and/or averaged figures that World of Logs (WoL) and Recount provide, but don’t be deceived: looking at log lines directly can be incredibly useful, as I describe and then demonstrate after the break.
This post centers around using the Expression Editor in WoL. If you are unfamiliar with WoL, please check out Zeherah’s guides, parts 1 and 2. The Expression Editor allows you to enter commands that tell WoL which types of lines from the combat log you want displayed. Just like commands for other types of software, the Expression Editor queries have to have the right syntax, grammar, spelling, diction, etc.; otherwise the editor won’t understand what is being asked of it. However, the query language is versatile enough that you can get it to display just about any combination of combat log line types that you might want. And that makes it a pretty powerful tool.
It isn’t merely powerful, though; it’s also different. It can tell you things that Recount just won’t. The logs say who did what, when and in what order. They tell you whether someone started dps too early or hit their interrupt too late. They reveal the strange stats of the game, like Sound on Atramedes or Corruption on Cho’gall. Basically, because they add the dimension of time they tell can you the story of the fight. You just don’t get that from Recount, as great as it is.
Before going further, I should note that a lot of the same advantages can be had from using WoL’s Log Browser instead of the Expression Editor. It is frankly much easier to jump into using because all it requires is checking boxes and supplying spell and unit names rather than learning the language of the Expression Editor. However, just like learning to use macros is better than clicking on everything, learning the Expression Editor is better than using only the Log Browser. Not only is the editor more versatile, it is also capable of displaying more than 200 lines of results.
Expression Editor: Query Language by Maihem (WoL site admin) is a fantastic resouce available on the WoL forums. It’s almost one-stop shopping for the elements of WoL queries. I’d recommend the Documentation section of the forums in general; there you can find intro guides by Vixsin and other advice related to uploading and managing logs.
If your guild does not upload logs but you would like to follow along with this post anyway, I’d encourage you to go to the WoL site and pick out some publicly available logs. There is a recently uploaded logs widget on the righthand side of the main page where you can typically find logs from the current tier.
You can find the WoL Expression Editor in the same drop-down menu that you find Damage Done and Healing Done in WoL, except that it’s way down at the bottom of the menu. The Expression Editor page is fairly simple in its layout. It has a command entry box and, beneath it, space for log data to be displayed. The editor queries that I provide below can be pasted into this text entry box. So long as you have an appropriate fight selected, getting the queries to work should be as simple as pasting them in and hitting “Run.”
The commands provided below are essentially examples. They should be useful in their own right, but they won’t tell you everything you’d want to know about a fight. Hopefuly they are diverse enough that, combined with the resources linked to above, they’ll make good stepping stones for creating your own editor queries.
The following lines will provide you with a list of incidents of players getting hit with Pillar of Flame damage and of players getting infected by the lava parasites. Copy and paste the whole thing; it’s just separated into three lines to make it easier to read.
(spell = "Pillar of Flame" and targettype = 'Player')
(spell = "Parasitic Infection" and fulltype = SPELL_AURA_APPLIED)
plain English translation: List for me all incidents where players are affected by the spell “Pillar of Flame” or where any unit gains the debuff “Parasitic Infection.”
We want to specify players for Pillar of Flame because it’s actually a buff that Magmaw gains too to cast it. We also only need to identify debuff gains for Parasitic Infection because we know what happens after it’s gained and so any other log entries associated with the debuff (damage, fading, etc.) are effectively just spam. We don’t want to specify targets for Parasitic Infection because (1) we don’t need to and (2) we might be curious if any pets are getting it and so we don’t want to limit possible targets to, say, players.
One common problem for this fight is dealing with Arcanotron’s Arcane Annihilator in conjunction with the damage buff he gains from getting attacked while his shield is up. Logs can be useful to looking at this sort of information because, being in sequence, they tell stories about what happened in a fight. They point to causes and effects, actions and reactions. And this is great for Arcanotron. Here’s a way to get a readout of Arcanotron’s casts, his shield buff gains, and interrupts and dispels on him. Unfortunately, I don’t know of a way to get the editor to show only those attacks that caused Converted Power gains, so that’s a part of the story, so to say, that is left out of the results.
(spell = "Power Conversion" and fulltype = SPELL_AURA_APPLIED)
(spell = "Converted Power" and (fulltype = SPELL_AURA_APPLIED_DOSE or fullType = SPELL_AURA_REMOVED_DOSE ))
(fulltype = SPELL_DISPEL and extraspell="Converted Power")
(spell = "Arcane Annihilator")
(fulltype = SPELL_INTERRUPT and extraspell = "Arcane Annihilator")
plain English translation: List all incidents where anyone gained the aura “Power Conversion” or where anyone gained or lost stacks of the aura “Converted Power” or where that aura was dispelled or where anyone cast or was affected by the spell “Arcane Annihilator” or where a spell was interrupted and that spell was Arcane Annihilator.
Note that you don’t have to specify target types when only units under consideration can be affected by the given spell. So, because only Arcanotron can gain Power Conversion, you don’t need to specify which unit is gaining it.
Remedy should always be removed from Maloriak quickly and so it can worthwhile to check how quickly your dispellers get to it after it is applied. That “quickly” part is something that you can see with logs but not with simple counts of dispels cast.
spell = "Remedy"
(fulltype = SPELL_DISPEL and targetname = "Maloriak")
plain English translation: List for me every incident related to the spell “Remedy or where Maloriak was dispelled.
As a side note, it’s sort of fun to see how much Remedy ends up healing for when a mage spellsteals it.
Part of dpsing well on Chimaeron involves not missing hard-hitting shots due to Caustic Slime. It is far better to fire one more Steady or Cobra than miss a big shot. As such, you might be curious how good you are at adjusting to Caustic Slimes. Miss counts can help with that, but they can be inaccurate due to casts that just catch Caustic Slime because we don’t have control over them. It’s the shots that miss well-into the debuff that are of greater concern, and to identify them we need time stamps as provided by a log.
(fulltype = SPELL_MISSED and sourcename = "yournamehere" and spell != "Concussive Barrage")
(fulltype in (SPELL_AURA_APPLIED, SPELL_AURA_REMOVED) and spell = "Caustic Slime" and targetname = "yournamehere")
plain English translation: List all spell misses from me that were not Concussive Barrage; also list all aura applications and removals of the spell Caustic Slime that hit me.
Of course, you’ll want to throw your name in for “yournamehere.” Also note that I excluded Concussive Barrage because it creates a lot of spam.
A key stat that you can’t track in Recount is Sound. However, you can track sound gains in combat logs. The following query goes beyond the in-game sound displays and tells you who is gaining sound from what and when. Note that I left Modulation out since it hits everyone, is not avoidable and always applies the same amount.
type = TYPE_GAIN and spell in ("Searing Flame", "Roaring Flame", "Roaring Flame Breath", "Sonic Breath", "Sonar Pulse", "Sonar Bomb")
plain English translation: Show me any gains of any type from spells in this list.
Sound doesn’t have an actual debuff name in the logs, so you have to just look for generic gains like this as far as I know. Despite this loose type restriction, the results display sound gains as if you had asked for them by name.
Note that you can apparently get the same sort of result from a simpler line:
powertype = 10 and spell != "Modulation"
This suggests a general truth about the Expression Editor: there is often more than one way to get at the result you want. This doesn’t mean that some means aren’t better than others, though. Loosely speaking, you should prefer methods that only exclude what you don’t want to see rather than methods that include specific things you do want to see so that you start from a better point for revising your command. That is, it’s easier to see you need to exclude something rather than realize that something is missing. I suppose this makes the second command here for Atramedes better than the first; it’s safer to exclude Modulation than risk forgetting to include one spell in a long list of spells.
One of the the more crucial points in this fight is the transition to phase 2. Players have to get out of the Magma fast so that they don’t overwhelm healers and so they can get interrupts going. You might be curious, then, who is getting out of Magma quickly and who is not. Players should be able to get up on a pillar before attaining five stacks of Magma; the following query asks who went over eight.
fulltype = SPELL_AURA_APPLIED_DOSE and spell = "Magma" and amount > 8
plain English translation: Tell me all counts of aura stacks where the aura is “Magma” and the number of stacks is greater than eight.
You can, of course, change the number to any you want.
One problem on Halfus is overzealous dps stealing agro on drakes. This can happen for a variety of reasons ranging from an early Heroism/Bloodlust to the unconventional pull methods of the fight. You might be curious, then, which dps are pulling agro on drakes or whelps and getting smacked around by them.
type = TYPE_DAMAGE and sourcename in ("Orphaned Emerald Whelp", "Slate Dragon", "Nether Scion", "Time Warden", "Storm Rider") and targetname not in ("tankname1", "tankname2", "tankname3")
plain English translation: Display for me all incidents of damage whose source is one of the names in this list and whose recipient is not any of the names in this other list.
You’ll of course want to insert your own tanks’ names in for those tankname fillers. Sometimes, hardcoding specific exceptions like this is necessary but as a general rule it’s better to try and use commands that regard a type rather than a name to avoid unnecessarily long commands filled with specific ids.
Valiona and Theralion
The size of damage taken, not just that it was taken, can be meaningful. On Valiona and Theralion we might be curious about Blackout damage. If it goes above 50k per person on 25N then it means that people weren’t stacked at all well enough. You might also be curious if the poor stacking was from someone mistakenly and/or prematurely dispelling Blackout.
(spell = "Blackout" and (amount > 50000 or fulltype = SPELL_AURA_APPLIED))
(fulltype = SPELL_DISPEL and extraspell="Blackout")
plain English translation: List all incidents of the spell “Blackout where its amount goes above 50,000 or where it is applied or where it is dispelled.
I wish there were a good way to trace phase 2 lightning damage back to the appropriate player with Lightning Rod, but I could not figure out a way to do it. The damage is not reauthored (that is, it does not take the player’s name as its source) and it can often have an identical timestamp with all the other players affected by Lightning Rod. Of course, on 10man it’s a bit easier to figure out.
So, let’s turn to a different curious stat: damage done to Aegis of Flame. It’s hard to track shield damage because the shield is not regarded as a separate target; all the damage to the shielded target usually just gets lumped together without differentiation, absorbed or no. To track it appropriately we’ll have to combine query language with sum measures found elsewhere in WoL. Let’s go to Analayze > Damage Done instead of the Expression Editor. Select Ignacious as your target in the options on the left side of the window. Note that there is an Expression widget down at the bottom of this same menu. There, throw in this text:
absorbed > 0
This nets you the same refinement that you’d get by putting it into the expression editor: only show quantities that were absorbed. Since you’re on the Analysis page looking at damage done to Ignacious, WoL transforms that raw log information with direction from the editor command into measures of damage done and dps dealt to Aegis of Flame. I didn’t come up with this trick on my own; I believe I saw it first somwhere on the WoL forums.
A stat that you want to track for this fight but that is not available in Recount is corruption. You have to be careful, though, because you have to differentiate between applications of Corrupted Blood and levels of Corrupted Blood. Different sources of damage apply different stack amounts, and so the corruption level is generally going to be higher than the number of applications. Fortunately, the WoL expression editor displays stack counts fairly well. To see who was topping 70 Corruption you’d throw in
spell = "Corrupted Blood" and amount > 70
If you want to see who’s hitting the 20-30 range the earliest, you’d throw in
spell = "Corrupted Blood" and amount > 20 and amount < 30
By this point in the post you shouldn’t need a translation of this simple query language. And I think it’s important to note that you can often find important information like this with very simple query language. Your commands don’t have to be complex arrays of terms like the Arcanotron query I made above.
You can use logs to investigate entries for their times rather than their quantities. For example, are you risking jumping into a Wind Blast if you fly back from Nezir’s platform to Rohash’s right after a special? Timestamps on the casts of those spells will tell you.
fulltype in (SPELL_CAST_SUCCESS, SPELL_AURA_APPLIED, SPELL_AURA_REMOVED) and sourcename in ("Rohash", "Nezir") and spell in ("Wind Blast", "Sleet Storm")
plain English translation: Display for me log entries of all the types in this list with the sources in this other list and that involve the spells in this other, other list.
Killing Stormlings effectively and stacking Feedback is an important part of the second phase of this fight. You might also be interested stacks of Acid Rain gained, both in their totals and in their removal by particular classes (such as Rogues with Cloak of Shadows). Note that this command will have a fair bit of spam from Acid Rain if applied to a 25man encounter. If you want to winnow that down a bit, just put Acid Rain in its own line and add in some amount qualifiers like amount = 5 or amount = 10 or amount = 15 to get it to show AR stack gains only at specific benchmarks. You could also limit it by person, so that only one player’s stack gains are shown, and assume that the rest of the raid is gaining stacks at the same time and at the same levels.
(spell in ("Feedback", "Acid Rain") and fulltype in (SPELL_AURA_APPLIED_DOSE , SPELL_AURA_REMOVED))
(fulltype = UNIT_DIED and targetName = 'Stormling')
plain English translation: Display for me all incidents related to the spells in this list that correspond to the types of log entries in this list, as well as incidents where a unit died and the unit’s name was “Stormling.”