多机器人(src/bot/botPool.js、src/config/botsConfig.js) - .env 用 MC_BOTS 一次配置多个账号(JSON 数组或 用户名:密码 逗号分隔),未配置时回退单机器人 - 每个机器人独立连接 / 登录 / 扩地状态机,共享一份领土数据服务与运行日志 - 密码只从 .env 读取;data/bots.json 只存启用状态、备注名、自动开始与各自的配置覆盖 - 每个机器人可覆盖全局配置(策略 / 目标邦国 / 目标数量等),未覆盖字段回退全局默认 开拓日志(src/core/expansionLog.js) - 逐条记录开拓玩家、邦国、区块、方块坐标、时间与判定来源,追加写入 data/expansion-log.jsonl - 支持按机器人 / 邦国 / 时间筛选、统计、导出带 BOM 的 CSV,超过 16MB 自动轮转 游戏公屏完整日志与聊天框(src/core/chatLog.js) - 每个机器人的全部公屏 / 系统 / 动作栏消息按机器人分文件留档,自身发出的聊天与指令同样留档 - 控制台新增公屏聊天页签与消息发送框 登录验证门禁 - 游戏侧:未完成登录验证时拒绝发送指令 / 聊天,isReady() 也不放行扩地任务; 新增 server.loginConfirmTimeoutMs 兜底,避免服务器不回提示导致永远卡在未登录 - 控制台侧:新增 WEB_PASSWORD 与 /api/login、/api/session,页面登录框验证通过才允许操作 大地图(src/core/bigMapService.js) - 爬取服务器地图站点(squaremap)的瓦片图片与领土标记,一张图上看全部机器人坐标 - 坐标系对源站实测标定并用 27 个王城交叉验证;瓦片磁盘缓存,层级 0 启动预爬取、更高层级按需穿透 - 领土按 markers.json 原始多边形绘制(预编译 Path2D,even-odd 保留孔洞),叠加王城与机器人标签 配套改造 - TerritoryModel 新增 flyingChunksOf / ownChunksOf,邦国归属改为按名称显式传入, 不再依赖全局 selfStateName(多机器人会互相覆盖) - Web 接口以 /api/bots/:id/... 为主,原单机器人接口保留为默认机器人的等价别名 - 新增 scripts/check-web-ids.js 校验前端元素引用一致性 测试从 154 增至 242,全部通过。
116 行
8.4 KiB
Markdown
116 行
8.4 KiB
Markdown
# 更新日志
|
||
|
||
本项目遵循 [约定式提交](https://www.conventionalcommits.org/zh-hans/) 与 [语义化版本](https://semver.org/lang/zh-CN/)。
|
||
|
||
## [1.1.0] - 2026-09-27
|
||
|
||
新增多机器人挂机、开拓日志、游戏公屏完整日志与大地图。
|
||
|
||
### 新增
|
||
|
||
- **多机器人同时挂机**(`src/bot/botPool.js`、`src/config/botsConfig.js`)
|
||
- `.env` 里用 `MC_BOTS` 一次配置多个账号(支持 JSON 数组与 `用户名:密码` 逗号分隔两种写法),
|
||
未配置时回退到 `MC_USERNAME` / `MC_PASSWORD` 单机器人模式
|
||
- 每个机器人独立连接、独立登录、独立跑扩地状态机;共享同一份领土数据服务与运行日志
|
||
- **密码只从 `.env` 读取**:`data/bots.json` 只存启用状态、备注名、是否自动开始与各自的配置覆盖
|
||
- 每个机器人可有自己的扩地配置覆盖(策略、目标邦国、目标数量等),未覆盖字段回退全局默认
|
||
- 控制台新增机器人列表(连接状态 / 坐标 / 任务 / 已开拓数)、机器人切换、全部开始 / 全部停止
|
||
- **开拓日志**(`src/core/expansionLog.js`)
|
||
- 逐条记录**开拓玩家、邦国、区块、方块坐标、时间、判定来源**,追加写入 `data/expansion-log.jsonl`
|
||
- 支持按机器人 / 邦国 / 时间筛选、按机器人统计与今日计数、导出带 BOM 的 CSV
|
||
- 文件超过 16MB 自动轮转为 `.1`;进程被杀留下的半行在重启时被安全跳过
|
||
- 控制台新增「开拓日志」表格页签,支持筛选、清屏、导出
|
||
- **游戏公屏完整日志 + 聊天框**(`src/core/chatLog.js`)
|
||
- 每个机器人收到的**全部**公屏 / 系统 / 动作栏消息按机器人分文件落盘(`data/chat/<机器人>.jsonl`)
|
||
- 本机器人发出的聊天与指令同样留档,可对照「指令发出后服务器回了什么」
|
||
- 控制台新增「公屏聊天」页签(可按机器人或全部机器人查看、关键字筛选、导出)与公屏消息发送框
|
||
- **登录验证门禁**
|
||
- 游戏侧:未完成服务器登录验证时拒绝发送指令 / 聊天,且 `isReady()` 不放行扩地任务;
|
||
新增登录结果确认兜底(`server.loginConfirmTimeoutMs`),避免服务器不回提示导致机器人永远卡在未登录
|
||
- 控制台侧:新增 `WEB_PASSWORD` 与 `/api/login`、`/api/session`,页面弹出登录框,
|
||
验证通过后才允许操作各机器人的控制台、聊天框与扩地任务
|
||
- **大地图**(`src/core/bigMapService.js`)
|
||
- 爬取服务器地图站点(squaremap)的瓦片图片与领土标记,拼在一张图上查看**所有机器人的坐标**
|
||
- 坐标系已对源站实测标定:瓦片 512×512,层级 0 每张覆盖 4096 方块,层级 3 为 1 方块 1 像素
|
||
(用 27 个王城坐标交叉验证:正确公式下王城所在瓦片平均海洋占比 28.7%,
|
||
错误假设为 41.6% / 47.3% / 76.0%)
|
||
- 瓦片磁盘缓存 `data/mapcache/`,默认启动时预爬取层级 0(全世界 10×10=100 张),
|
||
更高层级按需穿透拉取并永久缓存;`/api/bigmap/tile/:z/:x/:y` 代理避免跨域
|
||
- 领土以 markers.json 的原始多边形绘制(预编译为 `Path2D`),叠加本次会话新占领区块、
|
||
王城与全部机器人坐标;支持滚轮缩放、拖拽平移、全世界 / 回到机器人一键定位
|
||
- **测试从 154 个增加到 242 个**:新增开拓日志、公屏日志、大地图坐标系与缓存、
|
||
机器人池与配置隔离、凭据解析、机器人登录门禁、多机器人 Web 接口与登录鉴权等用例
|
||
|
||
### 变更
|
||
|
||
- `TerritoryModel` 新增 `flyingChunksOf()` / `ownChunksOf()`,邦国归属改为**按名称显式传入**,
|
||
不再依赖全局 `selfStateName`(多机器人会互相覆盖);同时保留 markers.json 的原始多边形
|
||
- `ExpansionPlanner` 的己方邦国解析顺序改为「配置里的 `stateName` → 模型全局 `selfStateName`」
|
||
- 运行日志统一加机器人名前缀(`[游戏名] …`),多机器人共用一份日志也能分清来源
|
||
- Web 接口改为以 `/api/bots/:id/...` 为主,原有单机器人接口(`/api/task/*`、`/api/command`、
|
||
`/api/bot/reconnect`)保留为默认机器人的等价别名
|
||
- `/api/map` 支持 `?bot=<id>` 按机器人视角返回其邦国、目标与玩家区块
|
||
|
||
### 修复
|
||
|
||
- 修正控制台地图瓦片 URL 与后端路由不一致的问题(前端请求 `/api/bigmap/tile/:z/:x_y.png`,
|
||
后端路由为 `/api/bigmap/tile/:z/:x/:y.png`)
|
||
|
||
### 已知限制
|
||
|
||
- **多个机器人共享一份领土模型**:`markers.json` 是全服数据,没必要每个机器人各拉一遍;
|
||
因此「会话新占领」区块是全局共享的,控制台地图的己方邦国显示的是最近启动的那个机器人的邦国
|
||
- **大地图层级 3 不预爬取**:全图 80×80=6400 张瓦片约 200MB,改为按需拉取 + 永久缓存
|
||
|
||
## [1.0.0] - 2026-02-14
|
||
|
||
由 Fabric 客户端模组 AutoStore v1.3.1 重构为 Node.js + mineflayer 机器人,UI 改为网页控制台,
|
||
并新增 Grim 反作弊合规层。
|
||
|
||
### 新增
|
||
|
||
- **Grim 反作弊合规层**(`src/bot/grimCompat.js`)
|
||
- 旋转不超前:接管 `bot.look`,把朝向按 ≤ 8.6°/tick 逐步推进,保证本地朝向与服务端已收到的朝向一致,
|
||
消除 mineflayer「本地朝向瞬间跳变、数据包滞后补发」导致的 Prediction 分歧
|
||
- 攻击三重校验:朝向已同步 + 距离 ≤ 3.0 格 + 视线可达 + 攻击冷却 + 非骑乘/进食状态
|
||
- 动作互斥:拦下疾跑+潜行、疾跑+使用物品等原版不可能出现的组合(MultiActions)
|
||
- 物理参数只读自检:核对 `bot.physics` 关键常量、`physicsEnabled`、游戏模式、鞘翅状态
|
||
- 寻路约束:默认禁止挖方块 / 放方块 / 跑酷 / 1×1 搭塔,限制最大下落高度,推高液体代价优先绕开水域
|
||
- **网页控制台**(`src/web/`)
|
||
- 实时状态面板(连接 / 任务状态机 / 领土数据源 / Grim 合规)
|
||
- Canvas 领土地图:滚轮缩放、拖拽平移、图层开关、回到玩家、全图适配
|
||
- 7 个分组的配置表单,保存即生效
|
||
- 实时日志流、日志导出、手动指令发送
|
||
- REST + WebSocket 接口,支持 `WEB_TOKEN` 令牌鉴权(定时安全比较)
|
||
- **SimpCore 开放 API 第四数据源**:低频轮询己方邦国领土明细 + 王城兜底,支持手动拉取全服领土
|
||
- **开垦时段可配置**:`enforceClaimTime` / `claimStartHour` / `claimEndHour`(原版硬编码 11:00-22:00)
|
||
- **战斗筛选可配置**:`combat` 分组(索敌半径、末影人 / 蜘蛛 / 猪灵开关、高危生物跳过)
|
||
- **断线自动重连**与登录 / 注册指令模板(密码从 `.env` 读取,支持 `{password}` 占位符)
|
||
- **154 个测试用例**,覆盖坐标编解码、领土模型、规划器、数据解析、合规层、状态机、Web 接口
|
||
|
||
### 变更
|
||
|
||
- 寻路引擎从 Baritone 换成 mineflayer-pathfinder;高度偏好(`GoalXZAltitude`)用包装 Goal 的
|
||
`heuristic = max(0, base - weight × y)` 等价移植
|
||
- 区块坐标内部表示从对象改为整数键(`x × 2^26 + z`),避免数万区块产生海量临时对象
|
||
- 扩地状态机、规划策略、超时重试与回城逻辑与原版逐行对照移植,行为保持一致
|
||
|
||
### 修复
|
||
|
||
- 修正 `containsFuzzy` 的模糊匹配:原实现只取固定长度前缀的末行编辑距离,
|
||
导致 `containsFuzzy('开垦中 50%', '开垦中', 0)` 返回 `false`(完全相同的子串都匹配不上)。
|
||
现按注释语义改为「存在编辑距离 ≤ maxEdits 的子串」
|
||
- 修正占领去重:原实现依赖 `Set.add` 的返回值判断重复,而 JS 的 `Set.add` 恒返回 Set 对象,
|
||
会导致同一区块被重复计数
|
||
- 修正非法枚举值的处理:策略等枚举字段不再「钳制到最近边界」(把非法的 99 静默变成策略 4),
|
||
而是回退到默认值
|
||
|
||
### 已知限制
|
||
|
||
- **自动用船默认关闭**:mineflayer 使用的 prismarine-physics 没有载具物理,上船后本地物理预测被关闭,
|
||
位置完全由服务端下发的船实体位置决定,Grim 的 Vehicle 检查风险高。
|
||
用船逻辑已完整实现,需显式开启 `waterMode: 'boat'` + `autoBoat: true`
|
||
- **末影人与蜘蛛默认不打**:mineflayer 拿不到可靠的「是否被激怒」与「环境亮度」信息,
|
||
宁可漏打也不误打;可用 `combat.attackEnderman` / `combat.attackSpiders` 放开
|
||
- **监守者 / 末影龙 / 凋灵默认跳过**:原版会攻击它们,但那基本等于自杀
|