achievement_reward 表
achievement_reward表定义完成成就后通过邮件系统发送给玩家的奖励,包括称号、物品和自定义邮件内容。
表概述
achievement_reward表是成就奖励系统的核心配置表。当玩家完成指定成就时,系统会根据此表配置通过游戏内邮件发送奖励。奖励类型包括称号(TitleA/TitleH)、物品(ItemID),以及自定义邮件内容(Subject/Body)。
该表属于Loot System的一部分,主键为 ID(对应成就ID)。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| ID | INT UNSIGNED | 0 | 成就ID,对应achievement_dbc.ID |
| TitleA | INT UNSIGNED | 0 | 联盟玩家获得的称号ID |
| TitleH | INT UNSIGNED | 0 | 部落玩家获得的称号ID |
| ItemID | INT UNSIGNED | 0 | 奖励物品的ID,对应item_template.entry |
| Sender | INT UNSIGNED | 0 | 邮件发送者生物ID |
| Subject | VARCHAR(255) | NULL | 邮件主题 |
| Body | TEXT | NULL | 邮件正文内容 |
| MailTemplateID | INT UNSIGNED | 0 | 邮件模板ID |
重要字段详解
ID (成就ID)
主键字段,对应achievement_dbc表中的ID。每个成就最多有一条奖励记录。
常见成就ID示例:
- 45 - 探索东部王国
- 46 - 探索卡利姆多
- 619 - 为了联盟(奖励黑色战熊)
- 614 - 为了部落(奖励黑色战熊)
TitleA / TitleH (阵营称号)
分别定义联盟和部落玩家获得的称号ID:
- TitleA:联盟玩家完成成就后获得的称号
- TitleH:部落玩家完成成就后获得的称号
称号ID对应CharTitles.dbc中的ID。常见称号如:
- 42 - 探索者
- 47 - 火车王
- 126 - 破碎残阳的
Sender (邮件发送者)
指定奖励邮件的发送者生物ID。如果不设置,系统会使用默认发送者。
常见发送者:
- 不设置 → 系统默认
- 指定生物ID → 以该生物的名义发送邮件
实战案例
查询所有成就奖励(含奖励物品名称):
SELECT ar.ID, ar.TitleA, ar.TitleH, ar.ItemID, it.name AS item_name
FROM achievement_reward ar
LEFT JOIN item_template it ON ar.ItemID = it.entry
WHERE ar.ItemID > 0
ORDER BY ar.ID;
添加"为了联盟"成就奖励黑色战熊:
INSERT INTO achievement_reward (ID, TitleA, TitleH, ItemID, Sender, Subject, Body, MailTemplateID)
VALUES (619, 0, 0, 21176, 0, '为了联盟!', '感谢您对联盟的贡献,请收下这份奖励。', 0);
查询同时奖励称号和物品的成就:
SELECT ID, TitleA, TitleH, ItemID
FROM achievement_reward
WHERE (TitleA > 0 OR TitleH > 0) AND ItemID > 0;
常见问题
Q: 玩家完成成就后没有收到奖励邮件,如何排查?
按以下步骤排查:
- 确认 achievement_reward 表中是否存在对应ID的记录
- 检查奖励物品ID(ItemID)在item_template表中是否存在
- 检查邮件发送者(Sender)是否有效
- 查看服务器日志是否有邮件发送失败的记录
Q: 一个成就能否同时奖励称号和物品?
可以。只需在一条记录中同时填写TitleA/TitleH和ItemID字段即可。系统会在玩家完成成就时通过同一封邮件发送所有奖励。