📋 表概述

character_spell_cooldown 表用于保存角色技能和物品的冷却状态。当角色下线时,尚在冷却中的技能/物品时间会被保存到此表,下次登录时恢复冷却状态,确保冷却时间跨会话一致。

📊 表结构

字段名数据类型默认值说明
guidint UNSIGNED0角色GUID(低位)
spellint UNSIGNED0技能ID
categoryint UNSIGNED0技能冷却类别ID(共享冷却组)
itemint UNSIGNED0物品ID(如果是物品技能冷却)
timeint UNSIGNED0技能冷却结束的 Unix 时间戳
needSendtinyint UNSIGNED1是否需要向客户端发送冷却数据

🔍 重要字段详解

time — 冷却结束时间

Unix 时间戳,表示技能冷却何时结束。玩家登录时系统读取该值,如果大于当前时间则在客户端显示剩余冷却时间。冷却过的记录会被自动清除。

category — 冷却类别

共享冷却组标识。同一类别的多个技能共享冷却时间(例如战士的所有攻击技能可能共享同一类别的冷却)。0 表示独立冷却。

item — 物品标识

当冷却来源于物品使用时(如药水、饰品),该字段存储物品的 entry ID。0 表示该冷却来自职业技能而非物品。

💡 SQL查询示例

查询某个角色当前仍在冷却中的所有技能

SELECT guid, spell, category, item,
       FROM_UNIXTIME(time) AS 冷却结束时间,
       CASE WHEN time > UNIX_TIMESTAMP() THEN '冷却中' ELSE '已就绪' END AS 状态
FROM character_spell_cooldown
WHERE guid = 12345
ORDER BY time;

清除某个角色的所有技能冷却(暴力重置)

DELETE FROM character_spell_cooldown WHERE guid = 12345;

❓ 常见问题

Q: 为什么我下线后再上线,有些技能冷却被重置了?

如果 time 字段对应的冷却时间在上线时已经过期,系统会自动清理这些记录。这是正常的,已过期的冷却不会在登录时恢复。

Q: needSend 字段有什么作用?

该字段控制是否需要将冷却数据同步到客户端。某些冷却(如服务端侧的 DB 记录)可能不需要通知客户端,此时 needSend=0 可以避免不必要的网络开销。