PRD-007 翅膀与外观系统
文档编号:PRD-007
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
关联模块:ScenesServer/Wing.cpp、tbl/Wing.xml、RecordServer
1. 背景与目标
翅膀是外观与属性兼具的养成线。当前存在升阶失败动画与结果不一致、幻化后属性丢失、外观在他人视角不显示等问题。本 PRD 统一翅膀升阶、幻化、属性与广播。
2. 核心规则
2.1 翅膀阶段
- 翅膀 0–15 阶,每阶分 5 星。
- 升阶消耗羽毛/翅膀精华,成功率随阶数下降。
- 失败积累祝福值,满值必成;成功后祝福值清零。
- 升阶提供属性与外观变化,满阶解锁光效。
2.2 幻化
- 已解锁外观可幻化,属性取最高阶翅膀。
- 幻化只改变模型/特效,不改变阶数。
- 幻化外观可随时切换,无消耗。
- 他人视角同步幻化外观。
2.3 属性
- 翅膀属性全角色生效,不因幻化改变。
- 属性类型:攻击、防御、生命、暴击、抗暴。
- 与装备/坐骑/宠物属性按加法汇总,百分比单独乘区。
3. 服务端设计
3.1 数据结构
struct WingData {
uint8_t stage; // 0-15
uint8_t star; // 0-5
uint32_t blessing; // 祝福值
uint32_t skin_id; // 当前幻化
std::vector<uint32_t> unlocked_skins;
};
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_WingUpgrade | 升阶/升星 |
| C→S | CS_WingSkin | 幻化切换 |
| S→C | SC_WingInfo | 阶数/祝福/外观 |
| S→C | SC_WingResult | 成功/失败/祝福变化 |
| S→C | SC_EntityAppearance | 广播他人外观 |
3.3 升阶流程
CS_WingUpgrade
→ 校验材料/金币/当前阶数
→ 扣材料
→ 计算成功率 + 祝福值
→ 成功:stage/star 提升,祝福清零,解锁外观
→ 失败:祝福增加,达到阈值必成
→ 重算属性
→ 广播 SC_WingResult + SC_EntityAppearance
3.4 外观同步
- 玩家进入视野时下发当前翅膀阶数与幻化 ID。
- 幻化切换只广播
SC_EntityAppearance,不重算属性。 - 翅膀阶数变化需同时更新属性与外观。
4. 客户端设计
- 翅膀面板:阶数、星级、祝福值、属性预览、升阶按钮。
- 升阶动画:成功光效、失败祝福值增加、必成提示。
- 外观图鉴:已解锁/未解锁,点击预览/幻化。
- 角色界面展示翅膀模型,支持隐藏他人翅膀(性能选项)。
- 属性对比:升阶前后差异。
5. 配置
Wing.xml:stage、star、success_rate、blessing_max、material_cost、attr、skin_id、unlock_stage。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 材料不足 | 拒绝,不扣材料 |
| 满阶/满星 | 拒绝,提示已满 |
| 升阶中切地图 | 完成当前结算,不中断 |
| 幻化未解锁外观 | 拒绝 |
| 重复升阶请求 | 幂等/加锁 |
| 断线 | 已扣材料的结果保留,重连同步 |
7. 验收标准
- 升阶/升星/祝福值/必成规则正确。
- 幻化只改外观,属性不变。
- 他人视角外观同步。
- 材料扣除与阶数变更事务一致。
- 客户端动画结果与服务端一致。