PRD-025 装备系统
文档编号:PRD-025
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
关联模块:ItemBase.xml、ScenesServer/Item.cpp、RecordServer
1. 背景与目标
装备是角色养成的主干。当前装备穿戴校验分散、替换时属性重算不一致、绑定规则不清晰。本 PRD 统一装备的穿戴、替换、绑定、耐久与套装效果。
目标
- 10 个装备槽位,支持职业/等级/性别限制。
- 穿戴/卸下后属性实时重算,客户端展示一致。
- 绑定、耐久、套装效果规则明确。
2. 核心规则
2.1 槽位
| 槽位 | 说明 |
|---|---|
| 武器 | 决定普攻与技能系数 |
| 副手 | 盾/法器,部分职业可用 |
| 头盔、项链、衣服、腰带、护腕、戒指×2、鞋子 | 防御/属性 |
| 时装 | 仅外观,不影响属性 |
2.2 品质与属性
| 品质 | 颜色 | 附加属性条数 |
|---|---|---|
| 普通 | 白 | 0 |
| 优秀 | 绿 | 1 |
| 精良 | 蓝 | 2 |
| 史诗 | 紫 | 3 |
| 传说 | 橙 | 4 |
- 基础属性由
ItemBase决定,附加属性在掉落/打造时随机。 - 套装:集齐 2/4/6 件激活对应效果,效果不叠加同档。
2.3 穿戴与替换
- 校验等级、职业、性别、槽位、背包中存在。
- 替换时旧装备回到背包;背包满则拒绝替换。
- 替换后立即重算属性、战力、技能可用性。
- 装备中的物品不可出售/分解/交易(可配置)。
2.4 绑定与耐久
- 装备后绑定(可配置为获取时绑定)。
- 耐久在死亡/PK 中损耗,耐久为 0 时属性失效但不掉落。
- 修理消耗金币,可在 NPC 或商城道具修理。
3. 服务端设计
3.1 模块职责
| 模块 | 职责 |
|---|---|
EquipManager | 穿戴、卸下、替换、槽位管理 |
AttributeManager | 装备属性汇总与重算 |
ItemManager | 背包物品扣除/增加 |
RecordServer | 装备栏、绑定、耐久持久化 |
3.2 数据结构
struct EquipSlot {
uint8_t slot;
uint64_t item_uid;
uint32_t item_id;
uint16_t durability;
bool bound;
};
struct EquipSet {
EquipSlot slots[10];
uint32_t set_flags; // 已激活套装位掩码
};
3.3 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_EquipItem | 穿戴/替换 |
| C→S | CS_UnequipItem | 卸下 |
| C→S | CS_RepairItem | 修理 |
| S→C | SC_EquipChange | 槽位变化 |
| S→C | SC_EquipList | 登录全量装备 |
| S→C | SC_AttributeUpdate | 属性/战力变化 |
3.4 穿戴流程
CS_EquipItem(item_uid, slot)
→ 校验物品存在、槽位匹配、等级/职业/性别
→ 校验背包空间(替换时)
→ 扣背包/旧装备入包
→ 更新装备栏、绑定标记
→ 重算属性/战力/套装
→ 广播 SC_EquipChange + SC_AttributeUpdate
→ 异步写库
3.5 属性重算
- 以“基础属性 + 装备 + 宝石 + 强化 + 套装 + Buff”顺序汇总。
- 百分比属性在固定值之后计算,避免顺序影响结果。
- 重算后对比旧属性,只同步变化的字段。
- 战斗中的装备切换默认禁止(可配置允许切换但进入 CD)。
4. 客户端设计
- 角色面板:纸娃娃展示 10 个槽位,点击槽位筛选背包可用装备。
- 背包对比:悬停装备显示与当前装备的属性差(绿色提升/红色下降)。
- 一键穿戴:按职业推荐自动选择最优装备,需二次确认。
- 套装提示:集齐件数高亮,未激活显示缺失部位。
- 耐久提示:低于 20% 时图标变黄,为 0 时红色并提示修理。
5. 配置与数值
ItemBase.xml 装备字段:
| 字段 | 说明 |
|---|---|
id | 物品 ID |
slot | 槽位 |
quality | 品质 |
level_limit | 等级限制 |
job_limit | 职业限制 |
gender_limit | 性别限制 |
base_attr | 基础属性 |
rand_attr_group | 随机属性组 |
set_id | 套装 ID |
max_durability | 最大耐久 |
bind_type | 获取/装备/永不绑定 |
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 背包满时卸下 | 拒绝并提示 |
| 装备被删除/回收 | 登录校验,清空槽位并补发邮件 |
| 转职后装备不匹配 | 允许继续穿戴但属性失效,或自动卸下(配置) |
| 耐久为 0 | 属性失效,装备不消失 |
| 重复穿戴同一件 | 幂等,返回当前状态 |
| 交易/邮件中的装备 | 无法穿戴,需先取出 |
7. 埋点与运营
- 各槽位装备品质分布、平均等级、套装覆盖率。
- 修理消耗与耐久损耗。
- 后台可调整掉落、修理费用、套装效果。
8. 验收标准
- 10 个槽位穿戴/卸下/替换正确,属性实时更新。
- 背包满、等级/职业不符时拒绝且不丢装备。
- 绑定、耐久、套装效果按配置生效。
- 客户端属性对比与服务端一致。
- 断线重连后装备栏与属性正确恢复。