暮色太阳花の宝藏之地
首页项目归档照片墙灵境关于
封面

把本地测试攒下的能力,一件件搬进开源版——狩猎模拟插件移植记录

写作时间:2026-10-17 02:56:00
# 卫戍协议
# 明日方舟
# 游戏开发
# 开发
# 二次开发
# 狩猎模拟

把本地测试攒下的能力,一件件搬进开源版——狩猎模拟插件移植记录

本作是《卫戍协议:盟约》的非官方同人复刻,这个 2V2 衍生版叫「狩猎模拟」:对抗期 → 悬赏期(给对面派猎物、击杀得赏金)。 版本 V0.0.1-0.2.6(基于上游 0.2.6)。 这是这个衍生版的第五篇:第一篇讲设计,第二篇讲对抗期跑通,第三篇是可玩测试记录,第四篇讲「合作与竞争」为什么改名成「狩猎模拟」;这一篇讲工程——我们怎么把本地测试环境里积累的扩展插件,成体系地搬进开源仓库。


一、先说清楚现在是哪两个东西

同一台开发机上并行跑着两个本地测试实例:

  • 盟约(上游本体 + 一堆本地扩展):本机 3000 端口;
  • 狩猎模拟 2V2(我们这个 fork):跑在另一个实例上,只监听本机回环地址,不对外提供服务。

以前这个端口在机器上被登记为「保留端口(旧测试实例已退役)」。这次我们把它正式划给狩猎模拟的本地实例,并且立了一条规矩:

测试实例里的一切(本地插件、账号密钥、本地数据、对局记录)都不上 GitHub;GitHub 只从本地推,而且每次推之前都要过一遍"个人信息 / 机密"体检。

开源仓库里永远只有代码——连游戏素材都不在里面。

二、为什么要"移植插件"?

狩猎模拟是从盟约派生出来的,但盟约这个本地版本断断续续联机测试了几个月,攒下了不少真正有用的本地补丁。它们是让一个"能跑"的复刻版变成"好用"的东西:过场延迟、本地房间匹配、局内聊天、违禁词过滤、对局记录、房间查询接口、全局通知……

这些能力我们不该重新发明,但也不能直接抄脚本:fork 的代码已经和盟约分叉很远(我们改了协议、房间逻辑、主界面……),所以只能逐条手工适配。做法是:

  1. 把测试环境里的整套「本地扩展」镜像进开发目录(只在本地用,永不进仓库);
  2. 逐条拆成移植简报(作用 / 改了哪些文件 / 关键实现 / 依赖 / 难点 / 建议批次);
  3. 按批次做:每批都要"本地护栏全绿 → 本地插件预校验 → 同步到测试实例 → 在测试实例上再验一遍",跑通才提交。

三、已经搬完的三批

第 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. 按实际引用的路径核对差集;
  2. 部署时复用同一份文件,零额外磁盘、零重复拷贝;
  3. 资源文件由使用者自行准备,不随仓库分发。

五、把"改完就能玩"这条链路接起来

移植最容易烂尾的地方是改了开发目录、忘了测试实例。这次顺手把部署也做成了工具:

  • 增量同步:只同步改动的文件,游戏进程侧代码变了才重启实例(纯前端改动不重启、不中断对局);
  • 实时模式:开发目录一改,1.5 秒后自动同步到本地测试实例;
  • 全量重部署:一条命令重铺代码 + 服务单元。

再加上"推送前的机密体检"和"测试实例的私有内容不出本机"的边界——开源版永远只有代码。

六、还没搬的(以及为什么)

  1. 账号体系(本地账号库 + 存档同步 + 传输加密):这是总前置——成就徽章、头像、好友、多端接管都挂在它上面。口径已定:两个实例共用同一套格式与同一份本地账号数据(同一批字段、同一套加密派生、账号库共享、原子写 + 每账号锁,私钥只在本机),这样同一个账号在两个游戏里的数据是通的。
  2. 本地部署体验:反向代理、连接诊断、静态缓存。
  3. 更细的体感:队友概览、棋盘样式档位等。

七、今天到这里

  • 已完成并推送:插件移植第 1–3 批(含测试与黄金结果更新)、三份维护手册(本地开发环境 / 盟约实例 / 狩猎实例)、部署与同步工具链、以及上面那条安全边界;
  • 下一个大件:账号体系(同步 + 格式兼容)。

非官方、非商业同人项目,与鹰角网络无关;游戏素材版权归原公司所有,本仓库不含任何游戏素材;本站与仓库均不托管、不对外提供任何游戏联机服务,代码仅供使用者在本地自行部署。文中所述联机、匹配、广播与存档均指本机或局域网内的测试环境,不涉及对外运营的服务器。

avatar

涂涂小弟

暮色太阳花的开发日志与日常分享 —— 涂涂小弟(t_yh) 的个人站,记录代码、生活与那些发光的小事。

RECOMMENDED

从播放器到音频终端:音乐页这一轮返工记录

2026-10-27 02:55:00

《卫戍协议:狩猎模拟》V0.0.4 发布——事件期加了一格 boss,狩猎轮改成 7 类抽 4 类

2026-10-21 23:54:54

《卫戍协议:狩猎模拟》V0.0.3 发布——2V2 机变改成「双方 4 选 2」,还有一批手机端体验修复

2026-10-18 19:00:00

Table of Contents

© 2026 暮色太阳花的开发日志与日常分享 · 涂涂小弟

蜀ICP备2026066824号

联系·版权与免责·隐私政策