跳到主要内容

PRD-016 组队系统

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

1. 背景与目标​

组队是副本、任务、国战的基础协作单位。当前存在队长掉线后队伍解散、分配模式不生效、跨地图跟随丢失等问题。本 PRD 统一建队、加入、分配、跟随、踢人与解散。

2. 核心规则​

2.1 队伍规模​

  • 普通队伍最多 5 人,团队最多 20 人(按玩法开启)。
  • 玩家同一时间只能在一个队伍。
  • 队长可转移、踢人、解散;队员可退出。

2.2 分配模式​

模式金币物品经验
自由拾取各自拾取归属者拾取范围内共享
队长分配队长拾取队长分配范围内共享
Roll 点各自拾取需求/贪婪 Roll范围内共享
  • 经验共享范围默认 30 格,超过范围不共享。
  • 副本内分配模式以进入时设置为准,中途不可改。

2.3 跟随与跨地图​

  • 队员可点击队长头像跟随,自动寻路到队长附近。
  • 队长进入副本/跨地图,队员收到传送确认。
  • 队员掉线保留队伍位置 5 分钟,超时移出。
  • 队长掉线 5 分钟后自动转移给在线队员。

3. 服务端设计​

3.1 数据结构​

struct Team {
uint64_t team_id;
uint64_t leader_id;
std::vector<uint64_t> members;
uint8_t loot_mode;
uint32_t create_time;
uint32_t max_members;
};

struct TeamMember {
uint64_t role_id;
uint32_t level, job;
uint32_t map_id, x, y;
bool online;
};

3.2 协议​

方向协议说明
C→SCS_TeamCreate建队
C→SCS_TeamInvite邀请
C→SCS_TeamJoin申请/接受
C→SCS_TeamLeave退出
C→SCS_TeamKick踢人
C→SCS_TeamTransfer转让队长
C→SCS_TeamSetLoot分配模式
S→CSC_TeamInfo队伍全量
S→CSC_TeamMemberUpdate成员状态

3.3 队伍状态​

  • 队伍信息缓存于 SessionServer,场景服同步成员位置。
  • 队长操作加锁,避免并发转让/踢人。
  • 解散时清理副本报名、跟随、队伍 Buff。
  • 跨服队伍由 MiniServer 维护映射。

4. 客户端设计​

  • 队伍面板:成员头像、等级、职业、HP/MP、距离、在线状态。
  • 邀请弹窗:显示队长、队伍人数、副本进度。
  • 分配模式设置仅队长可见,修改后广播。
  • 跟随按钮、集合标记、队长标记。
  • 队员掉线显示灰色头像与倒计时。

5. 配置​

Team.xml:max_members、share_range、offline_keep_seconds、leader_transfer_seconds、invite_timeout。

6. 边界与异常​

场景处理
邀请已满队伍拒绝
被邀请者已在队伍拒绝
队长踢自己拒绝,需转让/解散
队长掉线5 分钟后自动转让
副本中退队按副本规则处理,可能视为放弃
跨服跟随由 MiniServer 转发,失败提示

7. 验收标准​

  • 建队/邀请/加入/退出/踢人/转让/解散正确。
  • 三种分配模式按规则生效。
  • 经验共享范围、掉线保留、队长转移正确。
  • 跨地图/副本/跨服队伍状态一致。
  • 并发操作不会产生双队长/重复成员。