📋 表概述

account_instance_times 表记录每个账号下所有角色进入副本实例的次数和释放时间。此表用于限制同一账号下多个角色在副本重置周期内重复进入副本(类似暴雪官方防刷机制)。

联合主键 (accountId, instanceId),确保同一账号在同一副本实例中只有一条记录。releaseTime 表示账号对该副本实例的"释放时间"。

📊 表结构

字段名类型默认值说明
accountIdint UNSIGNEDNOT NULL账号ID(account.id)
instanceIdint UNSIGNED0副本实例ID(instance.id)
releaseTimebigint UNSIGNED0释放时间戳(Unix时间)

🔍 重要字段详解

🆔 accountId - 账号关联

详细说明:标识副本次数归属于哪个账号(而非角色)。
  • 同一账号下的所有角色共用副本次数计数
  • 例如:账号A的角色1打了ICC,角色2要等 releaseTime 过后才能再次进入同一个ICC实例
  • 关联 auth 库的 account 表

⏰ releaseTime - 释放时间

详细说明:BIGINT类型时间戳,标记该账号对此副本实例的锁定何时释放。
  • 当前时间 < releaseTime → 该账号任何角色都不能进入此副本实例
  • 当前时间 >= releaseTime → 锁定解除,可重新进入
  • 通常设置为副本下次重置时间
💡 解除账号副本锁定:DELETE FROM account_instance_times WHERE accountId = X AND instanceId = Y;

💡 SQL示例

示例1:查询某账号的所有副本锁定

SELECT ait.accountId, ait.instanceId, i.map, i.difficulty, FROM_UNIXTIME(ait.releaseTime) AS release_time FROM account_instance_times ait JOIN instance i ON i.id = ait.instanceId WHERE ait.accountId = 15;

示例2:解除某账号的全部副本锁定

DELETE FROM account_instance_times WHERE accountId = 15;

❓ 常见问题

Q1: 为什么同一账号的不同角色不能进入同一副本?
这是防刷机制。账号下第一个角色进入副本实例后,该账号的 releaseTime 被设置,其他角色必须等到该时间后才能进入同一个实例。防止一账号多角色重复刷同一副本。
Q2: releaseTime 设为0是什么意思?
releaseTime=0 表示无限期锁定(通常不应出现)。如果遇到此情况,要么删除记录,要么设置为合理的未来时间戳。