Skip to content

Commit 967a012

Browse files
authored
Merge pull request #1851 from runhey/dev
Dev
2 parents 71fa432 + 3d24374 commit 967a012

39 files changed

Lines changed: 1173 additions & 95 deletions

‎.gitignore‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,6 @@ console.bat
272272
.vscode/*
273273
tasks/AutoCheckinBigGod/frida-server-17.6.2-android-x86_64
274274
oas.bat
275+
276+
# Per-instance FrogBoss prediction and result history
277+
data/frog_oas/

‎tasks/Component/SwitchOnmyoji/switch_onmyoji.py‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
from module.atom.image import RuleImage
2+
from module.base.timer import Timer
3+
from module.exception import ScriptError
24
from tasks.Component.SwitchOnmyoji.assets import SwitchOnmyojiAssets
35
from tasks.Component.SwitchOnmyoji.config import Onmyoji
46
from tasks.base_task import BaseTask
57
from module.logger import logger
68

79

810
class SwitchOnmyoji(BaseTask, SwitchOnmyojiAssets):
11+
# 上限用来给两个 while 循环兜底:资源坐标过期或页面不对时不再无限点,
12+
# 改为抛出带上下文的 ScriptError,让上层决定重启还是人工接管。
13+
SWITCH_TAB_TIMEOUT = 20
14+
SWITCH_BATTLE_TIMEOUT = 20
915

1016
def switch_onmyoji(self, onmyoji: Onmyoji):
1117
"""
@@ -29,15 +35,27 @@ def switch_role(self, role: Onmyoji, battle_dict: dict, check_img: RuleImage):
2935
:param battle_dict: 角色与战斗图标的映射
3036
:param check_img: 检查是否回到主界面的图标
3137
"""
38+
# 两个循环都必须在超时后抛出,而不是继续点击
39+
tab_timer = Timer(self.SWITCH_TAB_TIMEOUT).start()
3240
while True:
41+
if tab_timer.reached():
42+
raise ScriptError('Switch onmyoji: cannot reach the role list, '
43+
'the onmyoji tab was not opened after '
44+
f'{self.SWITCH_TAB_TIMEOUT}s. '
45+
'Check whether the onmyoji/hero assets still match the game UI')
3346
self.screenshot()
3447
if any(self.appear(battle_icon) for battle_icon in battle_dict.values()):
3548
break
3649
self.appear_then_click(self.I_ONMYOJI_SWITCH, interval=0.8)
3750
battle_img = battle_dict.get(role, None)
3851
if not battle_img:
3952
raise ValueError('Incorrect role type')
53+
battle_timer = Timer(self.SWITCH_BATTLE_TIMEOUT).start()
4054
while True:
55+
if battle_timer.reached():
56+
raise ScriptError(f'Switch onmyoji: cannot select {role}, '
57+
'the role list stayed unconfirmed after '
58+
f'{self.SWITCH_BATTLE_TIMEOUT}s')
4159
self.screenshot()
4260
if self.appear(check_img, interval=0.8):
4361
break

‎tasks/Exploration/solo.py‎

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# @author runhey
33
# github https://github.com/runhey
44
from time import sleep
5+
from copy import deepcopy
56
from cached_property import cached_property
67

78
from module.logger import logger
@@ -134,7 +135,6 @@ def run_leader(self):
134135
while 1:
135136
self.screenshot()
136137
scene = self.get_current_scene()
137-
logger.info(f'[run_leader] Current scene: {scene.name}') # TODO 2026.06.22 之后删掉这个刷屏的
138138
# 探索大世界
139139
if scene == Scene.WORLD:
140140
# 打开右边箭头
@@ -337,6 +337,15 @@ def invite_friend(self, name: str = None, find_mode: FindMode = FindMode.AUTO_FI
337337
friend_class[i] = '跨区'
338338
logger.info(f'Friend class: {friend_class}')
339339

340+
# 76e2a874(#1509) 把 I_FLAG_2_ON 的 roi 改到了 tab 标签栏上方的空白区
341+
# (472,82,32,11) / (454,74,56,26),导致第 2 个 tab 的选中态永远匹配不上,
342+
# while index == 1 死循环点满 10 次触发 GameTooManyClickError。
343+
# 这里深拷贝一份并还原成 439be142(#1443) 的 roi,不改动原资源。
344+
# https://github.com/runhey/OnmyojiAutoScript/issues/1844
345+
flag_2_on = deepcopy(self.I_FLAG_2_ON)
346+
flag_2_on.roi_front = [471, 128, 54, 18]
347+
flag_2_on.roi_back = (471, 128, 54, 18)
348+
340349
is_select: bool = False # 是否选中了好友
341350
if find_mode == FindMode.RECENT_FRIEND:
342351
logger.info('Find recent friend')
@@ -347,7 +356,7 @@ def invite_friend(self, name: str = None, find_mode: FindMode = FindMode.AUTO_FI
347356
recent_index = friend_class.index('最近')
348357
while recent_index == 1:
349358
self.screenshot()
350-
if self.appear(self.I_FLAG_2_ON):
359+
if self.appear(flag_2_on):
351360
break
352361
if self.appear_then_click(self.I_FLAG_2_OFF, interval=1):
353362
continue
@@ -378,7 +387,7 @@ def invite_friend(self, name: str = None, find_mode: FindMode = FindMode.AUTO_FI
378387
continue
379388
while index == 1:
380389
self.screenshot()
381-
if self.I_FLAG_2_ON.match_mean_color(self.device.image, self.INVITE_FLAG_ON, 10):
390+
if flag_2_on.match_mean_color(self.device.image, self.INVITE_FLAG_ON, 10):
382391
break
383392
if self.click(self.I_FLAG_2_OFF, interval=1):
384393
continue

‎tasks/FrogBoss/assets.py‎

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,48 +12,66 @@ class FrogBossAssets:
1212

1313
# Image Rule Assets
1414
# 左边竞猜
15-
I_BET_LEFT = RuleImage(roi_front=(95,308,145,100), roi_back=(58,248,245,195), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_left.png")
15+
I_BET_LEFT = RuleImage(roi_front=(288,301,120,102), roi_back=(222,251,245,195), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_left.png")
1616
# 右边竞猜
17-
I_BET_RIGHT = RuleImage(roi_front=(1038,303,146,100), roi_back=(1012,268,187,208), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_right.png")
17+
I_BET_RIGHT = RuleImage(roi_front=(1093,307,118,94), roi_back=(1048,248,187,208), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_right.png")
1818
# description
19-
I_BET_SUCCESS_BOX = RuleImage(roi_front=(593,419,87,50), roi_back=(564,378,140,133), threshold=0.75, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_success_box.png")
19+
I_BET_SUCCESS_BOX = RuleImage(roi_front=(713,399,80,45), roi_back=(661,331,193,182), threshold=0.75, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_success_box.png")
2020
# 左边赢了
21-
I_SUCCESS_LEFT = RuleImage(roi_front=(123,316,100,100), roi_back=(91,254,202,221), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_success_left.png")
21+
I_SUCCESS_LEFT = RuleImage(roi_front=(292,306,100,100), roi_back=(238,243,202,221), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_success_left.png")
2222
# 右边输了
23-
I_FAILURE_RIGHT = RuleImage(roi_front=(1063,291,100,100), roi_back=(993,242,224,199), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_failure_right.png")
24-
# description
25-
I_NEXT_COMPETITION = RuleImage(roi_front=(673,510,42,36), roi_back=(658,488,91,98), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_next_competition.png")
23+
I_FAILURE_RIGHT = RuleImage(roi_front=(1097,303,100,100), roi_back=(1029,256,224,199), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_failure_right.png")
24+
# 开始下一局
25+
I_NEXT_COMPETITION = RuleImage(roi_front=(783,492,28,22), roi_back=(692,437,157,147), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_next_competition.png")
2626
# 30万金币
27-
I_GOLD_30 = RuleImage(roi_front=(858,494,78,76), roi_back=(809,427,147,187), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_gold_30.png")
27+
I_GOLD_30 = RuleImage(roi_front=(862,499,78,76), roi_back=(831,441,147,187), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_gold_30.png")
2828
# 确认竞猜
29-
I_BET_SURE = RuleImage(roi_front=(1025,402,100,100), roi_back=(1000,297,200,226), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_sure.png")
30-
# description
31-
I_GOLD_30_CHECK = RuleImage(roi_front=(513,196,58,53), roi_back=(402,141,459,489), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_gold_30_check.png")
29+
I_BET_SURE = RuleImage(roi_front=(1025,402,100,100), roi_back=(972,340,200,226), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_sure.png")
30+
# 获胜奖励说明弹窗中的竞猜金币
31+
I_GOLD_30_CHECK = RuleImage(roi_front=(513,196,58,53), roi_back=(495,195,104,111), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_gold_30_check.png")
3232
# description
33-
I_BETTED = RuleImage(roi_front=(93,352,125,54), roi_back=(49,283,1192,161), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_betted.png")
33+
I_BETTED = RuleImage(roi_front=(1093,313,125,54), roi_back=(207,240,1058,312), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_betted.png")
3434
# description
35-
I_SUCCESS_RIGHT = RuleImage(roi_front=(1048,341,122,116), roi_back=(999,243,201,260), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_success_right.png")
35+
I_SUCCESS_RIGHT = RuleImage(roi_front=(1098,289,122,116), roi_back=(1040,250,201,260), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_success_right.png")
3636
# description
37-
I_FAILURE_LEFT = RuleImage(roi_front=(116,307,100,100), roi_back=(76,256,193,219), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_failure_left.png")
37+
I_FAILURE_LEFT = RuleImage(roi_front=(296,303,100,100), roi_back=(243,245,212,259), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_failure_left.png")
3838
# description
39-
I_BET_FAILURE = RuleImage(roi_front=(496,252,269,72), roi_back=(439,220,400,152), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_failure.png")
39+
I_BET_FAILURE = RuleImage(roi_front=(625,277,269,72), roi_back=(496,222,447,211), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_failure.png")
4040
# description
41-
I_BET_SUCCESS = RuleImage(roi_front=(512,264,260,73), roi_back=(433,214,418,151), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_success.png")
41+
I_BET_SUCCESS = RuleImage(roi_front=(625,278,260,73), roi_back=(482,243,521,225), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_bet_success.png")
4242

4343

4444
# Image Rule Assets
4545
# description
46-
I_FROG_BOSS_ENTER = RuleImage(roi_front=(1191,391,36,38), roi_back=(1174,135,78,320), threshold=0.7, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_boss_enter.png")
46+
I_FROG_BOSS_ENTER = RuleImage(roi_front=(1188,303,36,38), roi_back=(1169,203,78,320), threshold=0.7, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_boss_enter.png")
4747
# 休息中
48-
I_FROG_BOSS_REST = RuleImage(roi_front=(510,274,169,64), roi_back=(492,260,220,113), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_boss_rest.png")
48+
I_FROG_BOSS_REST = RuleImage(roi_front=(627,284,169,64), roi_back=(601,259,220,113), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_boss_rest.png")
49+
# 竞猜主页面
50+
I_FROG_CHECK = RuleImage(roi_front=(664,31,148,65), roi_back=(551,4,371,145), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_check.png")
51+
# 进入记录页面
52+
I_FROG_LOG = RuleImage(roi_front=(1171,624,43,41), roi_back=(1157,601,83,89), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_log.png")
53+
#
54+
I_FROG_LOG_CHECK = RuleImage(roi_front=(549,31,192,52), roi_back=(469,0,371,145), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_log_check.png")
55+
# 上一局胜
56+
I_FROG_LAST_WIN = RuleImage(roi_front=(178,210,61,49), roi_back=(148,147,114,123), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_last_win.png")
57+
# 上一局败
58+
I_FROG_LAST_LOSE = RuleImage(roi_front=(178,210,61,49), roi_back=(148,147,114,123), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_last_lose.png")
59+
# 关闭记录
60+
I_FROG_LOG_CLOSE = RuleImage(roi_front=(1188,99,43,41), roi_back=(1166,73,83,89), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_log_close.png")
61+
# 上一局选择红色
62+
I_FROG_LAST_SELECT_RED = RuleImage(roi_front=(342,149,36,38), roi_back=(327,120,70,77), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_last_select_red.png")
63+
# 上一句选择蓝色
64+
I_FROG_LAST_SELECT_BLUE = RuleImage(roi_front=(342,149,36,38), roi_back=(327,120,70,77), threshold=0.8, method="Template matching", file="./tasks/FrogBoss/fb/fb_frog_last_select_blue.png")
4965

5066

5167
# Ocr Rule Assets
5268
# Ocr-description
53-
O_LEFT_COUNT = RuleOcr(roi=(143,496,69,31), area=(143,496,69,31), mode="Digit", method="Default", keyword="", name="left_count")
69+
O_LEFT_COUNT = RuleOcr(roi=(326,469,69,31), area=(326,469,69,31), mode="Digit", method="Default", keyword="", name="left_count")
5470
# Ocr-description
55-
O_RIGHT_COUNT = RuleOcr(roi=(1105,497,77,32), area=(1105,497,77,32), mode="Digit", method="Default", keyword="", name="right_count")
71+
O_RIGHT_COUNT = RuleOcr(roi=(1139,472,77,32), area=(1139,472,77,32), mode="Digit", method="Default", keyword="", name="right_count")
5672
# Ocr-description
57-
O_TIME_REMAIN = RuleOcr(roi=(594,564,91,35), area=(594,564,91,35), mode="Duration", method="Default", keyword="", name="time_remain")
73+
O_TIME_REMAIN = RuleOcr(roi=(705,533,91,35), area=(705,533,91,35), mode="Duration", method="Default", keyword="", name="time_remain")
74+
# 上一句对局时间
75+
O_FROG_LAST_TIME = RuleOcr(roi=(120,154,160,30), area=(120,154,160,30), mode="Single", method="Default", keyword="", name="frog_last_time")
5876

5977

‎tasks/FrogBoss/config.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class Strategy(str, Enum):
1414
Minority = 'frog_minority'
1515
Bilibili = 'frog_bilibili'
1616
Dashen = 'frog_dashen'
17+
Oas = 'frog_oas'
1718
AlwaysRed = 'frog_always_red'
1819
AlwaysBlue = 'frog_always_blue'
1920

1.49 KB
Loading

‎tasks/FrogBoss/fb/fb_bet_left.png‎

-3.07 KB
Loading

‎tasks/FrogBoss/fb/fb_bet_right.png‎

-4.5 KB
Loading
956 Bytes
Loading
-1.38 KB
Loading

0 commit comments

Comments
 (0)