表概述

quest_tracker 表提供任务生命周期追踪功能,记录每个任务从接取到完成(或放弃)的完整时间线。

核心概念:与 character_queststatus 不同,此表不存储任务进度,而是存储任务的时间线信息:何时接取、何时完成、何时放弃,以及是否由GM完成。

表结构

字段名数据类型默认值说明
idINT UNSIGNEDNULL任务ID,关联 → quest_template.ID
character_guidINT UNSIGNED0角色GUID,关联 → characters.guid
quest_accept_timeDATETIMENOT NULL任务接取时间
quest_complete_timeDATETIMENULL任务完成时间(NULL=未完成或已放弃)
quest_abandon_timeDATETIMENULL任务放弃时间(NULL=未放弃)
completed_by_gmTINYINT0是否由GM完成(0=否 1=是)
core_hashVARCHAR(120)'0'核心哈希值(版本追踪)
core_revisionVARCHAR(120)'0'核心修订版本号

重要字段详解

时间线字段

详细说明:三个时间字段追踪任务的完整生命周期。
  • quest_accept_time:任务接取时间(必填)
  • quest_complete_time:任务完成交任务时间。NULL表示未完成
  • quest_abandon_time:任务放弃时间。NULL表示未放弃或被完成
  • 完成和放弃互斥:一个任务不能同时有完成和放弃时间

completed_by_gm - GM完成标记

详细说明:标记任务是否通过GM命令(.quest complete)完成。
  • 0 = 玩家正常完成
  • 1 = GM使用命令完成
  • 用于审计和防止GM滥用
SQL示例:查看角色任务历史 → SELECT * FROM quest_tracker WHERE character_guid=1 ORDER BY quest_accept_time DESC;

SQL查询示例

-- 查看角色今天接取的任务 SELECT id, quest_accept_time FROM quest_tracker WHERE character_guid = 1 AND DATE(quest_accept_time) = CURDATE();
-- 统计GM完成任务的记录数 SELECT COUNT(*) AS gm_completed FROM quest_tracker WHERE completed_by_gm = 1;
-- 查看玩家平均完成一个任务所需时间(秒) SELECT character_guid, AVG(UNIX_TIMESTAMP(quest_complete_time) - UNIX_TIMESTAMP(quest_accept_time)) AS avg_seconds FROM quest_tracker WHERE quest_complete_time IS NOT NULL GROUP BY character_guid;

常见问题

Q: quest_tracker 和 character_queststatus 有什么区别?

quest_tracker 存储任务时间线(接取/完成/放弃时间),character_queststatus 存储任务进行中的进度数据(杀怪数/物品数等)。两者互补。

Q: 此表数据量大了会影响性能吗?

建议定期清理旧数据。可通过定时任务清理已完成的旧记录或使用分区表优化查询性能。