As all DMR raiders know, at the end of each raid we upload logs to the WoL website for our raiders and raid leaders to analyse and look for areas where we can improve. If we raid efficiently we are more effective with our limited raid time each week - and most of us prefer to knock bosses over quickly and make good progress with our (compared to most raid guilds) short raid week. However one of WoL's most powerful abilities is also one of its least used functions: the Expression Editor.
Where is the Expression Editor?
Go to a raid log on World of Logs and find the wipe/kill or period you want to analyse. Then go to Dashboard>Expression Editor
What does it do?
The Expression Editor allows you to run a query on the combat log to find out what happened. Think of a question about what happened in the raid, it can almost certainly be answered by the expression editor. Did we use a spell-power pot mid-fight? Did we use a HS? What rotation was that player using? Etc.
The white box which you can see is where you enter the question you want to ask, but you have to enter it in an appropriate 'language' so that the combat log can be searched properly. For example, if you wanted to see what a certain shadow priest did on a particular fight then you could enter this query in the white box, then hit Run.
sourceName="<insert-player-name-here>"
and (fullType=SPELL_CAST_START or fullType=SPELL_CAST_SUCCESS)
and
(
spell="Vampiric Touch"
or spell="Devouring Plague"
or spell="Shadow Word: Pain"
or spell="Shadow Word: Death"
or spell="Mind Blast"
or spell="Mind Flay"
)
Replace with Teaell and the script would run and look for what I did on my shadow priest in the fight.
Timeline:
Once the query has run and you see the time-stamped answers of what was cast when, try clicking the Timeline tab, then click the 'Plot Spells Timeline' button and you get a visual graph of what was cast when. The visual display is quite helpful to see breaks in casting 'rhythm' for example.
For other classes, simply replace the spell names with appropriate ability names. E.g for a hunter it might be like below. If you are only interested in one spell, delete the other spell lines, etc.
sourceName=""
and (fullType=SPELL_CAST_START or fullType=SPELL_CAST_SUCCESS)
and
(
spell="Steady Shot"
or spell="Arcane Shot"
or spell="Chimera Shot"
or spell="Aimed Shot"
or spell="Serpent Sting"
or spell="Rapid Fire"
or spell="Readiness"
or spell="Kill Shot"
)
If you want to know more or develop your own expression editor queries then I'd recommend reading the WoL Expression Editor resource:
http://forums.worldoflogs.com/viewtopic.php?p=5612
It is a really straight forward way of finding out those answers as to 'What Happened'.
I'd encourage people to experiment and to develop their own class queries, check they work and then post them in this thread so that we can build a library of queries that we know work for specific situations.
Hope this helps make World of Logs a little more useful for people. Enjoy!
Grammar
expression = orExpression
orExpression = andExpression
*( "or" andExpression )
andExpression = equalityExpression
*( "and" equalityExpression )
equalityExpression = relationalExpression
[ ( "=" / "!=" )
relationalExpression
]
relationalExpression = identExpression [ "not" ] "in" list
/ additiveExpression
[ ( "<" / "<=" / ">=" / ">" )
additiveExpression
]
additiveExpression = multiplicativeExpression
*( ( "+" / "-" )
multiplicativeExpression
)
multiplicativeExpression = unaryExpression
*( ( "*"
/ "/" ; not currently supported
/ "%" ; not currently supported
)
unaryExpression
)
unaryExpression = *( "not" / "+" / "-" ) primaryExpression
primaryExpression = "(" expression ")"
/ identExpression
/ literal
identExpression = IDENTIFIER
literal = CONSTANT
/ STRING
/ NUMBER
/ "true"
/ "false"
list = "(" literal *( "," literal ) ")"
IDENTIFIER = ( ALPHA / "_" ) *( ALPHA / DIGIT / "_" )
CONSTANT = UC_ALPHA 1*( UC_ALPHA / "_" )
STRING = "'" *( SQ_ESC_CHR / SQ_STR_CHR ) "'"
\ DQUOT *( DQ_ESC_CHR / DQ_STR_CHR ) DQUOT
NUMBER = 1*DIGIT
UC_ALPHA = %x41-5A ; 'A'..'Z'
SQ_ESC_CHR = "\" ( "'" / "\" )
SQ_STR_CHR = %x00-26 / %x28-5B / %x5D-FF
; all but "'" and "\"
DQUOT = DQUOTE
DQ_ESC_CHR = "\" ( DQUOT / "\" )
DQ_STR_CHR = %x00-21 / %x23-5B / %x5D-FF
; all but DQUOT and "\"
###################
## Identifiers ##
###################
Event
type = Number: Event type (see EVENT TYPES)
subType = Number: Event subtype (undocumented, use fullType)
fullType = Number: Event type and subtype combined (see FULL EVENT TYPES)
missType = Number: Event (TYPE_MISS) miss type (see MISS TYPES)
powerType = Number: Event (ENERGIZE/DRAIN/LEECH) power type (see POWER TYPES)
isCritical = Boolean: Event is critical
isCrushing = Boolean: Event is crushing
isGlancing = Boolean: Event is glancing
spellId = Number: Spell ID
spell = String: Spell name
school = Number: Spell school (see SPELL SCHOOLS)
extraSpellId = Number: Extra spell ID
extraSpell = String: Extra spell name
NOTE: Extra spell fields are present for events that refer to more than one spell,
like SPELL_INTERRUPT, _DISPEL, _DISPEL_FAILED, _STOLEN and _AURA_BROKEN_SPELL.
amount = Number: Event amount
absorbed = Number: Event amount absorbed
blocked = Number: Event amount blocked
resisted = Number: Event amount resisted
missAmount = Number: Event amount missed
overheal = Number: Event amount overhealed
overkill = Number: Event amount overkill
healingDone = Number: WOL healing done amount (amount - overheal + absorbed)
damageTaken = Number: WOL damage taken amount
(missAmount if type = TYPE_MISS and missType = MISS_ABSORB
else amount + absorbed)
NOTE: Identifier missType is not in query language.
Event source/target actors
sourceId = Number: WOL source actor ID
sourceUid = Number: WOL merged source actor ID
masterSourceUid = Number: WOL merged actor ID of source's master
sourceMobId = Number: Source actor mob ID
sourceName = String: Source actor name
sourceType = String: Source actor type (see ACTOR TYPES)
sourceReaction = Number: Source actor reaction (see ACTOR REACTIONS)
sourceIcon = Number: Source actor raid icon (see ACTOR RAID ICONS)
targetId = Number: WOL target actor ID
targetUid = Number: WOL merged target actor ID
targetMobId = Number: Target actor mob ID
targetName = String: Target actor name
targetType = String: Target actor type
targetReaction = Number: Target actor reaction (see ACTOR REACTIONS)
targetIcon = Number: Target actor raid icon (see ACTOR RAID ICONS)
Healing event
healSourceId = Number: WOL source actor ID (with shield support)
healSourceUid = Number: WOL merged source actor ID (with shield support)
masterHealSourceUid = Number: WOL merged actor ID of source's master (with shield support)
healSpellId = Number: Spell ID (with shield support)
healSpell = String: Spell name (with shield support)
#################
## Constants ##
#################
EVENT TYPES
TYPE_DAMAGE = 1
TYPE_MISS = 2
TYPE_HEAL = 3
TYPE_AURA = 4
TYPE_DEATH = 5
TYPE_CAST = 6
TYPE_DISPEL = 7
TYPE_GAIN = 8
TYPE_ENCHANT = 9
TYPE_DURABILITY = 10
TYPE_SUMMON = 11
TYPE_OTHER = 50
FULL EVENT TYPES
SWING_DAMAGE = 101
RANGE_DAMAGE = 102
SPELL_DAMAGE = 103
SPELL_PERIODIC_DAMAGE = 104
DAMAGE_SPLIT = 105
DAMAGE_SHIELD = 106
ENVIRONMENTAL_DAMAGE = 107
SPELL_BUILDING_DAMAGE = 108
SWING_MISSED = 201
RANGE_MISSED = 202
SPELL_MISSED = 203
SPELL_PERIODIC_MISSED = 204
DAMAGE_SHIELD_MISSED = 205
SPELL_HEAL = 301
SPELL_PERIODIC_HEAL = 302
SPELL_BUILDING_HEAL = 303
SPELL_AURA_APPLIED = 401
SPELL_AURA_APPLIED_DOSE = 402
SPELL_AURA_REMOVED = 403
SPELL_AURA_REMOVED_DOSE = 404
SPELL_EXTRA_ATTACKS = 405
SPELL_AURA_REFRESH = 406
PARTY_KILL = 501
UNIT_DIED = 502
UNIT_DESTROYED = 503
SPELL_INSTAKILL = 504
SPELL_CAST_START = 601
SPELL_CAST_SUCCESS = 602
SPELL_CAST_FAILED = 603
SPELL_INTERRUPT = 701
SPELL_DISPEL = 702
SPELL_DISPEL_FAILED = 703
SPELL_STOLEN = 704
SPELL_AURA_BROKEN = 705
SPELL_AURA_BROKEN_SPELL = 706
SPELL_ENERGIZE = 801
SPELL_DRAIN = 802
SPELL_LEECH = 803
SPELL_PERIODIC_ENERGIZE = 804
SPELL_PERIODIC_DRAIN = 805
SPELL_PERIODIC_LEECH = 806
ENCHANT_APPLIED = 901
ENCHANT_REMOVED = 902
SPELL_DURABILITY_DAMAGE = 1001
SPELL_DURABILITY_DAMAGE_ALL = 1002
SPELL_SUMMON = 1101
SPELL_CREATE = 5001
SPELL_RESURRECT = 5002
MISS TYPES
MISS_ABSORB = 1
MISS_BLOCK = 2
MISS_DEFLECT = 3
MISS_DODGE = 4
MISS_EVADE = 5
MISS_IMMUNE = 6
MISS_MISS = 7
MISS_PARRY = 8
MISS_RESIST = 9
MISS_REFLECT = 10
POWER TYPES
POWER_HEALTH = -2
POWER_MANA = 0
POWER_RAGE = 1
POWER_FOCUS = 2
POWER_ENERGY = 3
POWER_HAPPINESS = 4
POWER_RUNES = 5
POWER_RUNIC_POWER = 6
POWER_SOUL_SHARDS = 7
POWER_POWER_ECLIPSE = 8
POWER_HOLY_POWER = 9
SPELL SCHOOLS
PHYSICAL = 1
HOLY = 2
FIRE = 4
NATURE = 8
FROST = 16
SHADOW = 32
ARCANE = 64
NOTE: Spell schools are bitwise cumulative for multi-school spells.
ACTOR TYPES
"Player"
"Creature"
"Pet"
"Vehicle"
"Unknown"
ACTOR REACTIONS
REACTION_FRIENDLY = 16
REACTION_NEUTRAL = 32
REACTION_HOSTILE = 64
ACTOR RAID ICONS
ICON_STAR = 1
ICON_CIRCLE = 2
ICON_DIAMOND = 4
ICON_TRIANGLE = 8
ICON_MOON = 16
ICON_SQUARE = 32
ICON_CROSS = 64
ICON_SKULL = 128
Great tip, Thanks TL.
The shots TL gave are primarily for a MM hunter. For any one interested, here are the shots usable for SV:
sourceName="<name>"
and (fullType=SPELL_CAST_START or fullType=SPELL_CAST_SUCCESS)
and
(
spell="Steady Shot"
or spell="Cobra Shot"
or spell="Arcane Shot"
or spell="Explosive Shot"
or spell="Serpent Sting"
or spell="Black Arrow"
or spell="Multi-Shot"
or spell="Rapid Fire"
or spell="Kill Shot"
or spell="Misdirection"
or spell="Kill Command"
)
steady shot for SV? :)
Tbh, that's not the point, if it could be used then it should be in the query as it will then show. If it is used when it should not then having the spell in the query will tell you, omitting it will not.