把本地测试攒下的能力,一件件搬进开源版——狩猎模拟插件移植记录
本作是《卫戍协议:盟约》的非官方同人复刻,这个 2V2 衍生版叫「狩猎模拟」:对抗期 → 悬赏期(给对面派猎物、击杀得赏金)。 版本
V0.0.1-0.2.6(基于上游 0.2.6)。 这是这个衍生版的第五篇:第一篇讲设计,第二篇讲对抗期跑通,第三篇是可玩测试记录,第四篇讲「合作与竞争」为什么改名成「狩猎模拟」;这一篇讲工程——我们怎么把本地测试环境里积累的扩展插件,成体系地搬进开源仓库。
一、先说清楚现在是哪两个东西
同一台开发机上并行跑着两个本地测试实例:
- 盟约(上游本体 + 一堆本地扩展):本机 3000 端口;
- 狩猎模拟 2V2(我们这个 fork):跑在另一个实例上,只监听本机回环地址,不对外提供服务。
以前这个端口在机器上被登记为「保留端口(旧测试实例已退役)」。这次我们把它正式划给狩猎模拟的本地实例,并且立了一条规矩:
测试实例里的一切(本地插件、账号密钥、本地数据、对局记录)都不上 GitHub;GitHub 只从本地推,而且每次推之前都要过一遍"个人信息 / 机密"体检。
开源仓库里永远只有代码——连游戏素材都不在里面。
二、为什么要"移植插件"?
狩猎模拟是从盟约派生出来的,但盟约这个本地版本断断续续联机测试了几个月,攒下了不少真正有用的本地补丁。它们是让一个"能跑"的复刻版变成"好用"的东西:过场延迟、本地房间匹配、局内聊天、违禁词过滤、对局记录、房间查询接口、全局通知……
这些能力我们不该重新发明,但也不能直接抄脚本:fork 的代码已经和盟约分叉很远(我们改了协议、房间逻辑、主界面……),所以只能逐条手工适配。做法是:
- 把测试环境里的整套「本地扩展」镜像进开发目录(只在本地用,永不进仓库);
- 逐条拆成移植简报(作用 / 改了哪些文件 / 关键实现 / 依赖 / 难点 / 建议批次);
- 按批次做:每批都要"本地护栏全绿 → 本地插件预校验 → 同步到测试实例 → 在测试实例上再验一遍",跑通才提交。
三、已经搬完的三批
第 1 批(小、独立)
| 补丁 | 做了什么 |
|---|---|
latency |
回合间的固定过场停顿从 2000ms 降到 1000ms,并把这几个延迟全改成可用环境变量覆盖。顺带更新了"黄金结果"——这次差异只有总虚拟时长,玩法状态一个字节没动,我们在提交信息里点名了这一点。 |
wsdirect |
从本地静态服务打开的页面,把游戏 WebSocket 指回本机进程,省掉"浏览器 → 本地代理 → 游戏进程"那一跳(实测约 +40ms)。 |
matchmake |
本地房间匹配:房主在本地测试实例里一键开放房间,其他人从房间列表加入同难度、未开局、有空座的房(人多优先 → 占座多 → 等最久)。我们的 2V2 房也支持,单人房不行。 |
第 2 批(玩家能直接摸到的)
| 补丁 | 做了什么 |
|---|---|
chat |
局内文字聊天:左下角输入框、Enter 发送、2 秒冷却、80 字上限、服务端清洗截断。 |
chatlog |
聊天增强:常驻展开 / 未读红点 / 违禁词过滤(服务端权威) / 每局对局记录落盘 / 7 天自动清理。 |
| 本地回环接口 | GET /api/rooms(供本地脚本查询)、POST /api/rooms/reap(清死房)、POST /api/notify(全局通知横幅)。三个都只允许本机访问,带任何转发头或非同机来源一律 404——房间码是进房钥匙,不能暴露在公网。 |
其中最有意思的一处是对局记录:两个游戏、同一套记录格式,靠一个环境变量区分——狩猎那边写 游戏:狩猎,盟约那边写 游戏:盟约。盟约这边历史上 1325 份本地记录我们全部补写了标识(先备份整目录,重启测试实例前还给当时开着的测试会话发了一次提醒)。
第 3 批(体感与性能)
| 补丁 | 做了什么 |
|---|---|
[NOTICE] 横幅 |
全局通知的玩家侧 UI:顶部横幅、20 秒自清、点 × 关闭;与连接提示、toast 三者纵向避让,不打架。 |
[DAMAGEBOARD] + [HEALSRC] |
局内伤害/治疗统计板,以及一条实质修正:回血按来源速率归到提供者(吟游者、调香者这类"给别人回血"的单位,奶量记在它自己头上)。这条改动只影响统计口径——黄金结果里只有 .heal 数值变化,血量与伤害分毫未动。 |
[UNITMODELS] + [PREFETCH] |
角色模型可关(弱卡机器默认不加载模型,退回头像菱形),接到我们已有的「按 GPU 自动降档」同一套机制上;再加干员资源预取,消除"开战第一帧才去加载资源"。 |
四、两个实例怎么共用部署文件
狩猎模拟的本地实例跑起来要用到的资源文件,由使用者自备合法来源,仓库与本站都不提供。两个实例共用同一套本地部署环境,为了避免重复存放和占空间,部署目录里已有的文件直接复用:
- 按实际引用的路径核对差集;
- 部署时复用同一份文件,零额外磁盘、零重复拷贝;
- 资源文件由使用者自行准备,不随仓库分发。
五、把"改完就能玩"这条链路接起来
移植最容易烂尾的地方是改了开发目录、忘了测试实例。这次顺手把部署也做成了工具:
- 增量同步:只同步改动的文件,游戏进程侧代码变了才重启实例(纯前端改动不重启、不中断对局);
- 实时模式:开发目录一改,1.5 秒后自动同步到本地测试实例;
- 全量重部署:一条命令重铺代码 + 服务单元。
再加上"推送前的机密体检"和"测试实例的私有内容不出本机"的边界——开源版永远只有代码。
六、还没搬的(以及为什么)
- 账号体系(本地账号库 + 存档同步 + 传输加密):这是总前置——成就徽章、头像、好友、多端接管都挂在它上面。口径已定:两个实例共用同一套格式与同一份本地账号数据(同一批字段、同一套加密派生、账号库共享、原子写 + 每账号锁,私钥只在本机),这样同一个账号在两个游戏里的数据是通的。
- 本地部署体验:反向代理、连接诊断、静态缓存。
- 更细的体感:队友概览、棋盘样式档位等。
七、今天到这里
- 已完成并推送:插件移植第 1–3 批(含测试与黄金结果更新)、三份维护手册(本地开发环境 / 盟约实例 / 狩猎实例)、部署与同步工具链、以及上面那条安全边界;
- 下一个大件:账号体系(同步 + 格式兼容)。
非官方、非商业同人项目,与鹰角网络无关;游戏素材版权归原公司所有,本仓库不含任何游戏素材;本站与仓库均不托管、不对外提供任何游戏联机服务,代码仅供使用者在本地自行部署。文中所述联机、匹配、广播与存档均指本机或局域网内的测试环境,不涉及对外运营的服务器。
