Skip to content

[Bug]决战总览页签名误匹配出征/战役面板,导致 goto_page(MAP) 导航走错路径 #447

@syokounya

Description

@syokounya

autowsgr_2026-04-17.debug.log

### 在提交您的问题反馈之前

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

相关环境信息

  • 操作系统: Windows 11
  • 模拟器: MuMu模拟器 (1920×1080)
  • AutoWSGR版本: main 分支 (commit 98caf9fa 之后)

问题描述

DecisiveBattlePage.PAGE_SIGNATURE 的 4 条像素规则在战役面板(以及部分出征/活动地图面板)上也会全部命中,导致该页面被误识别为决战总览页。这会让 goto_page(PageName.MAP) 认为当前处于 DECISIVE_BATTLE,从而尝试走 DECISIVE_BATTLE → MAIN 的错误导航路径,最终可能超时甚至中断正在进行的战役/出征任务。

根因是 MapPage.is_current_pagetabbed_page.py 引入后改由 is_tabbed_page() 判定。若顶部标签栏颜色为活动地图主题的蓝灰色(如 RGB(84,129,197)),is_tabbed_page() 会返回 FalseMapPage 漏检,随后注册顺序更靠前的 DECISIVE_BATTLE 抢先匹配。

复现方法

  1. 进入游戏「出征」页面,切换到决战以外的面板(如战役面板或部分活动地图)。
  2. 在代码中调用 goto_page(PageName.MAP) 或执行任何会触发 get_current_page() 的任务切换。
  3. 观察到 get_current_page() 返回 "决战"PageName.DECISIVE_BATTLE)。
  4. goto_page 尝试先返回主页面,导致导航路径错误并可能超时。

临时修复方案

autowsgr/ui/decisive/battle_page.pyPAGE_SIGNATURE 中增加第 5 条像素规则,检测底部「重置关卡」按钮的白色文字/图标((0.5, 0.925) ≈ (255,255,255)),该元素仅存在于真正的决战总览页。

PAGE_SIGNATURE = PixelSignature(
    name=PageName.DECISIVE_BATTLE,
    strategy=MatchStrategy.ALL,
    rules=[
        PixelRule.of(0.8016, 0.8458, (20, 44, 78), tolerance=30.0),
        PixelRule.of(0.9695, 0.8500, (15, 31, 56), tolerance=30.0),
        PixelRule.of(0.7641, 0.8611, (22, 46, 84), tolerance=30.0),
        PixelRule.of(0.0453, 0.0667, (38, 39, 43), tolerance=30.0),
        # 新增:底部"重置关卡"按钮白色文字
        PixelRule.of(0.500, 0.925, (255, 255, 255), tolerance=30.0),
    ],
)

Log输出

# 典型表现:在战役面板上 get_current_page() 返回 "决战"
[Matcher] 'PageName.DECISIVE_BATTLE' OK (4/4 规则匹配, 策略=all)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions