表概述

character_achievement_progress 表存储角色在各成就条件(criteria)上的实时进度。是成就系统追踪进度的核心表。

核心概念:每个成就由多个条件(criteria)组成,每个条件有进度计数器。例如"造成100000点伤害"成就,每造成伤害就更新 counter 值。counter 达到目标值时成就完成。

表结构

字段名数据类型默认值说明
guidINT UNSIGNEDNOT NULL角色GUID,关联 → characters.guid
criteriaSMALLINT UNSIGNEDNOT NULL成就条件ID → Achievement_Criteria.dbc
counterINT UNSIGNEDNOT NULL当前进度值
dateINT UNSIGNED0最后更新时间(Unix时间戳)

重要字段详解

counter - 进度计数器

详细说明:记录成就条件的当前进度值。
  • 累计类型:如"造成100000伤害",counter记录已造成的伤害
  • 计数类型:如"完成50个任务",counter记录已完成数
  • 达到目标值后成就完成,记录移到 character_achievement 表

criteria - 成就条件ID

详细说明:对应 Achievement_Criteria.dbc 中的条件定义。
  • 每个成就可以有多个条件
  • 每个条件有独立的计数器
  • 所有条件满足后成就才完成
SQL示例:查看角色成就进度 → SELECT * FROM character_achievement_progress WHERE guid=1 ORDER BY counter DESC;

SQL查询示例

-- 查看角色所有接近完成的成就(进度>=80%) SELECT cap.criteria, cap.counter FROM character_achievement_progress cap WHERE cap.guid = 1 ORDER BY cap.counter DESC LIMIT 20;
-- 重置角色所有成就进度 DELETE FROM character_achievement_progress WHERE guid = 1;
-- 统计某成就条件的平均进度 SELECT criteria, AVG(counter) AS avg_progress FROM character_achievement_progress GROUP BY criteria;

常见问题

Q: 成就完成后进度会被删除吗?

是的。成就一旦完成,所有相关 criteria 的进度记录会被清除,完成记录移至 character_achievement 表。

Q: 如何查看角色某一成就还需要多少进度?

需关联 Achievement_Criteria.dbc 表:SELECT cap.criteria, cap.counter, ac.requiredCount FROM character_achievement_progress cap JOIN Achievement_Criteria ac ON cap.criteria=ac.ID WHERE cap.guid=1;