重写搓玉补货为solver

This commit is contained in:
Elaina 2024-09-21 19:27:12 +08:00
parent 20badca8e3
commit b500d02567
6 changed files with 59 additions and 28 deletions

BIN
arknights_mower/resources/reload_check.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
arknights_mower/resources/stone_fragment.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -23,6 +23,7 @@ from arknights_mower.solvers.navigation import NavigationSolver
from arknights_mower.solvers.operation import OperationSolver
from arknights_mower.solvers.reclamation_algorithm import ReclamationAlgorithm
from arknights_mower.solvers.recruit import RecruitSolver
from arknights_mower.solvers.reload_stone_fragment import ReloadStoneFragmentSolver
from arknights_mower.solvers.report import ReportSolver
from arknights_mower.solvers.secret_front import SecretFront
from arknights_mower.solvers.shop import CreditShop
@ -38,7 +39,7 @@ from arknights_mower.utils.email import send_message
from arknights_mower.utils.graph import SceneGraphSolver
from arknights_mower.utils.image import cropimg, loadres, thres2
from arknights_mower.utils.log import logger
from arknights_mower.utils.operators import Operators, Operator
from arknights_mower.utils.operators import Operator, Operators
from arknights_mower.utils.path import get_path
from arknights_mower.utils.plan import PlanTriggerTiming
from arknights_mower.utils.recognize import Scene
@ -749,7 +750,6 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
)
):
self.reload()
logger.info(f"记录本次补货时间为:{datetime.now()}")
self.todo_task = True
elif not self.collect_notification:
if self.no_pending_task(1):
@ -2996,32 +2996,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
return self.find_next_task(datetime.now() + timedelta(minutes=minute)) is None
def reload(self):
error = False
for room in self.reload_room:
try:
logger.info(f"开始搓玉补货:{room}")
self.enter_room(room)
self.tap((config.recog.w * 0.05, config.recog.h * 0.95), interval=0.25)
self.tap((config.recog.w * 0.05, config.recog.h * 0.95), interval=0.25)
self.tap((config.recog.w * 0.05, config.recog.h * 0.95), interval=0.25)
# 补货
self.tap((config.recog.w * 0.75, config.recog.h * 0.3), interval=0.5)
self.tap((config.recog.w * 0.75, config.recog.h * 0.9), interval=0.5)
self.scene_graph_step(Scene.INFRA_MAIN)
except MowerExit:
raise
except Exception as e:
logger.exception(e)
error = True
config.recog.update()
back_count = 0
while self.scene() != Scene.INFRA_MAIN:
self.back()
back_count += 1
if back_count > 3:
raise e
if not error:
self.reload_time = datetime.now()
ReloadStoneFragmentSolver().run()
@CFUNCTYPE(None, c_int, c_char_p, c_void_p)
def log_maa(msg, details, arg):

View file

@ -0,0 +1,46 @@
from datetime import datetime, timedelta
from arknights_mower import __main__
from arknights_mower.solvers.enter_room import EnterRoomSolver
from arknights_mower.utils import config
from arknights_mower.utils.graph import SceneGraphSolver
from arknights_mower.utils.log import logger
class ReloadStoneFragmentSolver(SceneGraphSolver):
def run(self) -> None:
self.success = False
reload_room = __main__.base_scheduler.reload_room
for self.room in reload_room:
logger.info(f"开始搓玉补货:{self.room}")
EnterRoomSolver().run(self.room, detail=False)
self.wait_start()
super().run()
def timeout(self) -> bool:
return datetime.now() > self.start_time + timedelta(seconds=5)
def wait_start(self):
self.start_time = datetime.now()
def transition(self) -> bool:
if pos := self.find("stone_fragment", scope=(84, 872)):
self.wait_start()
self.ctap(pos, 1, config.screenshot_avg / 1000)
elif self.find("stone_fragment", scope=(1643, 450)):
if self.find("reload_check"):
self.ctap((1400, 850), 1, config.screenshot_avg / 1000)
self.success = True
elif self.timeout():
logger.info(f"货已满:{self.room} 时间为:{datetime.now()}")
return True
elif not self.success:
self.tap((1450, 300))
else:
logger.info(f"搓玉补货成功:{self.room} 时间为:{datetime.now()}")
return True
elif self.timeout():
logger.info(f"搓玉补货失败:{self.room}")
return True
else:
EnterRoomSolver().run(self.room, detail=False)

View file

@ -162,11 +162,13 @@ template_matching = {
"recruit/riic_res/WARRIOR": ((750, 730), (1920, 860)),
"recruit/start_recruit": (1438, 849),
"recruit/stone": ((900, 0), (1920, 120)),
"reload_check": (1252, 772),
"riic/assistants": ((1320, 400), (1600, 650)),
"riic/iron": ((1570, 230), (1630, 340)),
"riic/orundum": ((1500, 320), (1800, 550)),
"riic/trade": ((1320, 250), (1600, 500)),
"sign_in/moon_festival/banner": (704, 92),
"stone_fragment": None,
"terminal_regular": (1247, 980),
"upgrade": (997, 501),
}

View file

@ -327,6 +327,7 @@ Res = Literal[
"recruit/ticket",
"recruit/time",
"recruiting_instructions",
"reload_check",
"riic/assistants",
"riic/exp",
"riic/iron",
@ -398,6 +399,7 @@ Res = Literal[
"sss/terminated",
"start",
"stone",
"stone_fragment",
"terminal_eliminate",
"terminal_longterm",
"terminal_longterm_reclamation_algorithm",