遭遇 API(正式服 — Patch 12.0.0)
遭遇日志、史诗钥石、地下城、副本、团队副本进度和赛季的综合参考。
来源: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API
截至: Patch 12.0.0(Build 65655)— 2026 年 1 月 28 日
范围: 仅限正式服。
范围
- 遭遇日志 — 首领数据库、战利品列表、技能
- C_ChallengeMode — M+ 钥石、词缀、计时器
- C_MythicPlus — 每周 M+ 记录、评分、赛季内容
- ScenarioInfo — 场景、地下堡、阶段
- InstanceLeaverInfo — 逃兵信息
- 团队副本进度 — 已保存的副本进度
- C_SeasonInfo — 赛季内容
遭遇日志
副本导航
| 函数 | 返回值 | 描述 |
|---|
EJ_GetNumTiers() | numTiers | 资料片等级数量 |
EJ_GetTierInfo(tierIndex) | name, link | 等级名称和链接 |
EJ_SelectTier(tierIndex) | — | 选择资料片等级 |
EJ_GetCurrentTier() | tierIndex | 当前选中的等级 |
EJ_GetInstanceByIndex(index, isRaid) | instanceID, name, description, bgImage, buttonImage1, loreImage, buttonImage2, dungeonAreaMapID, link, shouldDisplayDifficulty | 指定索引处的副本 |
EJ_GetNumInstances() | — | 不是函数;遍历 EJ_GetInstanceByIndex,直到返回 nil |
EJ_SelectInstance(instanceID) | — | 选择副本 |
EJ_GetInstanceInfo(instanceID) | name, description, bgImage, ... | 副本信息 |
EJ_InstanceIsRaid() | isRaid | 所选副本是否为团队副本? |
遭遇(首领)数据
| 函数 | 返回值 | 描述 |
|---|
EJ_GetEncounterInfoByIndex(index) | name, description, journalEncounterID, rootSectionID, link, journalInstanceID, dungeonEncounterID, instanceID | 指定索引处的首领 |
EJ_GetEncounterInfo(encounterID) | name, description, journalEncounterID, rootSectionID, link, journalInstanceID, dungeonEncounterID, instanceID | 首领信息 |
EJ_SelectEncounter(encounterID) | — | 选择遭遇 |
EJ_GetNumEncountersForLootByIndex(index) | numEncounters | 有战利品的首领数量 |
EJ_GetCreatureInfo(index, encounterID) | id, name, description, displayInfo, iconImage, ... | 生物信息 |
区段(技能)数据
| 函数 | 返回值 | 描述 |
|---|
EJ_GetSectionInfo(sectionID) | info | 区段/技能信息 |
EJ_GetNumSectionsForEncounter(encounterID) | numSections | 区段数量 |
区段信息字段
title — 区段标题
description — 区段文本
headerType — 标题类型枚举
abilityIcon — 图标纹理
creatureDisplayID — 显示 ID
siblingSectionID — 下一个同级区段
firstChildSectionID — 第一个子区段
filteredByDifficulty — 是否因难度筛选而隐藏?
link — 日志链接
startsOpen — 默认展开?
战利品
| 函数 | 返回值 | 描述 |
|---|
EJ_GetLootInfoByIndex(index) | name, icon, slotFilter, armorType, itemID, link, encounterID | 指定索引处的战利品 |
EJ_GetNumLoot() | numLoot | 战利品数量 |
EJ_SetLootFilter(classID, specID) | — | 按职业/专精筛选 |
EJ_GetLootFilter() | classID, specID | 当前筛选条件 |
EJ_SetSlotFilter(slotFilter) | — | 按栏位筛选 |
EJ_GetSlotFilter() | slotFilter | 当前栏位筛选条件 |
EJ_ResetLootFilter() | — | 清除所有筛选条件 |
EJ_IsLootListOutOfDate() | isOutOfDate | 是否需要刷新? |
难度
| 函数 | 返回值 | 描述 |
|---|
EJ_SetDifficulty(difficultyID) | — | 设置日志难度 |
EJ_GetDifficulty() | difficultyID | 当前日志难度 |
EJ_GetNumEncountersByDifficulty(difficultyID) | numEncounters | 指定难度下的首领数量 |
搜索
| 函数 | 返回值 | 描述 |
|---|
EJ_SetSearch(text) | — | 设置搜索文本 |
EJ_GetSearchResult(index) | resultInfo | 搜索结果 |
EJ_GetNumSearchResults() | numResults | 结果数量 |
EJ_IsSearchFinished() | isFinished | 搜索已完成? |
EJ_ClearSearch() | — | 清除搜索 |
C_ChallengeMode — Mythic+ 钥石
钥石信息
| 函数 | 返回值 | 描述 |
|---|
C_ChallengeMode.GetActiveKeystoneInfo() | activeKeystoneLevel, activeAffixIDs, wasActiveKeystoneCharged | 当前钥石 |
C_ChallengeMode.GetActiveChallengeMapID() | mapID | 当前 M+ 地图 |
C_ChallengeMode.GetActiveKeystoneLink() | link | 钥石超链接 |
C_ChallengeMode.GetSlottedKeystoneInfo() | mapID, affixIDs, keystoneLevel | 已放入的钥石 |
C_ChallengeMode.HasSlottedKeystone() | hasKeystone | 是否已放入钥石? |
C_ChallengeMode.SlotKeystone() | slotted | 放入钥石 |
C_ChallengeMode.RemoveKeystone() | removed | 移除钥石 |
地图与词缀数据
| 函数 | 返回值 | 描述 |
|---|
C_ChallengeMode.GetMapTable() | mapIDs | 所有 M+ 地图 |
C_ChallengeMode.GetMapUIInfo(mapID) | name, id, timeLimit, texture, backgroundTexture | 地图信息 |
C_ChallengeMode.GetAffixInfo(affixID) | name, description, filedataid | 词缀信息 |
C_ChallengeMode.GetCurrentAffixes() | affixes | 本周词缀 |
完成情况与记录
| 函数 | 返回值 | 描述 |
|---|
C_ChallengeMode.GetMapPlayerStats(mapID) | durationSec, ... | 个人最佳记录 |
C_ChallengeMode.GetGuildLeaders() | guildLeaders | 公会最佳通关记录 |
C_ChallengeMode.GetCompletionInfo() | mapID, level, time, onTime, keystoneUpgradeLevels, practiceRun, oldOverallDungeonScore, newOverallDungeonScore, IsMapRecord, IsAffixRecord, PrimaryAffix, isEligibleForScore, members | 通关数据 |
C_ChallengeMode.IsChallengeModeActive() | isActive | 是否正在进行 M+? |
C_ChallengeMode.GetDeathCount() | numDeaths, timeLost | 死亡次数与损失时间 |
C_ChallengeMode.GetActiveChallengeModeLevel() | level | 当前钥石层数 |
奖励
| 函数 | 返回值 | 描述 |
|---|
C_ChallengeMode.GetChallengeMapInfo(mapID, keystoneLevel) | rewardInfo | 对应钥石层数的奖励 |
C_MythicPlus — 赛季 M+ 数据
| 函数 | 返回值 | 描述 |
|---|
C_MythicPlus.GetCurrentSeason() | seasonID | 当前赛季 |
C_MythicPlus.GetRunHistory(includePreviousWeeks, includeIncompleteRuns) | runs | 通关历史 |
C_MythicPlus.GetRewardLevelFromKeystoneLevel(keystoneLevel) | rewardLevel | 奖励物品等级 |
C_MythicPlus.GetOwnedKeystoneLevel() | level | 持有的钥石层数 |
C_MythicPlus.GetOwnedKeystoneChallengeMapID() | mapID | 持有钥石对应的地下城 |
C_MythicPlus.GetOwnedKeystoneMapID() | mapID | 持有钥石对应的地图 |
C_MythicPlus.GetCurrentAffixes() | affixIDs | 当前词缀 |
C_MythicPlus.GetWeeklyChestRewardLevel() | rewardLevel | 宝库奖励等级 |
C_MythicPlus.GetSeasonBestAffixScoreInfoForMap(mapID) | bestScoreInfo | 各词缀最佳分数 |
C_MythicPlus.GetSeasonBestForMap(mapID) | intimeInfo, overtimeInfo | 本赛季最佳通关记录 |
C_MythicPlus.GetOverallDungeonScore() | score | M+ 总评分 |
C_MythicPlus.RequestCurrentAffixes() | — | 请求词缀数据 |
C_MythicPlus.RequestMapInfo() | — | 请求地图数据 |
C_MythicPlus.RequestRewards() | — | 请求奖励数据 |
C_MythicPlus.IsDungeonScorable(mapID) | isScorable | 是否可获得评分? |
ScenarioInfo — 场景与地下堡
| 函数 | 返回值 | 描述 |
|---|
C_ScenarioInfo.GetScenarioInfo() | scenarioInfo | 当前场景 |
C_ScenarioInfo.GetScenarioStepInfo() | stepInfo | 当前步骤 |
C_ScenarioInfo.GetCriteriaInfo(criteriaIndex) | criteriaInfo | 指定索引处的标准 |
C_ScenarioInfo.GetCriteriaInfoByStep(stepIndex, criteriaIndex) | criteriaInfo | 步骤标准 |
C_ScenarioInfo.GetScenarioStepByIndex(index) | stepInfo | 指定索引处的步骤 |
场景信息字段
name — 场景名称
currentStage — 当前阶段
numStages — 阶段总数
flags — 场景标记
isComplete — 是否已完成?
xp — 经验值奖励
money — 金币奖励
type — 场景类型
area — 区域名称
uiTextureKit — UI 纹理套件
步骤信息字段
title — 步骤标题
description — 步骤描述
numCriteria — 标准数量
isComplete — 步骤是否完成?
isBonusObjective — 是否为奖励目标?
isFinal — 是否为最终步骤?
weightedProgress — 进度百分比
团队副本锁定(已保存的副本)
| 函数 | 返回值 | 描述 |
|---|
GetNumSavedInstances() | numInstances | 已保存的副本数量 |
GetSavedInstanceInfo(index) | name, id, reset, difficulty, locked, extended, instanceIDMostSig, isRaid, maxPlayers, difficultyName, numEncounters, encounterProgress, extendDisabled | 已保存的副本信息 |
GetSavedInstanceEncounterInfo(index, encounterIndex) | bossName, fileDataID, isKilled, isIneligible | 首领击杀状态 |
SetSavedInstanceExtend(index, extend) | — | 延长锁定时间 |
GetNumSavedWorldBosses() | count | 世界首领锁定数量 |
GetSavedWorldBossInfo(index) | name, id, reset | 世界首领信息 |
RequestRaidInfo() | — | 请求锁定数据 |
InstanceLeaverInfo — 逃离者
| 函数 | 返回值 | 描述 |
|---|
C_InstanceLeaverInfo.GetLeaverInfo() | leaverInfo | 逃离者信息 |
C_InstanceLeaverInfo.HasLeaverPenalty() | hasPenalty | 是否有逃离惩罚? |
C_InstanceLeaverInfo.GetLeaverPenaltyTimeRemaining() | seconds | 剩余时间 |
C_SeasonInfo — 赛季内容
| 函数 | 返回值 | 描述 |
|---|
C_SeasonInfo.GetCurrentDisplaySeasonID() | seasonID | 当前显示的赛季 |
C_SeasonInfo.GetCurrentSeason() | seasonID | 当前赛季 |
C_SeasonInfo.GetSeasonInfo(seasonID) | seasonInfo | 赛季数据 |
常见模式
列出冒险指南中的首领
-- Select an instance and list its bosses
EJ_SelectTier(EJ_GetCurrentTier())
EJ_SelectInstance(instanceID)
local index = 1
while true do
local name, description, encounterID, rootSectionID = EJ_GetEncounterInfoByIndex(index)
if not name then break end
print(index, name, "- EncounterID:", encounterID)
index = index + 1
end
显示 M+ 钥石信息
local function ShowKeystoneInfo()
local level = C_MythicPlus.GetOwnedKeystoneLevel()
local mapID = C_MythicPlus.GetOwnedKeystoneChallengeMapID()
if level and mapID then
local name = C_ChallengeMode.GetMapUIInfo(mapID)
print("Keystone:", name, "+", level)
else
print("No keystone")
end
local score = C_MythicPlus.GetOverallDungeonScore()
print("M+ Rating:", score or 0)
end
检查当前 M+ 进度
local function ShowMythicPlusProgress()
if not C_ChallengeMode.IsChallengeModeActive() then
print("Not in an active M+")
return
end
local level = C_ChallengeMode.GetActiveChallengeModeLevel()
local mapID = C_ChallengeMode.GetActiveChallengeMapID()
local name = C_ChallengeMode.GetMapUIInfo(mapID)
local deaths, timeLost = C_ChallengeMode.GetDeathCount()
print(name, "+", level)
print("Deaths:", deaths, "Time lost:", timeLost, "sec")
end
列出已保存的副本
RequestRaidInfo()
-- Wait for UPDATE_INSTANCE_INFO event, then:
local numSaved = GetNumSavedInstances()
for i = 1, numSaved do
local name, id, reset, difficulty, locked, extended,
_, isRaid, maxPlayers, diffName, numEncounters, progress =
GetSavedInstanceInfo(i)
if locked then
print(name, diffName, progress .. "/" .. numEncounters,
"Reset:", SecondsToTime(reset))
end
end
关键事件
| 事件 | 负载 | 描述 |
|---|
EJ_LOOT_DATA_RECIEVED | itemID | 战利品数据已加载 |
EJ_DIFFICULTY_UPDATE | difficultyID | 冒险指南难度已更改 |
CHALLENGE_MODE_START | mapID | M+ 已开始 |
CHALLENGE_MODE_COMPLETED | mapID | M+ 已完成 |
CHALLENGE_MODE_RESET | mapID | M+ 已重置 |
CHALLENGE_MODE_DEATH_COUNT_UPDATED | — | 死亡次数已更改 |
CHALLENGE_MODE_KEYSTONE_RECEPTABLE_OPEN | — | 力量之泉已开启 |
CHALLENGE_MODE_KEYSTONE_SLOTTED | — | 钥石已放入 |
MYTHIC_PLUS_CURRENT_AFFIX_UPDATE | — | 词缀已更新 |
MYTHIC_PLUS_NEW_WEEKLY_RECORD | mapID | 刷新每周最佳纪录 |
MYTHIC_PLUS_NEW_SEASON_RECORD | mapID | 刷新赛季最佳纪录 |
SCENARIO_UPDATE | — | 场景状态已更改 |
SCENARIO_CRITERIA_UPDATE | — | 标准已更新 |
SCENARIO_COMPLETED | — | 场景已完成 |
UPDATE_INSTANCE_INFO | — | 已保存的副本数据 |
INSTANCE_LOCK_START | — | 已获得副本锁定 |
INSTANCE_LOCK_STOP | — | 副本锁定已解除 |
INSTANCE_LOCK_WARNING | — | 副本锁定警告 |
注意事项与限制
- EJ 数据是异步的 — 战利品数据会异步加载。读取战利品前,请等待
EJ_LOOT_DATA_RECIEVED。
- 层级选择很重要 — EJ 函数会基于当前选中的层级运行。请务必先设置层级。
- M+ 完成数据是临时的 —
GetCompletionInfo() 只会在一场挑战结束后立即返回数据。
- 放入钥石需要硬件事件 — 玩家必须手动与力量之泉互动。
- 延长团队副本锁定 — 必须在锁定有效期间调用
SetSavedInstanceExtend()。
- 场景类型各不相同 — 深潜、海岛探险和场景都会使用带有不同类型标记的 ScenarioInfo。
- M+ 评分按赛季计算 —
GetOverallDungeonScore() 会在每个赛季重置。
- RequestRaidInfo() 是异步的 — 读取已保存的副本前,请等待
UPDATE_INSTANCE_INFO。