5.4 KiB
发布版开发文档
更新:2026-10-24。运行要求为 Windows、Node.js 22+ 和用户另行安装的 NW.js SDK 0.64.1,无 npm 依赖。
运行结构与配置
launcher.js 校验目录、端口和实例身份,备份存档,再按用户选择启动游戏和面板。server.js 仅监听本机回环地址;lib/cdp.js 通过 Chrome DevTools Protocol(浏览器调试协议)执行 lib/ops.js 生成的游戏脚本。静态网页位于 web。
默认将整个工具目录放在游戏目录内;原版目录为工具目录的上级,调试端口 9223、面板端口 8787,副本位于同盘根目录 Nyaruru_shots。配置缺省时无需创建 config.json。独立布局请复制 config.example.json 为同目录 config.json,修改示例中的 gameDir 和 sandboxDir 为实际绝对路径。gameDir 需含 package.json 和 index.html;原版和副本目录不能相同或互相包含。JSON 中 Windows 路径的反斜杠需写成双反斜杠,也可使用正斜杠。
gameDir 在服务启动时确定;修改它后重启面板。调试端口变更会关闭旧连接并清空地图/台词缓存。面板端口变更需重启。不要提交 config.json 或 .server-runtime.json。
运行时数据约定(C 方案)
随包只含既有 out/triggers.csv、unpacked/data/System.json 和 MapInfos.json 结构索引。lib/data.js 不读取完整剧本,不把台词写入触发点。
OPS.readStoryIndex() 从当前游戏 $dataStory 和 $dataActors 生成首句、说话人、全文及检索文本,忽略指令和备注。StoryCache 仅持有内存对象,以端口、连接代次和会话标识区分实例;并发读取复用同一个请求。最多自动尝试四次,间隔至少三秒;手动重新读取可重置重试次数。断线、端口变化、换实例和重连使旧结果失效;旧请求迟到不能覆盖新连接结果。
服务端 /api/status 发起自动读取;/api/story-text 提供状态及主动重读;/api/events 和 /api/triggers 合并当前连接的内存台词。前端显示载入/错误提示,断线清空旧台词和事件列表,并用请求编号拒绝过期返回。不得改成读取本机 story.json 或把响应保存到仓库。
百科读取 DataManager._cacheMapData,地图读取 _thumbnailMapCell,图标调用原游戏图标组件并在内存 canvas 裁切为 Data URL。三个模块均从当前用户游戏读取,不要求随包放置原始地图或贴图。金币使用工具自身的 SVG(可缩放矢量图)图标。
功能模块与边界
| 模块 | 职责与关键约定 |
|---|---|
| motion | 悬停 v5、连续点跳、下降、技能位移、碰撞及原版出口;读档和失联清理,普通换图保留 |
| trainer / item-icons | 当前操作角色的数值、锁定、背包、装备、铃铛和缩略图;批量先校验,失败回退 |
| combat | 在有效攻击命中链路应用倍率/秒杀,保留免疫与治疗;不永久修改基础攻击力 |
| encyclopedia / world-map | 收集来源与世界分块,只读探索记录;拥有、已收集、未知分别处理 |
| catalog-position | 检查角色整个身体与危险地形,优先分块边缘,受阻时扩展同图搜索;载入后复查 |
| photo-state / story-position | 临时摆拍、单帧裁切、角色贴地/面向、剧情站位;撤销恢复原字段及方法 |
| files / safety / processes | 路径隔离、备份校验、原存档目录保留、实例/进程检查 |
读写请求携带连接与地图上下文;服务端串行执行修改操作,在实际调用前重新核对身份。菜单中可管理背包、查看百科/地图和调整战斗倍率;移动和剧情操作必须回地图。
传送同步游戏逻辑和物理坐标,不直接乱改 _x/_y。百科/地图到达后悬停并恢复碰撞,不主动领取物品。跨图失败尝试返回原位置,但仍需核对提示和实际画面。
发布功能范围
发布版不提供快照与 TAS:不含对应页面、事件绑定、轮询、API、模块或打包依赖。常规存档备份/还原保留;/api/snapshot 只是顶部实时状态读取,与已移除的多槽记录功能无关。不要把它一并删除。
验证与发布
在仓库根目录使用 PowerShell 7:
node --test tool/tests/*.test.js
Get-ChildItem -LiteralPath tool -Recurse -Filter *.js | ForEach-Object { node --check $_.FullName; if ($LASTEXITCODE -ne 0) { throw "语法检查失败" } }
node tool/package-release.js
Compress-Archive -LiteralPath dist/Nyaruru_modifier -DestinationPath dist/Nyaruru_modifier-public-2026-10-24.zip
打包脚本只复制 发布清单.json 的显式文件,并返回每项大小和 SHA-256。默认输出目录为 dist/Nyaruru_modifier;存在时拒绝覆盖,可传入新输出路径。清单排除 config.json、存档、快照、日志、SDK、完整剧本和原始地图。不要以递归复制工作目录替代该脚本。
源码仓库包含测试;面向玩家的包仅含运行文件、说明与打包清单,省略测试。release.test.js 检查白名单、拒绝敏感条目,并在临时干净目录启动 HTTP 页面,不访问真实游戏。功能测试使用人工对象、公开结构索引及临时存档夹具;不依赖私人原始资料或预先安装 SDK。
测试通过不替代所有地图/剧情的实机验收。真实游戏核对需单独说明范围;用户正在游玩时不为测试移动角色、读档或回放。