From 75fecce809de8cec31a053571f59b509a26bb101 Mon Sep 17 00:00:00 2001 From: KUAI Date: Fri, 10 Apr 2026 17:50:41 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=E6=96=B0=E7=89=88=E6=9C=AC=E8=BF=9C?= =?UTF-8?q?=E5=BE=81=E6=94=B6=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autowsgr/data/images/common/confirm_5_540p.png | Bin 0 -> 2687 bytes autowsgr/image_resources/ops.py | 3 ++- autowsgr/ui/map/base.py | 8 ++++---- autowsgr/ui/map/data.py | 4 ++-- autowsgr/ui/map/panels/expedition.py | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 autowsgr/data/images/common/confirm_5_540p.png diff --git a/autowsgr/data/images/common/confirm_5_540p.png b/autowsgr/data/images/common/confirm_5_540p.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5f12662a1f588ee2efeb5f3a8377606fe77845 GIT binary patch literal 2687 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 tH list[ImageTemplate]: """所有确认弹窗模板列表。""" - return [cls.CONFIRM_1, cls.CONFIRM_2, cls.CONFIRM_3, cls.CONFIRM_4] + return [cls.CONFIRM_1, cls.CONFIRM_2, cls.CONFIRM_3, cls.CONFIRM_4, cls.CONFIRM_5] class Build: diff --git a/autowsgr/ui/map/base.py b/autowsgr/ui/map/base.py index 1e0a19be..0e4ee3f0 100644 --- a/autowsgr/ui/map/base.py +++ b/autowsgr/ui/map/base.py @@ -14,7 +14,7 @@ from autowsgr.ui.map.data import ( CLICK_BACK, CLICK_PANEL, - CLICK_SCREEN_CENTER, + CLICK_EXPEDITION_SKIP, EXPEDITION_NOTIF_COLOR, EXPEDITION_NOTIF_PROBE, EXPEDITION_TOLERANCE, @@ -236,6 +236,6 @@ def ensure_panel(self, panel: MapPanel) -> None: if self.get_active_panel(screen) != panel: self.switch_panel(panel) - def click_screen_center(self) -> None: - """点击屏幕中央 — 用于跳过动画/确认弹窗。""" - self._ctrl.click(*CLICK_SCREEN_CENTER) + def click_expedition_skip(self) -> None: + """点击屏幕右侧 — 用于跳过远征动画。""" + self._ctrl.click(*CLICK_EXPEDITION_SKIP) diff --git a/autowsgr/ui/map/data.py b/autowsgr/ui/map/data.py index 69c9ba9d..bd4d0956 100644 --- a/autowsgr/ui/map/data.py +++ b/autowsgr/ui/map/data.py @@ -414,8 +414,8 @@ def parse_map_title(text: str) -> MapIdentity | None: # ── 远征 ── -CLICK_SCREEN_CENTER: tuple[float, float] = (0.5, 0.5) -"""屏幕中央 — 用于闪过动画/确认弹窗。""" +CLICK_EXPEDITION_SKIP: tuple[float, float] = (0.76, 0.5) +"""屏幕右侧 — 用于跳过远征动画。""" # ── 战利品/舰船获取数量 OCR 裁切区域 ── diff --git a/autowsgr/ui/map/panels/expedition.py b/autowsgr/ui/map/panels/expedition.py index 4828503d..baa4b151 100644 --- a/autowsgr/ui/map/panels/expedition.py +++ b/autowsgr/ui/map/panels/expedition.py @@ -119,8 +119,8 @@ def collect_expedition(self) -> int: break time.sleep(0.25) - # 3. 点击屏幕中央跳过动画 - self.click_screen_center() + # 3. 点击屏幕右侧跳过动画 + self.click_expedition_skip() time.sleep(1.0) # 4. 确认弹窗 From 839b4bce0da41ce803bc8c85e397ea46e62799ca Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 09:51:22 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- autowsgr/ui/map/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autowsgr/ui/map/base.py b/autowsgr/ui/map/base.py index 0e4ee3f0..3d106d97 100644 --- a/autowsgr/ui/map/base.py +++ b/autowsgr/ui/map/base.py @@ -13,8 +13,8 @@ from autowsgr.types import PageName from autowsgr.ui.map.data import ( CLICK_BACK, - CLICK_PANEL, CLICK_EXPEDITION_SKIP, + CLICK_PANEL, EXPEDITION_NOTIF_COLOR, EXPEDITION_NOTIF_PROBE, EXPEDITION_TOLERANCE, From fe1d5b6d4126d697970583cf2158aceb28adfce9 Mon Sep 17 00:00:00 2001 From: KUAI Date: Fri, 10 Apr 2026 17:58:32 +0800 Subject: [PATCH 3/4] Create expedition.py --- examples/expedition.py | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 examples/expedition.py diff --git a/examples/expedition.py b/examples/expedition.py new file mode 100644 index 00000000..e7f5cc15 --- /dev/null +++ b/examples/expedition.py @@ -0,0 +1,52 @@ +"""最小示例 — 定时收取远征和奖励。 + +每 5 分钟自动收取一次已完成的远征和任务奖励。 +""" +import time +from autowsgr.ops import collect_expedition, collect_rewards +from autowsgr.scheduler import launch +from autowsgr.infra.logger import get_logger + +_log = get_logger('expedition_example') + +# 1. 启动并连接模拟器 (自动检测 usersettings.yaml) +ctx = launch('usersettings.yaml') + +# 每 5 分钟运行一次 +check_time = 5 + +_log.info(f"定时任务已启动,每 {check_time} 分钟执行一次收取操作") + +while True: + try: + # 记录开始时间 + start_time = time.time() + + _log.info("--- 开始例行检查 ---") + + # 收取远征 (自动重新派遣) + if collect_expedition(ctx): + _log.info("成功收取远征并重新派遣") + else: + _log.info("当前无远征可收取") + + # 收取任务奖励 + if collect_rewards(ctx): + _log.info("成功收取任务奖励") + else: + _log.info("当前无任务奖励可收取") + + # 计算剩余等待时间 + elapsed = time.time() - start_time + wait_time = max(1, check_time * 60 - elapsed) + + _log.info(f"检查完毕,等待 {wait_time / 60:.0f} 分钟后进行下一次检查...") + time.sleep(wait_time) + + except KeyboardInterrupt: + _log.info("用户手动停止脚本") + break + except Exception as e: + _log.error(f"执行过程中出现异常: {e}") + _log.info("等待 1 分钟后重试...") + time.sleep(60) From 1fcf621c9aac45341c45aaf051dd8ff210588cf5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 09:58:47 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- examples/expedition.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/examples/expedition.py b/examples/expedition.py index e7f5cc15..a5a8ae9f 100644 --- a/examples/expedition.py +++ b/examples/expedition.py @@ -2,10 +2,13 @@ 每 5 分钟自动收取一次已完成的远征和任务奖励。 """ + import time + +from autowsgr.infra.logger import get_logger from autowsgr.ops import collect_expedition, collect_rewards from autowsgr.scheduler import launch -from autowsgr.infra.logger import get_logger + _log = get_logger('expedition_example') @@ -15,38 +18,38 @@ # 每 5 分钟运行一次 check_time = 5 -_log.info(f"定时任务已启动,每 {check_time} 分钟执行一次收取操作") +_log.info(f'定时任务已启动,每 {check_time} 分钟执行一次收取操作') while True: try: # 记录开始时间 start_time = time.time() - _log.info("--- 开始例行检查 ---") + _log.info('--- 开始例行检查 ---') # 收取远征 (自动重新派遣) if collect_expedition(ctx): - _log.info("成功收取远征并重新派遣") + _log.info('成功收取远征并重新派遣') else: - _log.info("当前无远征可收取") + _log.info('当前无远征可收取') # 收取任务奖励 if collect_rewards(ctx): - _log.info("成功收取任务奖励") + _log.info('成功收取任务奖励') else: - _log.info("当前无任务奖励可收取") + _log.info('当前无任务奖励可收取') # 计算剩余等待时间 elapsed = time.time() - start_time wait_time = max(1, check_time * 60 - elapsed) - _log.info(f"检查完毕,等待 {wait_time / 60:.0f} 分钟后进行下一次检查...") + _log.info(f'检查完毕,等待 {wait_time / 60:.0f} 分钟后进行下一次检查...') time.sleep(wait_time) except KeyboardInterrupt: - _log.info("用户手动停止脚本") + _log.info('用户手动停止脚本') break except Exception as e: - _log.error(f"执行过程中出现异常: {e}") - _log.info("等待 1 分钟后重试...") + _log.error(f'执行过程中出现异常: {e}') + _log.info('等待 1 分钟后重试...') time.sleep(60)