Files

59 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 发布版开发文档
更新: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:
```powershell
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。
测试通过不替代所有地图/剧情的实机验收。真实游戏核对需单独说明范围;用户正在游玩时不为测试移动角色、读档或回放。