跳到主要内容

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→SCS_PetCapture捕捉
C→SCS_PetSummon出战/召回
C→SCS_PetUpgrade升级/洗练
C→SCS_PetSkill学习/替换技能
S→CSC_PetList宠物列表
S→CSC_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. 验收标准​

  • 捕捉/培养/出战/技能/忠诚度全流程正确。
  • 宠物属性转化与角色面板一致。
  • 死亡冷却、召唤限制、副本限制生效。
  • 捕捉/技能替换不可被客户端伪造。
  • 断线重连宠物状态正确恢复。