Compare commits
3 commits
9276c3a1cb
...
fca9ea3ebc
Author | SHA1 | Date | |
---|---|---|---|
fca9ea3ebc | |||
5e11ef0aa0 | |||
40917771ce |
6 changed files with 84 additions and 49 deletions
|
@ -17,6 +17,9 @@ from arknights_mower.solvers.infra.clue import ClueSolver
|
|||
from arknights_mower.solvers.infra.drone import DroneSolver
|
||||
from arknights_mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from arknights_mower.solvers.infra.get_agent_from_room import GetAgentFromRoomSolver
|
||||
from arknights_mower.solvers.infra.get_order_remaining_time import (
|
||||
GetOrderRemainingTimeSolver,
|
||||
)
|
||||
from arknights_mower.solvers.infra.reload import (
|
||||
ReloadSolver,
|
||||
)
|
||||
|
@ -1649,24 +1652,11 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
|
||||
def get_run_roder_time(self, room):
|
||||
logger.info("基建:读取插拔时间")
|
||||
# 点击进入该房间
|
||||
self.enter_room(room)
|
||||
# 进入房间详情
|
||||
error_count = 0
|
||||
while self.find("bill_accelerate") is None:
|
||||
if error_count > 5:
|
||||
raise Exception("未成功进入无人机界面")
|
||||
self.tap((config.recog.w * 0.05, config.recog.h * 0.95), interval=1)
|
||||
error_count += 1
|
||||
execute_time = self.double_read_time(
|
||||
(
|
||||
(int(config.recog.w * 650 / 2496), int(config.recog.h * 660 / 1404)),
|
||||
(int(config.recog.w * 815 / 2496), int(config.recog.h * 710 / 1404)),
|
||||
),
|
||||
use_digit_reader=True,
|
||||
)
|
||||
execute_time = execute_time - timedelta(
|
||||
seconds=(60 * config.conf.run_order_delay)
|
||||
execute_time = GetOrderRemainingTimeSolver().run(room)
|
||||
execute_time = (
|
||||
datetime.now()
|
||||
+ timedelta(seconds=execute_time)
|
||||
- timedelta(seconds=(60 * config.conf.run_order_delay))
|
||||
)
|
||||
logger.info("下一次进行插拔的时间为:" + execute_time.strftime("%H:%M:%S"))
|
||||
self.scene_graph_navigation(Scene.INFRA_MAIN)
|
||||
|
@ -2315,25 +2305,8 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
_current_room = self.op_data.get_current_room(room, True)
|
||||
return _current_room
|
||||
|
||||
def get_order_remaining_time(self):
|
||||
error_count = 0
|
||||
while (
|
||||
self.find("factory_accelerate") is None
|
||||
and self.find("bill_accelerate") is None
|
||||
):
|
||||
if error_count > 5:
|
||||
raise Exception("未成功进入无人机界面")
|
||||
self.tap((config.recog.w * 0.05, config.recog.h * 0.95), interval=0.5)
|
||||
error_count += 1
|
||||
# 订单剩余时间
|
||||
execute_time = self.double_read_time(
|
||||
(
|
||||
(int(config.recog.w * 650 / 2496), int(config.recog.h * 660 / 1404)),
|
||||
(int(config.recog.w * 815 / 2496), int(config.recog.h * 710 / 1404)),
|
||||
),
|
||||
use_digit_reader=True,
|
||||
)
|
||||
return round((execute_time - datetime.now()).total_seconds(), 1)
|
||||
def get_order_remaining_time(self, room):
|
||||
return GetOrderRemainingTimeSolver().run(room)
|
||||
|
||||
def current_room_changed(self, instance):
|
||||
if not self.op_data.first_init:
|
||||
|
@ -2447,7 +2420,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
and config.conf.run_order_buffer_time > 0
|
||||
and choose_error <= 0
|
||||
):
|
||||
remaining_time = self.get_order_remaining_time()
|
||||
remaining_time = self.get_order_remaining_time(room)
|
||||
if 0 < remaining_time < (config.conf.run_order_delay + 10) * 60:
|
||||
if config.conf.run_order_buffer_time > 0:
|
||||
self.task.time = (
|
||||
|
|
|
@ -7,6 +7,8 @@ import cv2
|
|||
import numpy as np
|
||||
|
||||
from arknights_mower.models import secret_front
|
||||
from arknights_mower.solvers.infra.base_mixin import BaseMixin
|
||||
from arknights_mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from arknights_mower.solvers.infra.filter import RIIC_Filter
|
||||
from arknights_mower.utils import config
|
||||
from arknights_mower.utils.character_recognize import (
|
||||
|
@ -25,8 +27,9 @@ from arknights_mower.utils.vector import sa
|
|||
# pro_list = pickle.load(f)
|
||||
|
||||
|
||||
class BaseChoose(SceneGraphSolver):
|
||||
def run(self, agent_list: list):
|
||||
class BaseChooseSolver(SceneGraphSolver, BaseMixin):
|
||||
def run(self, room: str, agent_list: list):
|
||||
self.room = room
|
||||
self.agent_list = agent_list
|
||||
self.wait_choose = {}
|
||||
self.choosed = []
|
||||
|
@ -36,7 +39,6 @@ class BaseChoose(SceneGraphSolver):
|
|||
self.first_filter = True
|
||||
self.in_adjust = False
|
||||
self.tmp_data = {}
|
||||
|
||||
try:
|
||||
super().run()
|
||||
except ValueError as e:
|
||||
|
@ -225,10 +227,16 @@ class BaseChoose(SceneGraphSolver):
|
|||
def transition(self) -> bool:
|
||||
if (scene := self.scene()) == Scene.RIIC_OPERATOR_SELECT:
|
||||
return self.riic_agent_choose()
|
||||
elif self.find("room_detail") and EnterRoomSolver().detect_room() == self.room:
|
||||
self.tap((1600, 200))
|
||||
elif (
|
||||
self.scene() in [Scene.ORDER_LIST, Scene.FACTORY_ROOMS]
|
||||
and self.detect_room_inside() == self.room
|
||||
):
|
||||
self.tap((500, 970))
|
||||
elif scene == Scene.INFRA_ARRANGE_ORDER:
|
||||
logger.info(Scene.INFRA_ARRANGE_ORDER)
|
||||
self.scene_graph_navigation(Scene.RIIC_OPERATOR_SELECT)
|
||||
self.scene_graph_step(Scene.RIIC_OPERATOR_SELECT)
|
||||
elif self.scene in self.waiting_scene:
|
||||
self.waiting_solver()
|
||||
else:
|
||||
return False
|
||||
EnterRoomSolver().run(self.room)
|
||||
|
|
|
@ -35,9 +35,9 @@ class DroneSolver(SceneGraphSolver, BaseMixin):
|
|||
try:
|
||||
cur_count = DigitReader().get_drone(config.recog.gray)
|
||||
except Exception as e:
|
||||
raise e
|
||||
finally:
|
||||
EnterRoomSolver().run(self.room, detail=False)
|
||||
raise e
|
||||
|
||||
if count is None:
|
||||
count = cur_count - config.conf.drone_count_limit
|
||||
|
||||
|
|
51
arknights_mower/solvers/infra/get_order_remaining_time.py
Normal file
51
arknights_mower/solvers/infra/get_order_remaining_time.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
from datetime import datetime, timedelta
|
||||
|
||||
from arknights_mower.solvers.infra.base_mixin import BaseMixin
|
||||
from arknights_mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from arknights_mower.utils import config
|
||||
from arknights_mower.utils.graph import SceneGraphSolver
|
||||
from arknights_mower.utils.log import logger
|
||||
from arknights_mower.utils.recognize import Scene
|
||||
|
||||
|
||||
class GetOrderRemainingTimeSolver(SceneGraphSolver, BaseMixin):
|
||||
def run(self, room: str):
|
||||
logger.info("Start:读取订单剩余时间")
|
||||
self.room = room
|
||||
self.res = None
|
||||
if (
|
||||
self.scene() == Scene.ORDER_LIST
|
||||
and not self.detect_room_inside() == self.room
|
||||
):
|
||||
EnterRoomSolver().run(self.room, detail=False)
|
||||
self.wait_start()
|
||||
super().run()
|
||||
return self.res
|
||||
|
||||
def timeout(self) -> bool:
|
||||
return datetime.now() > self.start_time + timedelta(seconds=10)
|
||||
|
||||
def wait_start(self):
|
||||
self.start_time = datetime.now()
|
||||
|
||||
def transition(self) -> bool:
|
||||
if (scene := self.scene()) == Scene.INFRA_DETAILS:
|
||||
self.ctap((200, 1000), 1, config.screenshot_avg / 1000)
|
||||
self.wait_start()
|
||||
elif scene == Scene.ORDER_LIST:
|
||||
if self.timeout():
|
||||
logger.error("读取订单失败")
|
||||
return True
|
||||
elif pos := self.find("bill_accelerate"):
|
||||
pos[0][0] += 69
|
||||
pos[0][1] -= 214
|
||||
pos[1][0] -= 52
|
||||
pos[1][1] -= 220
|
||||
if res := self.double_read_time(pos, use_digit_reader=True):
|
||||
self.res = (res - datetime.now()).total_seconds()
|
||||
return True
|
||||
|
||||
elif scene in self.waiting_scene:
|
||||
self.waiting_solver()
|
||||
else:
|
||||
EnterRoomSolver().run(self.room, detail=False)
|
|
@ -34,7 +34,7 @@ production_time = {
|
|||
|
||||
|
||||
class SwitchProductSolver(SceneGraphSolver, BaseMixin):
|
||||
def run(self, room, tar_product):
|
||||
def run(self, room, tar_product, only_get_time=False):
|
||||
logger.info(f"Start:切换产物 房间:{room} 目标产物:{tar_product}")
|
||||
EnterRoomSolver().run(room, detail=False)
|
||||
|
||||
|
@ -47,8 +47,12 @@ class SwitchProductSolver(SceneGraphSolver, BaseMixin):
|
|||
|
||||
# 读取当前无人机数量避免重复开关
|
||||
cur_drone_count = DigitReader().get_drone(config.recog.gray)
|
||||
# 读取生产速度
|
||||
speed = self.read_speed()
|
||||
# 获取无人机加速的剩余时间
|
||||
remain_time = GetRemainTimeSolver().run(room)
|
||||
if only_get_time:
|
||||
return remain_time % production_time[cur_product] / speed
|
||||
# 使用无人机加速
|
||||
start_time = datetime.now()
|
||||
drone_count = remain_time % production_time[cur_product] // 180
|
||||
|
@ -57,7 +61,6 @@ class SwitchProductSolver(SceneGraphSolver, BaseMixin):
|
|||
return False
|
||||
|
||||
# 等待产物完成
|
||||
speed = self.read_speed()
|
||||
wait_time = (
|
||||
remain_time % production_time[cur_product] % 180 / speed
|
||||
- (datetime.now() - start_time).total_seconds()
|
||||
|
|
|
@ -35,7 +35,7 @@ def infra_arrange_confirm(solver: BaseSolver):
|
|||
solver.tap((1452, 1029))
|
||||
|
||||
|
||||
@edge(Scene.INFRA_ARRANGE_ORDER, Scene.INFRA_DETAILS)
|
||||
@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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue