队伍系统 (Party System)
基本信息
| 属性 | 值 |
|---|---|
| 管理器 | betterquesting.questing.party.PartyManager(单例,经 ApiReference.PARTY_DB 暴露) |
| 队伍实体 | betterquesting.questing.party.PartyInstance |
| 邀请管理 | betterquesting.questing.party.PartyInvitations |
| 权限枚举 | EnumPartyStatus:MEMBER / ADMIN / OWNER |
| 世界开关 | NativeProps.PARTY_ENABLE,默认 true(存于 世界任务设置) |
| 任务范围 | 队伍内成员共享任务(ParticipantInfo.getSharedQuests()) |
| 封包 | 3 条:party_sync / party_action / invite_sync |
功能
队伍让多名玩家共同推进同一批任务。核心机制不是「组队一起做」,而是进度共享:每个玩家是任务的一个 ParticipantInfo,完成任一成员的任务会让整队都看到该任务完成。
队伍系统与另外两个系统深度耦合:
- 生命值共享 —— 硬核模式下队伍成员同生共死(见 生命值与硬核模式)
- 方块自动化 —— 观测站 遍历的是
pInfo.getSharedQuests(),即它喂的是队伍共享的任务集,不是某个人的私有任务
队伍内权限分三档(EnumPartyStatus):MEMBER < ADMIN < OWNER。源码中该枚举只有成员声明,无任何判定方法(api/enums/EnumPartyStatus.java 共 3 行),具体权限判定散落在 PartyInstance / PartyManager 内。
队伍人数
⚠️ 源码中不存在队伍人数上限。 对
questing/party/全目录检索MAX、too_many、full_party、max等模式,零命中;PartyManager中唯一的size()出现在if (... .size() > 0)形式的空判断里(PartyManager.java:161),不是上限检查。因此本条目不给出任何人数上限数字 —— 任何具体数值都会是编造。
队伍能否创建、以及队伍能否加入,取决于世界属性 PARTY_ENABLE 与 IQuest.PARTY_ENABLE 的取值(后者随每个任务线/任务独立存在)。
封包交互
| 封包 | ID | 方向 | 作用 |
|---|---|---|---|
NetPartySync |
betterquesting:party_sync |
服务端 → 客户端 | 同步队伍状态变更 |
NetPartyAction |
betterquesting:party_action |
客户端 → 服务端 | 创建 / 解散 / 转让等动作 |
NetInviteSync |
betterquesting:invite_sync |
双向 | 邀请的收发与应答 |
玩家登录时服务端会重建队伍视图并全量推送 —— 见 handlers/EventHandler 中调用 NetBulkSync.sendReset(mpPlayer, true, true) 后紧接 PartyManager.SyncPartyQuests(party.getValue(), false) 的那段逻辑(重连时若玩家已有队伍,先把队伍任务重新同步一遍)。
数值
| 数值名 | 值 |
|---|---|
| 权限档位 | 3(MEMBER / ADMIN / OWNER) |
| 队伍人数上限 | 源码中不存在(已检索 MAX / too_many / full_party 等,零命中) |
| 相关封包数 | 3 |
PARTY_ENABLE 默认值 |
true |
| 队伍内共享的内容 | 任务进度(ParticipantInfo.getSharedQuests())、生命值 |