Repository navigation
探索困28时莫名退出探索入口,错误回到大地图 #1935
Description
在提问之前...
- 我已经搜索了现有的 issues
- 我在提问题之前至少花费了 5 分钟来思考和准备
- 我已经阅读了文档中的 常见问题(FAQ)
- 这个问题出现了至少三次,不是偶发的
- 我使用 OAS 的 dev 分支
描述你的问题
结束一轮探索后,明明退回了探索入口,突破券也不足,正常应该直接进行下一步探索,但是有时会直接连续返回到地图界面。类似问题已有许多人提出,但目前只有向下滑动主线栏重新进入的相关修改,没有修改异常退出的情况
如何复现
挂探索概率出现,无稳定复现方式
预期行为
No response
相关 Logs
正常继续探索的日志:
───────────────────────────── GENERAL BATTLE START ───────────────────────────── INFO 2026-10-14 15:14:33.728 │ GENERAL BATTLE START INFO 2026-10-14 15:14:33.745 │ Current count: 18 INFO 2026-10-14 15:14:35.381 │ Add stuck record: BATTLE_STATUS_S INFO 2026-10-14 15:14:35.405 │ Start battle process INFO 2026-10-14 15:14:42.797 │ Battle result is win INFO 2026-10-14 15:14:42.831 │ Reconfirm the results of the battle INFO 2026-10-14 15:14:43.099 │ Click (1217, 259) @ GB_WIN INFO 2026-10-14 15:14:44.279 │ Get reward INFO 2026-10-14 15:14:44.579 │ Click ( 801, 638) @ GB_REWARD INFO 2026-10-14 15:14:44.951 │ Click ( 138, 395) @ GB_REWARD_GOLD INFO 2026-10-14 15:14:45.926 │ Boss battle, minions cnt 17 INFO 2026-10-14 15:14:46.992 │ Unknown scene INFO 2026-10-14 15:14:47.015 │ [run_solo] Current scene: UNKNOWN INFO 2026-10-14 15:14:47.300 │ [run_solo] Current scene: MAIN INFO 2026-10-14 15:14:48.225 │ Swipe (1098, 152) -> ( 412, 145) INFO 2026-10-14 15:14:48.817 │ [run_solo] Current scene: MAIN INFO 2026-10-14 15:14:49.442 │ Click ( 540, 457) @ RES_BATTLE_REWARD INFO 2026-10-14 15:14:49.946 │ Click (1027, 259) @ UI_UI_REWARD INFO 2026-10-14 15:14:50.662 │ Get reward success INFO 2026-10-14 15:14:50.935 │ [run_solo] Current scene: MAIN INFO 2026-10-14 15:14:51.566 │ Click ( 617, 396) @ RES_BATTLE_REWARD INFO 2026-10-14 15:14:52.072 │ Click (1066, 320) @ UI_UI_REWARD INFO 2026-10-14 15:14:52.786 │ Get reward success INFO 2026-10-14 15:14:53.067 │ [run_solo] Current scene: MAIN INFO 2026-10-14 15:14:53.968 │ Animation Stable @ RES_SWIPE_END INFO 2026-10-14 15:14:53.990 │ Quit explore INFO 2026-10-14 15:14:55.314 │ [run_solo] Current scene: ENTRANCE INFO 2026-10-14 15:14:55.386 │ [REALM_RAID_NUMBER1 0.037s] [19/30] INFO 2026-10-14 15:14:55.620 │ Click (1143, 621) @ RES_E_EXPLORATION_CLICK INFO 2026-10-14 15:14:58.029 │ [run_solo] Current scene: MAIN INFO 2026-10-14 15:14:59.581 │ Click ( 950, 274) @ RES_NORMAL_BATTLE_BUTTON
异常退出的日志:
───────────────────────────── GENERAL BATTLE START ─────────────────────────────
INFO 2026-10-14 15:18:10.858 │ GENERAL BATTLE START
INFO 2026-10-14 15:18:10.876 │ Current count: 30
INFO 2026-10-14 15:18:12.651 │ Add stuck record: BATTLE_STATUS_S
INFO 2026-10-14 15:18:12.671 │ Start battle process
INFO 2026-10-14 15:18:20.120 │ Battle result is win
INFO 2026-10-14 15:18:20.152 │ Reconfirm the results of the battle
INFO 2026-10-14 15:18:20.425 │ Click (1124, 244) @ GB_WIN
INFO 2026-10-14 15:18:21.602 │ Get reward
INFO 2026-10-14 15:18:21.908 │ Click ( 109, 399) @ GB_REWARD
INFO 2026-10-14 15:18:22.267 │ Click ( 164, 418) @ GB_REWARD_GOLD
INFO 2026-10-14 15:18:23.556 │ Boss battle, minions cnt 29
INFO 2026-10-14 15:18:24.617 │ Unknown scene
INFO 2026-10-14 15:18:24.637 │ [run_solo] Current scene: UNKNOWN
INFO 2026-10-14 15:18:24.942 │ [run_solo] Current scene: MAIN
INFO 2026-10-14 15:18:25.848 │ Swipe (1105, 159) -> ( 410, 149)
INFO 2026-10-14 15:18:26.472 │ [run_solo] Current scene: MAIN
INFO 2026-10-14 15:18:27.446 │ [run_solo] Current scene: MAIN
INFO 2026-10-14 15:18:28.125 │ Click ( 686, 404) @ RES_BATTLE_REWARD
INFO 2026-10-14 15:18:28.676 │ Click (1034, 343) @ UI_UI_REWARD
INFO 2026-10-14 15:18:29.399 │ Get reward success
INFO 2026-10-14 15:18:29.681 │ [run_solo] Current scene: MAIN
INFO 2026-10-14 15:18:30.444 │ Animation Stable @ RES_SWIPE_END
INFO 2026-10-14 15:18:30.461 │ Quit explore
INFO 2026-10-14 15:18:31.384 │ Click ( 25, 48) @ PAGE_BACK_YOLLOW
INFO 2026-10-14 15:18:31.888 │ [run_solo] Current scene: WORLD
INFO 2026-10-14 15:18:32.228 │ [REALM_RAID_NUMBER 0.029s] [23/30]
INFO 2026-10-14 15:18:32.258 │ <<< UI GOTO PAGE_MAINLINE >>>
INFO 2026-10-14 15:18:32.498 │ [0.2s] Page arrived page_mainline
INFO 2026-10-14 15:18:34.755 │ [E_EXPLORATION_LEVEL_NUMBER 1.963s] ['第一章', '第二章', '第三章']
INFO 2026-10-14 15:18:34.911 │ Swipe (1154, 492) -> (1146, 378)
INFO 2026-10-14 15:18:35.145 │ Swiped 1 times, current exploration level: ['第一章', '第二章', '第三章']
INFO 2026-10-14 15:18:38.180 │ [E_EXPLORATION_LEVEL_NUMBER 1.988s] ['第六章', '第七章', '第八章']
INFO 2026-10-14 15:18:38.257 │ Swipe (1149, 493) -> (1155, 379)
报错时游戏的截图/别的截图
No response
还有别的吗?
询问ai后得到的建议:
检查结论
问题发生在探索单轮结束后执行 quit_explore() 的页面切换阶段。
Animation Stable @ RES_SWIPE_END 和 Quit explore 在正常、异常两种情况下都会出现,因此它们本身不是这次异常的直接区别。
正常流程
15:14:53.968 Animation Stable @ RES_SWIPE_END
15:14:53.990 Quit explore
15:14:55.314 [run_solo] Current scene: ENTRANCE
15:14:55.620 Click ... @ RES_E_EXPLORATION_CLICK
15:14:58.029 [run_solo] Current scene: MAIN
单轮探索结束后,脚本成功等待到探索入口,随后直接点击“探索”,开始下一轮。
异常流程
15:18:30.444 Animation Stable @ RES_SWIPE_END
15:18:30.461 Quit explore
15:18:31.384 Click (25, 48) @ PAGE_BACK_YOLLOW
15:18:31.888 [run_solo] Current scene: WORLD
15:18:32.258 <<< UI GOTO PAGE_MAINLINE >>>
异常时,脚本没有识别到探索入口,就点击了左上角的 PAGE_BACK_YOLLOW,导致从本应继续探索的流程返回 WORLD,随后重新打开主线章节列表。
因此,问题不是突破券数量判断导致的退出:
[REALM_RAID_NUMBER] [23/30]
而是已经错误返回 WORLD 之后,才进入重新选择章节的补救流程。
相关代码逻辑
在 tasks/Exploration/base.py 的 quit_explore() 中,当前逻辑大致如下:
while 1:
self.screenshot()
if self.appear(self.I_UI_BACK_YELLOW) and self.appear(self.I_E_EXPLORATION_CLICK):
break
if self.appear(self.I_CHECK_EXPLORATION) and not self.appear(self.I_E_SETTINGS_BUTTON):
break
if self.appear_then_click(self.I_BATTLE_REWARD, interval=1.5):
continue
if self.appear_then_click(self.I_E_EXIT_CONFIRM, interval=0.8):
continue
if self.appear_then_click(self.I_BACK_YOLLOW, interval=3.5):
continue当前存在的风险是:
探索入口识别失败
→ 继续判断 I_BACK_YOLLOW
→ 只要左上角返回图标被识别
→ 立即点击返回
→ 回到 WORLD
也就是说,入口识别需要同时满足较多条件,而 I_BACK_YOLLOW 的点击条件比较宽松。页面切换动画期间,入口按钮可能尚未识别出来,但左上角返回图标已经能够匹配,于是发生了误点击。
I_BACK_YOLLOW 的资源区域位于左上角:
roi_front=(24, 16, 48, 55)
roi_back=(0, 0, 100, 100)日志中的:
Click (25, 48) @ PAGE_BACK_YOLLOW
可以确认实际触发的就是这个返回按钮。
推测的根因
quit_explore() 在探索主界面切换到探索入口的过渡期间,没有识别到以下任一入口条件:
I_UI_BACK_YELLOW + I_E_EXPLORATION_CLICK或:
I_CHECK_EXPLORATION and not I_E_SETTINGS_BUTTON但同时识别到了 I_BACK_YOLLOW,因此把过渡中的返回按钮误认为是“仍需要退出当前页面”,从而返回了 WORLD。
目前日志无法进一步确认是哪个入口资源在异常帧中漏识别:
I_UI_BACK_YELLOWI_E_EXPLORATION_CLICKI_CHECK_EXPLORATIONI_E_SETTINGS_BUTTON
建议在后续调试中记录这些资源每一轮的匹配结果,以确认具体漏检项。
修改建议
1. 不要在入口识别失败后立即点击 I_BACK_YOLLOW
探索结束后应优先等待页面稳定,不能因为单帧没有识别到入口就执行返回操作。
可以考虑:
- 增加入口页面等待时间;
- 连续两帧或多帧确认入口状态;
- 在短时间内入口识别失败时直接
continue,而不是点击I_BACK_YOLLOW。
2. 给 I_BACK_YOLLOW 增加页面状态保护
只有确认当前仍处于探索主界面时,才允许点击 I_BACK_YOLLOW。
例如需要先确认:
I_E_SETTINGS_BUTTON 或 I_E_AUTO_ROTATE_ON/OFF 存在
或者通过 get_current_scene() 确认当前场景为 MAIN,避免在入口过渡页、入口页、未知页中点击左上角返回。
不能只依据:
self.appear(self.I_BACK_YOLLOW)就执行点击。
3. 入口识别成功后立即结束 quit_explore()
探索入口是本流程的目标状态。一旦确认入口,应立即退出 quit_explore(),后续由 run_solo() 的 Scene.ENTRANCE 分支负责:
self.ui_click(self.I_E_EXPLORATION_CLICK, stop=self.I_E_SETTINGS_BUTTON)不要在入口状态下继续执行任何返回按钮逻辑。
4. 建议增加诊断日志
在 quit_explore() 中增加类似以下信息:
[quit_explore] back_yellow=...
[quit_explore] exploration_click=...
[quit_explore] check_exploration=...
[quit_explore] settings_button=...
[quit_explore] current_scene=...
并在点击返回前记录:
[quit_explore] click PAGE_BACK_YOLLOW
这样可以确认异常时究竟是哪一个入口条件没有匹配。
5. 建议保留一个明确的超时兜底
如果长时间无法识别入口,可以继续使用超时处理,但建议:
- 记录当前各个资源匹配状态;
- 不要无条件点击
I_BACK_YOLLOW; - 或者先重新截图、等待页面稳定,再执行一次受保护的返回操作。
期望行为
当单轮探索结束、突破券不足时:
探索地图结束
→ Quit explore
→ 回到探索入口
→ 识别 Scene.ENTRANCE
→ 点击 I_E_EXPLORATION_CLICK
→ 进入下一轮探索 MAIN
不应出现:
探索地图结束
→ Quit explore
→ 点击 PAGE_BACK_YOLLOW
→ 返回 WORLD
→ 重新打开 page_mainline
→ 重新滑动寻找第二十八章
相关文件
tasks/Exploration/base.py:quit_explore()退出等待逻辑tasks/Exploration/solo.py:单轮结束后调用quit_explore()的逻辑tasks/Exploration/assets.py:探索入口按钮资源tasks/GameUi/assets.py:I_BACK_YOLLOW返回按钮资源
Activity
fix(Exploration): Prevent premature back navigation during exit #1935
fix(Exploration): Prevent premature back navigation during exit #1935
fix(Exploration): Prevent premature back navigation during exit runhe…
merge: 批次28 上游同步(邀请确认 ROI + 桌面重启收敛)