跳到主要内容

PRD-009 坐骑系统

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

1. 背景与目标​

坐骑提供移动速度与属性加成,是外观付费点之一。当前存在骑乘状态跨地图丢失、坐骑属性重复叠加、战斗中上下坐骑刷速度等问题。本 PRD 统一获取、培养、骑乘、属性与战斗限制。

2. 核心规则​

2.1 获取与培养​

  • 坐骑分普通/稀有/史诗/传说,来源:任务、活动、商城、掉落。
  • 坐骑可升级、升星,提供固定属性与移动速度。
  • 升级消耗坐骑经验丹,升星消耗同名碎片。
  • 坐骑属性全角色生效(不必骑乘),骑乘只影响移速/外观。

2.2 骑乘​

  • 点击坐骑/快捷键上下坐骑,读条 1 秒。
  • 战斗中不可上坐骑;进入战斗自动下坐骑。
  • 骑乘时移动速度 +X%,可被减速/定身影响。
  • 跨地图保留骑乘状态(副本内按配置禁止)。

2.3 幻化与外观​

  • 已解锁坐骑可幻化外观,属性取最高培养坐骑。
  • 幻化不改变实际坐骑 ID,只改变外观。
  • 活动限时坐骑过期后保留图鉴,不可骑乘。

3. 服务端设计​

3.1 数据结构​

struct MountData {
uint32_t mount_id;
uint8_t level;
uint8_t star;
bool unlocked;
bool active; // 当前骑乘
uint32_t skin_id; // 幻化外观
uint32_t expire_ms;
};

struct MountSet {
std::vector<MountData> mounts;
uint32_t active_mount_id;
uint32_t total_speed;
};

3.2 协议​

方向协议说明
C→SCS_MountRide上/下坐骑
C→SCS_MountUpgrade升级/升星
C→SCS_MountSkin幻化
S→CSC_MountList坐骑列表
S→CSC_MountState骑乘/属性变化

3.3 骑乘校验​

  • 校验坐骑已解锁/未过期、角色存活、非战斗、地图允许。
  • 上下坐骑有 1 秒读条,移动/受击打断。
  • 进入战斗、死亡、传送、进副本自动下坐骑。
  • 骑乘状态不写库,登录默认不骑乘。

3.4 属性计算​

  • 所有已解锁坐骑的“培养属性”汇总,不按骑乘叠加。
  • 幻化只改外观,不改属性来源。
  • 坐骑速度与装备/ Buff 速度按乘法叠加,设上限。

4. 客户端设计​

  • 坐骑图鉴:已解锁/未解锁、属性、来源、幻化按钮。
  • 骑乘按钮/快捷键,读条进度,战斗自动下马提示。
  • 坐骑栏显示当前速度加成与培养等级。
  • 幻化预览:模型、特效、移动表现。
  • 过期坐骑灰显,显示剩余时间。

5. 配置​

Mount.xml:mount_id、quality、speed、attr、level_cost、star_cost、expire_type、ride_map_limit。

6. 边界与异常​

场景处理
战斗中上坐骑拒绝
骑乘中进入战斗自动下坐骑
坐骑过期自动下坐骑,图鉴保留
重复上下坐骑读条中拒绝新请求
跨地图保留状态;副本按配置清除
幻化坐骑未解锁拒绝

7. 验收标准​

  • 坐骑获取/升级/升星/幻化正确。
  • 骑乘状态、速度、战斗限制正确。
  • 属性只计算一次,不因骑乘重复叠加。
  • 过期/跨地图/死亡状态处理正确。
  • 客户端模型/速度与服务端一致。