World of Logs - the Expression Editor

Started by TeaLeaf, July 14, 2011, 10:55:50 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

TeaLeaf

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=&quot;<insert-player-name-here>&quot;
and (fullType=SPELL_CAST_START or fullType=SPELL_CAST_SUCCESS)
and
(
spell=&quot;Vampiric Touch&quot;
or spell=&quot;Devouring Plague&quot;
or spell=&quot;Shadow Word: Pain&quot;
or spell=&quot;Shadow Word: Death&quot;
or spell=&quot;Mind Blast&quot;
or spell=&quot;Mind Flay&quot;
)
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
TL.
Wisdom doesn\'t necessarily come with age. Sometimes age just shows up all by itself.  (Tom Wilson)
Talent wins games, but teamwork and intelligence wins championships. (Michael Jordan)

Legolei

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=&quot;<name>&quot;
and (fullType=SPELL_CAST_START or fullType=SPELL_CAST_SUCCESS)
and
(
spell=&quot;Steady Shot&quot;
or spell=&quot;Cobra Shot&quot;
or spell=&quot;Arcane Shot&quot;
or spell=&quot;Explosive Shot&quot;
or spell=&quot;Serpent Sting&quot;
or spell=&quot;Black Arrow&quot;
or spell=&quot;Multi-Shot&quot;
or spell=&quot;Rapid Fire&quot;
or spell=&quot;Kill Shot&quot;
or spell=&quot;Misdirection&quot;
or spell=&quot;Kill Command&quot;
)

hubbah


TeaLeaf

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.
TL.
Wisdom doesn\'t necessarily come with age. Sometimes age just shows up all by itself.  (Tom Wilson)
Talent wins games, but teamwork and intelligence wins championships. (Michael Jordan)