This document provides the definitive syntax for World of Warcraft Advanced Combat Logging, based on validated arena combat log analysis.
Required Setup: advancedCombatLoggingDefault CVar must be enabled.
Coordinate Availability: Position data only available during PvP arena matches with advanced logging enabled.
TIMESTAMP EVENT_TYPE,sourceGUID,sourceName,sourceFlags,sourceRaidFlags,destGUID,destName,destFlags,destRaidFlags,[PREFIX_PARAMS],[ADVANCED_PARAMS],[SUFFIX_PARAMS]
Events with Position Data (Arena Matches Only):
SPELL_CAST_SUCCESS(31 params) - Position at 26-27SPELL_HEAL(36 params) - Position at 26-27SPELL_DAMAGE(42 params) - Position at 26-27SPELL_PERIODIC_DAMAGE(42 params) - Position at 26-27DAMAGE_SPLIT(42 params) - Position at 26-27SPELL_ENERGIZE(35 params) - Position at 26-27SPELL_PERIODIC_HEAL(36 params) - Position at 26-27SPELL_PERIODIC_ENERGIZE(35 params) - Position at 26-27SPELL_DRAIN(35 params) - Position at 26-27SWING_DAMAGE(38 params) - Position at 23-24SWING_DAMAGE_LANDED(38 params) - Position at 23-24
- EVENT_TYPE (string): Combat event type (e.g., SPELL_DAMAGE, SPELL_HEAL)
- sourceGUID (string): GUID of source entity
- sourceName (string): Name of source entity (quoted)
- sourceFlags (hex): Source entity flags
- sourceRaidFlags (hex): Source raid flags
- destGUID (string): GUID of destination entity
- destName (string): Name of destination entity (quoted)
- destFlags (hex): Destination entity flags
- destRaidFlags (hex): Destination raid flags
For SPELL events:
- spellId (number): Spell ID
- spellName (string): Spell name (quoted)
- spellSchool (hex): Spell school bitmask
For DAMAGE/HEAL events (additional):
- amount (number): Damage/heal amount
- overkill/overheal (number): Excess amount
- school (hex): Damage school
- resisted (number): Amount resisted
- blocked (number): Amount blocked
- absorbed (number): Amount absorbed
- critical (boolean): Critical hit flag
- glancing (boolean): Glancing blow flag
- crushing (boolean): Crushing blow flag
- isOffHand (boolean): Off-hand attack flag
- infoGUID (string): GUID of unit providing advanced info
- ownerGUID (string): GUID of owner (for pets/minions)
- currentHP (number): Current health points
- maxHP (number): Maximum health points
- attackPower (number): Attack power value
- spellPower (number): Spell power value
- armor (number): Armor value
- absorb (number): Active absorb amount
- powerType (number): Power type enum (0=Mana, 1=Rage, 2=Focus, 3=Energy, 6=Runic Power)
- currentPower (number): Current power amount
- maxPower (number): Maximum power amount
- powerCost (number): Power cost of ability
- positionX (number): X coordinate on map instance
- positionY (number): Y coordinate on map instance
- uiMapID (number): UI Map identifier
- facing (number): Unit facing direction (0-2π radians)
- level (number): NPC level or player item level
For DAMAGE events:
- unconsciousOnDeath (boolean): Unit becomes unconscious on death
- missType (string): Miss type if applicable
- isOffHand (boolean): Off-hand weapon attack
- multistrike (boolean): Multistrike attack
Based on our analysis, WoW uses multiple coordinate systems simultaneously:
- World Coordinates: Large-scale positioning (e.g., -1938.60, 1368.80)
- Instance Coordinates: Local instance positioning (e.g., 7.0, 30.0)
- UI Map Coordinates: Interface positioning (e.g., 3.0, 300.0)
- positionX: Parameter 13 in advanced section (0-based index from start of advanced params)
- positionY: Parameter 14 in advanced section
- facing: Parameter 16 in advanced section
5/6/2025 19:04:25.703-4 SPELL_CAST_SUCCESS,Player-11-0E366FE1,"Morvx-Tichondrius-US",0x512,0x40,0000000000000000,nil,0x80000000,0x80000000,115191,"Stealth",0x1,Player-11-0E366FE1,0000000000000000,10282260,10282260,98686,13440,33841,2396,0,0,3,300,300,0,-1938.60,1368.80,0,3.9970,673
Parameter Breakdown:
SPELL_CAST_SUCCESS- Event typePlayer-11-0E366FE1- Source GUID"Morvx-Tichondrius-US"- Source name0x512- Source flags0x40- Source raid flags0000000000000000- Dest GUIDnil- Dest name0x80000000- Dest flags0x80000000- Dest raid flags115191- Spell ID"Stealth"- Spell name0x1- Spell schoolPlayer-11-0E366FE1- Info GUID (advanced logging starts)0000000000000000- Owner GUID10282260- Current HP10282260- Max HP98686- Attack power13440- Spell power33841- Armor2396- Absorb0- Unknown0- Unknown3- Power type (Energy)300- Current power300- Max power0- Power cost-1938.60- Position X1368.80- Position Y0- UI Map ID3.9970- Facing673- Level/Item level
5/6/2025 19:04:39.588-4 SWING_DAMAGE,Creature-0-3021-1911-5918-89-00001A958A,"Infernal",0x2148,0x0,Player-11-0E366FE1,"Morvx-Tichondrius-US",0x512,0x40,Creature-0-3021-1911-5918-89-00001A958A,Player-73-0F4BC0DB,9542657,9542657,229341,229341,211916,0,0,0,1,0,0,0,-1959.79,1281.14,0,0.2559,676,72307,119039,-1,1,0,0,0,nil,nil,nil
Key Differences for SWING events:
- No spell parameters (10-12 missing)
- Position coordinates at parameters 24-25 instead of 27-28
- Extended damage parameters at the end
| Value | Power Type |
|---|---|
| 0 | Mana |
| 1 | Rage |
| 2 | Focus |
| 3 | Energy |
| 4 | Combo Points |
| 5 | Runes |
| 6 | Runic Power |
| 7 | Soul Shards |
| 8 | Lunar Power |
| 9 | Holy Power |
| 10 | Alternate Power |
| 11 | Maelstrom |
| 12 | Chi |
| 13 | Insanity |
| 14 | Burning Embers |
| 15 | Demonic Fury |
| 17 | Fury |
| 18 | Pain |
- SPELL_CAST_SUCCESS: Spell completion
- SPELL_CAST_START: Spell initiation
- SPELL_DAMAGE: Direct spell damage
- SPELL_PERIODIC_DAMAGE: DoT ticks
- SPELL_HEAL: Direct healing
- SPELL_PERIODIC_HEAL: HoT ticks
- SPELL_ENERGIZE: Resource generation
- SPELL_PERIODIC_ENERGIZE: Periodic resource gain
- SWING_DAMAGE: Melee attacks
- SWING_DAMAGE_LANDED: Successful melee hits
- RANGE_DAMAGE: Ranged weapon attacks
- Position Data Source: Advanced parameters belong to the SOURCE entity, not the target
- GUID Tracking: Use full GUID + Name combination for unique unit identification
- Coordinate Validation: Expect multiple coordinate systems, don't suppress large movements
- Missing Data: Some events may have nil/empty advanced parameters
- Pet Handling: ownerGUID links pets to their owners
- Facing Range: 0-2π radians (0 = North, π/2 = East, π = South, 3π/2 = West)
- Split Method: Use
split(' ', 1)to separate timestamp from event data - Parameter Parsing: Split event data by commas, handle quoted strings properly
- Advanced Detection: Check parameter count (typically 20+ for advanced logging)
- Type Conversion: Convert numeric parameters with proper error handling
- GUID Validation: Verify GUID format and entity types
- Position Validation: Accept reasonable coordinate ranges per system type
def parse_advanced_combat_line(line: str) -> Dict:
"""Parse advanced combat log line following WoWPedia specification."""
parts = line.strip().split(' ', 1)
if len(parts) != 2:
return None
timestamp_str, event_data = parts
params = [p.strip() for p in event_data.split(',')]
if len(params) < 20: # No advanced logging
return None
# Extract advanced parameters (start after base + prefix params)
# For SPELL_CAST_SUCCESS: 9 base + 3 spell = 12, advanced starts at index 12
advanced_start = 12 # Adjust based on event type
return {
'timestamp': parse_timestamp(timestamp_str),
'event': params[0],
'source_guid': params[1],
'source_name': extract_quoted_name(params[2]),
'spell_id': int(params[9]) if len(params) > 9 else None,
'spell_name': extract_quoted_name(params[10]) if len(params) > 10 else None,
# Advanced parameters
'info_guid': params[advanced_start] if len(params) > advanced_start else None,
'owner_guid': params[advanced_start + 1] if len(params) > advanced_start + 1 else None,
'current_hp': int(params[advanced_start + 2]) if len(params) > advanced_start + 2 else 0,
'max_hp': int(params[advanced_start + 3]) if len(params) > advanced_start + 3 else 0,
'position_x': float(params[advanced_start + 12]) if len(params) > advanced_start + 12 else 0.0,
'position_y': float(params[advanced_start + 13]) if len(params) > advanced_start + 13 else 0.0,
'facing': float(params[advanced_start + 15]) if len(params) > advanced_start + 15 else 0.0,
}This reference provides the complete specification for parsing WoW Advanced Combat Logs with proper parameter positioning and data types.