mcpField
W
wow-api-combat

wow-api-combat

github.com/jburlison開発4638 回インストール37 週間前に更新
リポジトリ

wow-api-combat について

World of Warcraft Retailのアドオン開発者向けに、Patch 12.0.0の戦闘APIをまとめたリファレンスです。新しい戦闘データ用APIと、アドオンに適用される制限を扱います。

主な機能

  1. 0112.0.0の戦闘ログ変更
  2. 02ダメージ・回復メーターAPI
  3. 03脅威と行動不能効果の追跡
  4. 04戦闘・エンカウンターイベント
  5. 05シークレット値の扱い方

活用シーン

  1. 01Patch 12.0.0へのアドオン更新
  2. 02組み込みダメージメーターの表示
  3. 03脅威と行動不能効果の追跡
  4. 04エンカウンターのタイムライン処理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jburlison/wowaddonapiagents --skill wow-api-combat

インストール後、Claude Code で/wow-api-combatを入力して読み込まれたか確認します。

詳細

戦闘 API(リテール版 — パッチ 12.0.0)

WoW リテール版の戦闘関連 API の包括的なリファレンスです。重要:12.0.0 では戦闘ログシステムが根本的に変更されました。 COMBAT_LOG_EVENT_UNFILTERED はアドオンから利用できなくなりました。

出典: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API 現行情報: パッチ 12.0.0(ビルド 65655)— 2026 年 1 月 28 日 対象範囲: リテール版のみ。

重要:12.0.0 の戦闘ログ変更

COMBAT_LOG_EVENT_UNFILTERED(CLEU)はアドオンから利用できなくなりました。

  • CombatLogGetCurrentEventInfo() は、汚染された(アドオンの)コードから利用できません
  • 従来の COMBAT_LOG_EVENT イベントも利用できません
  • 戦闘ログのチャットタブのメッセージは、解析できないエスケープシーケンスである KStrings になりました
  • ダメージメーターなどのアドオンは、C_DamageMeter または組み込みシステムを使用する必要があります
  • 新しい COMBAT_LOG_EVENT_INTERNAL_UNFILTERED が存在しますが、Blizzard のコードに制限されています
新しい戦闘ログイベント(アドオン向け)
イベント説明
COMBAT_LOG_MESSAGE書式設定済みの戦闘ログメッセージ(表示テキストのみ)
COMBAT_LOG_ENTRIES_CLEARED戦闘ログのエントリが消去された
COMBAT_LOG_APPLY_FILTER_SETTINGSフィルター設定が変更された
COMBAT_LOG_REFILTER_ENTRIESエントリの再フィルタリングが必要
COMBAT_LOG_MESSAGE_LIMIT_CHANGEDメッセージ上限が変更された

対象範囲

このスキルでは、以下を扱います。

  • 戦闘ログ — 新しい 12.0.0 の戦闘ログシステム、COMBAT_LOG_MESSAGE
  • C_DamageMeter — 組み込みのダメージ/回復メーターシステム
  • 脅威 — UnitThreatSituation、UnitDetailedThreatSituation
  • C_LossOfControl — 行動不能状態の追跡
  • C_CombatText — フローティング戦闘テキスト
  • C_CombatAudioAlert — 戦闘音声アラートシステム(アクセシビリティ)
  • C_Secrets / C_CurveUtil / C_DurationUtil — 戦闘データのシークレット値処理
  • エンカウンターイベント — ENCOUNTER_STATE_CHANGED、ENCOUNTER_WARNING、タイムラインイベント
  • 観戦/実況 — 観戦モード用の C_Commentator

C_DamageMeter — 組み込みダメージメーター

12.0.0 で新たに追加されました。戦闘ログの解析なしで、公式のダメージ/回復メーターデータを利用できます。

関数
関数戻り値説明
C_DamageMeter.GetCurrentSessionID()sessionID現在の戦闘セッション
C_DamageMeter.GetSessions()sessions利用可能なすべてのセッション
C_DamageMeter.GetSessionInfo(sessionID)sessionInfoセッションの詳細
C_DamageMeter.GetPlayerData(sessionID, unitGUID)playerDataプレイヤーのダメージ/回復
C_DamageMeter.GetPartyData(sessionID)partyDataパーティー/レイド全体のデータ
C_DamageMeter.ResetSessions()—すべてのセッションを消去
イベント
イベント説明
DAMAGE_METER_COMBAT_SESSION_UPDATEDセッションデータが更新された
DAMAGE_METER_CURRENT_SESSION_UPDATED現在のセッションが変更された
DAMAGE_METER_RESETセッションが消去された
パターン:ダメージメーターデータの読み取り
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)

脅威 API

脅威関数
関数戻り値説明
UnitThreatSituation(unit [, target])status脅威状態(0~3)
UnitDetailedThreatSituation(unit, target)isTanking, status, scaledPercent, rawPercent, threatValue脅威の詳細情報
UnitThreatPercentageOfLead(unit, target)percent脅威のリード率
脅威状態の値
値意味
0脅威テーブルに登録されていない
1脅威テーブルに登録されているが、タンク役ではなく、脅威が最大でもない
2脅威テーブルに登録されているが、タンク役ではなく、脅威が最大
3タンク役(敵視を得ており、脅威が最大)
nilユニットが存在しない、または脅威テーブルがない

注: 12.0.0 のインスタンスでは、プレイヤー以外のユニットの脅威値がシークレット値である場合があります。UI ウィジェットに直接渡してください。


C_LossOfControl

プレイヤーに適用されたクラウドコントロール効果を追跡します。

関数戻り値説明
C_LossOfControl.GetActiveLossOfControlData(index)data有効なCC効果のデータ
C_LossOfControl.GetActiveLossOfControlDataByUnit(unit, index)dataユニットのCCデータ
C_LossOfControl.GetActiveLossOfControlDataCount()count有効なCC効果の数
C_LossOfControl.GetActiveLossOfControlDataCountByUnit(unit)countユニットのCC効果数
行動阻害データのフィールド
  • locType — CCの種類(STUN、FEAR、SILENCEなど)
  • spellID — CCを引き起こした呪文
  • displayText — ローカライズされた表示テキスト
  • iconTexture — 呪文アイコン
  • startTime — CCの開始時刻
  • timeRemaining — 残り時間(12.0.0ではDurationObjectの場合があります)
  • duration — 合計時間
  • lockoutSchool — ロックアウト対象の系統(SCHOOL_INTERRUPTタイプの場合)
  • priority — 表示優先度
イベント
イベント説明
LOSS_OF_CONTROL_ADDED新しいCC効果が適用された
LOSS_OF_CONTROL_UPDATECC効果が更新された

C_CombatText — フローティング戦闘テキスト

関数戻り値説明
C_CombatText.IsCombatTextEnabled()enabledFCTは有効ですか?
戦闘テキストのCVar
CVar説明
enableFloatingCombatTextFCTの有効化/無効化
floatingCombatTextCombatDamageダメージを表示
floatingCombatTextCombatHealing回復を表示
floatingCombatTextCombatDamageStyleダメージの表示スタイル

C_CombatAudioAlert — 戦闘音声アラート

戦闘イベントの音声キューを提供する、新しいアクセシビリティシステムです。以前は戦闘ログの解析が必要だった機能の一部を置き換えます。

関数戻り値説明
C_CombatAudioAlert.IsEnabled()enabled音声アラートは有効ですか?
C_CombatAudioAlert.SetEnabled(enabled)—有効化/無効化

戦闘データのシークレット値の処理

C_Secrets — シークレット値の判定関数
関数戻り値説明
C_Secrets.ShouldUnitHealthBeSecret(unit)isSecretこのユニットの体力はシークレット値ですか?
C_Secrets.ShouldUnitPowerBeSecret(unit [, powerType])isSecretパワーはシークレット値ですか?
C_Secrets.ShouldUnitPowerMaxBeSecret(unit [, powerType])isSecret最大パワーはシークレット値ですか?
C_Secrets.ShouldUnitSpellCastBeSecret(unit, spellIdentifier)isSpellCastSecret呪文の詠唱はシークレット値ですか?
C_Secrets.ShouldUnitSpellCastingBeSecret(unit)isSpellCastingSecretすべての詠唱がシークレット値ですか?
C_CurveUtil — シークレット値用のカーブ

アドオンではシークレット値を計算に使用できないため、カーブを使ってシークレット値の数値を視覚的な出力にマッピングします。

関数戻り値説明
C_CurveUtil.CreateCurve()curveObject数値カーブを作成
C_CurveUtil.CreateColorCurve()colorCurveObjectカラーカーブを作成
パターン:値を調べずに体力を色に変換
-- 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 — 時間オブジェクト
関数戻り値説明
C_DurationUtil.CreateDuration()durationObject時間オブジェクトを作成
-- Use DurationObject for cooldown display
local cooldown = CreateFrame("Cooldown", nil, parent, "CooldownFrameTemplate")
local duration = C_DurationUtil.CreateDuration()
cooldown:SetCooldownFromDurationObject(duration)

エンカウンターイベント

12.0.0で追加されたこれらのイベントは、エンカウンターの状態追跡において、アドオンによる戦闘ログ解析に代わるものです。

イベント説明
ENCOUNTER_STATE_CHANGEDエンカウンターの状態が変化した(開始、全滅、撃破)
ENCOUNTER_WARNING組み込みのエンカウンター警告システム
ENCOUNTER_TIMELINE_EVENT_STARTタイムラインイベントが開始された
ENCOUNTER_TIMELINE_EVENT_UPDATEタイムラインイベントが更新された
ENCOUNTER_TIMELINE_EVENT_ENDタイムラインイベントが終了した
その他の戦闘イベント
イベント説明
PLAYER_REGEN_DISABLED戦闘開始
PLAYER_REGEN_ENABLED戦闘終了
PLAYER_ENTER_COMBATプレイヤーが自動攻撃を開始
PLAYER_LEAVE_COMBATプレイヤーが自動攻撃を停止
UNIT_COMBATユニットがダメージまたは回復を受けた/与えた
UNIT_THREAT_SITUATION_UPDATE脅威状況が変化
UNIT_THREAT_LIST_UPDATE脅威テーブルが更新
PLAYER_DEADプレイヤーが死亡
PLAYER_ALIVEプレイヤーが魂を解放
PLAYER_UNGHOSTプレイヤーが蘇生

コメンテーター/観戦 API

C_Commentator は、eスポーツ観戦用の観戦モード機能を提供します。

主な関数
関数戻り値説明
C_Commentator.IsSpectating()isSpectating観戦モード中かどうか
C_Commentator.GetAllPlayerData(teamIndex)playerDataチームの全プレイヤーデータ
C_Commentator.GetPlayerData(teamIndex, playerIndex)data指定したプレイヤーのデータ
C_Commentator.GetTeamColorAndName(teamIndex)color, nameチーム情報
C_Commentator.GetMatchDuration()duration試合の経過時間
C_Commentator.StartWargame(...)—ウォーゲームを開始
C_Commentator.UpdatePlayerInfo()—プレイヤーデータを更新

一般的なパターン

戦闘状態の確認
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
脅威に基づくネームプレートの色分け
-- 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
操作不能状態の表示
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)

注意点と制限事項

  1. CLEU は廃止されています — COMBAT_LOG_EVENT_UNFILTERED を登録しないでください。12.0.0 ではアドオンのコードに対して発生しません。
  2. 戦闘ログの解析不可 — CombatLogGetCurrentEventInfo() は汚染されたコードから利用できません。
  3. KString のチャットメッセージ — 戦闘ログのチャットタブ出力は解析できない KString になりました。
  4. ヘルスは秘匿情報です — インスタンス内では UnitHealth() が秘匿値を返します。そのまま StatusBar:SetValue() に渡してください。
  5. DurationObjects を使用する — クールダウンを手動で計算しないでください。C_DurationUtil.CreateDuration() と Cooldown:SetCooldownFromDurationObject() を使用してください。
  6. 組み込みのダメージメーター — 戦闘イベントを解析する代わりに、ダメージ/回復データには C_DamageMeter を使用してください。
  7. SendAddonMessage はブロックされています — インスタンス内ではアドオンメッセージを送信できません。ボス攻略アドオンは新しいエンカウンターイベントのパターンを使用する必要があります。
  8. ユニット識別情報には制限があります — 戦闘中のインスタンス内では、敵ユニットに対する UnitName() や UnitClass() が秘匿値を返す場合があります。
  9. インスタンス内の脅威情報 — 脅威値は秘匿値の場合があります。ウィジェットに直接渡し、条件分岐には使用しないでください。
  10. 設計方針 — アドオンは戦闘で競争上の優位性を提供してはなりません。Blizzard は、制限された機能の大半を置き換える組み込み機能を提供しています。

コメント