表概述

character_queststatus_rewarded 表记录角色已完成并领取奖励的一次性任务。用于防止玩家重复完成同一任务获取奖励。

核心概念:区别于 character_queststatus(存储任务进行中状态),此表专门记录任务已交、奖励已领的最终状态。

表结构

字段名数据类型默认值说明
guidINT UNSIGNED0角色GUID,关联 → characters.guid
questINT UNSIGNED0任务ID,关联 → quest_template.ID
activeTINYINT UNSIGNED1是否激活(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)保留历史数据可用于统计和分析,也便于误操作恢复。物理删除会丢失数据。