Skip to content

feat(server): 新增 /api/expedition/auto_check 挂机专用端点,优化浴室维修为全部修理#443

Open
syokounya wants to merge 8 commits intoOpenWSGR:mainfrom
syokounya:feat/auto-check-endpoint
Open

feat(server): 新增 /api/expedition/auto_check 挂机专用端点,优化浴室维修为全部修理#443
syokounya wants to merge 8 commits intoOpenWSGR:mainfrom
syokounya:feat/auto-check-endpoint

Conversation

@syokounya
Copy link
Copy Markdown
Contributor

背景与问题

当前 GUI 的自动远征定时检查仅能通过 /api/expedition/check 收取远征,无法顺带领取任务奖励和执行浴室维修。用户长时间挂机时仍需手动操作,体验不佳。

此外,现有的 /api/expedition/check/api/reward/collect/api/repair/bath 均受 _require_idle() 限制,只要后端有战斗任务在运行,这些接口就会返回 409 任务执行中,无法操作。这导致挂机期间即使只是"收菜",也会被战斗任务阻塞。

另一个问题是原有的 repair_in_bath 实现是点击"选择修理" overlay 中的第一个舰船逐个修理,效率低且容易在 overlay 关闭检测上超时失败。

解决方案

1. 新增挂机专用端点 /api/expedition/auto_check

server/routes/ops.py 中新增 POST /api/expedition/auto_check

  • 不收 _require_idle() 限制:专供 Scheduler 的定时远征检查调用,确保挂机"收菜"不会被战斗任务拦截。
  • 顺序执行三项操作
    1. collect_expedition(ctx) — 收取已完成远征
    2. collect_rewards(ctx) — 领取任务奖励
    3. 智能浴室维修:检查 ctx.active_fight_tasks,若大于 0 则跳过维修并记录原因;否则执行维修
  • 返回结构化的 results 数据,方便前端展示日志。

2. 浴室维修改为点击"全部修理"

ui/bath_page/signatures.py 中新增:

  • CLICK_REPAIR_ALL (0.8625, 0.1639) — 全部修理按钮坐标
  • REPAIR_ALL_BUTTON_COLOR ((28, 128, 226), 30.0) — 蓝色按钮颜色
  • CLOSE_OVERLAY_BUTTON_COLOR ((197, 199, 194), 30.0) — 关闭按钮灰色颜色

ui/bath_page/page.py 中新增 click_repair_all() 方法:

  • 检测全部修理按钮颜色,若未检测到则安全回退为点击第一个舰船
  • 点击后等待 overlay 自动关闭(最多 5 秒)
  • 若检测到关闭按钮仍在,则主动调用 close_choose_repair_overlay() 关闭浮层

ops/repair.py 中:

  • repair_in_bath 改调 page.click_repair_all()
  • 维修完成后增加 goto_page(ctx, PageName.MAIN),确保流程结束后回到主界面,避免后续导航出错

3. 战斗任务感知

利用已有的 ctx.active_fight_tasks 计数器(由 TaskScheduler._run_task 维护),在自动检查浴室维修前进行判断,避免战斗中占用舰队导致战斗中断或被迫使用快修。

影响范围

  • autowsgr/server/routes/ops.py — 新增 expedition_auto_check 端点
  • autowsgr/ui/bath_page/signatures.py — 新增全部修理相关常量
  • autowsgr/ui/bath_page/page.py — 新增 click_repair_all() 方法
  • autowsgr/ops/repair.py — 改调全部修理并返回主界面

配套前端改动

前端 PR 见:yltx/AutoWSGR-GUI 对应分支 feat/gui-expedition-repair

@syokounya syokounya force-pushed the feat/auto-check-endpoint branch 4 times, most recently from dc581a8 to 905d68d Compare April 15, 2026 02:35
- 不受 _require_idle 限制,专供 Scheduler 定时远征检查调用
- 顺带领取任务奖励(collect_rewards)
- 根据 ctx.active_fight_tasks 智能判断是否执行浴室维修,避免战斗中占用舰队
@syokounya syokounya force-pushed the feat/auto-check-endpoint branch from ddadec6 to c7ec46f Compare April 15, 2026 03:06
pre-commit-ci bot and others added 7 commits April 15, 2026 03:07
…GR#445)

* fix(fleet): support ship-type selector and alias-safe search

- add ship_type to FleetRuleRequest and slot selector

- normalize search_name for first search and in-compare matching

- filter choose-ship hits by OCR-detected ship type

* chore(release): bump version to 2.1.9.post7

* fix(fleet): address copilot review on ship_type validation

- validate and normalize ship_type in FleetRuleRequest

- update change_fleet selector docs to include ship_type

- include ship_type constraint in choose-ship final failure diagnostics

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- 不受 _require_idle 限制,专供 Scheduler 定时远征检查调用
- 顺带领取任务奖励(collect_rewards)
- 根据 ctx.active_fight_tasks 智能判断是否执行浴室维修,避免战斗中占用舰队
- 将 CHAPTER_NAV_MAX_ATTEMPTS 从 12 提升到 20,避免远距离切换超时
- navigate_to_chapter 改为批量点击策略:
  - 当距离 > 2 章时,一次性连续点击最多 4 章,然后统一等待 1.0s
  - 让动画完全结束后再 OCR 验证,大幅减少过渡态抖动导致的轮空
  - 近距离(≤2 章)保持单步点击,确保精度
- 更新 .gitignore 忽略 .tmp/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants