character_gifts 角色礼物表
基于 AzerothCore 官方数据库 · Characters 库 · 存储待发送给角色的礼物/奖励
表概述
character_gifts 表存储待发送给角色的礼物物品。当玩家离线或不在线时,系统可以通过此表暂存待给予的物品(如活动奖励、补偿物品等)。
核心概念:类似于邮件附件系统,但更轻量。记录角色和物品的关联,支持标记(flags)来控制礼物的状态。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| guid | INT UNSIGNED | 0 | 角色GUID,关联 → characters.guid |
| item_guid | INT UNSIGNED | 0 | 物品GUID(主键),关联 → item_instance.guid |
| entry | INT UNSIGNED | 0 | 物品模板ID → item_template.entry |
| flags | INT UNSIGNED | 0 | 礼物标记(位标记) |
重要字段详解
flags - 礼物标记
详细说明:按位标记控制礼物的状态和行为。按位运算
- 可用于标记礼物的来源、类型、优先级等
- 例如:已读/未读、是否自动领取等
- 具体值由服务端模块定义
entry - 物品ID
详细说明:对应 world 库 item_template 表的物品模板ID,用于查询物品名称、图标等信息。
- 配合 item_guid 定位具体物品实例
- 可用于客户端显示礼物列表
SQL示例:查看角色待领取礼物 →
SELECT cg.*, it.name FROM character_gifts cg LEFT JOIN world.item_template it ON cg.entry=it.entry WHERE cg.guid=1;SQL查询示例
-- 查看角色有多少待领取礼物
SELECT guid, COUNT(*) AS gift_count
FROM character_gifts
WHERE guid = 1
GROUP BY guid;-- 清理角色的所有礼物记录
DELETE FROM character_gifts WHERE guid = 1;常见问题
Q: 礼物和邮件有什么区别?
礼物系统更轻量,不依赖邮件系统和 mailbox 相关机制。通常用于活动奖励、补偿物品的静默发送。邮件则需要完整的邮件发送/收取流程。
Q: 角色登录后礼物如何发放?
角色登录时服务端检查此表,将物品直接添加到角色背包中,然后清除对应记录。如果背包已满,通常会通过邮件发送。