PRD-008 宠物系统
文档编号:PRD-008
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
关联模块:ScenesServer/Pet.cpp、tbl/Pet.xml、RecordServer
1. 背景与目标
宠物提供战斗协助与养成深度。当前存在宠物属性重复计算、出战宠物死亡后不消失、捕捉成功率可被客户端伪造等问题。本 PRD 统一捕捉、培养、出战、技能与忠诚度。
2. 核心规则
2.1 获取
- 野外捕捉:对可捕捉怪物使用捕捉道具,成功率受血量/道具/等级影响。
- 活动/商城/任务直接获得。
- 宠物分普通/稀有/史诗/传说,影响成长上限与技能数。
2.2 培养
- 升级:消耗宠物经验丹,等级不超过角色等级 +5。
- 资质:影响属性成长,可用资质丹洗练。
- 技能:最多 4 个技能,可学习/替换/升级。
- 忠诚度:死亡/饥饿下降,低于 30 时属性衰减。
2.3 出战
- 同时只出战 1 只宠物,可设置跟随/休息。
- 宠物属性按比例转化给角色,出战技能独立释放。
- 宠物死亡后进入冷却,30 秒后可再次召唤。
- 副本/竞技场是否允许宠物按玩法配置。
3. 服务端设计
3.1 数据结构
struct PetData {
uint64_t pet_uid;
uint32_t pet_id;
uint16_t level;
uint16_t loyalty;
uint32_t exp;
std::vector<uint32_t> skills;
bool active;
};
struct PetSet {
std::vector<PetData> pets;
uint64_t active_pet_uid;
uint32_t cooldown_ms;
};
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_PetCapture | 捕捉 |
| C→S | CS_PetSummon | 出战/召回 |
| C→S | CS_PetUpgrade | 升级/洗练 |
| C→S | CS_PetSkill | 学习/替换技能 |
| S→C | SC_PetList | 宠物列表 |
| S→C | SC_PetState | 出战/死亡/冷却 |
3.3 捕捉流程
CS_PetCapture(monster_id)
→ 校验怪物可捕捉、血量阈值、道具
→ 扣捕捉道具
→ 计算成功率(基础 + 血量加成 + 道具加成)
→ 成功:生成宠物(资质/技能随机)→ 入宠物栏
→ 失败:怪物愤怒/逃跑(配置)
→ 广播结果
3.4 战斗与持久化
- 宠物作为独立实体由
ScenesServer管理,AI 简单跟随/攻击。 - 宠物死亡不掉落,进入冷却;角色死亡宠物消失。
- 宠物数据写
RecordServer,出战状态登录恢复(冷却清零)。 - 宠物技能与角色技能共用
SkillBase,但不占角色技能栏。
4. 客户端设计
- 宠物栏:品质、等级、资质、技能、忠诚度、出战状态。
- 捕捉:目标血量低于阈值时显示捕捉按钮与成功率。
- 出战:召唤/召回、跟随/休息、宠物血条。
- 技能:技能格、学习/替换预览、技能书来源。
- 死亡:宠物倒地,显示复活冷却。
5. 配置
Pet.xml:pet_id、quality、growth、attr_rate、capture_rate、level_limit、skill_slots、loyalty_decay。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 宠物栏满 | 捕捉失败/提示扩容 |
| 捕捉目标已被他人锁定 | 按怪物归属判断 |
| 出战宠物死亡 | 进入冷却,不重复召唤 |
| 宠物等级超过角色 | 暂停升级,提示 |
| 技能替换 | 二次确认,旧技能消失 |
| 断线 | 出战状态恢复,冷却按剩余时间 |
7. 验收标准
- 捕捉/培养/出战/技能/忠诚度全流程正确。
- 宠物属性转化与角色面板一致。
- 死亡冷却、召唤限制、副本限制生效。
- 捕捉/技能替换不可被客户端伪造。
- 断线重连宠物状态正确恢复。