Skip to content

决战小关结束流程中奖励弹窗模板误检,无法正确返回入口总览页 #413

@syokounya

Description

@syokounya

在提交您的问题反馈之前

  • 我已经阅读了 用户文档 并尝试自己解决问题,同时在社群中进行了讨论
  • 我无法找到任何 open issue 反馈了相同的问题

相关环境信息

No response

问题描述

决战小关通关后,confirm_stage_clear 的 settle 循环中 symbol_get_ship 模板在决战地图页上被误匹配,导致代码不断点击右下角关闭按钮但无法真正关闭弹窗。最终小关结束后游戏画面停留在决战地图页,没有回到决战入口总览页,_handle_enter_map 的 detect_entry_status() 在地图页上寻找入口状态模板,抛出 TimeoutError。

复现方法

运行决战 Ex-1(或任意章节)
打完小关终止节点,进入 STAGE_CLEAR 阶段
confirm_stage_clear 执行两次 confirm_operation 后进入 settle 循环
settle 循环持续检测到 symbol_get_ship,不断点击 (0.953, 0.954)
12 秒 settle 超时,流程进入 ENTER_MAP
_handle_enter_map 调用 detect_entry_status() 在地图页上匹配入口状态模板
10 秒后超时:检测决战入口状态超时 (10.0s): 未匹配到任何状态模板

Log输出

22:55:18.881 | INFO     | ops/decisive/handlers.py:423 | [决战] 节点 J 战斗结束, 等待地图加载
22:55:18.882 | INFO     | ops/decisive/handlers.py:427 | [决战] 小关 2 终止节点 J 已到达
22:55:18.882 | DEBUG    | ops/decisive/controller.py:124 | [决战] 阶段: STAGE_CLEAR | 小关: 2 | 节点: J
22:55:18.882 | INFO     | ops/decisive/handlers.py:468 | [决战] 小关 2 通关!
22:55:22.658 | DEBUG    | emulator/controller/scrcpy.py:417 | [Emulator] click(0.502, 0.846) → pixel(964, 914)  res=1920x1080  ui/utils/navigation.py:292 in confirm_operation
22:55:22.719 | INFO     | ui/utils/navigation.py:293 | [UI] 确认操作: 点击 'confirm_4' (0.5021, 0.8463)
22:55:24.370 | DEBUG    | emulator/controller/scrcpy.py:417 | [Emulator] click(0.502, 0.846) → pixel(964, 914)  res=1920x1080  ui/utils/navigation.py:292 in confirm_operation
22:55:24.421 | INFO     | ui/utils/navigation.py:293 | [UI] 确认操作: 点击 'confirm_4' (0.5021, 0.8463)
22:55:32.421 | DEBUG    | emulator/controller/scrcpy.py:417 | [Emulator] click(0.501, 0.568) → pixel(961, 613)  res=1920x1080  ui/utils/navigation.py:292 in confirm_operation
22:55:32.486 | INFO     | ui/utils/navigation.py:293 | [UI] 确认操作: 点击 'confirm_1' (0.5005, 0.5676)
22:55:36.242 | INFO     | ui/decisive/map_controller.py:638 | [地图控制器] 结算阶段仍有奖励弹窗: 'symbol_get_ship'
22:55:36.245 | DEBUG    | emulator/controller/scrcpy.py:417 | [Emulator] click(0.953, 0.954) → pixel(1829, 1030)  res=1920x1080  ui/decisive/map_controller.py:639 in confirm_stage_clear
22:55:40.395 | INFO     | ui/decisive/map_controller.py:638 | [地图控制器] 结算阶段仍有奖励弹窗: 'symbol_get_ship'
22:55:40.399 | DEBUG    | emulator/controller/scrcpy.py:417 | [Emulator] click(0.953, 0.954) → pixel(1829, 1030)  res=1920x1080  ui/decisive/map_controller.py:639 in confirm_stage_clear
22:55:43.918 | WARNING  | ui/decisive/map_controller.py:650 | [地图控制器] 小关通关后未能确认已回到决战入口页
22:55:43.921 | DEBUG    | ops/decisive/controller.py:124 | [决战] 阶段: ENTER_MAP | 小关: 2 | 节点: A
22:55:54.643 | ERROR    | ops/decisive/controller.py:86 | [决战] 执行异常
Traceback (most recent call last):

  File "F:\app\conda\Lib\threading.py", line 1015, in _bootstrap
    self._bootstrap_inner()
    │    └ <function Thread._bootstrap_inner at 0x0000024B05E98220><Thread(Thread-1 (_run_in_thread), started daemon 7324)>
  File "F:\app\conda\Lib\threading.py", line 1044, in _bootstrap_inner
    self.run()
    │    └ <function Thread.run at 0x0000024B05E7BF60><Thread(Thread-1 (_run_in_thread), started daemon 7324)>
  File "F:\app\conda\Lib\threading.py", line 995, in run
    self._target(*self._args, **self._kwargs)
    │    │        │    │        │    └ {}
    │    │        │    │        └ <Thread(Thread-1 (_run_in_thread), started daemon 7324)>
    │    │        │    └ (<function _start_decisive.<locals>.executor at 0x0000024B3A208180>,)
    │    │        └ <Thread(Thread-1 (_run_in_thread), started daemon 7324)>
    │    └ <bound method TaskManager._run_in_thread of <autowsgr.server.task_manager.TaskManager object at 0x0000024B1A6D67B0>><Thread(Thread-1 (_run_in_thread), started daemon 7324)>

  File "F:\AutoWSGR-GUI\python\site-packages\autowsgr\server\task_manager.py", line 160, in _run_in_thread
    results = executor(task)
              │        └ TaskInfo(task_id='task_37a622e4', task_type='decisive', status=<TaskStatus.RUNNING: 'running'>, created_at='2026-04-11T14:42:...
              └ <function _start_decisive.<locals>.executor at 0x0000024B3A208180>

  File "F:\AutoWSGR-GUI\python\site-packages\autowsgr\server\routes\task.py", line 308, in executor
    result = controller.run()
             │          └ <function DecisiveController.run at 0x0000024B3A1498A0>
             └ <autowsgr.ops.decisive.controller.DecisiveController object at 0x0000024B3A1292B0>

> File "F:\AutoWSGR-GUI\python\site-packages\autowsgr\ops\decisive\controller.py", line 84, in run
    return self._main_loop()
           │    └ <function DecisiveController._main_loop at 0x0000024B3A14A2A0>
           └ <autowsgr.ops.decisive.controller.DecisiveController object at 0x0000024B3A1292B0>

  File "F:\AutoWSGR-GUI\python\site-packages\autowsgr\ops\decisive\controller.py", line 153, in _main_loop
    handler()
    └ <bound method DecisivePhaseHandlers._handle_enter_map of <autowsgr.ops.decisive.controller.DecisiveController object at 0x000...

  File "F:\AutoWSGR-GUI\python\site-packages\autowsgr\ops\decisive\handlers.py", line 115, in _handle_enter_map
    entry_status = self._battle_page.detect_entry_status()
                   │    │            └ <function DecisiveBattlePage.detect_entry_status at 0x0000024B38D8DA80>
                   │    └ <autowsgr.ui.decisive.battle_page.DecisiveBattlePage object at 0x0000024B3A12A120>
                   └ <autowsgr.ops.decisive.controller.DecisiveController object at 0x0000024B3A1292B0>

  File "F:\AutoWSGR-GUI\python\site-packages\autowsgr\ui\decisive\battle_page.py", line 407, in detect_entry_status
    raise TimeoutError(f'检测决战入口状态超时 ({timeout}s): 未匹配到任何状态模板')
                                      └ 10.0

TimeoutError: 检测决战入口状态超时 (10.0s): 未匹配到任何状态模板
22:55:54.648 | WARNING  | server/routes/task.py:314 | [Task] 决战第 1 轮终止: error
22:55:54.649 | INFO     | server/task_manager.py:170 | [Task] 任务完成: task_37a622e4 (completed)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions