自定义房间把「开发者定的规则」变成「玩家自定的玩法」,是联机游戏社交化和长尾内容的核心开关。本 PRD 是《在线联机原型全集》的扩展篇之四,聚焦私房配置、房主权限、规则热加载与 Mod 沙箱。
1. 目标与验证点
| 编号 | 验证能力 | 说明 |
|---|---|---|
| C1 | 私房配置 | 房主自定义模式/地图/参数,可加密 |
| C2 | 房主权限 | 踢人、换图、调参数、解散房间 |
| C3 | 规则热加载 | 规则集不重启即时生效 |
| C4 | Mod 沙箱 | 玩家脚本/资源安全加载,不危害服务器 |
| C5 | 审核管线 | Mod 发布前审核,违规可下架 |
一句话目标:把「房间」从固定模板变成「玩家可以捏的玩法容器」,同时守住安全与可控的底线。
2. 系统架构
flowchart TD
A["Custom Room Config"] -->|save| B["Room Registry"]
B --> C["Room Instance"]
C --> D["Rule Runtime"]
D -->|load| E["Mod Sandbox"]
E -->|validate| F["Mod Review Pipeline"]
C --> G["Player Clients"]
B -->|templates| H["Room Template Store"]
说明:
- Room Registry:房间模板、自定义配置、口令的存储与检索
- Rule Runtime:解释规则集(如血量倍率、资源刷新、胜负条件)
- Mod Sandbox:独立进程/容器运行玩家脚本,资源受限
- Review Pipeline:Mod 上传 → 静态检查 → 人工抽查 → 发布
3. 自定义房间配置
3.1 房间模板
| 配置维度 | 例子 | 默认/自定义 |
|---|---|---|
| 模式 | 对战/合作/自由 | 模板定 |
| 规则参数 | 血量倍率、时间限制、胜负条件 | 房主可改 |
| 地图 | 官方图 / 玩家图 | 房主可选 |
| 准入 | 公开/好友/口令 | 房主设定 |
| 能力开关 | 是否允许技能、道具 | 房主开关 |
3.2 配置结构
room:
id: "room_abc"
template: "arena_2v2"
rules:
hp_multiplier: 1.5
time_limit_sec: 600
win_condition: "most_kills"
access:
mode: "password"
password_hash: "..."
mods:
- "mod_speed_boost"
- "mod_hud_custom"
关键约束:自定义参数必须经过规则白名单校验,防注入、防数值越界(如负血量导致崩溃)。
4. 房主权限与生命周期
| 权限 | 说明 |
|---|---|
| 改配置 | 开局前可调,进行中锁定(或房主可改需全员确认) |
| 踢人 | 踢出对局成员,记录日志 |
| 换图/换模式 | 开局前/间歇期切换 |
| 邀请 | 生成邀请链接 / 二维码 |
| 解散 | 结束房间并归档回放 |
房间生命周期:
创建(模板)→ 配置 → 组局 → 对局 → 结束/复用 → 归档
进行中配置变更 → 需全员投票或房主强制 + 日志
体验原则:房主是「组织者」不是「统治者」——关键变更最好带确认,避免房主滥用权限逼走玩家。
5. 规则热加载
5.1 热加载目标
无需重启房间实例:
- 新增/修改规则参数即时生效
- 规则错误自动回滚到上一版本
- 版本留痕,可审计
5.2 实现要点
规则集存 Redis/配置中心,房间进程监听变更事件
对局中规则变更:下一局生效(当前局不变,避免混乱)
规则版本号:房间加载时绑定 version,防新旧混用
反例教训:对局中途改规则会造成「同局不同规则」,严重损害公平性与可复盘性——规则变更必须切到「下一局生效」。
6. Mod 沙箱与安全
6.1 三层隔离
| 层 | 机制 | 防护 |
|---|---|---|
| 进程隔离 | 独立进程/容器 | 内存、崩溃隔离 |
| 资源限制 | CPU/Mem/时间配额 | 防死循环、资源耗尽 |
| API 白名单 | 只暴露受限接口 | 防越权访问 |
6.2 Mod 能力范围
✅ 允许:表现层(HUD、皮肤、UI)、简单规则调整(数值)
❌ 禁止:读其他玩家数据、发起网络请求、访问宿主 API
✅ 鼓励:纯客户端/纯表现 Mod 先跑通,再逐步开放服务端能力
6.3 审核管线
上传 → 静态扫描(危险 API、超限资源)→ 沙箱试运行 → 人工抽查 → 发布/拒绝
违规 Mod → 下架 + 移除已缓存内容 + 告警
安全底线:Mod 是「受控的扩展」,不是「开放的插件系统」。宁可初期限制严,不可泄露服务器能力。
7. 接口与数据模型
| 模块 | 接口 | 描述 |
|---|---|---|
| RoomRegistry | POST /room/template | 创建房间模板 |
| RoomRegistry | POST /room/{id}/config | 更新自定义配置 |
| RuleRuntime | POST /rule/reload | 热加载规则集 |
| Mod | POST /mod/upload | 上传 Mod 进审核 |
| Mod | GET /mod/{id}/state | 查询 Mod 发布状态 |
| Admin | DELETE /mod/{id} | 下架违规 Mod |
| 表 | 字段 |
|---|---|
room_template | id、mode、rules_default、maps、is_official |
room_config | room_id、rules、access、mods、version |
mod | id、author、category、status、sandbox_profile、version |
8. 里程碑与验收
M1 私房配置(1 周)
✅ 模板 + 自定义参数 + 口令准入
M2 房主权限(1 周)
✅ 踢人/换图/改参/解散全流程 + 日志
M3 规则热加载(1 周)
✅ 下一局生效、错误回滚、版本留痕
M4 Mod 沙箱 + 审核(2 周)
✅ 表现层 Mod 可发布,恶意 Mod 被拦截
验收指标:配置校验拦截率 100%(无越界配置进入对局);热加载失败自动回滚 < 1s;Mod 沙箱崩溃不影响房间进程。
9. 相关原型衔接
- 复用#3 井字棋/四子棋的房间生命周期 → 扩展为模板化自定义房间
- 与#20 社交大厅联动:大厅里展示玩家自定义房间
- 与#29 UGC 内容创作与分享共用审核管线:Mod 是 UGC 的一种
扩展篇定位:自定义房间是「玩法的再生产」。它把对局的编排权交给玩家,配合观战回放让自定义玩法也能被传播——玩家生态由此生长。
延伸阅读
- 「在线联机原型全集」目录(60 个原型全景) — 原型全景索引
- 观战与回放系统 — 自定义玩法可传播(扩展篇之一)
- 「在线联机原型全集」第三章:异步与平台化层(#21–#30) — UGC 与大厅相关
- [[products]] — 产品原型开发专题
- [[game]] — 游戏内容生态与 UGC 实战
下一扩展篇:赛季与段位系统。自定义房间扩展「玩法」,赛季段位让「玩法有长期目标」。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。