character_instance - 角色副本绑定关系
基于 AzerothCore Characters 数据库 · 角色与副本实例的绑定关系表
📋 表概述
character_instance 表记录了角色与副本实例的绑定关系,即某个角色当前绑定到哪些副本实例中。当玩家进入副本后,系统在此表中创建关联记录,用于副本进度保存和副本锁定机制。
- 角色-副本关联记录
- 永久绑定标记
- 扩展时间记录
- 副本进度追踪
联合主键 (guid, instance),一个角色可绑定多个副本实例。通过 instance 索引快速查找某副本中的所有角色。
📊 表结构
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| guid | int UNSIGNED | 0 | 角色全局唯一ID(characters.guid) |
| instance | int UNSIGNED | 0 | 副本实例ID(instance.id) |
| permanent | tinyint UNSIGNED | 0 | 是否永久绑定(0=可解绑,1=永久绑定) |
| extended | tinyint UNSIGNED | NOT NULL | 是否已延长副本锁定时间 |
🔍 重要字段详解
🔗 guid / instance - 绑定关系
详细说明:联合主键确定角色与特定副本实例的唯一绑定。
- guid - 角色GUID,关联 characters 表
- instance - 副本实例ID,关联 instance 表
- 删除此表中的记录 = 解除角色与副本的绑定
- 角色离开副本后,绑定关系可能保留(由 permanent 控制)
🔒 permanent - 永久绑定
详细说明:控制角色是否永久绑定到该副本实例。
- 0 = 临时绑定(角色离开副本后可解绑)
- 1 = 永久绑定(直到副本重置,角色被锁定到此副本ID)
- 团队副本通常设为 permanent=1,5人本通常设 permanent=0
- 永久绑定后,角色在整个副本周期内只能进入该特定实例
⏱️ extended - 延长锁定
详细说明:标记角色是否扩展了该副本的锁定时间。
- 玩家可以主动延长已锁定的副本ID有效期
- 用于团队副本进度延续(例如:本周日没打完,延长到下周)
- extended 标记为1时,即使到达 resettime,角色仍绑定到该副本
💡 SQL示例
示例1:查询角色当前绑定的所有副本
SELECT
ci.guid, c.name AS char_name,
ci.instance, i.map,
i.difficulty,
ci.permanent, ci.extended,
FROM_UNIXTIME(i.resettime) AS reset_time
FROM character_instance ci
JOIN characters c ON c.guid = ci.guid
JOIN instance i ON i.id = ci.instance
WHERE ci.guid = 100;示例2:解除角色的所有副本绑定
DELETE FROM character_instance
WHERE guid = 100;示例3:查询某副本实例中的角色列表
SELECT
ci.guid, c.name, c.level,
c.race, c.class
FROM character_instance ci
JOIN characters c ON c.guid = ci.guid
WHERE ci.instance = 42
ORDER BY c.level DESC;❓ 常见问题
Q1: 角色无法进入副本,提示"已锁定",怎么解决?
删除 character_instance 表中对应角色的副本绑定记录:
DELETE FROM character_instance WHERE guid = X; 然后重启服务器或重置 instance 表的相关记录。Q2: permanent 和 extended 有何区别?
permanent 表示副本绑定是否永久(副本重置前不解绑),extended 表示玩家是否主动延长了绑定时间(用于跨周保留进度)。extended 通常在 permanent=1 的情况下才有效。