instance_encounters 表
instance_encounters表记录副本Boss遭遇战信息,用于成就系统和地下城查找器(LFD)的进度追踪。
表概述
instance_encounters表属于副本遭遇战记录系统,关联DungeonEncounter.dbc数据。每个entry对应一个Boss遭遇战,creditType和creditEntry定义了击败的条件,lastEncounterDungeon标记该副本的最终Boss。
主键为 entry,该值来自DungeonEncounter.dbc的ID列,与客户端DBC数据保持一致。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| entry | INT UNSIGNED | NOT NULL | DungeonEncounter.dbc唯一ID(主键) |
| creditType | TINYINT UNSIGNED | 0 | 触发类型:0=击杀生物 1=施法 |
| creditEntry | INT UNSIGNED | 0 | 关联生物ID或法术ID |
| lastEncounterDungeon | SMALLINT UNSIGNED | 0 | 该副本最终Boss对应的LfgDungeon.dbc ID |
| comment | VARCHAR(255) | '' | Boss名称/注释 |
重要字段详解
creditType (触发类型)
定义击败Boss的条件类型:
- 0 - 击杀生物:creditEntry为creature_template的entry
- 1 - 施放法术:creditEntry为spell ID
一个Boss可能有多条记录,用于同时追踪击杀和施法条件。
lastEncounterDungeon (最终Boss标记)
非0时,表示该遭遇战是某个LFD副本的最终Boss。值对应LfgDungeon.dbc的ID。这个标记用于:
- 随机副本完成判定
- "随机副本奖励"的发放条件
- 成就"击败XXX"的追踪
实战案例
查询某个副本的所有Boss遭遇
-- 查询乌特加德城堡(LFD ID=214)的所有Boss
SELECT e.entry, e.comment, e.creditType, e.creditEntry,
CASE WHEN e.lastEncounterDungeon > 0 THEN '最终Boss' ELSE '' END AS boss_type
FROM instance_encounters e
WHERE e.creditEntry IN (
SELECT id FROM creature_template
WHERE map = 574 -- 乌特加德的地图ID
);
查找所有副本的最终Boss
SELECT entry, comment, lastEncounterDungeon
FROM instance_encounters
WHERE lastEncounterDungeon > 0
ORDER BY lastEncounterDungeon;
常见问题
Q: 为什么击败Boss后成就未触发?
A: 检查instance_encounters中该Boss的entry是否与DungeonEncounter.dbc的ID一致,creditType和creditEntry是否正确。如果creditType=0,确保creditEntry是实际的Boss生物entry。
Q: lastEncounterDungeon未设置会有什么影响?
A: 该副本通过LFD排队时,系统无法判定副本是否"完成",玩家将无法获得随机副本奖励。所有副本的最终Boss必须设置lastEncounterDungeon。