### 在提问之前... - [x] 我已经搜索了现有的 issues(#938 #605 #833 #1369 等邀请卡死类均 OPEN 未解决) - [x] 我在提问题之前至少花费了 5 分钟来思考和准备 - [x] 我已经阅读了文档中的 常见问题(FAQ) - [x] 这个问题出现了至少三次,不是偶发的 ### 描述你的问题 运行【八岐大蛇/御魂·虚无】任务,配置为邀请 1 人(队长端)。 **第一场战斗结束后,在"默认邀请"环节,脚本点了"默认邀请"的勾选,但点完勾选后识别不到"已勾选"状态,陷入死循环,60 秒后触发 `GameStuckError: Wait too long`。** 已定位到根因(附源码级证据): `tasks/Component/GeneralInvite/general_invite.py` 的 `check_and_invite()` 中"默认邀请"分支: ```python if default_invite: if self.appear(self.I_I_DEFAULT) or self.appear(self.I_I_NO_DEFAULT): logger.info('Click default invite') while 1: # ← 死循环,无次数上限 self.screenshot() if self.appear(self.I_I_DEFAULT): # 唯一退出条件:识别到"已勾选" break if self.appear_then_click(self.I_I_NO_DEFAULT, interval=1): continue ``` `assets.py` 中两个模板定义: ```python I_I_NO_DEFAULT = RuleImage(roi_front=(542,343,36,35), roi_back=(542,343,36,35), threshold=0.8, ..., file="gi_i_no_default.png") # 未勾选 I_I_DEFAULT = RuleImage(roi_front=(541,342,41,39), roi_back=(541,342,41,39), threshold=0.8, ..., file="gi_i_default.png") # 已勾选 ``` **问题**:点完勾选后,`gi_i_default.png`(已勾选模板)匹配不上当前游戏版本的勾选框图标,导致 `I_I_DEFAULT` 永远不出现、死循环出不去。且该模板 `roi_back == roi_front`(无兜底搜索范围,仅 41×39 像素精确匹配)+ threshold=0.8,对游戏 UI 微小更新极度敏感。 ### 如何复现 1. 配置八岐大蛇/御魂任务,队长端邀请 1 人 2. 正常跑第一场战斗 3. 战斗结束后弹出"默认邀请",脚本点勾选 4. 偶发识别不到"已勾选",卡死直至 60s 超时 ### 预期行为 点完勾选后应识别到"已勾选"并退出循环,正常进入下一场,而非死循环卡死。 ### 相关 Logs ``` 2026-10-09 00:31:38.476 | general_invite.py:0540 | INFO | Click default invite 2026-10-09 00:32:38.083 | device.py:0156 | WARNING | Wait too long 2026-10-09 00:32:38.084 | device.py:0157 | WARNING | Waiting for set() 2026-10-09 00:32:38.133 | logger.py:0354 | ERROR | GameStuckError: Wait too long ``` ### 截图 No response ### 还有别的吗? 建议修复方向(任选或组合): 1. 更新 `gi_i_default.png` / `gi_i_no_default.png` 模板图适配当前游戏版本 2. 降低这两个模板的 threshold(0.8 → 0.65~0.7),并给 `roi_back` 留搜索余量 3. 给 `check_and_invite()` 的 `while 1` 循环加点击次数上限(如 5~10 次强制 break),防止识别失效时无限卡死
Activity
allesgutefy commentedon Oct 8, 2026
已自行解决,分享解决方案供参考。
问题
I_I_DEFAULT("默认邀请"已勾选)和I_I_NO_DEFAULT(未勾选)两个模板阈值 0.8 过高,点完勾选后识别不到"已勾选"状态,导致check_and_invite()死循环卡死、60 秒超时GameStuckError。解决方案
将
tasks/Component/GeneralInvite/assets.py中两个模板的阈值从 0.8 降到 0.65:改完重启 OAS 后问题解决。
建议
希望官方后续能:① 更新这两个勾选框模板图适配最新游戏版本;② 给
check_and_invite()的while 1循环加点击次数上限(如 5~10 次强制 break),防止识别失效时无限卡死。github-actions commentedon Oct 8, 2026
Issue 概要
八岐大蛇组队队长在战斗结束后的“默认邀请”环节,点击未勾选框后无法识别已勾选状态,最终因循环无退出条件触发
GameStuckError: Wait too long。关键证据链
点击此处展开
tasks/Orochi/script_task.py在队长流程第 154、340 行调用check_and_invite(self.config.orochi.invite_config.default_invite),所以八岐大蛇会进入共享邀请组件。tasks/Component/GeneralInvite/general_invite.py第 537–546 行中,默认邀请分支执行:I_I_DEFAULT识别到则退出;I_I_NO_DEFAULT,然后继续循环。I_I_DEFAULT持续匹配失败,函数就会一直循环,符合日志中从 “Click default invite” 到约 60 秒后Wait too long的现象。tasks/Component/GeneralInvite/assets.py第 83–85 行显示两个复选框模板都使用threshold=0.8,并且roi_back与roi_front相同,没有额外搜索范围。若当前客户端图标、缩放或渲染细节与模板存在差异,点击已经发生但已勾选状态仍可能无法匹配。最终 bug 原因
while 1是导致任务无法自恢复并最终超时的直接原因。check_and_invite()只接受I_I_DEFAULT作为成功条件 →I_I_DEFAULT使用固定小 ROI 和 0.8 阈值 → 识别不到时没有超时/降级路径 → 60 秒后由设备层抛出GameStuckError。给用户的建议
给开发者的修复方案
点击此处展开
check_and_invite()的默认邀请状态等待增加有界超时或最大点击次数;超限后记录当前状态并返回失败,让上层执行安全退出/重试,而不是等待设备层的 60 秒兜底超时。gi_i_default.png、gi_i_no_default.png,结合当前客户端截图重新确认坐标、尺寸、缩放和阈值;适当扩大roi_back或采用更稳健的状态判断。general_invite.py日志片段,用于确认是资源不匹配还是点击/渲染延迟。分支: master(正文未勾选 dev 分支)
代码范围: tasks/Orochi;共享组件 tasks/Component/GeneralInvite
相关类似 Issue: #605、#938、#833、#1369(均涉及组队邀请/邀请流程卡住;部分为不同任务或不同阶段)
Warning
Firewall blocked 1 domain
The following domain was blocked by the firewall during workflow execution:
ab.chatgpt.comTo allow these domains, add them to the
network.allowedlist in your workflow frontmatter:See Network Configuration for more information.
allesgutefy commentedon Oct 9, 2026
补充信息 - Issue 1881 根因已确认
已确认以下必选项:
已验证的真实根因
不是模板识别失败的问题(之前 Issue 描述中的假设是错误的)。
真实根因:tasks/Component/GeneralInvite/general_invite.py 第543-547行,点击 I_I_NO_DEFAULT(勾选框)后,代码立即截图判断 I_I_DEFAULT 状态,但游戏UI渲染需要约0.8秒才能更新状态。导致循环无法在超时前break,触发 GameStuckError。
已提交修复 PR
PR #1886 已提交,包含完整修复代码:在点击 I_I_NO_DEFAULT 后增加 0.8 秒延时,等待UI状态更新。
已在本地验证,0.8秒延时可正常识别已勾选状态并退出循环,不再重复邀请。
请优先审核 PR #1886。
Merge pull request #1886 from allesgutefy/fix/invite-default-checkbox…
fix: update GI assets and interval=3 for GI_GI_SURE
fix: use interval=3 instead of sleep(0.8) for both I_I_NO_DEFAULT and…
fix: add 0.8s delay after clicking I_I_NO_DEFAULT to wait for UI update
fix: add I_I_NO_DEFAULT interval=3 and update assets for new UI
fix: update interval=3 for I_I_NO_DEFAULT and I_GI_SURE in both Gener…
fix: update ui_ui_check and ui_ui_uncheck assets for new UI
Merge pull request #1931 from allesgutefy/fix/ui-check-assets
fix: update interval=3 for I_UI_UNCHECK and I_UI_CONFIRM in check_and…
Merge pull request #1930 from allesgutefy/fix/invite-default-checkbox-v5
fix: update ui_ui_check and ui_ui_uncheck assets for new UI
fix(upstream-sync): 批次23 复用共享取消按钮并放宽默认邀请点击间隔
test(upstream-sync): 批次23 新增共享 UI 收尾与突破券 OCR 回归测试
fix(GlobalGame): 勾选框素材与位置适配新版 UI(移植 runhey 916e6eb+5b556e92)
refactor(GeneralInvite): 邀请确认改用全局 UI 资产(移植 runhey 84eda19+e8df3ae0)
fix(GeneralInvite,素材):组队邀请改用共用勾选框素材 + interval=3(移植 runhey#1915/runhe…