COMBATANT_INFO & Spec IDs
The single most useful event in the combat log: full talent tree, gear with bonus IDs and gems, active auras, and stats. Plus the complete spec ID table.
At the start of every encounter, the game dumps one COMBATANT_INFO event per player. This single event contains class, spec, full talent tree, every gear piece with bonus IDs and gems, and every active aura at pull time.
It is the most useful single line in the combat log and also the worst one to parse — it mixes CSV with bracket arrays and tuples in the same line.
COMBATANT_INFO,Player-1168-0A234B,0,...,specID,[(nodeId,entryId,rank),...],(pvp1,pvp2,...),[gearArray],[aurasArray],...
CSV Portion (Before the First Bracket)
These positions are confirmed against live combat log data. Empty positions in the table are present in the line but the parser doesn't use them, so they're left blank here on purpose:
| Field | Content |
|---|---|
| 0 | COMBATANT_INFO event name |
| 1 | Player GUID |
| 3 | Primary stat — Strength, Agility, or Intellect (same field; whichever is the class's primary) |
| 5 | Stamina |
| 10, 11, 12 | Crit rating (triplicate: melee / ranged / spell — usually identical) |
| 13 | Speed |
| 14 | Leech |
| 15, 16, 17 | Haste rating (triplicate) |
| 18 | Avoidance |
| 19 | Mastery |
| 20, 21, 22 | Versatility (triplicate: damage done / healing done / damage taken) |
| 24 | Spec ID |
Bracket Portion (In This Exact Order)
| Position | Shape | Content |
|---|---|---|
| 1 | [(nodeId,entryId,rank),(nodeId,entryId,rank),...] | Talent tree. Skip entries where rank=0 (allocated tree slots that aren't picked). |
| 2 | (pvpTalent1, pvpTalent2, ...) | PvP talents. A tuple, not a bracket array. Common parsing trap. |
| 3 | [(itemId, ilvl, (enchants), (bonusIds), (gems)), ...] | Gear. Position in the array is the slot index (head=0, neck=1, etc.). Items with itemId=0 are empty slots. |
| 4 | [(sourceGUID, spellId, [stack-data]), ...] | Active auras applied at pull time. |
The Talent ID Trap
The middle number in each talent triple is the TraitNodeEntry ID — not the trait definition ID and not a spell ID. Most online lookup tables use the definition ID and will quietly fail to resolve. Use TraitNodeEntry IDs from wago.tools or wow.tools. Plenty of AI-generated talent guides reference talents that don't exist because they got this wrong.
Spec IDs
| Class | Specs (ID) |
|---|---|
| Death Knight | Blood (250), Frost (251), Unholy (252) |
| Demon Hunter | Havoc (577), Vengeance (581), Devourer (1480) |
| Druid | Balance (102), Feral (103), Guardian (104), Restoration (105) |
| Evoker | Devastation (1467), Preservation (1468), Augmentation (1473) |
| Hunter | Beast Mastery (253), Marksmanship (254), Survival (255) |
| Mage | Arcane (62), Fire (63), Frost (64) |
| Monk | Brewmaster (268), Windwalker (269), Mistweaver (270) |
| Paladin | Holy (65), Protection (66), Retribution (70) |
| Priest | Discipline (256), Holy (257), Shadow (258) |
| Rogue | Assassination (259), Outlaw (260), Subtlety (261) |
| Shaman | Elemental (262), Enhancement (263), Restoration (264) |
| Warlock | Affliction (265), Demonology (266), Destruction (267) |
| Warrior | Arms (71), Fury (72), Protection (73) |
When COMBATANT_INFO Is Missing
Not every log has a COMBATANT_INFO event for every player — log fragments, mid-pull /reloads, and certain encounter types can leave it absent. The format alone gives you no fallback for spec/talent data; downstream tooling has to reconstruct identity from other signals (cast events, auras, gear seen on hits, etc.). That reconstruction is not part of the log format spec.
Citing this page
If this reference helped, please link back so others can find it. Suggested citation:
COMBATANT_INFO & Spec IDs — WoW Combat Log Reference (WowCoach.gg). https://wowcoach.gg/docs/combat-log/combatant-info