表概述

character_gifts 表存储待发送给角色的礼物物品。当玩家离线或不在线时,系统可以通过此表暂存待给予的物品(如活动奖励、补偿物品等)。

核心概念:类似于邮件附件系统,但更轻量。记录角色和物品的关联,支持标记(flags)来控制礼物的状态。

表结构

字段名数据类型默认值说明
guidINT UNSIGNED0角色GUID,关联 → characters.guid
item_guidINT UNSIGNED0物品GUID(主键),关联 → item_instance.guid
entryINT UNSIGNED0物品模板ID → item_template.entry
flagsINT UNSIGNED0礼物标记(位标记)

重要字段详解

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: 角色登录后礼物如何发放?

角色登录时服务端检查此表,将物品直接添加到角色背包中,然后清除对应记录。如果背包已满,通常会通过邮件发送。