Skip to main content

Damage Meter Functions

Overview

The core.damage_meter module provides access to the in-game damage meter (C_DamageMeter). You can query combat sessions, retrieve per-player breakdowns, and reset data.

note

This API requires the game's built-in damage meter to be available. Use is_available() to check before calling other functions.


core.damage_meter.is_available

Syntax
core.damage_meter.is_available() -> boolean, string
Returns
  • boolean: Whether the damage meter API is available.
  • string: The reason it is unavailable (empty string if available).
Description

Checks if the damage meter API is currently available. Should be called before using other core.damage_meter functions.

Example Usage

local available, reason = core.damage_meter.is_available()
if not available then
core.log("Damage meter unavailable: " .. reason)
return
end

core.damage_meter.get_available_sessions

Syntax
core.damage_meter.get_available_sessions() -> table[]
Returns
  • table[]: Array of session entries. Each entry contains:
FieldTypeDescription
session_idintegerThe session identifier
namestringThe session name
durationnumberThe session duration in seconds
Description

Returns all available combat sessions from the damage meter.

Example Usage

local sessions = core.damage_meter.get_available_sessions()
for _, s in ipairs(sessions) do
core.log(s.name .. " - " .. s.duration .. "s")
end

core.damage_meter.get_session_from_id

Syntax
core.damage_meter.get_session_from_id(session_id: integer, meter_type: integer) -> table

Parameters

  • session_id: integer - The session ID (from get_available_sessions).
  • meter_type: integer - The meter type (e.g. damage, healing).
Returns
  • table: A session table with the following structure:
FieldTypeDescription
max_amountnumberHighest amount from a single source
total_amountnumberTotal combined amount
durationnumberSession duration in seconds
sourcestable[]Array of combatant entries (see below)

Each entry in sources:

FieldTypeDescription
namestringThe combatant name
classstringThe class filename
total_amountnumberTotal amount dealt/healed
per_secondnumberAmount per second
is_local_playerbooleanWhether this is the local player
spec_iconintegerSpecialization icon ID
unitgame_object|nilThe game object if found in the world
Description

Returns detailed combat session data by session ID, including per-player breakdowns. The unit field in each source is resolved by matching the combatant name against visible game objects.

Example Usage

local session = core.damage_meter.get_session_from_id(1, 0)
for _, src in ipairs(session.sources) do
core.log(src.name .. " (" .. src.class .. "): " .. src.per_second .. " DPS")
end

core.damage_meter.get_session_from_type

Syntax
core.damage_meter.get_session_from_type(session_type: integer, meter_type: integer) -> table

Parameters

  • session_type: integer - The session type:
    • 0: Overall
    • 1: Current
    • 2: Expired
  • meter_type: integer - The meter type (e.g. damage, healing).
Returns
  • table: A session table (same structure as get_session_from_id).
Description

Returns detailed combat session data by session type instead of ID. Useful for quickly accessing the current or overall session.

Example Usage

-- Get current session damage data
local current = core.damage_meter.get_session_from_type(1, 0)
core.log("Total damage: " .. current.total_amount)

core.damage_meter.get_session_duration

Syntax
core.damage_meter.get_session_duration(session_type: integer) -> number

Parameters

  • session_type: integer - The session type (0=Overall, 1=Current, 2=Expired).
Returns
  • number: The session duration in seconds.
Description

Returns the duration of a combat session by type. Returns 0 if no session exists.

Example Usage

local duration = core.damage_meter.get_session_duration(1)
core.log("Current fight: " .. duration .. " seconds")

core.damage_meter.reset_all

Syntax
core.damage_meter.reset_all() -> nil
Description

Resets all combat sessions in the damage meter.

Example Usage

core.damage_meter.reset_all()
core.log("Damage meter reset")