跳到主要内容

PRD-006 称号与成就

文档编号:PRD-006
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
关联模块:SessionServer/Achievement.cpp、tbl/Title.xml、tbl/Achievement.xml

1. 背景与目标​

称号与成就承载目标感与展示需求。当前存在称号属性可叠加、成就进度重复统计、限时称号过期不消失等问题。本 PRD 统一称号获取、佩戴、属性与成就进度。

2. 核心规则​

2.1 称号​

  • 来源:等级、任务、成就、活动、排行榜、GM。
  • 同时只能佩戴 1 个称号,提供属性与头顶显示。
  • 称号分永久/限时,限时到期自动卸下。
  • 称号属性只取当前佩戴,不叠加。

2.2 成就​

  • 成就分章节,完成条件获得成就点与奖励。
  • 成就点用于解锁成就等级与阶段奖励。
  • 进度由 EventBus 统一驱动,避免重复统计。
  • 隐藏成就完成后才显示。

2.3 展示​

  • 头顶称号、聊天前缀、排行榜展示。
  • 可设置隐藏称号外观(属性仍生效)。
  • 称号图鉴展示来源与获取时间。

3. 服务端设计​

3.1 数据结构​

struct TitleData {
uint32_t title_id;
uint64_t expire_ms; // 0 表示永久
bool unlocked;
};

struct AchievementData {
uint32_t achievement_id;
uint32_t progress;
uint32_t target;
bool completed;
bool claimed;
};

3.2 协议​

方向协议说明
C→SCS_TitleEquip佩戴/卸下
C→SCS_TitleList称号列表
C→SCS_AchievementClaim领取成就奖励
S→CSC_TitleList称号/当前佩戴
S→CSC_AchievementList成就进度
S→CSC_TitleChange广播头顶称号

3.3 进度与事务​

  • 成就进度由事件累加,上限为目标值。
  • 完成时只标记一次,重复事件不重复发奖。
  • 称号到期定时任务清除佩戴并重算属性。
  • 领取奖励与标记已领取在同一事务。

4. 客户端设计​

  • 称号面板:已解锁/未解锁、来源、属性、佩戴/卸下。
  • 头顶称号实时刷新,聊天前缀同步。
  • 成就章节:进度条、完成状态、领取按钮、成就点。
  • 隐藏成就显示“???”直到完成。
  • 称号到期倒计时与提示。

5. 配置​

Title.xml:title_id、name、attr、expire_type、source、display_priority。
Achievement.xml:achievement_id、chapter、condition、target、points、reward。

6. 边界与异常​

场景处理
称号重复获得延长时限/转换为代币
佩戴已过期称号拒绝,自动卸下
成就进度回退只增不减
重复领取幂等
称号属性与装备冲突按加法汇总,不覆盖
断线佩戴状态持久化,登录恢复

7. 验收标准​

  • 称号获取/佩戴/卸下/过期正确。
  • 称号属性只生效一个,不叠加。
  • 成就进度、完成、领取、成就点正确。
  • 头顶/聊天/排行榜展示同步。
  • 重复事件/领取不刷奖励。