From 004e354054bb03d5a210b007bef25be18c4ad2d7 Mon Sep 17 00:00:00 2001 From: Asriel Xu <42128862+xxz7528@users.noreply.github.com> Date: Sat, 11 Apr 2026 09:00:50 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=93=E7=95=8C?= =?UTF-8?q?=E8=B9=AD=E5=8D=A1=E6=97=B6=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E5=88=87=E6=8D=A2N=E5=8D=A1=E7=9A=84=E9=97=AE=E9=A2=98=20?= =?UTF-8?q?=E7=8E=B0=E6=9C=89=E4=BB=A3=E7=A0=81=E5=AD=98=E5=9C=A8check=5Fs?= =?UTF-8?q?elected=E5=87=BD=E6=95=B0=E6=B2=A1=E6=9D=A5=E5=BE=97=E5=8F=8A?= =?UTF-8?q?=E7=A8=B3=E5=AE=9A=E8=AF=86=E5=88=AB=EF=BC=8C=E9=9A=8F=E5=90=8E?= =?UTF-8?q?check=5Fclick=20=3D=20I=5FRS=5FN=E5=8D=B4=E5=8F=88=E6=8A=8A?= =?UTF-8?q?=E5=B7=B2=E9=80=89=E4=B8=AD=E7=9A=84N=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E6=88=90=E4=BA=86=E5=8F=AF=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E7=9A=84=20N=EF=BC=8C=E7=84=B6=E5=90=8E=E5=8F=88=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E4=BA=86=E4=B8=80=E6=AC=A1=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E5=8D=A1=E6=AD=BB=E3=80=82=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BA=86=E8=BF=99=E4=B8=80=E9=83=A8=E5=88=86=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E4=BB=A5=E4=BF=AE=E5=A4=8D=E8=BF=99=E4=B8=80?= =?UTF-8?q?=E9=97=AE=E9=A2=98:)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReplaceShikigami/replace_shikigami.py | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/tasks/Component/ReplaceShikigami/replace_shikigami.py b/tasks/Component/ReplaceShikigami/replace_shikigami.py index ba4da75f1..53eef3cb8 100644 --- a/tasks/Component/ReplaceShikigami/replace_shikigami.py +++ b/tasks/Component/ReplaceShikigami/replace_shikigami.py @@ -46,18 +46,36 @@ def switch_shikigami_class(self, shikigami_class: ShikigamiClass = ShikigamiClas check_selected = match_selected[shikigami_class] check_click = match_click[shikigami_class] # 选择式神的种类 - while 1: - self.screenshot() + timeout = Timer(10).start() + try: + while not timeout.reached(): + self.screenshot() - if self.appear(check_selected): - break - if self.appear(check_click, interval=1): - if self.wait_until_pos_stable(check_click, stable_time=0.8, timeout=2.5): - self.click(check_click) - continue - if self.click(self.C_SHIKIGAMI_SWITCH_1, interval=3.5): - continue - logger.info('Select shikigami class: %s' % shikigami_class) + # 已经切到了目标分类 + if self.appear(check_selected): + logger.info('Select shikigami class: %s' % shikigami_class) + return + + # 如识别到目标分类按钮,则点击 + if self.appear(check_click, interval=0.5): + if self.wait_until_pos_stable(check_click, stable_time=0.3, timeout=1.5): + self.click(check_click) + time.sleep(0.4) + + # 点完后只确认 selected 状态,避免下一轮又把 selected 当 click target + self.screenshot() + if self.appear(check_selected): + logger.info('Select shikigami class: %s' % shikigami_class) + return + continue + + # 没识别到就重新展开分类面板 + self.click(self.C_SHIKIGAMI_SWITCH_1, interval=3.5) + + raise GameStuckError(f'switch_shikigami_class timeout: {shikigami_class}') + + finally: + logger.info('Select shikigami class success.') def unset_shikigami_max_lv(self): """ From 4c0bc6f33c6010b2c53921969c39b7b158411618 Mon Sep 17 00:00:00 2001 From: Asriel Xu <42128862+xxz7528@users.noreply.github.com> Date: Sat, 11 Apr 2026 09:43:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=93=E7=95=8C?= =?UTF-8?q?=E8=B9=AD=E5=8D=A1N=E5=8D=A1=E6=97=A0=E6=B3=95=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E9=80=89=E4=B8=AD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReplaceShikigami/replace_shikigami.py | 48 ++++++++----------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/tasks/Component/ReplaceShikigami/replace_shikigami.py b/tasks/Component/ReplaceShikigami/replace_shikigami.py index 53eef3cb8..c3d0b8420 100644 --- a/tasks/Component/ReplaceShikigami/replace_shikigami.py +++ b/tasks/Component/ReplaceShikigami/replace_shikigami.py @@ -46,36 +46,30 @@ def switch_shikigami_class(self, shikigami_class: ShikigamiClass = ShikigamiClas check_selected = match_selected[shikigami_class] check_click = match_click[shikigami_class] # 选择式神的种类 - timeout = Timer(10).start() - try: - while not timeout.reached(): - self.screenshot() - - # 已经切到了目标分类 - if self.appear(check_selected): - logger.info('Select shikigami class: %s' % shikigami_class) - return - - # 如识别到目标分类按钮,则点击 - if self.appear(check_click, interval=0.5): - if self.wait_until_pos_stable(check_click, stable_time=0.3, timeout=1.5): - self.click(check_click) - time.sleep(0.4) + while 1: + self.screenshot() - # 点完后只确认 selected 状态,避免下一轮又把 selected 当 click target - self.screenshot() - if self.appear(check_selected): - logger.info('Select shikigami class: %s' % shikigami_class) - return - continue + # 已经切到了目标分类 + if self.appear(check_selected): + logger.info('Select shikigami class: %s' % shikigami_class) + return - # 没识别到就重新展开分类面板 - self.click(self.C_SHIKIGAMI_SWITCH_1, interval=3.5) + # 看到了目标分类按钮,就点它 + if self.appear(check_click, interval=1): + if self.wait_until_pos_stable(check_click, stable_time=0.8, timeout=2.5): + self.click(check_click) + logger.info('Clicked shikigami class: %s' % shikigami_class) + time.sleep(1) + # 点完后只确认 selected 状态,避免下一轮又把 selected 当 click target + self.screenshot() + if self.appear(check_selected): + logger.info('Select shikigami class: %s' % shikigami_class) + break + continue - raise GameStuckError(f'switch_shikigami_class timeout: {shikigami_class}') - - finally: - logger.info('Select shikigami class success.') + # 没看到就展开分类面板 + self.click(self.C_SHIKIGAMI_SWITCH_1, interval=1.0) + time.sleep(1) def unset_shikigami_max_lv(self): """