character_queststatus_rewarded 已奖励任务表
基于 AzerothCore 官方数据库 · Characters 库 · 记录角色已领取奖励的任务
表概述
character_queststatus_rewarded 表记录角色已完成并领取奖励的一次性任务。用于防止玩家重复完成同一任务获取奖励。
核心概念:区别于 character_queststatus(存储任务进行中状态),此表专门记录任务已交、奖励已领的最终状态。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| guid | INT UNSIGNED | 0 | 角色GUID,关联 → characters.guid |
| quest | INT UNSIGNED | 0 | 任务ID,关联 → quest_template.ID |
| active | TINYINT UNSIGNED | 1 | 是否激活(1=已奖励 0=已清理/重置) |
重要字段详解
active - 激活状态
详细说明:标记任务奖励状态。取值
- 1 = 任务已奖励(活跃,不能再做)
- 0 = 已重置(可以重新完成)
- 支持软删除:设为0而不是物理删除,便于数据恢复
与 character_queststatus 的关系
详细说明:两张表配合管理任务流转。
- character_queststatus:任务接取到进行中
- character_queststatus_rewarded:任务完成并领取奖励(终结状态)
- 任务交完后从 queststatus 移出,记录到 rewarded
SQL示例:查看角色已完成的全部任务 →
SELECT quest FROM character_queststatus_rewarded WHERE guid=1 AND active=1;SQL查询示例
-- 查看角色完成的任务总数
SELECT COUNT(*) AS completed_quests
FROM character_queststatus_rewarded
WHERE guid = 1 AND active = 1;-- 重置角色的某个任务(允许重做)
DELETE FROM character_queststatus_rewarded
WHERE guid = 1 AND quest = 任务ID;-- 找出服务器完成次数最多的任务
SELECT quest, COUNT(*) AS completed_count
FROM character_queststatus_rewarded
WHERE active = 1
GROUP BY quest
ORDER BY completed_count DESC
LIMIT 10;常见问题
Q: 如何区分已完成任务和进行中任务?
进行中任务在 character_queststatus 表(有mobcount/itemcount等进度数据),已完成并领奖的在 character_queststatus_rewarded 表。
Q: 为什么用 active 字段而不是直接删除记录?
软删除(active=0)保留历史数据可用于统计和分析,也便于误操作恢复。物理删除会丢失数据。