📋 表概述

instance_saved_go_state_data 表保存了副本实例中游戏对象(GameObject)的状态,如门是否已打开、宝箱是否已拾取等。当副本实例的数据过大无法完全存入 instance.data 字段时,部分GO状态数据会溢出到此表。

联合主键 (id, guid),其中 id 是 instance.id,guid 是 gameobject.guid。每行记录一个游戏对象在特定副本实例中的当前状态。

📊 表结构

字段名类型默认值说明
idint UNSIGNEDNOT NULL副本实例ID(instance.id)
guidint UNSIGNEDNOT NULL游戏对象GUID(gameobject.guid)
statetinyint UNSIGNED0游戏对象当前状态值

🔍 重要字段详解

🏛️ 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;。然后重置副本或离开副本重新进入。