重写领取邮件;tap_element并入tap
This commit is contained in:
parent
fd7b82892d
commit
4d01bf76cf
53 changed files with 206 additions and 178 deletions
BIN
mower/resources/mail/clean.png
(Stored with Git LFS)
Normal file
BIN
mower/resources/mail/clean.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
mower/resources/mail/collect.png
(Stored with Git LFS)
Normal file
BIN
mower/resources/mail/collect.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
mower/resources/mail/complete.png
(Stored with Git LFS)
Normal file
BIN
mower/resources/mail/complete.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
mower/resources/mail/delete.png
(Stored with Git LFS)
Normal file
BIN
mower/resources/mail/delete.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
mower/resources/read_mail.png
(Stored with Git LFS)
BIN
mower/resources/read_mail.png
(Stored with Git LFS)
Binary file not shown.
|
@ -172,7 +172,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
||||||
elif scene == Scene.INFRA_TODOLIST:
|
elif scene == Scene.INFRA_TODOLIST:
|
||||||
return self.todo_list()
|
return self.todo_list()
|
||||||
elif scene == Scene.RIIC_OPERATOR_SELECT:
|
elif scene == Scene.RIIC_OPERATOR_SELECT:
|
||||||
self.tap_element("confirm_blue")
|
self.tap("confirm_blue")
|
||||||
else:
|
else:
|
||||||
self.scene_graph_navigation(Scene.INFRA_MAIN)
|
self.scene_graph_navigation(Scene.INFRA_MAIN)
|
||||||
self.last_room = ""
|
self.last_room = ""
|
||||||
|
@ -1795,14 +1795,14 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
||||||
for _count in range(tap_times):
|
for _count in range(tap_times):
|
||||||
self.tap((config.recog.w * 0.7, config.recog.h * 0.5), interval=0.1)
|
self.tap((config.recog.w * 0.7, config.recog.h * 0.5), interval=0.1)
|
||||||
else:
|
else:
|
||||||
self.tap_element("all_in")
|
self.tap("all_in")
|
||||||
self.tap(accelerate, y_rate=1)
|
self.tap(accelerate, y_rate=1)
|
||||||
else:
|
else:
|
||||||
accelerate = self.find("bill_accelerate")
|
accelerate = self.find("bill_accelerate")
|
||||||
while accelerate and not adjust_time:
|
while accelerate and not adjust_time:
|
||||||
logger.info("贸易站加速")
|
logger.info("贸易站加速")
|
||||||
self.tap(accelerate)
|
self.tap(accelerate)
|
||||||
self.tap_element("all_in")
|
self.tap("all_in")
|
||||||
self.tap((config.recog.w * 0.75, config.recog.h * 0.8))
|
self.tap((config.recog.w * 0.75, config.recog.h * 0.8))
|
||||||
config.recog.update()
|
config.recog.update()
|
||||||
if not (
|
if not (
|
||||||
|
@ -1861,7 +1861,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
||||||
if wait_confirm > 0:
|
if wait_confirm > 0:
|
||||||
logger.info(f"等待跑单 {str(wait_confirm)} 秒")
|
logger.info(f"等待跑单 {str(wait_confirm)} 秒")
|
||||||
self.sleep(wait_confirm)
|
self.sleep(wait_confirm)
|
||||||
self.tap_element("confirm_blue")
|
self.tap("confirm_blue")
|
||||||
if self.find("arrange_confirm"):
|
if self.find("arrange_confirm"):
|
||||||
_x0 = config.recog.w // 3 * 2 # double confirm
|
_x0 = config.recog.w // 3 * 2 # double confirm
|
||||||
_y0 = config.recog.h - 10
|
_y0 = config.recog.h - 10
|
||||||
|
@ -1959,7 +1959,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
||||||
ed = ret[0][1][0] # 终点
|
ed = ret[0][1][0] # 终点
|
||||||
self.swipe_noinertia(st, (ed[0] - st[0], 0))
|
self.swipe_noinertia(st, (ed[0] - st[0], 0))
|
||||||
while self.find("confirm_blue"):
|
while self.find("confirm_blue"):
|
||||||
self.tap_element("confirm_blue")
|
self.tap("confirm_blue")
|
||||||
|
|
||||||
self.last_room = room
|
self.last_room = room
|
||||||
|
|
||||||
|
|
|
@ -87,8 +87,8 @@ class AutoFight(SceneGraphSolver, FightMixin):
|
||||||
elif scene == Scene.OPERATOR_SELECT:
|
elif scene == Scene.OPERATOR_SELECT:
|
||||||
self.tap((1655, 781))
|
self.tap((1655, 781))
|
||||||
elif scene == Scene.STORY:
|
elif scene == Scene.STORY:
|
||||||
self.tap_element("story_skip")
|
self.tap("story_skip")
|
||||||
elif scene == Scene.STORY_SKIP:
|
elif scene == Scene.STORY_SKIP:
|
||||||
self.tap_element("story_skip_confirm_dialog", x_rate=0.94)
|
self.tap("story_skip_confirm_dialog", x_rate=0.94)
|
||||||
else:
|
else:
|
||||||
NavigationSolver().run(self.level_name, mode="copy")
|
NavigationSolver().run(self.level_name, mode="copy")
|
||||||
|
|
|
@ -31,7 +31,7 @@ class BattleChooseSolver(SceneGraphSolver):
|
||||||
|
|
||||||
def transition(self):
|
def transition(self):
|
||||||
if (scene := self.scene()) == Scene.OPERATOR_AGENT_SELECT:
|
if (scene := self.scene()) == Scene.OPERATOR_AGENT_SELECT:
|
||||||
self.tap_element("choose_agent/battle_confirm")
|
self.tap("choose_agent/battle_confirm")
|
||||||
elif scene in self.waiting_scene:
|
elif scene in self.waiting_scene:
|
||||||
self.waiting_solver()
|
self.waiting_solver()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -139,13 +139,13 @@ class BattleAgentChooseSolver(SceneGraphSolver):
|
||||||
if self.find("choose_agent/battle_empty"):
|
if self.find("choose_agent/battle_empty"):
|
||||||
self.cleard = True
|
self.cleard = True
|
||||||
else:
|
else:
|
||||||
self.tap_element("choose_agent/clear_battle", interval=0.1)
|
self.tap("choose_agent/clear_battle", interval=0.1)
|
||||||
return
|
return
|
||||||
return self.choose_agents()
|
return self.choose_agents()
|
||||||
elif scene == Scene.OPERATOR_SELECT:
|
elif scene == Scene.OPERATOR_SELECT:
|
||||||
self.tap_element("choose_agent/fast_select")
|
self.tap("choose_agent/fast_select")
|
||||||
elif scene == Scene.SSS_SQUAD:
|
elif scene == Scene.SSS_SQUAD:
|
||||||
self.tap_element("sss/choose/fast_select")
|
self.tap("sss/choose/fast_select")
|
||||||
elif scene in self.waiting_scene:
|
elif scene in self.waiting_scene:
|
||||||
self.waiting_solver()
|
self.waiting_solver()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -133,7 +133,7 @@ class BattleFillChooseSolver(SceneGraphSolver):
|
||||||
def transition(self) -> bool:
|
def transition(self) -> bool:
|
||||||
if self.scene() == Scene.OPERATOR_AGENT_SELECT:
|
if self.scene() == Scene.OPERATOR_AGENT_SELECT:
|
||||||
if self.find("fight/collection_on"):
|
if self.find("fight/collection_on"):
|
||||||
self.tap_element("fight/collection_on")
|
self.tap("fight/collection_on")
|
||||||
return
|
return
|
||||||
if self.filter_done is False:
|
if self.filter_done is False:
|
||||||
if self.filter():
|
if self.filter():
|
||||||
|
|
|
@ -107,7 +107,7 @@ class BattleFilterSolver(SceneGraphSolver):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if not self.find("choose_agent/battle_filter_close"):
|
if not self.find("choose_agent/battle_filter_close"):
|
||||||
self.tap_element("choose_agent/battle_filter")
|
self.tap("choose_agent/battle_filter")
|
||||||
return
|
return
|
||||||
|
|
||||||
self.tap((1750, (self.labels.index(self.tag)) * 90 + 135), interval=0.1)
|
self.tap((1750, (self.labels.index(self.tag)) * 90 + 135), interval=0.1)
|
||||||
|
|
|
@ -80,7 +80,7 @@ class CheckCurrentTeamSolver(SceneGraphSolver):
|
||||||
def transition(self):
|
def transition(self):
|
||||||
if (scene := self.scene()) == Scene.OPERATOR_AGENT_SELECT:
|
if (scene := self.scene()) == Scene.OPERATOR_AGENT_SELECT:
|
||||||
if self.success:
|
if self.success:
|
||||||
self.tap_element("choose_agent/battle_confirm")
|
self.tap("choose_agent/battle_confirm")
|
||||||
return
|
return
|
||||||
ChooseSkillSolver().run(self.skill)
|
ChooseSkillSolver().run(self.skill)
|
||||||
self.success = True
|
self.success = True
|
||||||
|
|
|
@ -159,7 +159,7 @@ class ChooseSupportSolver(SceneGraphSolver):
|
||||||
if self.matched:
|
if self.matched:
|
||||||
if self.find("fight/refresh"):
|
if self.find("fight/refresh"):
|
||||||
self.swipe_noinertia((800, 350), (150, 0))
|
self.swipe_noinertia((800, 350), (150, 0))
|
||||||
self.tap_element("fight/refresh")
|
self.tap("fight/refresh")
|
||||||
self.sleep(0.4)
|
self.sleep(0.4)
|
||||||
self.retry_times -= 1
|
self.retry_times -= 1
|
||||||
self.matched = False
|
self.matched = False
|
||||||
|
@ -182,7 +182,7 @@ class ChooseSupportSolver(SceneGraphSolver):
|
||||||
):
|
):
|
||||||
self.tap(skill_pos[self.skill - 1])
|
self.tap(skill_pos[self.skill - 1])
|
||||||
else:
|
else:
|
||||||
self.tap_element("fight/use")
|
self.tap("fight/use")
|
||||||
self.success = True
|
self.success = True
|
||||||
|
|
||||||
elif scene == Scene.OPERATOR_SELECT:
|
elif scene == Scene.OPERATOR_SELECT:
|
||||||
|
@ -201,7 +201,7 @@ class ChooseSupportSolver(SceneGraphSolver):
|
||||||
logger.warning("选择助战干员失败,请降低练度要求或添加好友")
|
logger.warning("选择助战干员失败,请降低练度要求或添加好友")
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
self.tap_element("sss/choose/choose_support")
|
self.tap("sss/choose/choose_support")
|
||||||
|
|
||||||
elif scene in self.waiting_scene:
|
elif scene in self.waiting_scene:
|
||||||
self.waiting_solver()
|
self.waiting_solver()
|
||||||
|
|
|
@ -114,10 +114,10 @@ class CopyWorksSolver(SceneGraphSolver):
|
||||||
return True
|
return True
|
||||||
elif scene == Scene.OPERATOR_BEFORE:
|
elif scene == Scene.OPERATOR_BEFORE:
|
||||||
if self.level_name.endswith("#"):
|
if self.level_name.endswith("#"):
|
||||||
self.tap_element("ope_ex_start")
|
self.tap("ope_ex_start")
|
||||||
return
|
return
|
||||||
|
|
||||||
self.tap_element("ope_start")
|
self.tap("ope_start")
|
||||||
elif scene in self.waiting_scene:
|
elif scene in self.waiting_scene:
|
||||||
self.waiting_solver()
|
self.waiting_solver()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -87,7 +87,7 @@ class CreditFight(SceneGraphSolver):
|
||||||
elif scene == Scene.OPERATOR_SUPPORT:
|
elif scene == Scene.OPERATOR_SUPPORT:
|
||||||
self.tap(self.choose_support())
|
self.tap(self.choose_support())
|
||||||
elif scene == Scene.OPERATOR_SUPPORT_AGENT:
|
elif scene == Scene.OPERATOR_SUPPORT_AGENT:
|
||||||
self.tap_element("fight/use")
|
self.tap("fight/use")
|
||||||
elif scene == Scene.OPERATOR_FINISH:
|
elif scene == Scene.OPERATOR_FINISH:
|
||||||
return True
|
return True
|
||||||
elif scene == Scene.OPERATOR_FAILED:
|
elif scene == Scene.OPERATOR_FAILED:
|
||||||
|
|
|
@ -92,7 +92,7 @@ class RIIC_ChooseSolver(SceneGraphSolver, BaseMixin):
|
||||||
if self.is_choosed(agents[i]) and agents[i][0][0] < 1600:
|
if self.is_choosed(agents[i]) and agents[i][0][0] < 1600:
|
||||||
if i not in self.agents and i not in self.choosed:
|
if i not in self.agents and i not in self.choosed:
|
||||||
logger.debug(f"错选 {i}")
|
logger.debug(f"错选 {i}")
|
||||||
self.tap_element("choose_agent/clear", interval=0.1)
|
self.tap("choose_agent/clear", interval=0.1)
|
||||||
self.agents_copy = deepcopy(self.agents)
|
self.agents_copy = deepcopy(self.agents)
|
||||||
self.choosed = []
|
self.choosed = []
|
||||||
self.agent = None
|
self.agent = None
|
||||||
|
@ -212,11 +212,11 @@ class RIIC_ChooseSolver(SceneGraphSolver, BaseMixin):
|
||||||
if contain_choose is False or len(self.agents) == 1:
|
if contain_choose is False or len(self.agents) == 1:
|
||||||
self.cleard = True
|
self.cleard = True
|
||||||
else:
|
else:
|
||||||
self.tap_element("choose_agent/clear", interval=0.1)
|
self.tap("choose_agent/clear", interval=0.1)
|
||||||
return
|
return
|
||||||
if self.riic_agent_choose():
|
if self.riic_agent_choose():
|
||||||
self.sleep(self.check_wait_time())
|
self.sleep(self.check_wait_time())
|
||||||
self.tap_element("confirm_blue")
|
self.tap("confirm_blue")
|
||||||
self.success = True
|
self.success = True
|
||||||
|
|
||||||
elif self.find("room_detail"):
|
elif self.find("room_detail"):
|
||||||
|
|
|
@ -28,7 +28,7 @@ class DailySolver(SceneGraphSolver):
|
||||||
"clue/icon_notification", scope=((1400, 0), (1920, 400))
|
"clue/icon_notification", scope=((1400, 0), (1920, 400))
|
||||||
) and (clue := clue_cls("daily")):
|
) and (clue := clue_cls("daily")):
|
||||||
logger.info(f"领取今日线索({clue}号)")
|
logger.info(f"领取今日线索({clue}号)")
|
||||||
self.tap_element("clue/button_get")
|
self.tap("clue/button_get")
|
||||||
else:
|
else:
|
||||||
# 今日线索已领取,点X退出
|
# 今日线索已领取,点X退出
|
||||||
self.tap((1484, 152))
|
self.tap((1484, 152))
|
||||||
|
|
|
@ -99,7 +99,7 @@ class SwitchAssistantsSolver(SceneGraphSolver, BaseMixin):
|
||||||
if name := BattleFillChooseSolver().run("信赖值", 1, self.black_list):
|
if name := BattleFillChooseSolver().run("信赖值", 1, self.black_list):
|
||||||
self.black_list.append(name[0])
|
self.black_list.append(name[0])
|
||||||
if self.find("choose_agent/battle_confirm"):
|
if self.find("choose_agent/battle_confirm"):
|
||||||
self.tap_element("choose_agent/battle_confirm")
|
self.tap("choose_agent/battle_confirm")
|
||||||
self.sleep(0.5)
|
self.sleep(0.5)
|
||||||
else:
|
else:
|
||||||
self.scene_graph_step(Scene.RIIC_REPORT)
|
self.scene_graph_step(Scene.RIIC_REPORT)
|
||||||
|
|
|
@ -85,7 +85,7 @@ class ChooseProductSolver(SceneGraphSolver):
|
||||||
else:
|
else:
|
||||||
self.tap(self.second_pos)
|
self.tap(self.second_pos)
|
||||||
elif scene == Scene.PRODUCT_SWITCHING_CONFIRM:
|
elif scene == Scene.PRODUCT_SWITCHING_CONFIRM:
|
||||||
self.tap_element("double_confirm/main", x_rate=1)
|
self.tap("double_confirm/main", x_rate=1)
|
||||||
self.success = True
|
self.success = True
|
||||||
elif scene in self.waiting_scene:
|
elif scene in self.waiting_scene:
|
||||||
self.waiting_solver()
|
self.waiting_solver()
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
|
from mower.utils import config
|
||||||
from mower.utils.graph import SceneGraphSolver
|
from mower.utils.graph import SceneGraphSolver
|
||||||
from mower.utils.log import logger
|
from mower.utils.log import logger
|
||||||
from mower.utils.recognize import Scene
|
from mower.utils.recognize import Scene
|
||||||
|
@ -5,18 +8,30 @@ from mower.utils.recognize import Scene
|
||||||
|
|
||||||
class MailSolver(SceneGraphSolver):
|
class MailSolver(SceneGraphSolver):
|
||||||
solver_name = "领取邮件"
|
solver_name = "领取邮件"
|
||||||
|
solver_max_duration = timedelta(minutes=2)
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self):
|
||||||
self.touched = False
|
self.read = False
|
||||||
|
|
||||||
logger.info("Start: 领取邮件")
|
|
||||||
return super().run()
|
return super().run()
|
||||||
|
|
||||||
def transition(self) -> bool:
|
def transition(self):
|
||||||
if self.scene() == Scene.MAIL:
|
if self.scene() == Scene.MAIL:
|
||||||
if self.touched:
|
if not self.read:
|
||||||
|
if self.find("mail/complete"):
|
||||||
|
logger.info("没有未领取邮件")
|
||||||
|
self.read = True
|
||||||
|
self.solver_update_before_transition = False
|
||||||
|
else:
|
||||||
|
logger.info("收取所有邮件")
|
||||||
|
self.tap("mail/collect")
|
||||||
|
elif config.conf.delete_read_mail:
|
||||||
|
if self.find("mail/clean"):
|
||||||
|
logger.info("没有邮件需要删除")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
logger.info("删除已读邮件")
|
||||||
|
self.tap("mail/delete")
|
||||||
|
else:
|
||||||
return True
|
return True
|
||||||
self.touched = True
|
|
||||||
self.tap_element("read_mail")
|
|
||||||
else:
|
else:
|
||||||
self.scene_graph_step(Scene.MAIL)
|
self.scene_graph_step(Scene.MAIL)
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
from mower.utils import config
|
from mower.utils import config
|
||||||
from mower.utils.graph import SceneGraphSolver
|
from mower.utils.graph import SceneGraphSolver
|
||||||
from mower.utils.image import cropimg, diff_ratio
|
from mower.utils.image import cropimg, diff_ratio
|
||||||
|
@ -7,6 +9,7 @@ from mower.utils.recognize import Scene
|
||||||
|
|
||||||
class MissionSolver(SceneGraphSolver):
|
class MissionSolver(SceneGraphSolver):
|
||||||
solver_name = "每日/每周任务"
|
solver_name = "每日/每周任务"
|
||||||
|
solver_max_duration = timedelta(minutes=2)
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
logger.info("Start: 每日/每周任务")
|
logger.info("Start: 每日/每周任务")
|
||||||
|
@ -23,7 +26,7 @@ class MissionSolver(SceneGraphSolver):
|
||||||
def transition(self):
|
def transition(self):
|
||||||
if (scene := self.scene()) == Scene.MISSION_DAILY:
|
if (scene := self.scene()) == Scene.MISSION_DAILY:
|
||||||
if self.daily:
|
if self.daily:
|
||||||
self.tap_element("mission_weekly")
|
self.tap("mission_weekly")
|
||||||
return
|
return
|
||||||
if pos := self.find("mission_collect"):
|
if pos := self.find("mission_collect"):
|
||||||
self.tap(pos)
|
self.tap(pos)
|
||||||
|
@ -35,7 +38,7 @@ class MissionSolver(SceneGraphSolver):
|
||||||
self.solver_update_before_transition = False
|
self.solver_update_before_transition = False
|
||||||
elif scene == Scene.MISSION_WEEKLY:
|
elif scene == Scene.MISSION_WEEKLY:
|
||||||
if not self.daily:
|
if not self.daily:
|
||||||
self.tap_element("mission_daily")
|
self.tap("mission_daily")
|
||||||
return
|
return
|
||||||
if pos := self.find("mission_collect"):
|
if pos := self.find("mission_collect"):
|
||||||
self.tap(pos)
|
self.tap(pos)
|
||||||
|
|
|
@ -545,9 +545,9 @@ class NavigationSolver(SceneGraphSolver):
|
||||||
self.back()
|
self.back()
|
||||||
return
|
return
|
||||||
if self.find(f"navigation/biography/{self.prefix}_banner"):
|
if self.find(f"navigation/biography/{self.prefix}_banner"):
|
||||||
self.tap_element("navigation/entry")
|
self.tap("navigation/entry")
|
||||||
return
|
return
|
||||||
self.tap_element(f"navigation/biography/{self.prefix}_entry")
|
self.tap(f"navigation/biography/{self.prefix}_entry")
|
||||||
elif scene == Scene.TERMINAL_COLLECTION:
|
elif scene == Scene.TERMINAL_COLLECTION:
|
||||||
prefix = self.prefix
|
prefix = self.prefix
|
||||||
val = 0.9
|
val = 0.9
|
||||||
|
@ -606,12 +606,12 @@ class NavigationSolver(SceneGraphSolver):
|
||||||
if self.change_to is not None and self.now_difficulty != self.change_to:
|
if self.change_to is not None and self.now_difficulty != self.change_to:
|
||||||
config.recog.update()
|
config.recog.update()
|
||||||
if self.find("navigation/ope_difficulty"):
|
if self.find("navigation/ope_difficulty"):
|
||||||
self.tap_element(
|
self.tap(
|
||||||
f"navigation/ope_{difficulty_str[self.change_to]}_small"
|
f"navigation/ope_{difficulty_str[self.change_to]}_small"
|
||||||
)
|
)
|
||||||
self.now_difficulty = None
|
self.now_difficulty = None
|
||||||
else:
|
else:
|
||||||
self.tap_element(
|
self.tap(
|
||||||
f"navigation/ope_{difficulty_str[self.now_difficulty]}"
|
f"navigation/ope_{difficulty_str[self.now_difficulty]}"
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
@ -650,7 +650,7 @@ class NavigationSolver(SceneGraphSolver):
|
||||||
self.tap(va(target, (60, 20)))
|
self.tap(va(target, (60, 20)))
|
||||||
elif scene == Scene.OPERATOR_BEFORE:
|
elif scene == Scene.OPERATOR_BEFORE:
|
||||||
if self.find("ope_ex_mode") and self.switch_to_ex:
|
if self.find("ope_ex_mode") and self.switch_to_ex:
|
||||||
self.tap_element("ope_ex_mode")
|
self.tap("ope_ex_mode")
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.mode == "auto":
|
if self.mode == "auto":
|
||||||
|
@ -683,15 +683,15 @@ class NavigationSolver(SceneGraphSolver):
|
||||||
):
|
):
|
||||||
self.tap((1776, 908))
|
self.tap((1776, 908))
|
||||||
return
|
return
|
||||||
self.tap_element("ope_start")
|
self.tap("ope_start")
|
||||||
else:
|
else:
|
||||||
self.tap_element("ope_ex_start")
|
self.tap("ope_ex_start")
|
||||||
|
|
||||||
elif scene == Scene.OPERATOR_SELECT and self.success:
|
elif scene == Scene.OPERATOR_SELECT and self.success:
|
||||||
return True
|
return True
|
||||||
elif scene in [Scene.OPERATOR_RECOVER_ORIGINITE, Scene.OPERATOR_RECOVER_POTION]:
|
elif scene in [Scene.OPERATOR_RECOVER_ORIGINITE, Scene.OPERATOR_RECOVER_POTION]:
|
||||||
return True
|
return True
|
||||||
elif scene == Scene.STORY_STAGE:
|
elif scene == Scene.STORY_STAGE:
|
||||||
self.tap_element("start_story")
|
self.tap("start_story")
|
||||||
else:
|
else:
|
||||||
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
||||||
|
|
|
@ -97,7 +97,7 @@ class ActivityNavigation(SceneGraphSolver):
|
||||||
saveimg(debug_img, "navigation")
|
saveimg(debug_img, "navigation")
|
||||||
self.tap(kp2[good[0].trainIdx].pt, interval=4)
|
self.tap(kp2[good[0].trainIdx].pt, interval=4)
|
||||||
elif scene == Scene.ACTIVITY_MAIN:
|
elif scene == Scene.ACTIVITY_MAIN:
|
||||||
self.tap_element("navigation/activity/entry")
|
self.tap("navigation/activity/entry")
|
||||||
elif scene == Scene.ACTIVITY_CHOOSE_LEVEL:
|
elif scene == Scene.ACTIVITY_CHOOSE_LEVEL:
|
||||||
if (
|
if (
|
||||||
self.mode == "copy"
|
self.mode == "copy"
|
||||||
|
@ -126,7 +126,7 @@ class ActivityNavigation(SceneGraphSolver):
|
||||||
self.tap(va(target, (60, 20)))
|
self.tap(va(target, (60, 20)))
|
||||||
elif scene == Scene.OPERATOR_BEFORE:
|
elif scene == Scene.OPERATOR_BEFORE:
|
||||||
if self.find("ope_ex_mode") and self.switch_to_ex:
|
if self.find("ope_ex_mode") and self.switch_to_ex:
|
||||||
self.tap_element("ope_ex_mode")
|
self.tap("ope_ex_mode")
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.mode == "auto":
|
if self.mode == "auto":
|
||||||
|
@ -142,15 +142,15 @@ class ActivityNavigation(SceneGraphSolver):
|
||||||
):
|
):
|
||||||
self.tap((1776, 908))
|
self.tap((1776, 908))
|
||||||
return
|
return
|
||||||
self.tap_element("ope_start")
|
self.tap("ope_start")
|
||||||
else:
|
else:
|
||||||
self.tap_element("ope_ex_start")
|
self.tap("ope_ex_start")
|
||||||
elif scene == Scene.OPERATOR_SELECT and self.mode == "copy":
|
elif scene == Scene.OPERATOR_SELECT and self.mode == "copy":
|
||||||
return True
|
return True
|
||||||
elif scene in [Scene.OPERATOR_RECOVER_ORIGINITE, Scene.OPERATOR_RECOVER_POTION]:
|
elif scene in [Scene.OPERATOR_RECOVER_ORIGINITE, Scene.OPERATOR_RECOVER_POTION]:
|
||||||
return True
|
return True
|
||||||
elif scene == Scene.STORY_STAGE:
|
elif scene == Scene.STORY_STAGE:
|
||||||
self.tap_element("start_story")
|
self.tap("start_story")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
||||||
|
|
|
@ -68,7 +68,7 @@ class LastStageNavigation(SceneGraphSolver):
|
||||||
return True
|
return True
|
||||||
elif scene == Scene.OPERATOR_BEFORE:
|
elif scene == Scene.OPERATOR_BEFORE:
|
||||||
if self.find("ope_ex_mode") and self.switch_to_ex:
|
if self.find("ope_ex_mode") and self.switch_to_ex:
|
||||||
self.tap_element("ope_ex_mode")
|
self.tap("ope_ex_mode")
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.mode == "auto":
|
if self.mode == "auto":
|
||||||
|
@ -84,9 +84,9 @@ class LastStageNavigation(SceneGraphSolver):
|
||||||
):
|
):
|
||||||
self.tap((1776, 908))
|
self.tap((1776, 908))
|
||||||
return
|
return
|
||||||
self.tap_element("ope_start")
|
self.tap("ope_start")
|
||||||
else:
|
else:
|
||||||
self.tap_element("ope_ex_start")
|
self.tap("ope_ex_start")
|
||||||
|
|
||||||
elif scene == Scene.OPERATOR_SELECT and self.mode == "copy":
|
elif scene == Scene.OPERATOR_SELECT and self.mode == "copy":
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -121,7 +121,7 @@ class OperationSolver(SceneGraphSolver):
|
||||||
return
|
return
|
||||||
self.operation_start_time = datetime.now()
|
self.operation_start_time = datetime.now()
|
||||||
self.drop_recog_complete = False
|
self.drop_recog_complete = False
|
||||||
self.tap_element("ope_start")
|
self.tap("ope_start")
|
||||||
elif scene == Scene.OPERATOR_SELECT:
|
elif scene == Scene.OPERATOR_SELECT:
|
||||||
if self.stop_time and datetime.now() > self.stop_time:
|
if self.stop_time and datetime.now() > self.stop_time:
|
||||||
self.timeout = True
|
self.timeout = True
|
||||||
|
@ -143,7 +143,7 @@ class OperationSolver(SceneGraphSolver):
|
||||||
else:
|
else:
|
||||||
self.sleep(10)
|
self.sleep(10)
|
||||||
elif scene == Scene.OPERATOR_GIVEUP:
|
elif scene == Scene.OPERATOR_GIVEUP:
|
||||||
self.tap_element("fight/give_up")
|
self.tap("fight/give_up")
|
||||||
elif scene == Scene.OPERATOR_RECOVER_POTION:
|
elif scene == Scene.OPERATOR_RECOVER_POTION:
|
||||||
use_medicine = False
|
use_medicine = False
|
||||||
# 先看设置是否吃药
|
# 先看设置是否吃药
|
||||||
|
@ -182,12 +182,12 @@ class OperationSolver(SceneGraphSolver):
|
||||||
return
|
return
|
||||||
self.operation_start_time = datetime.now()
|
self.operation_start_time = datetime.now()
|
||||||
self.drop_recog_complete = False
|
self.drop_recog_complete = False
|
||||||
self.tap_element("ope_start")
|
self.tap("ope_start")
|
||||||
elif scene == Scene.OPERATOR_ELIMINATE_AGENCY:
|
elif scene == Scene.OPERATOR_ELIMINATE_AGENCY:
|
||||||
if self.find("can_not_use_ope"):
|
if self.find("can_not_use_ope"):
|
||||||
logger.warning("当期剿灭代理获取合成玉数量为0")
|
logger.warning("当期剿灭代理获取合成玉数量为0")
|
||||||
return True
|
return True
|
||||||
self.tap_element("ope_elimi_agency_confirm", interval=2)
|
self.tap("ope_elimi_agency_confirm", interval=2)
|
||||||
elif scene == Scene.UPGRADE:
|
elif scene == Scene.UPGRADE:
|
||||||
self.tap((960, 540))
|
self.tap((960, 540))
|
||||||
elif scene in self.waiting_scene:
|
elif scene in self.waiting_scene:
|
||||||
|
|
|
@ -290,7 +290,7 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
logger.debug(f"剩余决断次数:{self.ap}")
|
logger.debug(f"剩余决断次数:{self.ap}")
|
||||||
|
|
||||||
def map_back(self):
|
def map_back(self):
|
||||||
self.tap_element("ra/map_back", thres=200)
|
self.tap("ra/map_back", thres=200)
|
||||||
|
|
||||||
def detect_score(self, scope=None, find_max=True):
|
def detect_score(self, scope=None, find_max=True):
|
||||||
if find_max and self.find("ra/max", scope=scope, score=0.7):
|
if find_max and self.find("ra/max", scope=scope, score=0.7):
|
||||||
|
@ -338,7 +338,7 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
elif scene == Scene.TERMINAL_MAIN:
|
elif scene == Scene.TERMINAL_MAIN:
|
||||||
self.tap_terminal_button("longterm")
|
self.tap_terminal_button("longterm")
|
||||||
elif scene == Scene.TERMINAL_LONGTERM:
|
elif scene == Scene.TERMINAL_LONGTERM:
|
||||||
self.tap_element("terminal_longterm_reclamation_algorithm")
|
self.tap("terminal_longterm_reclamation_algorithm")
|
||||||
|
|
||||||
# 从生息演算主页进入生息演算
|
# 从生息演算主页进入生息演算
|
||||||
elif scene == Scene.RA_MAIN:
|
elif scene == Scene.RA_MAIN:
|
||||||
|
@ -346,7 +346,7 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
if pos := self.find("ra/start_button"):
|
if pos := self.find("ra/start_button"):
|
||||||
self.tap(pos, interval=8)
|
self.tap(pos, interval=8)
|
||||||
else:
|
else:
|
||||||
self.tap_element("ra/continue_button", interval=3)
|
self.tap("ra/continue_button", interval=3)
|
||||||
|
|
||||||
# 剧情
|
# 剧情
|
||||||
elif scene == Scene.RA_GUIDE_ENTRANCE:
|
elif scene == Scene.RA_GUIDE_ENTRANCE:
|
||||||
|
@ -354,7 +354,7 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
self.tap(pos, x_rate=2, y_rate=1.5, interval=0.5)
|
self.tap(pos, x_rate=2, y_rate=1.5, interval=0.5)
|
||||||
elif scene == Scene.RA_GUIDE_BATTLE_ENTRANCE:
|
elif scene == Scene.RA_GUIDE_BATTLE_ENTRANCE:
|
||||||
self.battle_wait = 3
|
self.battle_wait = 3
|
||||||
self.tap_element("ra/start_action", interval=5)
|
self.tap("ra/start_action", interval=5)
|
||||||
elif scene == Scene.RA_GUIDE_DIALOG:
|
elif scene == Scene.RA_GUIDE_DIALOG:
|
||||||
self.battle_wait = 0
|
self.battle_wait = 0
|
||||||
self.fast_tap((1631, 675))
|
self.fast_tap((1631, 675))
|
||||||
|
@ -364,7 +364,7 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
if self.battle_task in self.task_queue:
|
if self.battle_task in self.task_queue:
|
||||||
self.task_queue.remove(self.battle_task)
|
self.task_queue.remove(self.battle_task)
|
||||||
self.ap -= 1
|
self.ap -= 1
|
||||||
self.tap_element("ra/start_action")
|
self.tap("ra/start_action")
|
||||||
elif scene == Scene.RA_BATTLE:
|
elif scene == Scene.RA_BATTLE:
|
||||||
if self.battle_wait > 0:
|
if self.battle_wait > 0:
|
||||||
self.battle_wait -= 1
|
self.battle_wait -= 1
|
||||||
|
@ -375,9 +375,9 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
else:
|
else:
|
||||||
config.recog.update()
|
config.recog.update()
|
||||||
elif scene == Scene.RA_BATTLE_EXIT_CONFIRM:
|
elif scene == Scene.RA_BATTLE_EXIT_CONFIRM:
|
||||||
self.tap_element("ra/confirm_green", interval=0.5)
|
self.tap("ra/confirm_green", interval=0.5)
|
||||||
elif scene == Scene.RA_BATTLE_COMPLETE:
|
elif scene == Scene.RA_BATTLE_COMPLETE:
|
||||||
self.tap_element("ra/battle_complete", interval=0.5)
|
self.tap("ra/battle_complete", interval=0.5)
|
||||||
|
|
||||||
# 结算界面
|
# 结算界面
|
||||||
elif scene == Scene.RA_DAY_COMPLETE:
|
elif scene == Scene.RA_DAY_COMPLETE:
|
||||||
|
@ -521,9 +521,9 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
self.battle_task = place
|
self.battle_task = place
|
||||||
config.recog.update()
|
config.recog.update()
|
||||||
elif scene == Scene.RA_DAY_DETAIL:
|
elif scene == Scene.RA_DAY_DETAIL:
|
||||||
self.tap_element("ra/waste_time_button", interval=0.5)
|
self.tap("ra/waste_time_button", interval=0.5)
|
||||||
elif scene == Scene.RA_WASTE_TIME_DIALOG:
|
elif scene == Scene.RA_WASTE_TIME_DIALOG:
|
||||||
self.tap_element("ra/confirm_green")
|
self.tap("ra/confirm_green")
|
||||||
|
|
||||||
# 作战编队
|
# 作战编队
|
||||||
elif scene == Scene.RA_SQUAD_EDIT:
|
elif scene == Scene.RA_SQUAD_EDIT:
|
||||||
|
@ -531,34 +531,34 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
self.left_kitchen = False
|
self.left_kitchen = False
|
||||||
self.tap((1430, 1015), interval=0.5)
|
self.tap((1430, 1015), interval=0.5)
|
||||||
else:
|
else:
|
||||||
self.tap_element("ra/squad_edit_start_button", interval=0.5)
|
self.tap("ra/squad_edit_start_button", interval=0.5)
|
||||||
elif scene == Scene.RA_SQUAD_EDIT_DIALOG:
|
elif scene == Scene.RA_SQUAD_EDIT_DIALOG:
|
||||||
self.tap_element("ra/confirm_red", interval=6)
|
self.tap("ra/confirm_red", interval=6)
|
||||||
elif scene == Scene.RA_SQUAD_ABNORMAL:
|
elif scene == Scene.RA_SQUAD_ABNORMAL:
|
||||||
self.tap_element("ra/confirm_red", interval=6)
|
self.tap("ra/confirm_red", interval=6)
|
||||||
|
|
||||||
# 烹饪台
|
# 烹饪台
|
||||||
elif scene == Scene.RA_KITCHEN:
|
elif scene == Scene.RA_KITCHEN:
|
||||||
if self.left_kitchen:
|
if self.left_kitchen:
|
||||||
self.tap_element("ra/return_from_kitchen", x_rate=0.07)
|
self.tap("ra/return_from_kitchen", x_rate=0.07)
|
||||||
return
|
return
|
||||||
last_drink = self.detect_prepared()
|
last_drink = self.detect_prepared()
|
||||||
while last_drink < 2:
|
while last_drink < 2:
|
||||||
self.tap_element("ra/auto+1", interval=0.5)
|
self.tap("ra/auto+1", interval=0.5)
|
||||||
drink = self.detect_prepared()
|
drink = self.detect_prepared()
|
||||||
if drink == last_drink:
|
if drink == last_drink:
|
||||||
logger.debug("饮料无法合成,返回地图,清空任务列表")
|
logger.debug("饮料无法合成,返回地图,清空任务列表")
|
||||||
self.task_queue = []
|
self.task_queue = []
|
||||||
self.tap_element("ra/return_from_kitchen", x_rate=0.07)
|
self.tap("ra/return_from_kitchen", x_rate=0.07)
|
||||||
self.tap_element("ra/squad_back")
|
self.tap("ra/squad_back")
|
||||||
self.map_back()
|
self.map_back()
|
||||||
return
|
return
|
||||||
last_drink = drink
|
last_drink = drink
|
||||||
self.tap_element("ra/cook_button", interval=0.5)
|
self.tap("ra/cook_button", interval=0.5)
|
||||||
|
|
||||||
# 能量饮料不足
|
# 能量饮料不足
|
||||||
elif scene == Scene.RA_INSUFFICIENT_DRINK:
|
elif scene == Scene.RA_INSUFFICIENT_DRINK:
|
||||||
self.tap_element("ra/dialog_cancel")
|
self.tap("ra/dialog_cancel")
|
||||||
|
|
||||||
# 获得物资
|
# 获得物资
|
||||||
elif scene == Scene.RA_GET_ITEM:
|
elif scene == Scene.RA_GET_ITEM:
|
||||||
|
@ -569,7 +569,7 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
self.tap((428, 411), interval=0.5)
|
self.tap((428, 411), interval=0.5)
|
||||||
else:
|
else:
|
||||||
self.left_kitchen = True
|
self.left_kitchen = True
|
||||||
self.tap_element("ra/return_from_kitchen", x_rate=0.07)
|
self.tap("ra/return_from_kitchen", x_rate=0.07)
|
||||||
else:
|
else:
|
||||||
self.sleep(0.5)
|
self.sleep(0.5)
|
||||||
|
|
||||||
|
@ -585,15 +585,15 @@ class ReclamationAlgorithm(SceneGraphSolver):
|
||||||
if scene == Scene.CONNECTING:
|
if scene == Scene.CONNECTING:
|
||||||
self.sleep()
|
self.sleep()
|
||||||
elif scene in [Scene.RA_MAIN, Scene.TERMINAL_LONGTERM, Scene.TERMINAL_MAIN]:
|
elif scene in [Scene.RA_MAIN, Scene.TERMINAL_LONGTERM, Scene.TERMINAL_MAIN]:
|
||||||
self.tap_element("nav_button", x_rate=0.21)
|
self.tap("nav_button", x_rate=0.21)
|
||||||
elif scene in [Scene.RA_MAP, Scene.RA_DAY_DETAIL, Scene.RA_BATTLE_ENTRANCE]:
|
elif scene in [Scene.RA_MAP, Scene.RA_DAY_DETAIL, Scene.RA_BATTLE_ENTRANCE]:
|
||||||
self.map_back()
|
self.map_back()
|
||||||
elif scene == Scene.RA_SQUAD_EDIT:
|
elif scene == Scene.RA_SQUAD_EDIT:
|
||||||
self.tap_element("ra/squad_back")
|
self.tap("ra/squad_back")
|
||||||
elif scene == Scene.RA_KITCHEN:
|
elif scene == Scene.RA_KITCHEN:
|
||||||
self.tap_element("ra/return_from_kitchen", x_rate=0.07)
|
self.tap("ra/return_from_kitchen", x_rate=0.07)
|
||||||
elif scene in [Scene.RA_SQUAD_EDIT_DIALOG, Scene.RA_WASTE_TIME_DIALOG]:
|
elif scene in [Scene.RA_SQUAD_EDIT_DIALOG, Scene.RA_WASTE_TIME_DIALOG]:
|
||||||
self.tap_element("ra/dialog_cancel")
|
self.tap("ra/dialog_cancel")
|
||||||
elif 900 < scene < 1000:
|
elif 900 < scene < 1000:
|
||||||
self.move_forward(scene)
|
self.move_forward(scene)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -256,8 +256,8 @@ class RecruitSolver(SceneGraphSolver):
|
||||||
pos = self.get_pos(self.find("one_hour"), 0.2, 0.8)
|
pos = self.get_pos(self.find("one_hour"), 0.2, 0.8)
|
||||||
self.ctap(pos)
|
self.ctap(pos)
|
||||||
elif recruit_time == [3, 50]:
|
elif recruit_time == [3, 50]:
|
||||||
[self.tap_element("one_hour", 0.2, 0.2, 0.1) for _ in range(3)]
|
[self.tap("one_hour", 0.2, 0.2, 0.1) for _ in range(3)]
|
||||||
[self.tap_element("one_hour", 0.5, 0.8, 0.1) for _ in range(1)]
|
[self.tap("one_hour", 0.5, 0.8, 0.1) for _ in range(1)]
|
||||||
self.sleep(1)
|
self.sleep(1)
|
||||||
|
|
||||||
if now_time not in [[9, 0], [3, 50], [1, 0]]:
|
if now_time not in [[9, 0], [3, 50], [1, 0]]:
|
||||||
|
@ -268,7 +268,7 @@ class RecruitSolver(SceneGraphSolver):
|
||||||
return
|
return
|
||||||
|
|
||||||
# # start recruit
|
# # start recruit
|
||||||
self.tap_element("recruit/start_recruit")
|
self.tap("recruit/start_recruit")
|
||||||
self.agent_choose[self.recruit_index]["choosed"] = True
|
self.agent_choose[self.recruit_index]["choosed"] = True
|
||||||
self.ticket_number = self.ticket_number - 1
|
self.ticket_number = self.ticket_number - 1
|
||||||
self.recruit_index = self.recruit_index + 1
|
self.recruit_index = self.recruit_index + 1
|
||||||
|
@ -276,7 +276,7 @@ class RecruitSolver(SceneGraphSolver):
|
||||||
else:
|
else:
|
||||||
self.recruit_tags(self.tags[self.recruit_index])
|
self.recruit_tags(self.tags[self.recruit_index])
|
||||||
elif scene == Scene.REFRESH_TAGS:
|
elif scene == Scene.REFRESH_TAGS:
|
||||||
self.tap_element("recruit/refresh_comfirm")
|
self.tap("recruit/refresh_comfirm")
|
||||||
elif scene == Scene.RECRUIT_AGENT:
|
elif scene == Scene.RECRUIT_AGENT:
|
||||||
return self.recruit_result()
|
return self.recruit_result()
|
||||||
else:
|
else:
|
||||||
|
@ -595,7 +595,7 @@ class RecruitSolver(SceneGraphSolver):
|
||||||
if mode == "minute":
|
if mode == "minute":
|
||||||
click_time = int(abs(subtract_time) / 10)
|
click_time = int(abs(subtract_time) / 10)
|
||||||
tap_pos = 0.5
|
tap_pos = 0.5
|
||||||
[self.tap_element("one_hour", tap_pos, 0.8, 0.1) for _ in range(click_time)]
|
[self.tap("one_hour", tap_pos, 0.8, 0.1) for _ in range(click_time)]
|
||||||
return
|
return
|
||||||
|
|
||||||
if mode == "hour":
|
if mode == "hour":
|
||||||
|
@ -605,16 +605,16 @@ class RecruitSolver(SceneGraphSolver):
|
||||||
|
|
||||||
if abs(subtract_time) > (max_click / 2):
|
if abs(subtract_time) > (max_click / 2):
|
||||||
if subtract_time > 0:
|
if subtract_time > 0:
|
||||||
[self.tap_element("one_hour", 0.2, 0.2, 0.1) for _ in range(click_time)]
|
[self.tap("one_hour", 0.2, 0.2, 0.1) for _ in range(click_time)]
|
||||||
else:
|
else:
|
||||||
[
|
[
|
||||||
self.tap_element("one_hour", 0.2, 0.8, 0.1)
|
self.tap("one_hour", 0.2, 0.8, 0.1)
|
||||||
for _ in range(max_click - click_time)
|
for _ in range(max_click - click_time)
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
if subtract_time < 0:
|
if subtract_time < 0:
|
||||||
[self.tap_element("one_hour", 0.2, 0.2, 0.1) for _ in range(click_time)]
|
[self.tap("one_hour", 0.2, 0.2, 0.1) for _ in range(click_time)]
|
||||||
else:
|
else:
|
||||||
[self.tap_element("one_hour", 0.2, 0.8, 0.1) for _ in range(click_time)]
|
[self.tap("one_hour", 0.2, 0.8, 0.1) for _ in range(click_time)]
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
@ -226,18 +226,18 @@ class SecretFront(SceneGraphSolver):
|
||||||
elif scene == Scene.TERMINAL_MAIN:
|
elif scene == Scene.TERMINAL_MAIN:
|
||||||
self.tap_terminal_button("main_theme")
|
self.tap_terminal_button("main_theme")
|
||||||
elif scene == Scene.TERMINAL_MAIN_THEME:
|
elif scene == Scene.TERMINAL_MAIN_THEME:
|
||||||
self.tap_element("navigation/main/14")
|
self.tap("navigation/main/14")
|
||||||
elif scene == Scene.SF_ENTRANCE:
|
elif scene == Scene.SF_ENTRANCE:
|
||||||
self.tap_element("sf/entrance")
|
self.tap("sf/entrance")
|
||||||
|
|
||||||
# 选择小队
|
# 选择小队
|
||||||
elif scene == Scene.SF_SELECT_TEAM:
|
elif scene == Scene.SF_SELECT_TEAM:
|
||||||
self.tap_element(f"sf/team_{self.team}")
|
self.tap(f"sf/team_{self.team}")
|
||||||
self.tap_element("sf/select_team_ok")
|
self.tap("sf/select_team_ok")
|
||||||
|
|
||||||
# 继续前进
|
# 继续前进
|
||||||
elif scene == Scene.SF_CONTINUE:
|
elif scene == Scene.SF_CONTINUE:
|
||||||
self.tap_element("sf/continue")
|
self.tap("sf/continue")
|
||||||
|
|
||||||
# 选择路线时识别已有属性值
|
# 选择路线时识别已有属性值
|
||||||
elif scene == Scene.SF_SELECT:
|
elif scene == Scene.SF_SELECT:
|
||||||
|
@ -289,10 +289,10 @@ class SecretFront(SceneGraphSolver):
|
||||||
self.choose_card(total, idx)
|
self.choose_card(total, idx)
|
||||||
else:
|
else:
|
||||||
self.exit = "restart"
|
self.exit = "restart"
|
||||||
self.tap_element("sf/exit_button")
|
self.tap("sf/exit_button")
|
||||||
return
|
return
|
||||||
self.exit = "restart"
|
self.exit = "restart"
|
||||||
self.tap_element("sf/exit_button")
|
self.tap("sf/exit_button")
|
||||||
return
|
return
|
||||||
|
|
||||||
if (page_number := self.page_number()) is None:
|
if (page_number := self.page_number()) is None:
|
||||||
|
@ -348,7 +348,7 @@ class SecretFront(SceneGraphSolver):
|
||||||
|
|
||||||
elif scene == Scene.SF_EVENT:
|
elif scene == Scene.SF_EVENT:
|
||||||
self.event = True
|
self.event = True
|
||||||
self.tap_element("sf/continue_event", interval=1.5)
|
self.tap("sf/continue_event", interval=1.5)
|
||||||
|
|
||||||
elif scene in [Scene.SF_TEAM_PASS, Scene.SF_CLICK_ANYWHERE, Scene.SF_END]:
|
elif scene in [Scene.SF_TEAM_PASS, Scene.SF_CLICK_ANYWHERE, Scene.SF_END]:
|
||||||
self.tap((960, 980), interval=2)
|
self.tap((960, 980), interval=2)
|
||||||
|
@ -360,7 +360,7 @@ class SecretFront(SceneGraphSolver):
|
||||||
|
|
||||||
# 关闭说明
|
# 关闭说明
|
||||||
elif scene == Scene.NOTICE:
|
elif scene == Scene.NOTICE:
|
||||||
self.tap_element("notice")
|
self.tap("notice")
|
||||||
|
|
||||||
elif scene == Scene.SF_EXIT:
|
elif scene == Scene.SF_EXIT:
|
||||||
if self.exit == "restart":
|
if self.exit == "restart":
|
||||||
|
@ -368,10 +368,10 @@ class SecretFront(SceneGraphSolver):
|
||||||
self.route_matcher = None
|
self.route_matcher = None
|
||||||
self.event = False
|
self.event = False
|
||||||
|
|
||||||
self.tap_element("sf/restart")
|
self.tap("sf/restart")
|
||||||
self.tap_element("sf/confirm")
|
self.tap("sf/confirm")
|
||||||
elif self.exit == "exit":
|
elif self.exit == "exit":
|
||||||
self.tap_element("sf/confirm")
|
self.tap("sf/confirm")
|
||||||
else:
|
else:
|
||||||
self.tap((480, 590))
|
self.tap((480, 590))
|
||||||
|
|
||||||
|
@ -385,7 +385,7 @@ class SecretFront(SceneGraphSolver):
|
||||||
self.move_forward(scene)
|
self.move_forward(scene)
|
||||||
else:
|
else:
|
||||||
self.exit = "exit"
|
self.exit = "exit"
|
||||||
self.tap_element("sf/exit_button")
|
self.tap("sf/exit_button")
|
||||||
|
|
||||||
def transition(self):
|
def transition(self):
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
|
|
|
@ -134,6 +134,6 @@ class CreditShop(SceneGraphSolver):
|
||||||
if self.find("shop/credit_not_enough"):
|
if self.find("shop/credit_not_enough"):
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
self.tap_element("shop/cart")
|
self.tap("shop/cart")
|
||||||
else:
|
else:
|
||||||
self.scene_graph_step(Scene.SHOP_CREDIT)
|
self.scene_graph_step(Scene.SHOP_CREDIT)
|
||||||
|
|
|
@ -19,12 +19,12 @@ class Headhunting(SceneGraphSolver):
|
||||||
def transition(self) -> bool:
|
def transition(self) -> bool:
|
||||||
if (scene := self.scene()) == Scene.HEADHUNTING:
|
if (scene := self.scene()) == Scene.HEADHUNTING:
|
||||||
if config.recog.match("sign_in/headhunting/available")[0] >= 0.9:
|
if config.recog.match("sign_in/headhunting/available")[0] >= 0.9:
|
||||||
self.tap_element("pull_once")
|
self.tap("pull_once")
|
||||||
else:
|
else:
|
||||||
notify("今日赠送单抽已抽完")
|
notify("今日赠送单抽已抽完")
|
||||||
return True
|
return True
|
||||||
elif scene == Scene.HEADHUNTING_FREE_CONFIRM:
|
elif scene == Scene.HEADHUNTING_FREE_CONFIRM:
|
||||||
self.tap_element("double_confirm/main", x_rate=1)
|
self.tap("double_confirm/main", x_rate=1)
|
||||||
elif scene == Scene.HEADHUNTING_RESULT:
|
elif scene == Scene.HEADHUNTING_RESULT:
|
||||||
notify("成功抽完赠送单抽")
|
notify("成功抽完赠送单抽")
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -67,7 +67,7 @@ class SSSSolver(SceneGraphSolver):
|
||||||
deadline=self.deadline,
|
deadline=self.deadline,
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
self.tap_element("sss/settlement_commission")
|
self.tap("sss/settlement_commission")
|
||||||
|
|
||||||
elif (
|
elif (
|
||||||
scene == Scene.SSS_MAIN and config.conf.sss.finish_while_full and is_full()
|
scene == Scene.SSS_MAIN and config.conf.sss.finish_while_full and is_full()
|
||||||
|
@ -93,7 +93,7 @@ class SSSSolver(SceneGraphSolver):
|
||||||
elif scene == Scene.SSS_SQUAD:
|
elif scene == Scene.SSS_SQUAD:
|
||||||
if config.conf.sss.choose_agent:
|
if config.conf.sss.choose_agent:
|
||||||
SSSChooseSolver().run()
|
SSSChooseSolver().run()
|
||||||
self.tap_element("sss/squad")
|
self.tap("sss/squad")
|
||||||
|
|
||||||
elif scene in self.waiting_scene:
|
elif scene in self.waiting_scene:
|
||||||
self.waiting_solver()
|
self.waiting_solver()
|
||||||
|
|
|
@ -26,7 +26,7 @@ class SSSChooseSolver(SceneGraphSolver):
|
||||||
|
|
||||||
def transition(self):
|
def transition(self):
|
||||||
if (scene := self.scene()) == Scene.OPERATOR_AGENT_SELECT:
|
if (scene := self.scene()) == Scene.OPERATOR_AGENT_SELECT:
|
||||||
self.tap_element("choose_agent/battle_confirm")
|
self.tap("choose_agent/battle_confirm")
|
||||||
elif scene in self.waiting_scene:
|
elif scene in self.waiting_scene:
|
||||||
self.waiting_solver()
|
self.waiting_solver()
|
||||||
elif scene == Scene.SSS_SQUAD:
|
elif scene == Scene.SSS_SQUAD:
|
||||||
|
|
|
@ -133,7 +133,7 @@ class SSSDROPSolver(SceneGraphSolver):
|
||||||
self.sleep(0.5)
|
self.sleep(0.5)
|
||||||
self.tap((1750, 550))
|
self.tap((1750, 550))
|
||||||
return
|
return
|
||||||
self.tap_element("sss/abandon")
|
self.tap("sss/abandon")
|
||||||
|
|
||||||
elif scene == Scene.SSS_DROP_EC_BEFORE_FIGHT:
|
elif scene == Scene.SSS_DROP_EC_BEFORE_FIGHT:
|
||||||
if self.timeout():
|
if self.timeout():
|
||||||
|
|
|
@ -110,7 +110,7 @@ class SSSFightSolver(SceneGraphSolver, FightMixin):
|
||||||
self.clear_op()
|
self.clear_op()
|
||||||
return
|
return
|
||||||
elif self.find("sss/start_directly"):
|
elif self.find("sss/start_directly"):
|
||||||
self.tap_element("sss/start_directly")
|
self.tap("sss/start_directly")
|
||||||
return
|
return
|
||||||
|
|
||||||
self.travel_watching_skills()
|
self.travel_watching_skills()
|
||||||
|
|
|
@ -62,17 +62,17 @@ class SSSNaviSolver(SceneGraphSolver):
|
||||||
self.tap(va(pos, (-240, 0)))
|
self.tap(va(pos, (-240, 0)))
|
||||||
elif scene == Scene.SSS_START:
|
elif scene == Scene.SSS_START:
|
||||||
if self.mode == "normal" and self.find("sss/switch_to_normal"):
|
if self.mode == "normal" and self.find("sss/switch_to_normal"):
|
||||||
self.tap_element("sss/switch_to_normal")
|
self.tap("sss/switch_to_normal")
|
||||||
return
|
return
|
||||||
elif self.mode == "ex" and self.find("sss/switch_to_ex"):
|
elif self.mode == "ex" and self.find("sss/switch_to_ex"):
|
||||||
self.tap_element("sss/switch_to_ex")
|
self.tap("sss/switch_to_ex")
|
||||||
return
|
return
|
||||||
self.tap((1555, 966))
|
self.tap((1555, 966))
|
||||||
elif scene == Scene.SSS_EC:
|
elif scene == Scene.SSS_EC:
|
||||||
score, scope = config.recog.matcher.match2d(self.ec)
|
score, scope = config.recog.matcher.match2d(self.ec)
|
||||||
if score > 0.8:
|
if score > 0.8:
|
||||||
self.tap(scope)
|
self.tap(scope)
|
||||||
self.tap_element("sss/ec")
|
self.tap("sss/ec")
|
||||||
elif scene == Scene.SSS_DEVICE:
|
elif scene == Scene.SSS_DEVICE:
|
||||||
current = self.get_device()
|
current = self.get_device()
|
||||||
for i in range(8):
|
for i in range(8):
|
||||||
|
@ -83,9 +83,9 @@ class SSSNaviSolver(SceneGraphSolver):
|
||||||
elif scene == Scene.SSS_SQUAD:
|
elif scene == Scene.SSS_SQUAD:
|
||||||
if config.conf.sss.choose_agent:
|
if config.conf.sss.choose_agent:
|
||||||
return True
|
return True
|
||||||
self.tap_element("sss/squad")
|
self.tap("sss/squad")
|
||||||
elif scene == Scene.SSS_EC_EX:
|
elif scene == Scene.SSS_EC_EX:
|
||||||
self.tap_element("sss/check_ex")
|
self.tap("sss/check_ex")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.scene_graph_step(Scene.SSS_MAIN)
|
self.scene_graph_step(Scene.SSS_MAIN)
|
||||||
|
|
|
@ -14,7 +14,7 @@ class TradeTokenSolver(SceneGraphSolver):
|
||||||
def transition(self):
|
def transition(self):
|
||||||
if (scene := self.scene()) == Scene.SHOP_TRADE_TOKEN:
|
if (scene := self.scene()) == Scene.SHOP_TRADE_TOKEN:
|
||||||
self.finished = True
|
self.finished = True
|
||||||
self.tap_element("shop/trade_token_dialog", x_rate=1)
|
self.tap("shop/trade_token_dialog", x_rate=1)
|
||||||
elif scene == Scene.SHOP_TOKEN:
|
elif scene == Scene.SHOP_TOKEN:
|
||||||
if self.finished:
|
if self.finished:
|
||||||
return True
|
return True
|
||||||
|
@ -24,6 +24,6 @@ class TradeTokenSolver(SceneGraphSolver):
|
||||||
self.tap(pos)
|
self.tap(pos)
|
||||||
else:
|
else:
|
||||||
self.swipe((200, 400), (0, 400))
|
self.swipe((200, 400), (0, 400))
|
||||||
self.tap_element("shop/commendation")
|
self.tap("shop/commendation")
|
||||||
else:
|
else:
|
||||||
self.scene_graph_step(Scene.SHOP_TOKEN)
|
self.scene_graph_step(Scene.SHOP_TOKEN)
|
||||||
|
|
|
@ -252,6 +252,8 @@ class RegularTaskPart(ConfModel):
|
||||||
|
|
||||||
check_mail_enable: bool = True
|
check_mail_enable: bool = True
|
||||||
"领取邮件奖励"
|
"领取邮件奖励"
|
||||||
|
delete_read_mail: bool = False
|
||||||
|
"删除已读邮件"
|
||||||
maa_enable: bool = True
|
maa_enable: bool = True
|
||||||
"日常任务"
|
"日常任务"
|
||||||
maa_gap: float = 3
|
maa_gap: float = 3
|
||||||
|
|
|
@ -18,17 +18,17 @@ def login_start(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.CONFIRM, Scene.LOGIN_START)
|
@edge(Scene.CONFIRM, Scene.LOGIN_START)
|
||||||
def confirm(solver: BaseSolver):
|
def confirm(solver: BaseSolver):
|
||||||
solver.tap_element("confirm")
|
solver.tap("confirm")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.NOTICE, Scene.INDEX)
|
@edge(Scene.NOTICE, Scene.INDEX)
|
||||||
def close_notice(solver: BaseSolver):
|
def close_notice(solver: BaseSolver):
|
||||||
solver.tap_element("notice")
|
solver.tap("notice")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.NETWORK_CHECK, Scene.LOGIN_START)
|
@edge(Scene.NETWORK_CHECK, Scene.LOGIN_START)
|
||||||
def network_check_cancel(solver: BaseSolver):
|
def network_check_cancel(solver: BaseSolver):
|
||||||
solver.tap_element("confirm")
|
solver.tap("confirm")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.MOON_FESTIVAL, Scene.SIGN_IN_DAILY)
|
@edge(Scene.MOON_FESTIVAL, Scene.SIGN_IN_DAILY)
|
||||||
|
@ -43,12 +43,12 @@ def story_stage(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.STORY, Scene.STORY_SKIP)
|
@edge(Scene.STORY, Scene.STORY_SKIP)
|
||||||
def skip_story(solver: BaseSolver):
|
def skip_story(solver: BaseSolver):
|
||||||
solver.tap_element("story_skip")
|
solver.tap("story_skip")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.STORY_SKIP, Scene.OPERATOR_BEFORE)
|
@edge(Scene.STORY_SKIP, Scene.OPERATOR_BEFORE)
|
||||||
def skip_story_confirm(solver: BaseSolver):
|
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)
|
@edge(Scene.OPERATOR_DETAILS, Scene.OPERATOR_MANAGEMENT)
|
||||||
|
|
|
@ -23,4 +23,4 @@ def friend_visiting_back(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.BACK_TO_FRIEND_LIST, Scene.BUSINESS_CARD)
|
@edge(Scene.BACK_TO_FRIEND_LIST, Scene.BUSINESS_CARD)
|
||||||
def back_to_friend_confirm(solver: BaseSolver):
|
def back_to_friend_confirm(solver: BaseSolver):
|
||||||
solver.tap_element("double_confirm/main", x_rate=1)
|
solver.tap("double_confirm/main", x_rate=1)
|
||||||
|
|
|
@ -37,17 +37,17 @@ def back_to_index(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.LEAVE_INFRASTRUCTURE, Scene.INDEX)
|
@edge(Scene.LEAVE_INFRASTRUCTURE, Scene.INDEX)
|
||||||
def leave_infrastructure(solver: BaseSolver):
|
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)
|
@edge(Scene.DOWNLOAD_VOICE_RESOURCES, Scene.INDEX)
|
||||||
def dont_download_voice(solver: BaseSolver):
|
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)
|
@edge(Scene.LOGIN_QUICKLY, Scene.INDEX)
|
||||||
def login_quickly(solver: BaseSolver):
|
def login_quickly(solver: BaseSolver):
|
||||||
solver.tap_element("login_awake")
|
solver.tap("login_awake")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.LOGIN_CAPTCHA, Scene.INDEX)
|
@edge(Scene.LOGIN_CAPTCHA, Scene.INDEX)
|
||||||
|
@ -63,7 +63,7 @@ def login_bilibili(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.EXIT_GAME, Scene.INDEX)
|
@edge(Scene.EXIT_GAME, Scene.INDEX)
|
||||||
def exit_cancel(solver: BaseSolver):
|
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)
|
@edge(Scene.MATERIEL, Scene.INDEX)
|
||||||
|
|
|
@ -9,9 +9,9 @@ from .utils import edge
|
||||||
@edge(Scene.MISSION_DAILY, Scene.MISSION_WEEKLY)
|
@edge(Scene.MISSION_DAILY, Scene.MISSION_WEEKLY)
|
||||||
@edge(Scene.MISSION_TRAINEE, Scene.MISSION_WEEKLY)
|
@edge(Scene.MISSION_TRAINEE, Scene.MISSION_WEEKLY)
|
||||||
def mission_to_weekly(solver: BaseSolver):
|
def mission_to_weekly(solver: BaseSolver):
|
||||||
solver.tap_element("mission_weekly")
|
solver.tap("mission_weekly")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.MISSION_TRAINEE, Scene.MISSION_DAILY)
|
@edge(Scene.MISSION_TRAINEE, Scene.MISSION_DAILY)
|
||||||
def mission_trainee_to_daily(solver: BaseSolver):
|
def mission_trainee_to_daily(solver: BaseSolver):
|
||||||
solver.tap_element("mission_daily")
|
solver.tap("mission_daily")
|
||||||
|
|
|
@ -53,7 +53,7 @@ from .utils import edge
|
||||||
@edge(Scene.OPERATOR_DETAILS, Scene.NAVIGATION_BAR)
|
@edge(Scene.OPERATOR_DETAILS, Scene.NAVIGATION_BAR)
|
||||||
@edge(Scene.ROGUE_INDEX, Scene.NAVIGATION_BAR)
|
@edge(Scene.ROGUE_INDEX, Scene.NAVIGATION_BAR)
|
||||||
def index_nav(solver: BaseSolver):
|
def index_nav(solver: BaseSolver):
|
||||||
solver.tap_element("nav_button")
|
solver.tap("nav_button")
|
||||||
|
|
||||||
|
|
||||||
# 不加从导航栏到基建首页的边,防止在基建内循环
|
# 不加从导航栏到基建首页的边,防止在基建内循环
|
||||||
|
|
|
@ -24,17 +24,17 @@ def operation_back(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.OPERATOR_FIGHT, Scene.OPERATOR_GIVEUP)
|
@edge(Scene.OPERATOR_FIGHT, Scene.OPERATOR_GIVEUP)
|
||||||
def operation_fight(solver: BaseSolver):
|
def operation_fight(solver: BaseSolver):
|
||||||
solver.tap_element("fight/gear")
|
solver.tap("fight/gear")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.OPERATOR_GIVEUP, Scene.OPERATOR_FAILED)
|
@edge(Scene.OPERATOR_GIVEUP, Scene.OPERATOR_FAILED)
|
||||||
def operation_give_up(solver: BaseSolver):
|
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)
|
@edge(Scene.OPERATOR_FAULT_CONFIRM, Scene.OPERATOR_FAILED)
|
||||||
def operation_fault_confirm(solver: BaseSolver):
|
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)
|
@edge(Scene.OPERATOR_FINISH, Scene.OPERATOR_BEFORE)
|
||||||
|
|
|
@ -13,7 +13,7 @@ def recruit_result(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.REFRESH_TAGS, Scene.RECRUIT_TAGS)
|
@edge(Scene.REFRESH_TAGS, Scene.RECRUIT_TAGS)
|
||||||
def refresh_cancel(solver: BaseSolver):
|
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)
|
@edge(Scene.RECRUIT_TAGS, Scene.RECRUIT_MAIN)
|
||||||
|
@ -23,4 +23,4 @@ def recruit_back(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.SKIP, Scene.RECRUIT_AGENT)
|
@edge(Scene.SKIP, Scene.RECRUIT_AGENT)
|
||||||
def skip(solver: BaseSolver):
|
def skip(solver: BaseSolver):
|
||||||
solver.tap_element("skip")
|
solver.tap("skip")
|
||||||
|
|
|
@ -37,7 +37,7 @@ def infra_arrange_confirm(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.INFRA_ARRANGE_ORDER, Scene.RIIC_OPERATOR_SELECT)
|
@edge(Scene.INFRA_ARRANGE_ORDER, Scene.RIIC_OPERATOR_SELECT)
|
||||||
def infra_arrange_order(solver: BaseSolver):
|
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)
|
@edge(Scene.RIIC_REPORT, Scene.CTRLCENTER_ASSISTANT)
|
||||||
|
@ -47,12 +47,12 @@ def riic_back(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.CTRLCENTER_ASSISTANT, Scene.RIIC_REPORT)
|
@edge(Scene.CTRLCENTER_ASSISTANT, Scene.RIIC_REPORT)
|
||||||
def riic(solver: BaseSolver):
|
def riic(solver: BaseSolver):
|
||||||
solver.tap_element("control_central_assistants")
|
solver.tap("control_central_assistants")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.INFRA_MAIN, Scene.CTRLCENTER_ASSISTANT)
|
@edge(Scene.INFRA_MAIN, Scene.CTRLCENTER_ASSISTANT)
|
||||||
def control_central(solver: BaseSolver):
|
def control_central(solver: BaseSolver):
|
||||||
solver.tap_element("control_central")
|
solver.tap("control_central")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.SANITY_CHARGE, Scene.INFRA_MAIN)
|
@edge(Scene.SANITY_CHARGE, Scene.INFRA_MAIN)
|
||||||
|
@ -72,4 +72,4 @@ def switch_order(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.PRODUCT_SWITCHING_CONFIRM, Scene.FACTORY_ROOMS)
|
@edge(Scene.PRODUCT_SWITCHING_CONFIRM, Scene.FACTORY_ROOMS)
|
||||||
def product_switching_confirm(solver: BaseSolver):
|
def product_switching_confirm(solver: BaseSolver):
|
||||||
solver.tap_element("double_confirm/main", x_rate=0)
|
solver.tap("double_confirm/main", x_rate=0)
|
||||||
|
|
|
@ -7,10 +7,10 @@ from .utils import edge
|
||||||
@edge(Scene.UNKNOW_ROGUE, Scene.ROGUE_INDEX)
|
@edge(Scene.UNKNOW_ROGUE, Scene.ROGUE_INDEX)
|
||||||
@edge(Scene.ROGUE_SELECT, Scene.ROGUE_INDEX)
|
@edge(Scene.ROGUE_SELECT, Scene.ROGUE_INDEX)
|
||||||
def infra_back(solver: BaseSolver):
|
def infra_back(solver: BaseSolver):
|
||||||
solver.tap_element("rogue/back")
|
solver.tap("rogue/back")
|
||||||
|
|
||||||
|
|
||||||
@edge(Scene.ROGUE_ABANDON, Scene.ROGUE_INDEX)
|
@edge(Scene.ROGUE_ABANDON, Scene.ROGUE_INDEX)
|
||||||
@edge(Scene.ROGUE_REFRESH_SHOP, Scene.UNKNOW_ROGUE)
|
@edge(Scene.ROGUE_REFRESH_SHOP, Scene.UNKNOW_ROGUE)
|
||||||
def double_confirm_back(solver: BaseSolver):
|
def double_confirm_back(solver: BaseSolver):
|
||||||
solver.tap_element("double_confirm/main", x_rate=1)
|
solver.tap("double_confirm/main", x_rate=1)
|
||||||
|
|
|
@ -26,4 +26,4 @@ def shop_back(solver: BaseSolver):
|
||||||
|
|
||||||
@edge(Scene.SHOP_TRADE_TOKEN, Scene.SHOP_TOKEN)
|
@edge(Scene.SHOP_TRADE_TOKEN, Scene.SHOP_TOKEN)
|
||||||
def trade_cancel(solver: BaseSolver):
|
def trade_cancel(solver: BaseSolver):
|
||||||
solver.tap_element("shop/trade_token_dialog", x_rate=0)
|
solver.tap("shop/trade_token_dialog", x_rate=0)
|
||||||
|
|
|
@ -35,4 +35,4 @@ def sss_back(solver: BaseSolver):
|
||||||
@edge(Scene.SSS_ABANDON_DROP_IN_FIGHT, Scene.OPERATOR_FIGHT)
|
@edge(Scene.SSS_ABANDON_DROP_IN_FIGHT, Scene.OPERATOR_FIGHT)
|
||||||
@edge(Scene.SSS_EXIT_CONFIRM, Scene.SSS_TERMINATED)
|
@edge(Scene.SSS_EXIT_CONFIRM, Scene.SSS_TERMINATED)
|
||||||
def sss_exit(solver: BaseSolver):
|
def sss_exit(solver: BaseSolver):
|
||||||
solver.tap_element("double_confirm/main", x_rate=1)
|
solver.tap("double_confirm/main", x_rate=1)
|
||||||
|
|
|
@ -153,7 +153,7 @@ class Recognizer:
|
||||||
self.scene = Scene.DRONE_ACCELERATE
|
self.scene = Scene.DRONE_ACCELERATE
|
||||||
elif self.find("factory_collect"):
|
elif self.find("factory_collect"):
|
||||||
self.scene = Scene.FACTORY_ROOMS
|
self.scene = Scene.FACTORY_ROOMS
|
||||||
elif self.find("mail"):
|
elif self.find("mail/banner"):
|
||||||
self.scene = Scene.MAIL
|
self.scene = Scene.MAIL
|
||||||
elif self.find("navigation/record_restoration"):
|
elif self.find("navigation/record_restoration"):
|
||||||
self.scene = Scene.OPERATOR_CHOOSE_LEVEL
|
self.scene = Scene.OPERATOR_CHOOSE_LEVEL
|
||||||
|
@ -671,7 +671,7 @@ class Recognizer:
|
||||||
judge: bool = True,
|
judge: bool = True,
|
||||||
strict: bool = False,
|
strict: bool = False,
|
||||||
threshold: float = 0.0,
|
threshold: float = 0.0,
|
||||||
) -> tp.Scope:
|
) -> tp.Scope | None:
|
||||||
"""
|
"""
|
||||||
查找元素是否出现在画面中
|
查找元素是否出现在画面中
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,9 @@ color = {
|
||||||
"login_connecting": (760, 881),
|
"login_connecting": (760, 881),
|
||||||
"login_loading": (920, 388),
|
"login_loading": (920, 388),
|
||||||
"login_logo": (601, 332),
|
"login_logo": (601, 332),
|
||||||
"mail": (307, 39),
|
"mail/banner": (307, 39),
|
||||||
|
"mail/collect": (1601, 979),
|
||||||
|
"mail/delete": (1226, 978),
|
||||||
"mission_collect": (1521, 164),
|
"mission_collect": (1521, 164),
|
||||||
"mission_trainee_on": (690, 17),
|
"mission_trainee_on": (690, 17),
|
||||||
"nav_bar": (655, 0),
|
"nav_bar": (655, 0),
|
||||||
|
@ -219,6 +221,8 @@ template_matching = {
|
||||||
"loading2": (620, 247),
|
"loading2": (620, 247),
|
||||||
"loading3": (1681, 1000),
|
"loading3": (1681, 1000),
|
||||||
"loading4": (828, 429),
|
"loading4": (828, 429),
|
||||||
|
"mail/clean": ((1560, 150), (1830, 390)),
|
||||||
|
"mail/complete": ((1560, 150), (1830, 390)),
|
||||||
"main_theme": (283, 945),
|
"main_theme": (283, 945),
|
||||||
"main_theme_small": (321, 973),
|
"main_theme_small": (321, 973),
|
||||||
"materiel_ico": (892, 61),
|
"materiel_ico": (892, 61),
|
||||||
|
|
|
@ -174,22 +174,36 @@ class BaseSolver:
|
||||||
judge: bool = True,
|
judge: bool = True,
|
||||||
strict: bool = False,
|
strict: bool = False,
|
||||||
score=0.0,
|
score=0.0,
|
||||||
) -> tp.Scope:
|
) -> tp.Scope | None:
|
||||||
return config.recog.find(res, draw, scope, thres, judge, strict, score)
|
return config.recog.find(res, draw, scope, thres, judge, strict, score)
|
||||||
|
|
||||||
def tap(
|
def tap(
|
||||||
self,
|
self,
|
||||||
poly: tp.Location,
|
poly: tp.Location | tp.Res,
|
||||||
x_rate: float = 0.5,
|
x_rate: float = 0.5,
|
||||||
y_rate: float = 0.5,
|
y_rate: float = 0.5,
|
||||||
interval: float = 1,
|
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():
|
if config.stop_mower.is_set():
|
||||||
raise MowerExit
|
raise MowerExit
|
||||||
|
if isinstance(poly, str):
|
||||||
|
poly = self.find(poly)
|
||||||
|
if poly is None:
|
||||||
|
raise RecognizeError("未识别到{res}元素")
|
||||||
self.tap_info = None, None
|
self.tap_info = None, None
|
||||||
pos = self.get_pos(poly, x_rate, y_rate)
|
config.device.tap(self.get_pos(poly, x_rate, y_rate))
|
||||||
config.device.tap(pos)
|
|
||||||
if interval > 0:
|
if interval > 0:
|
||||||
self.sleep(interval)
|
self.sleep(interval)
|
||||||
|
|
||||||
|
@ -232,28 +246,6 @@ class BaseSolver:
|
||||||
config.device.launch()
|
config.device.launch()
|
||||||
config.recog.update()
|
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(
|
def tap_index_element(
|
||||||
self,
|
self,
|
||||||
name: Literal[
|
name: Literal[
|
||||||
|
|
|
@ -155,7 +155,11 @@ Res = Literal[
|
||||||
"login_captcha",
|
"login_captcha",
|
||||||
"login_connecting",
|
"login_connecting",
|
||||||
"login_logo",
|
"login_logo",
|
||||||
"mail",
|
"mail/banner",
|
||||||
|
"mail/clean",
|
||||||
|
"mail/collect",
|
||||||
|
"mail/complete",
|
||||||
|
"mail/delete",
|
||||||
"main_theme",
|
"main_theme",
|
||||||
"materiel_ico",
|
"materiel_ico",
|
||||||
"mission_collect",
|
"mission_collect",
|
||||||
|
@ -354,7 +358,6 @@ Res = Literal[
|
||||||
"ra/waste_time_button",
|
"ra/waste_time_button",
|
||||||
"ra/waste_time_dialog",
|
"ra/waste_time_dialog",
|
||||||
"read_and_agree",
|
"read_and_agree",
|
||||||
"read_mail",
|
|
||||||
"recruit/agent_token",
|
"recruit/agent_token",
|
||||||
"recruit/agent_token_first",
|
"recruit/agent_token_first",
|
||||||
"recruit/begin_recruit",
|
"recruit/begin_recruit",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue