wow-api-combat

Combat API (Retail — Patch 12.0.0)

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "wow-api-combat" with this command: npx skills add jburlison/wowaddonapiagents/jburlison-wowaddonapiagents-wow-api-combat

Combat API (Retail — Patch 12.0.0)

Comprehensive reference for all combat-related APIs in WoW Retail. Critical: The combat log system was fundamentally changed in 12.0.0. COMBAT_LOG_EVENT_UNFILTERED is no longer available to addons.

Source: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API Current as of: Patch 12.0.0 (Build 65655) — January 28, 2026 Scope: Retail only.

CRITICAL: Combat Log Changes in 12.0.0

COMBAT_LOG_EVENT_UNFILTERED (CLEU) is NO LONGER available to addons.

  • CombatLogGetCurrentEventInfo() is unavailable to tainted (addon) code

  • The old COMBAT_LOG_EVENT event is also unavailable

  • Combat log chat tab messages are now KStrings (unparseable escape sequences)

  • Addons like damage meters must use C_DamageMeter or the built-in system

  • A new COMBAT_LOG_EVENT_INTERNAL_UNFILTERED exists but is restricted to Blizzard code

New Combat Log Events (Addon-Facing)

Event Description

COMBAT_LOG_MESSAGE

Formatted combat log messages (display text only)

COMBAT_LOG_ENTRIES_CLEARED

Combat log entries cleared

COMBAT_LOG_APPLY_FILTER_SETTINGS

Filter settings changed

COMBAT_LOG_REFILTER_ENTRIES

Entries need refiltering

COMBAT_LOG_MESSAGE_LIMIT_CHANGED

Message limit changed

Scope

This skill covers:

  • Combat Log — New 12.0.0 combat log system, COMBAT_LOG_MESSAGE

  • C_DamageMeter — Built-in damage/healing meter system

  • Threat — UnitThreatSituation, UnitDetailedThreatSituation

  • C_LossOfControl — Loss of control tracking

  • C_CombatText — Floating combat text

  • C_CombatAudioAlert — Combat audio alert system (accessibility)

  • C_Secrets / C_CurveUtil / C_DurationUtil — Secret value handling for combat data

  • Encounter Events — ENCOUNTER_STATE_CHANGED, ENCOUNTER_WARNING, timeline events

  • Spectator/Commentator — C_Commentator for spectator mode

C_DamageMeter — Built-in Damage Meter

New in 12.0.0. Provides official damage/healing meter data without needing combat log parsing.

Functions

Function Returns Description

C_DamageMeter.GetCurrentSessionID()

sessionID

Current combat session

C_DamageMeter.GetSessions()

sessions

All available sessions

C_DamageMeter.GetSessionInfo(sessionID)

sessionInfo

Session details

C_DamageMeter.GetPlayerData(sessionID, unitGUID)

playerData

Player's damage/healing

C_DamageMeter.GetPartyData(sessionID)

partyData

All party/raid data

C_DamageMeter.ResetSessions()

— Clear all sessions

Events

Event Description

DAMAGE_METER_COMBAT_SESSION_UPDATED

Session data updated

DAMAGE_METER_CURRENT_SESSION_UPDATED

Current session changed

DAMAGE_METER_RESET

Sessions cleared

Pattern: Reading Damage Meter Data

local frame = CreateFrame("Frame") frame:RegisterEvent("DAMAGE_METER_COMBAT_SESSION_UPDATED") frame:SetScript("OnEvent", function(self, event) local sessionID = C_DamageMeter.GetCurrentSessionID() if sessionID then local partyData = C_DamageMeter.GetPartyData(sessionID) -- partyData contains per-player damage/healing totals end end)

Threat API

Threat Functions

Function Returns Description

UnitThreatSituation(unit [, target])

status

Threat status (0-3)

UnitDetailedThreatSituation(unit, target)

isTanking, status, scaledPercent, rawPercent, threatValue

Detailed threat info

UnitThreatPercentageOfLead(unit, target)

percent

Threat lead percentage

Threat Status Values

Value Meaning

0 Not on threat table

1 On threat table, not tanking, not highest

2 On threat table, not tanking, highest

3 Tanking (highest threat with aggro)

nil Unit doesn't exist or has no threat table

Note: In 12.0.0 instances, threat values for non-player units may be secret values. Pass them directly to UI widgets.

C_LossOfControl

Tracks crowd control effects on the player.

Function Returns Description

C_LossOfControl.GetActiveLossOfControlData(index)

data

Active CC effect data

C_LossOfControl.GetActiveLossOfControlDataByUnit(unit, index)

data

CC data for unit

C_LossOfControl.GetActiveLossOfControlDataCount()

count

Number of active CC effects

C_LossOfControl.GetActiveLossOfControlDataCountByUnit(unit)

count

CC count for unit

Loss of Control Data Fields

  • locType — Type of CC (STUN, FEAR, SILENCE, etc.)

  • spellID — Spell causing the CC

  • displayText — Localized display text

  • iconTexture — Spell icon

  • startTime — When CC started

  • timeRemaining — Duration remaining (may be DurationObject in 12.0.0)

  • duration — Total duration

  • lockoutSchool — School lockout (for SCHOOL_INTERRUPT type)

  • priority — Display priority

Events

Event Description

LOSS_OF_CONTROL_ADDED

New CC effect applied

LOSS_OF_CONTROL_UPDATE

CC effect updated

C_CombatText — Floating Combat Text

Function Returns Description

C_CombatText.IsCombatTextEnabled()

enabled

FCT enabled?

Combat Text CVars

CVar Description

enableFloatingCombatText

Enable/disable FCT

floatingCombatTextCombatDamage

Show damage

floatingCombatTextCombatHealing

Show healing

floatingCombatTextCombatDamageStyle

Damage display style

C_CombatAudioAlert — Combat Audio Alerts

New accessibility system providing audio cues for combat events. Replaces some functionality that previously required combat log parsing.

Function Returns Description

C_CombatAudioAlert.IsEnabled()

enabled

Audio alerts enabled?

C_CombatAudioAlert.SetEnabled(enabled)

— Enable/disable

Secret Value Handling for Combat Data

C_Secrets — Secret Predicates

Function Returns Description

C_Secrets.ShouldUnitHealthBeSecret(unit)

isSecret

Is health secret for this unit?

C_Secrets.ShouldUnitPowerBeSecret(unit [, powerType])

isSecret

Is power secret?

C_Secrets.ShouldUnitPowerMaxBeSecret(unit [, powerType])

isSecret

Is max power secret?

C_Secrets.ShouldUnitSpellCastBeSecret(unit, spellIdentifier)

isSpellCastSecret

Is spell cast secret?

C_Secrets.ShouldUnitSpellCastingBeSecret(unit)

isSpellCastingSecret

Is all casting secret?

C_CurveUtil — Curves for Secret Values

Since addons cannot do math on secret values, Curves allow mapping secret numbers to visual output.

Function Returns Description

C_CurveUtil.CreateCurve()

curveObject

Create a numeric curve

C_CurveUtil.CreateColorCurve()

colorCurveObject

Create a color curve

Pattern: Health-to-Color Without Inspecting Value

-- Create a color curve: green at 100% → red at 0% local colorCurve = C_CurveUtil.CreateColorCurve() -- Configure curve points (green → yellow → red)

local healthBar = CreateFrame("StatusBar", nil, parent) local hp = UnitHealth(unit) -- SECRET in instances local maxHp = UnitHealthMax(unit) -- SECRET in instances healthBar:SetMinMaxValues(0, maxHp) -- widgets accept secrets healthBar:SetValue(hp) -- widgets accept secrets -- Color is set by curve without addon seeing the actual number

C_DurationUtil — Duration Objects

Function Returns Description

C_DurationUtil.CreateDuration()

durationObject

Create a duration object

-- Use DurationObject for cooldown display local cooldown = CreateFrame("Cooldown", nil, parent, "CooldownFrameTemplate") local duration = C_DurationUtil.CreateDuration() cooldown:SetCooldownFromDurationObject(duration)

Encounter Events

New in 12.0.0, these replace addon combat log parsing for encounter state tracking.

Event Description

ENCOUNTER_STATE_CHANGED

Encounter state changed (pull, wipe, kill)

ENCOUNTER_WARNING

Built-in encounter warning system

ENCOUNTER_TIMELINE_EVENT_START

Timeline event started

ENCOUNTER_TIMELINE_EVENT_UPDATE

Timeline event updated

ENCOUNTER_TIMELINE_EVENT_END

Timeline event ended

Other Combat Events

Event Description

PLAYER_REGEN_DISABLED

Entering combat

PLAYER_REGEN_ENABLED

Leaving combat

PLAYER_ENTER_COMBAT

Player starts auto-attack

PLAYER_LEAVE_COMBAT

Player stops auto-attack

UNIT_COMBAT

Unit took/dealt damage or healing

UNIT_THREAT_SITUATION_UPDATE

Threat status changed

UNIT_THREAT_LIST_UPDATE

Threat table updated

PLAYER_DEAD

Player died

PLAYER_ALIVE

Player released spirit

PLAYER_UNGHOST

Player resurrected

Commentator / Spectator API

C_Commentator provides spectator mode functionality for esports viewing.

Key Functions

Function Returns Description

C_Commentator.IsSpectating()

isSpectating

In spectator mode?

C_Commentator.GetAllPlayerData(teamIndex)

playerData

All player data for team

C_Commentator.GetPlayerData(teamIndex, playerIndex)

data

Specific player data

C_Commentator.GetTeamColorAndName(teamIndex)

color, name

Team info

C_Commentator.GetMatchDuration()

duration

Match elapsed time

C_Commentator.StartWargame(...)

— Start a wargame

C_Commentator.UpdatePlayerInfo()

— Refresh player data

Common Patterns

Check Combat State

local function IsInCombat() return UnitAffectingCombat("player") end

-- Or use the lockdown check for secure frame operations if InCombatLockdown() then print("In combat lockdown — restricted operations blocked") end

Threat-Based Nameplate Coloring

-- Note: In 12.0.0 instances, threat values may be secret local status = UnitThreatSituation("player", "target") if not issecretvalue(status) then if status == 3 then -- Tanking — show red elseif status == 2 then -- Pulling aggro — show orange else -- Safe — show green end end

Loss of Control Display

local frame = CreateFrame("Frame") frame:RegisterEvent("LOSS_OF_CONTROL_ADDED") frame:RegisterEvent("LOSS_OF_CONTROL_UPDATE") frame:SetScript("OnEvent", function() local count = C_LossOfControl.GetActiveLossOfControlDataCount() for i = 1, count do local data = C_LossOfControl.GetActiveLossOfControlData(i) if data then print(data.displayText, data.timeRemaining) end end end)

Gotchas & Restrictions

  • CLEU is GONE — Do NOT register for COMBAT_LOG_EVENT_UNFILTERED . It will not fire for addon code in 12.0.0.

  • No combat log parsing — CombatLogGetCurrentEventInfo() is unavailable to tainted code.

  • KString chat messages — Combat log chat tab output is now KStrings that cannot be parsed.

  • Health is secret — UnitHealth() returns secret values in instances. Pass directly to StatusBar:SetValue() .

  • Use DurationObjects — Don't do manual cooldown math. Use C_DurationUtil.CreateDuration() and Cooldown:SetCooldownFromDurationObject() .

  • Built-in damage meter — Use C_DamageMeter for damage/healing data instead of parsing combat events.

  • SendAddonMessage blocked — Cannot send addon messages in instances. Boss mod addons must use new encounter event patterns.

  • Unit identity restricted — UnitName() , UnitClass() may return secrets for enemy units in instances during combat.

  • Threat in instances — Threat values may be secret. Pass to widgets directly; don't branch on them.

  • Design philosophy — Addons should NOT provide competitive advantage in combat. Blizzard provides built-in replacements for most restricted functionality.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

wow-lua-api

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

wow-addon-structure

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

wow-api-professions

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

wow-api-achievements

No summary provided by upstream source.

Repository SourceNeeds Review