fix: 修正原点(00)两种原因的判断依据 —— 两种情况下脚下都是基岩
用户指出:死亡被卡到 00 时脚下**也是基岩**,所以原来用 lockBelow === 'bedrock' 区分「登录服」和「死亡卡住」是错的, 会把死亡卡住误判成登录服,于是不做自救、只让用户去输验证码。 改成以「服务器有没有要求输入验证码」为唯一可靠信号: - 要求验证码 -> 判定为登录服,提示人工发验证码(不做无意义的左右移动) - 没要求验证码 -> 判定为死亡卡住,自动左右移动触发服务器重新传送 自救本身在两种情况下都无害(在登录服里按左右键不会有后果), 所以即使判断错了也不会把事情弄得更糟。 另外:验证码提示往往比 spawn 晚到,所以 _handleAuthPrompt 里也补了一次判断 —— 若提示到达时机器人正好在原点附近,会明确点出「被反复传送刷屏」正是登录服造成的, 把这个因果关系讲清楚,避免用户只看到传送刷屏而不知原因。 同步修正 TODO.md 与 CHANGELOG 里那条错误结论,并标注「不要用基岩做判断依据」。 测试 363 -> 368,全部通过。
这个提交包含在:
@@ -150,10 +150,15 @@ diff 出差异。这是最彻底也最费时的办法,但能一次性定位问
|
||||
服务器把玩家丢到世界原点附近有两种完全不同的原因,**以前在日志里长得一样**,
|
||||
经常被误判成「机器人坏了」:
|
||||
|
||||
| 原因 | 特征 | 处理方式 | 现状 |
|
||||
| 原因 | 判断依据 | 处理方式 | 现状 |
|
||||
| --- | --- | --- | --- |
|
||||
| 死亡后被卡住 | 脚下不是基岩,坐标靠近原点但地形正常 | **左右移动即可触发服务器重新传送**,可自动自救 | ✅ 已实现 `BotManager._escapeFromOrigin()` |
|
||||
| 被切到登录服 | 脚下是 **bedrock**、四周虚空、坐标极小(如 `(-2,-2,-4)`) | **必须重新输入验证码**,只能人工完成 | ✅ 已识别并提示,控制台有醒目横幅 |
|
||||
| 死亡后被卡住 | **服务器没有要求验证码** | **左右移动即可触发服务器重新传送**,可自动自救 | ✅ `BotManager._escapeFromOrigin()` |
|
||||
| 被切到登录服 | **服务器要求输入验证码** | **必须重新输入验证码**,只能人工完成 | ✅ 已识别并提示,控制台有醒目横幅 |
|
||||
|
||||
> ⚠️ **不要用「脚下是不是基岩」来区分这两种情况 —— 实测两种情况下脚下都是基岩。**
|
||||
> 唯一可靠的信号是**服务器有没有发「请直接输入验证码进行验证」这类提示**。
|
||||
> 代码里以 `_needAuthWarned` 为准;没要求验证码就按「死亡卡住」处理并尝试自救
|
||||
> (自救在两种情况下都是无害的,所以判断错了也不会把事情弄得更糟)。
|
||||
|
||||
**待完善**:自救的成功率没有统计。可以记录「自救后位置是否恢复」,
|
||||
失败时再升级为提示用户;也可以尝试更多方向组合(前/后/跳)。
|
||||
@@ -234,10 +239,11 @@ grep '被服务器传送另有' /opt/autostore-bot/data/pm2-error.log | tail -5
|
||||
|
||||
```bash
|
||||
curl -s -H "X-Auth-Token: $PW" http://103.236.99.177:78/api/status \
|
||||
| jq '.data.bots[0] | {position, chunk, below: .world.blockBelow, needsVerification}'
|
||||
| jq '.data.bots[0] | {position, chunk, needsVerification}'
|
||||
```
|
||||
- `world.blockBelow == "bedrock"` 且坐标很小 → **在登录服**,需要人工发验证码
|
||||
- `needsVerification == true` → 服务器正在等待验证码,控制台会显示醒目提示
|
||||
- `needsVerification == true` → 服务器正在等待验证码,控制台会显示醒目提示(**这是可靠信号**)
|
||||
- 位置靠近原点且 `needsVerification == false` → 多半是死亡后卡住,机器人会自动左右移动自救
|
||||
- ⚠️ `world.blockBelow == "bedrock"` **不能**用来判断 —— 实测死亡卡住和登录服两种情况脚下都是基岩
|
||||
|
||||
---
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户