From 8479cf49810c7a89f4778cdcfe76a79415b93ef9 Mon Sep 17 00:00:00 2001 From: zhl Date: Sun, 4 Oct 2026 18:50:28 +0800 Subject: [PATCH] feat: add idle reward claim automation --- README.md | 12 +++- assets/idle_claim_available.png | Bin 0 -> 10699 bytes assets/idle_claimed.png | Bin 0 -> 8952 bytes assets/idle_dialog_title.png | Bin 0 -> 10746 bytes assets/idle_dismiss.png | Bin 0 -> 15434 bytes assets/idle_reward.png | Bin 0 -> 41228 bytes automation/engine.py | 4 +- automation/idle.py | 65 +++++++++++++++++++++ claim_idle.py | 39 +++++++++++++ docs/261004_1607-首页功能与日常任务梳理.md | 31 +++++++--- tests/test_idle.py | 65 +++++++++++++++++++++ workflows/idle_claim.json | 24 ++++++++ 12 files changed, 228 insertions(+), 12 deletions(-) create mode 100644 assets/idle_claim_available.png create mode 100644 assets/idle_claimed.png create mode 100644 assets/idle_dialog_title.png create mode 100644 assets/idle_dismiss.png create mode 100644 assets/idle_reward.png create mode 100644 automation/idle.py create mode 100644 claim_idle.py create mode 100644 tests/test_idle.py create mode 100644 workflows/idle_claim.json diff --git a/README.md b/README.md index 2c42dd5..1c2701a 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,24 @@ ## 已实现 - 桌面界面:主屏幕截图、框选游戏内容区域、流程预览、执行日志与停止。 -- 小金猪流程:首页识别 → 打开挂机奖励 → 检查标题和领取按钮 → 点击领取一次 → 等待按钮变化 → 关闭弹框 → 确认回到首页。 +- 小金猪流程:首页识别 → 打开挂机奖励 → 仅在金色领取按钮出现时长按领取 → 确认奖励弹框与灰色按钮 → 关闭弹框并回到首页。 - 脚本与识别模板分离,后续任务通过 `workflows/` 扩展。 - 截图像素与鼠标坐标分别换算,覆盖主屏幕 Retina 缩放的坐标情况。 -小金猪流程只领取挂机奖励,不执行消耗体力的快速扫荡。完成日志只表示已点击领取、按钮变化并返回首页,奖励实际到账仍需首次运行时人工核对。当前模板来自用户提供的界面截图,尚需实机验证。 +小金猪流程只领取挂机奖励,不执行消耗体力的快速扫荡。已于 2026-10-04 实机验证:领取后出现“恭喜获得”弹框、按钮变灰、挂机计时重置,并确认返回首页。灰色领取按钮时脚本不会点击领取。 红点规则:按钮右上角有红点表示其内部有奖励可领取。后续入口任务可以据此进入,但领取成功还需验证内部状态。当前第一条小金猪流程不依赖红点,红点检测尚未实现。 ## 本地启动 +### 已验证的小金猪挂机奖励脚本 + +```bash +.venv/bin/python claim_idle.py +``` + +流程为:首页 → 小金猪 → 判断右侧领取按钮。金色时长按领取,确认“恭喜获得”弹框和领取按钮变灰后关闭;灰色时不领取,直接关闭弹框。两种情况都会返回首页。使用 `--dry-run` 可只验证首页而不点击。 + ### 已验证的特惠一键领取脚本 在首页执行: diff --git a/assets/idle_claim_available.png b/assets/idle_claim_available.png new file mode 100644 index 0000000000000000000000000000000000000000..91264580832f6730edf464fa593942ce7c31912d GIT binary patch literal 10699 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 literal 0 HcmV?d00001 diff --git a/assets/idle_claimed.png b/assets/idle_claimed.png new file mode 100644 index 0000000000000000000000000000000000000000..4e13b74878213f94a1643991ebfcdd411b84d419 GIT binary patch literal 8952 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 literal 0 HcmV?d00001 diff --git a/assets/idle_dialog_title.png b/assets/idle_dialog_title.png new file mode 100644 index 0000000000000000000000000000000000000000..5626d05a373f53352982fbb34a950833c8444d20 GIT binary patch literal 10746 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 2: + return found, screenshot, region + time.sleep(0.25) + raise WorkflowError('未识别到预期页面 ' + '/'.join(names) + ',已停止。') + + def click(self, action, observation, hold=0.2): + _, screenshot, region = observation + if self.region_provider(screenshot) != region: + raise WorkflowError('识别后游戏窗口移动,已停止,请重新运行。') + self.desktop.click(self.flow['clicks'][action], region, screenshot.size, hold=hold) + self.log('已执行:' + action) + + def close(self, idle): + self.click('close', idle) + self.wait('home') + self.log('已确认返回首页。') + + def run(self, dry_run=False): + home = self.wait('home') + if dry_run: + self.log('首页识别通过。计划:小金猪 → 检查领取按钮 → 可领取时领取 → 关闭弹框。未点击。') + return 'preview' + + self.click('open_pig', home) + idle = self.wait('available', 'claimed') + if idle[0] == 'claimed': + self.log('领取按钮为灰色,本次没有可领取挂机奖励。') + self.close(idle) + return 'no_reward' + + # A 0.8-second press was required by the live WeChat game window. + self.click('claim', idle, hold=0.8) + reward = self.wait('reward') + self.log('已确认“恭喜获得”挂机奖励弹框。') + self.click('dismiss_reward', reward) + claimed = self.wait('claimed') + self.log('已确认领取按钮变灰。') + self.close(claimed) + return 'claimed' diff --git a/claim_idle.py b/claim_idle.py new file mode 100644 index 0000000..8e8047e --- /dev/null +++ b/claim_idle.py @@ -0,0 +1,39 @@ +"""Run from the project root: python claim_idle.py [--dry-run].""" +import argparse +import sys +import time +from pathlib import Path + +from automation.engine import Matcher, WorkflowError, load_flow +from automation.idle import IdleRunner +from automation.offers import MacGameDesktop + +ROOT = Path(__file__).resolve().parent + + +def main(): + parser = argparse.ArgumentParser(description='首页小金猪:领取挂机奖励并关闭弹框') + parser.add_argument('--dry-run', action='store_true', help='只验证首页并显示计划,不点击') + args = parser.parse_args() + if sys.platform != 'darwin': + print('当前脚本已验证 macOS;Windows 版将在校准入口完成后接入。', file=sys.stderr) + return 2 + try: + desktop = MacGameDesktop() + desktop.activate() + print('3 秒后开始;请保持游戏在前台。鼠标移到主屏幕左上角可紧急停止。', flush=True) + time.sleep(3) + runner = IdleRunner(desktop, Matcher(ROOT / 'assets'), + load_flow(ROOT / 'workflows/idle_claim.json'), desktop.region_for) + runner.run(args.dry_run) + return 0 + except KeyboardInterrupt: + print('已停止。', file=sys.stderr) + return 130 + except Exception as exc: + print('流程停止:' + str(exc), file=sys.stderr) + return 1 + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/docs/261004_1607-首页功能与日常任务梳理.md b/docs/261004_1607-首页功能与日常任务梳理.md index 4c9e3c6..e767284 100644 --- a/docs/261004_1607-首页功能与日常任务梳理.md +++ b/docs/261004_1607-首页功能与日常任务梳理.md @@ -1,7 +1,7 @@ --- created_at: 2026-10-04 16:07:56 CST type: 永远的蔚蓝星球首页、商城、领地与公会入口、日常任务与自动化适配记录 -revision: 第10次 +revision: 第11次 revisions: - time: 2026-10-04 16:07:56 CST version: 第1次 @@ -43,7 +43,11 @@ revisions: version: 第10次 author: gpt-5 content: 补充食堂一键领取体力的实机验证流程、无可领取分支、脚本和汇总表条目。 -summary: 记录首页、商城、领地和公会的日常任务入口、待完善流程及已实现脚本汇总。入口红点表示内部有奖励可领取;特惠赏金战令领取、狂鼠之家收矿与雇佣、食堂领体力均已实机验证并写成脚本。 + - time: 2026-10-04 18:48:40 CST + version: 第11次 + author: gpt-5 + content: 补充小金猪挂机奖励的实机领取与灰色跳过分支,新增独立脚本及汇总表条目。 +summary: 记录首页、商城、领地和公会的日常任务入口、待完善流程及已实现脚本汇总。入口红点表示内部有奖励可领取;特惠赏金战令领取、小金猪挂机奖励、狂鼠之家收矿与雇佣、食堂领体力均已实机验证并写成脚本。 --- # 首页、商城、领地与公会功能及日常任务梳理 @@ -62,7 +66,7 @@ summary: 记录首页、商城、领地和公会的日常任务入口、待完 用户确定的开发顺序:**先在本地实现部分自动化流程,逐项验证后再打包成独立程序**,最终目标仍是 macOS 与 Windows。模型 Key 由用户以后在程序设置中填写。 -第一条本地原型流程为“小金猪 → 挂机奖励 → 领取 → 返回首页”,使用局部截图模板识别,执行前校准游戏区域,提供预览、日志和停止功能。当前不执行快速扫荡,也尚未加入红点检测或模型 API。奖励到账数量、领取后弹框和双平台操作需实机验证;超时停止,不重复领取。启动方法与验证命令见项目 README。 +小金猪、特惠战令、狂鼠之家、食堂均已有实机验证脚本,使用局部截图模板识别并在关键状态变化后确认结果。当前不执行快速扫荡,也尚未加入红点检测或模型 API。Windows 双平台操作仍需实机验证;页面不匹配或超时会停止,不重复领取。启动方法与验证命令见项目 README。 ## 首页 @@ -118,12 +122,22 @@ summary: 记录首页、商城、领地和公会的日常任务入口、待完 | 点击小金猪 | 打开挂机奖励弹框 | 不同窗口大小下的识别方式 | | 查看挂机奖励 | 当前截图提示“已达到最长时间”,最大挂机 12 小时 | 未满 12 小时时的显示、领取后的计时变化 | | 快速扫荡 | 按钮标注消耗 10 体力 | 每日次数、后续次数的消耗、确认弹框、奖励与完成状态 | -| 领取 | 可领取挂机奖励,按钮未显示消耗 | 实际领取结果、是否有二次确认、领取成功标志 | +| 领取 | 金色按钮时可领取挂机奖励,按钮未显示消耗;灰色时不可领取 | 领取频率和跨日重置规律 | | 点击空白处关闭 | 截图底部明确显示该提示 | 关闭后是否稳定回到首页 | “快速扫荡”和“领取”应作为两个独立操作记录。前者有明确的体力消耗,后续自动化需要可配置是否执行及次数;后者仍需实际走查确认成功判定。 -建议走查路径:**首页 → 小金猪 → 挂机奖励 → 查看领取条件 → 执行指定操作 → 确认奖励结果 → 返回首页**。目前仅确认入口和弹框,不代表已完成领取验证。 +### 小金猪挂机奖励领取(已实机验证) + +2026-10-04 已在当前账号完成:**首页 → 小金猪 → 右侧领取 → 恭喜获得弹框 → 领取按钮变灰 → 关闭弹框 → 首页**。领取前挂机时间已达最长 12 小时;领取后按钮变灰,挂机时间重置为 00:00:00,随后开始重新累积。实机观察到钻石从 2392 变为 2423、金币从 49964 变为 56626。 + +对应脚本为项目根目录的 `claim_idle.py`,配置在 `workflows/idle_claim.json`。运行方式: + +```bash +.venv/bin/python claim_idle.py +``` + +脚本仅在右侧领取按钮识别为金色时执行 0.8 秒长按;必须识别“恭喜获得”弹框和变灰按钮才判定成功。按钮已灰时跳过领取,直接关闭弹框并回到首页。左侧“快速扫荡”消耗体力,不在脚本范围内。 ### 主界面其他可见内容 @@ -247,7 +261,7 @@ summary: 记录首页、商城、领地和公会的日常任务入口、待完 | 观影、寻宝 | 先识别活动是否出现,再执行固定流程 | 活动不一定存在,但用户确认出现后的流程稳定 | | 试炼、三类冲刺 | 共用流程,并为不同页面设置识别规则;必要时由 AI 辅助判断 | 基本逻辑一致,页面外观或活动条件会变化 | | 金沙游记等左上角大活动、英雄集结 | 先识别活动名称与分活动,再逐项评估 | 活动名称、数量和内部结构可能变化,当前缺少完整流程 | -| 小金猪挂机奖励 | 固定流程与结果识别;快速扫荡另设资源配置 | 入口和弹框清晰,但领取与体力消耗操作需要区分 | +| 小金猪挂机奖励 | 已验证脚本:金色领取按钮时领取、验证奖励弹框与灰色按钮、返回首页 | 不执行快速扫荡;领取频率和 Windows 适配待验证 | | 任务、好友、邮件、返利 | 暂不确定 | 尚未查看内部内容和日常规则 | | 商城:英雄招募、图腾寻宝、每日商店、金币 | 后续确定 | 已记录区域结构,日常目标、执行次数、资源消耗与完成判定尚未明确 | | 商城:关卡礼包、钻石 | 暂不处理 | 用户明确排除 | @@ -280,5 +294,6 @@ summary: 记录首页、商城、领地和公会的日常任务入口、待完 | 序号 | 脚本名字 | 入口页面 | 入口位置 | 实现功能简介 | 脚本更新时间 | | --- | --- | --- | --- | --- | --- | | 1 | 战令领取(`claim_offer.py`) | 首页 | 首页 → 左侧特惠 → 战令 | 识别“超值月卡”时先切换战令;领取赏金战令奖励,确认奖励弹框和按钮变灰后返回首页;已领取时跳过。 | 2026-10-04 17:45 CST | -| 2 | 收矿与雇佣(`claim_mining.py`) | 领地 | 首页 → 底部领地 → 狂鼠之家 | 发现“一键收矿”后收矿、关闭奖励弹框、等待 10 秒;按白银罗盘、黄金罗盘、彩虹探测仪顺序一键雇佣,无可用道具时关闭弹框,最后返回首页。 | 2026-10-04 18:17 CST | -| 3 | 领体力(`claim_stamina.py`) | 领地 | 首页 → 底部领地 → 食堂 | 发现“一键领取”时领取体力,确认“恭喜获得”弹框和烤肉库存 0/60 后返回首页;无可领体力时跳过。 | 2026-10-04 18:32 CST | +| 2 | 挂机奖励领取(`claim_idle.py`) | 首页 | 首页 → 小金猪 | 仅在右侧领取按钮为金色时长按领取,确认“恭喜获得”弹框和按钮变灰后关闭;灰色时跳过,最终返回首页。 | 2026-10-04 18:48 CST | +| 3 | 收矿与雇佣(`claim_mining.py`) | 领地 | 首页 → 底部领地 → 狂鼠之家 | 发现“一键收矿”后收矿、关闭奖励弹框、等待 10 秒;按白银罗盘、黄金罗盘、彩虹探测仪顺序一键雇佣,无可用道具时关闭弹框,最后返回首页。 | 2026-10-04 18:17 CST | +| 4 | 领体力(`claim_stamina.py`) | 领地 | 首页 → 底部领地 → 食堂 | 发现“一键领取”时领取体力,确认“恭喜获得”弹框和烤肉库存 0/60 后返回首页;无可领体力时跳过。 | 2026-10-04 18:32 CST | diff --git a/tests/test_idle.py b/tests/test_idle.py new file mode 100644 index 0000000..5756b4d --- /dev/null +++ b/tests/test_idle.py @@ -0,0 +1,65 @@ +import unittest +from pathlib import Path + +from PIL import Image + +from automation.engine import Matcher, Region, load_flow +from automation.idle import IdleRunner + +ROOT = Path(__file__).resolve().parent.parent + + +class IdleDesktop: + def __init__(self, images): + self.images = images + self.index = 0 + self.clicks = [] + + def screenshot(self): + return self.images[min(self.index, len(self.images) - 1)] + + def click(self, point, region, size, hold=0.2): + self.clicks.append((point, hold)) + self.index += 1 + + +class IdleTests(unittest.TestCase): + def setUp(self): + self.flow = load_flow(ROOT / 'workflows/idle_claim.json') + self.matcher = Matcher(ROOT / 'assets') + self.region = Region(0, 0, 562, 1002) + + def image(self, state): + image = Image.new('RGB', (562, 1002), (42, 58, 73)) + for spec in self.flow['states'][state]: + template = Image.open(ROOT / 'assets' / spec['template']).convert('RGB') + x, y, _, _ = spec['search'] + image.paste(template, (x + 5, y + 5)) + return image + + def runner(self, states): + desktop = IdleDesktop([self.image(state) for state in states]) + return desktop, IdleRunner(desktop, self.matcher, self.flow, + lambda _: self.region, log=lambda _: None, timeout=0.8) + + def test_claims_reward_with_long_press_and_returns_home(self): + desktop, runner = self.runner(['home', 'available', 'reward', 'claimed', 'home']) + self.assertEqual(runner.run(), 'claimed') + self.assertEqual(desktop.clicks, [ + (self.flow['clicks']['open_pig'], 0.2), + (self.flow['clicks']['claim'], 0.8), + (self.flow['clicks']['dismiss_reward'], 0.2), + (self.flow['clicks']['close'], 0.2), + ]) + + def test_grey_button_skips_claim_and_returns_home(self): + desktop, runner = self.runner(['home', 'claimed', 'home']) + self.assertEqual(runner.run(), 'no_reward') + self.assertEqual(desktop.clicks, [ + (self.flow['clicks']['open_pig'], 0.2), + (self.flow['clicks']['close'], 0.2), + ]) + + +if __name__ == '__main__': + unittest.main() diff --git a/workflows/idle_claim.json b/workflows/idle_claim.json new file mode 100644 index 0000000..acd3df6 --- /dev/null +++ b/workflows/idle_claim.json @@ -0,0 +1,24 @@ +{ + "name": "小金猪挂机奖励领取", + "states": { + "home": [{"template": "home.png", "search": [150, 730, 410, 865]}], + "available": [ + {"template": "idle_dialog_title.png", "search": [170, 260, 400, 380]}, + {"template": "idle_claim_available.png", "search": [270, 645, 535, 825]} + ], + "claimed": [ + {"template": "idle_dialog_title.png", "search": [170, 260, 400, 380]}, + {"template": "idle_claimed.png", "search": [270, 645, 535, 825]} + ], + "reward": [ + {"template": "idle_reward.png", "search": [120, 220, 440, 370], "threshold": 0.8}, + {"template": "idle_dismiss.png", "search": [145, 610, 420, 730]} + ] + }, + "clicks": { + "open_pig": [0.135, 0.607], + "claim": [0.72, 0.73], + "dismiss_reward": [0.50, 0.67], + "close": [0.50, 0.94] + } +}