instance_saved_go_state_data - 副本游戏对象状态保存
基于 AzerothCore Characters 数据库 · 副本内游戏对象(GO)状态持久化表
📋 表概述
instance_saved_go_state_data 表保存了副本实例中游戏对象(GameObject)的状态,如门是否已打开、宝箱是否已拾取等。当副本实例的数据过大无法完全存入 instance.data 字段时,部分GO状态数据会溢出到此表。
- 游戏对象状态保存
- 门/宝箱/矿点等状态
- 副本进度持久化
- data字段溢出存储
联合主键 (id, guid),其中 id 是 instance.id,guid 是 gameobject.guid。每行记录一个游戏对象在特定副本实例中的当前状态。
📊 表结构
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | int UNSIGNED | NOT NULL | 副本实例ID(instance.id) |
| guid | int UNSIGNED | NOT NULL | 游戏对象GUID(gameobject.guid) |
| state | tinyint UNSIGNED | 0 | 游戏对象当前状态值 |
🔍 重要字段详解
🏛️ id - 副本实例关联
详细说明:指向 instance 表的 id,确定该GO状态属于哪个副本实例。
- 与 instance.id 一一对应
- 副本重置时,该副本的关联GO状态也会被清除
- 通过该字段可快速查询某副本中所有已保存的GO状态
🎯 guid - 游戏对象标识
详细说明:指向 world 库 gameobject 表的 guid,确定是哪个具体的游戏对象。
- 对应游戏世界中的门、宝箱、矿点、草药等
- 副本内 GO 的 guid 通常属于该副本模板刷新的对象
📊 state - 状态值
详细说明:游戏对象的当前状态编码。
- 0 = 默认状态(关闭/未拾取/未激活)
- 1 = 已激活/已打开/已拾取
- 不同类型GO的state含义不同(门的开关、宝箱的拾取、矿点的采集等)
💡 SQL示例
示例1:查询某副本实例中所有GO状态
SELECT
id AS instance_id,
guid AS go_guid,
state
FROM instance_saved_go_state_data
WHERE id = 42
ORDER BY guid;示例2:重置某副本中所有门的状态
-- 将所有状态为1的GO重置为0(关闭状态)
DELETE FROM instance_saved_go_state_data
WHERE id = 42;❓ 常见问题
Q1: 为什么有些GO状态存这里而不是 instance.data?
instance.data 是TEXT字段,有长度限制。当副本中GO数量较多时,部分数据会溢出到此表。这是数据库设计的溢出机制。
Q2: 副本门打不开怎么办?
尝试删除该副本在此表中的对应记录:
DELETE FROM instance_saved_go_state_data WHERE id = X;。然后重置副本或离开副本重新进入。