表概述

achievement_reward表是成就奖励系统的核心配置表。当玩家完成指定成就时,系统会根据此表配置通过游戏内邮件发送奖励。奖励类型包括称号(TitleA/TitleH)物品(ItemID),以及自定义邮件内容(Subject/Body)

该表属于Loot System的一部分,主键为 ID(对应成就ID)。

表结构

字段名数据类型默认值说明
IDINT UNSIGNED0成就ID,对应achievement_dbc.ID
TitleAINT UNSIGNED0联盟玩家获得的称号ID
TitleHINT UNSIGNED0部落玩家获得的称号ID
ItemIDINT UNSIGNED0奖励物品的ID,对应item_template.entry
SenderINT UNSIGNED0邮件发送者生物ID
SubjectVARCHAR(255)NULL邮件主题
BodyTEXTNULL邮件正文内容
MailTemplateIDINT UNSIGNED0邮件模板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: 玩家完成成就后没有收到奖励邮件,如何排查?

按以下步骤排查:

  1. 确认 achievement_reward 表中是否存在对应ID的记录
  2. 检查奖励物品ID(ItemID)在item_template表中是否存在
  3. 检查邮件发送者(Sender)是否有效
  4. 查看服务器日志是否有邮件发送失败的记录

Q: 一个成就能否同时奖励称号和物品?

可以。只需在一条记录中同时填写TitleA/TitleH和ItemID字段即可。系统会在玩家完成成就时通过同一封邮件发送所有奖励。