📋 表概述

instance 表存储所有已创建的副本实例信息。每次玩家进入一个副本,系统可能创建一个新的实例记录,包含地图ID、重置时间、难度、已完成进度等数据。副本实例的生命周期从此表开始管理。

主键为 id,每个副本实例有唯一ID。该表还包含大秘境(M+)相关的扩展字段,如词缀列表、奖励倍数等。

📊 表结构

字段名类型默认值说明
idint UNSIGNED0副本实例ID(主键)
mapsmallint UNSIGNED0副本地图ID
resettimeint UNSIGNED0Unix时间戳,副本重置时间
difficultytinyint UNSIGNED0副本难度(0=普通10人,1=英雄5人,2=普通25人,3=英雄25人)
completedEncountersint UNSIGNED0已完成的首领战掩码(按位标记)
datatextNOT NULL副本保存数据(序列化状态)
challenge_levelint0大秘境层数
周期idint0大秘境周期ID
星期数int0大秘境周数
boss调整idint0首领属性调整ID
小怪调整idint0小怪属性调整ID
专属难度光环varchar(500)''该副本专属光环效果列表
玩家增加的光环varchar(500)''玩家增益光环列表
玩家扣减的光环varchar(500)''玩家减益光环列表
boss扣减的光环varchar(500)''首领减益光环列表
小怪扣减的光环varchar(500)''小怪减益光环列表
词缀列表varchar(500)''大秘境词缀组合
基础奖励倍数int0基础奖励倍数
提前完成奖励倍数int0限时内完成奖励倍数
额外奖励idvarchar(500)''额外奖励物品ID列表
大秘境钥匙idint0当前大秘境钥匙物品ID
大秘境开始时间int0大秘境计时开始时间戳
大秘境随机光环varchar(500)''大秘境随机附加光环

🔍 重要字段详解

🗺️ map / difficulty - 副本标识

详细说明:map 和 difficulty 共同确定一个副本的具体类型。
  • map - 副本地图ID,如 33=影牙城堡, 249=奥妮克希亚的巢穴, 533=纳克萨玛斯
  • difficulty - 0=普通10人, 1=英雄5人, 2=普通25人, 3=英雄25人
  • 同一 map 可能有多条 instance 记录(不同难度分别创建)

⏰ resettime - 重置时间

详细说明:副本过期重置时间(Unix时间戳),到达后会重置副本进度。
  • 5人英雄副本:通常为每日凌晨重置
  • 团队副本:通常为每周二维护时重置
  • 到达 resettime 后,副本已完成的首领和战利品会重置
💡 示例:查询即将重置的副本 → WHERE resettime < UNIX_TIMESTAMP() + 3600

⚔️ completedEncounters - 进度掩码

详细说明:按位标记已击败的首领。每个首领对应一个二进制位。
  • 位 0(值1)= 1号首领已击败
  • 位 1(值2)= 2号首领已击败
  • 位 2(值4)= 3号首领已击败…依次类推
  • 值 0 = 无首领被击败(全新副本)

💡 SQL示例

示例1:查询所有存活的副本实例

SELECT i.id, i.map, i.difficulty, FROM_UNIXTIME(i.resettime) AS reset_time, BIN(i.completedEncounters) AS bosses_killed FROM instance i WHERE i.resettime > UNIX_TIMESTAMP() ORDER BY i.resettime;

示例2:重置指定副本实例

-- 将副本实例ID=5设置为已过期(立即重置) UPDATE instance SET resettime = 1 WHERE id = 5;

示例3:查询大秘境副本信息

SELECT id, map, challenge_level AS level, 词缀列表 AS affixes, 基础奖励倍数 AS base_multiplier FROM instance WHERE challenge_level > 0 ORDER BY challenge_level DESC;

❓ 常见问题

Q1: 副本实例什么时候会被创建?
玩家进入副本时,如果该地图和难度没有对应的可用实例,系统会创建一个新的 instance 记录并分配新ID。
Q2: 大秘境相关字段为空(0或'')是否影响普通副本?
不影响。大秘境扩展字段仅在大秘境副本(challenge_level > 0)时生效,普通副本直接忽略这些字段。