Skip to content

探索困28时莫名退出探索入口,错误回到大地图 #1935

Closed

Description

@cjxinn01

在提问之前...

  • 我已经搜索了现有的 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_YELLOW
  • I_E_EXPLORATION_CLICK
  • I_CHECK_EXPLORATION
  • I_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 返回按钮资源

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions