feat: 新增出站包抓取,供「走不动」逐包对照(TODO 假设 5)
线上实测确认手动执行器(1.7.0 备选方案)不能解决「走不动」:前 20 秒走 13 格后 即卡在「执行中断(stuck)→重规划→缩短段长→跳过目标→重新规划同一目标」的死循环。 只靠 packetStats.outboundTypes 的计数看不出「发出去的内容对不对」,所以补一个 能录原始出站序列、并能在「能走」与「走不动」两种状态下 diff 的诊断能力。 新增 src/core/packetCapture.js: - 只在录制期间挂钩 client.write,其余时间零开销(该钩子每个出站包都要过一遍); - 录到的内容做降深 + 截断的 JSON 化处理,向量对象只留坐标 (move_minecart 这类包能带上万个浮点数,不处理会把缓冲区撑爆); - 只放内存、有上限(默认 4000 包),不写盘。 接口(控制台): - POST /api/bots/:id/capture/start(可带 seconds 到点自动停止) - POST /api/bots/:id/capture/stop - GET /api/bots/:id/capture(支持 ?types= 与 ?limit=) 顺带修掉两个先前就存在的问题: - scripts/check-protocol.js 其实一直跑不通:minecraft-data 的 types.packet[1][1].type[1].fields[包名] 给的是类型名字符串, 要再去 types[名字] 取 ['container', [字段...]] 才能展开,原实现直接 .map() 必然抛错; 另有读 node_modules 少一层 '..' 的路径问题。 - 两条租约用例(expansionController / targetLease)的时序余量只有 15ms, 全量并行跑测试时偶发失败;改为 TTL 400ms 配 280ms 睡眠,各留 120ms 余量, 断言内容不变。 测试:436 → 451 个用例,连续 16 轮全量运行全绿。
这个提交包含在:
@@ -322,6 +322,23 @@ grep '被服务器传送另有' /opt/autostore-bot/data/pm2-error.log | tail -5
|
||||
|
||||
# 多机器人协调:谁在占哪块(日志)
|
||||
grep '已被其他机器人预定' /opt/autostore-bot/data/pm2-out.log | tail -10
|
||||
|
||||
# 抓出站包(诊断「走不动」的主力工具,见问题 1 · 假设 5):
|
||||
# 先在「能走」时抓 5 秒,再在「走不动」时抓 5 秒,然后逐包 diff
|
||||
BOT=<机器人id>
|
||||
curl -s -X POST -H "X-Auth-Token: $PW" -H 'Content-Type: application/json' \
|
||||
-d '{"seconds":5}' http://103.236.99.177:78/api/bots/$BOT/capture/start
|
||||
# 取包类型分布(先看「发了哪几种、各多少次」)
|
||||
curl -s -H "X-Auth-Token: $PW" http://103.236.99.177:78/api/bots/$BOT/capture | jq '.data.byType'
|
||||
# 只取移动相关的原始包内容(看 onGround / hasHorizontalCollision / player_input 位标志 / teleportId)
|
||||
curl -s -H "X-Auth-Token: $PW" \
|
||||
'http://103.236.99.177:78/api/bots/$BOT/capture?types=position_look,look,position,flying,player_input,teleport_confirm&limit=60' \
|
||||
| jq '.data.packets'
|
||||
# 手动停止(给 seconds 时可省略)
|
||||
curl -s -X POST -H "X-Auth-Token: $PW" http://103.236.99.177:78/api/bots/$BOT/capture/stop
|
||||
|
||||
# 协议字段定义自检(核对 mineflayer 写出的字段名与 1.21.4 是否一致)
|
||||
node scripts/check-protocol.js
|
||||
```
|
||||
|
||||
### 判断「机器人是不是卡在登录服」
|
||||
|
||||
在新工单中引用
屏蔽一个用户