account_instance_times - 账号副本进入次数统计
基于 AzerothCore Characters 数据库 · 账号级副本进入次数追踪表
📋 表概述
account_instance_times 表记录每个账号下所有角色进入副本实例的次数和释放时间。此表用于限制同一账号下多个角色在副本重置周期内重复进入副本(类似暴雪官方防刷机制)。
- 账号级次数限制
- 防多角色刷本
- 释放时间管理
- 副本重置联动
联合主键 (accountId, instanceId),确保同一账号在同一副本实例中只有一条记录。releaseTime 表示账号对该副本实例的"释放时间"。
📊 表结构
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| accountId | int UNSIGNED | NOT NULL | 账号ID(account.id) |
| instanceId | int UNSIGNED | 0 | 副本实例ID(instance.id) |
| releaseTime | bigint UNSIGNED | 0 | 释放时间戳(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 表示无限期锁定(通常不应出现)。如果遇到此情况,要么删除记录,要么设置为合理的未来时间戳。