重写领取邮件;tap_element并入tap

This commit is contained in:
zhbaor 2024-11-18 16:01:48 +08:00
parent fd7b82892d
commit 4d01bf76cf
53 changed files with 206 additions and 178 deletions

View file

@ -252,6 +252,8 @@ class RegularTaskPart(ConfModel):
check_mail_enable: bool = True
"领取邮件奖励"
delete_read_mail: bool = False
"删除已读邮件"
maa_enable: bool = True
"日常任务"
maa_gap: float = 3

View file

@ -18,17 +18,17 @@ def login_start(solver: BaseSolver):
@edge(Scene.CONFIRM, Scene.LOGIN_START)
def confirm(solver: BaseSolver):
solver.tap_element("confirm")
solver.tap("confirm")
@edge(Scene.NOTICE, Scene.INDEX)
def close_notice(solver: BaseSolver):
solver.tap_element("notice")
solver.tap("notice")
@edge(Scene.NETWORK_CHECK, Scene.LOGIN_START)
def network_check_cancel(solver: BaseSolver):
solver.tap_element("confirm")
solver.tap("confirm")
@edge(Scene.MOON_FESTIVAL, Scene.SIGN_IN_DAILY)
@ -43,12 +43,12 @@ def story_stage(solver: BaseSolver):
@edge(Scene.STORY, Scene.STORY_SKIP)
def skip_story(solver: BaseSolver):
solver.tap_element("story_skip")
solver.tap("story_skip")
@edge(Scene.STORY_SKIP, Scene.OPERATOR_BEFORE)
def skip_story_confirm(solver: BaseSolver):
solver.tap_element("story_skip_confirm_dialog", x_rate=0.94)
solver.tap("story_skip_confirm_dialog", x_rate=0.94)
@edge(Scene.OPERATOR_DETAILS, Scene.OPERATOR_MANAGEMENT)

View file

@ -23,4 +23,4 @@ def friend_visiting_back(solver: BaseSolver):
@edge(Scene.BACK_TO_FRIEND_LIST, Scene.BUSINESS_CARD)
def back_to_friend_confirm(solver: BaseSolver):
solver.tap_element("double_confirm/main", x_rate=1)
solver.tap("double_confirm/main", x_rate=1)

View file

@ -37,17 +37,17 @@ def back_to_index(solver: BaseSolver):
@edge(Scene.LEAVE_INFRASTRUCTURE, Scene.INDEX)
def leave_infrastructure(solver: BaseSolver):
solver.tap_element("double_confirm/main", x_rate=1)
solver.tap("double_confirm/main", x_rate=1)
@edge(Scene.DOWNLOAD_VOICE_RESOURCES, Scene.INDEX)
def dont_download_voice(solver: BaseSolver):
solver.tap_element("double_confirm/main", x_rate=0)
solver.tap("double_confirm/main", x_rate=0)
@edge(Scene.LOGIN_QUICKLY, Scene.INDEX)
def login_quickly(solver: BaseSolver):
solver.tap_element("login_awake")
solver.tap("login_awake")
@edge(Scene.LOGIN_CAPTCHA, Scene.INDEX)
@ -63,7 +63,7 @@ def login_bilibili(solver: BaseSolver):
@edge(Scene.EXIT_GAME, Scene.INDEX)
def exit_cancel(solver: BaseSolver):
solver.tap_element("double_confirm/main", x_rate=0)
solver.tap("double_confirm/main", x_rate=0)
@edge(Scene.MATERIEL, Scene.INDEX)

View file

@ -9,9 +9,9 @@ from .utils import edge
@edge(Scene.MISSION_DAILY, Scene.MISSION_WEEKLY)
@edge(Scene.MISSION_TRAINEE, Scene.MISSION_WEEKLY)
def mission_to_weekly(solver: BaseSolver):
solver.tap_element("mission_weekly")
solver.tap("mission_weekly")
@edge(Scene.MISSION_TRAINEE, Scene.MISSION_DAILY)
def mission_trainee_to_daily(solver: BaseSolver):
solver.tap_element("mission_daily")
solver.tap("mission_daily")

View file

@ -53,7 +53,7 @@ from .utils import edge
@edge(Scene.OPERATOR_DETAILS, Scene.NAVIGATION_BAR)
@edge(Scene.ROGUE_INDEX, Scene.NAVIGATION_BAR)
def index_nav(solver: BaseSolver):
solver.tap_element("nav_button")
solver.tap("nav_button")
# 不加从导航栏到基建首页的边,防止在基建内循环

View file

@ -24,17 +24,17 @@ def operation_back(solver: BaseSolver):
@edge(Scene.OPERATOR_FIGHT, Scene.OPERATOR_GIVEUP)
def operation_fight(solver: BaseSolver):
solver.tap_element("fight/gear")
solver.tap("fight/gear")
@edge(Scene.OPERATOR_GIVEUP, Scene.OPERATOR_FAILED)
def operation_give_up(solver: BaseSolver):
solver.tap_element("fight/give_up")
solver.tap("fight/give_up")
@edge(Scene.OPERATOR_FAULT_CONFIRM, Scene.OPERATOR_FAILED)
def operation_fault_confirm(solver: BaseSolver):
solver.tap_element("double_confirm/main", x_rate=1)
solver.tap("double_confirm/main", x_rate=1)
@edge(Scene.OPERATOR_FINISH, Scene.OPERATOR_BEFORE)

View file

@ -13,7 +13,7 @@ def recruit_result(solver: BaseSolver):
@edge(Scene.REFRESH_TAGS, Scene.RECRUIT_TAGS)
def refresh_cancel(solver: BaseSolver):
solver.tap_element("double_confirm/main", x_rate=0)
solver.tap("double_confirm/main", x_rate=0)
@edge(Scene.RECRUIT_TAGS, Scene.RECRUIT_MAIN)
@ -23,4 +23,4 @@ def recruit_back(solver: BaseSolver):
@edge(Scene.SKIP, Scene.RECRUIT_AGENT)
def skip(solver: BaseSolver):
solver.tap_element("skip")
solver.tap("skip")

View file

@ -37,7 +37,7 @@ def infra_arrange_confirm(solver: BaseSolver):
@edge(Scene.INFRA_ARRANGE_ORDER, Scene.RIIC_OPERATOR_SELECT)
def infra_arrange_order(solver: BaseSolver):
solver.tap_element("arrange_blue_yes", x_rate=0.66)
solver.tap("arrange_blue_yes", x_rate=0.66)
@edge(Scene.RIIC_REPORT, Scene.CTRLCENTER_ASSISTANT)
@ -47,12 +47,12 @@ def riic_back(solver: BaseSolver):
@edge(Scene.CTRLCENTER_ASSISTANT, Scene.RIIC_REPORT)
def riic(solver: BaseSolver):
solver.tap_element("control_central_assistants")
solver.tap("control_central_assistants")
@edge(Scene.INFRA_MAIN, Scene.CTRLCENTER_ASSISTANT)
def control_central(solver: BaseSolver):
solver.tap_element("control_central")
solver.tap("control_central")
@edge(Scene.SANITY_CHARGE, Scene.INFRA_MAIN)
@ -72,4 +72,4 @@ def switch_order(solver: BaseSolver):
@edge(Scene.PRODUCT_SWITCHING_CONFIRM, Scene.FACTORY_ROOMS)
def product_switching_confirm(solver: BaseSolver):
solver.tap_element("double_confirm/main", x_rate=0)
solver.tap("double_confirm/main", x_rate=0)

View file

@ -7,10 +7,10 @@ from .utils import edge
@edge(Scene.UNKNOW_ROGUE, Scene.ROGUE_INDEX)
@edge(Scene.ROGUE_SELECT, Scene.ROGUE_INDEX)
def infra_back(solver: BaseSolver):
solver.tap_element("rogue/back")
solver.tap("rogue/back")
@edge(Scene.ROGUE_ABANDON, Scene.ROGUE_INDEX)
@edge(Scene.ROGUE_REFRESH_SHOP, Scene.UNKNOW_ROGUE)
def double_confirm_back(solver: BaseSolver):
solver.tap_element("double_confirm/main", x_rate=1)
solver.tap("double_confirm/main", x_rate=1)

View file

@ -26,4 +26,4 @@ def shop_back(solver: BaseSolver):
@edge(Scene.SHOP_TRADE_TOKEN, Scene.SHOP_TOKEN)
def trade_cancel(solver: BaseSolver):
solver.tap_element("shop/trade_token_dialog", x_rate=0)
solver.tap("shop/trade_token_dialog", x_rate=0)

View file

@ -35,4 +35,4 @@ def sss_back(solver: BaseSolver):
@edge(Scene.SSS_ABANDON_DROP_IN_FIGHT, Scene.OPERATOR_FIGHT)
@edge(Scene.SSS_EXIT_CONFIRM, Scene.SSS_TERMINATED)
def sss_exit(solver: BaseSolver):
solver.tap_element("double_confirm/main", x_rate=1)
solver.tap("double_confirm/main", x_rate=1)

View file

@ -153,7 +153,7 @@ class Recognizer:
self.scene = Scene.DRONE_ACCELERATE
elif self.find("factory_collect"):
self.scene = Scene.FACTORY_ROOMS
elif self.find("mail"):
elif self.find("mail/banner"):
self.scene = Scene.MAIL
elif self.find("navigation/record_restoration"):
self.scene = Scene.OPERATOR_CHOOSE_LEVEL
@ -671,7 +671,7 @@ class Recognizer:
judge: bool = True,
strict: bool = False,
threshold: float = 0.0,
) -> tp.Scope:
) -> tp.Scope | None:
"""
查找元素是否出现在画面中

View file

@ -61,7 +61,9 @@ color = {
"login_connecting": (760, 881),
"login_loading": (920, 388),
"login_logo": (601, 332),
"mail": (307, 39),
"mail/banner": (307, 39),
"mail/collect": (1601, 979),
"mail/delete": (1226, 978),
"mission_collect": (1521, 164),
"mission_trainee_on": (690, 17),
"nav_bar": (655, 0),
@ -219,6 +221,8 @@ template_matching = {
"loading2": (620, 247),
"loading3": (1681, 1000),
"loading4": (828, 429),
"mail/clean": ((1560, 150), (1830, 390)),
"mail/complete": ((1560, 150), (1830, 390)),
"main_theme": (283, 945),
"main_theme_small": (321, 973),
"materiel_ico": (892, 61),

View file

@ -174,22 +174,36 @@ class BaseSolver:
judge: bool = True,
strict: bool = False,
score=0.0,
) -> tp.Scope:
) -> tp.Scope | None:
return config.recog.find(res, draw, scope, thres, judge, strict, score)
def tap(
self,
poly: tp.Location,
poly: tp.Location | tp.Res,
x_rate: float = 0.5,
y_rate: float = 0.5,
interval: float = 1,
) -> None:
"""tap"""
):
"""点击元素或坐标
Args:
poly (tp.Location | tp.Res): 元素名区域或坐标
x_rate (float, optional): 区域中横坐标的比例. Defaults to 0.5.
y_rate (float, optional): 区域中纵坐标的比例. Defaults to 0.5.
interval (float, optional): 点击后等待动画的时长. Defaults to 1.
Raises:
MowerExit: 停止运行
RecognizeError: 未识别到元素
"""
if config.stop_mower.is_set():
raise MowerExit
if isinstance(poly, str):
poly = self.find(poly)
if poly is None:
raise RecognizeError("未识别到{res}元素")
self.tap_info = None, None
pos = self.get_pos(poly, x_rate, y_rate)
config.device.tap(pos)
config.device.tap(self.get_pos(poly, x_rate, y_rate))
if interval > 0:
self.sleep(interval)
@ -232,28 +246,6 @@ class BaseSolver:
config.device.launch()
config.recog.update()
def tap_element(
self,
element_name: tp.Res,
x_rate: float = 0.5,
y_rate: float = 0.5,
interval: float = 1,
score: float = 0.0,
draw: bool = False,
scope: tp.Scope = None,
judge: bool = True,
detected: bool = False,
thres: Optional[int] = None,
) -> bool:
"""tap element"""
element = self.find(
element_name, draw, scope, judge=judge, score=score, thres=thres
)
if detected and element is None:
return False
self.tap(element, x_rate, y_rate, interval)
return True
def tap_index_element(
self,
name: Literal[

View file

@ -155,7 +155,11 @@ Res = Literal[
"login_captcha",
"login_connecting",
"login_logo",
"mail",
"mail/banner",
"mail/clean",
"mail/collect",
"mail/complete",
"mail/delete",
"main_theme",
"materiel_ico",
"mission_collect",
@ -354,7 +358,6 @@ Res = Literal[
"ra/waste_time_button",
"ra/waste_time_dialog",
"read_and_agree",
"read_mail",
"recruit/agent_token",
"recruit/agent_token_first",
"recruit/begin_recruit",