Compare commits
3 commits
3e3eacd261
...
79dfd0a2e8
Author | SHA1 | Date | |
---|---|---|---|
79dfd0a2e8 | |||
c8aeec2307 | |||
3b3a787e98 |
2 changed files with 78 additions and 94 deletions
|
@ -38,7 +38,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
|
||||
from arknights_mower.utils.operators import Operators, Operator
|
||||
from arknights_mower.utils.path import get_path
|
||||
from arknights_mower.utils.plan import PlanTriggerTiming
|
||||
from arknights_mower.utils.recognize import Scene
|
||||
|
@ -2591,7 +2591,55 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
EnterRoomSolver().run(room)
|
||||
|
||||
def get_agent_from_room(self, room, read_time_index=None):
|
||||
if read_time_index is None:
|
||||
read_time_index = []
|
||||
if room == "meeting" and not config.conf.leifeng_mode:
|
||||
self.sleep(0.5)
|
||||
config.recog.update()
|
||||
clue_res = self.read_screen(
|
||||
config.recog.img, limit=10, cord=((645, 977), (755, 1018))
|
||||
)
|
||||
if clue_res != 11:
|
||||
self.clue_count = clue_res
|
||||
logger.info(f"当前拥有线索数量为{self.clue_count}")
|
||||
|
||||
if room.startswith("dorm"):
|
||||
read_time_index = [
|
||||
i
|
||||
for i, obj in enumerate(self.op_data.plan[room])
|
||||
if obj.agent == "Free" or obj.agent == "菲亚梅塔"
|
||||
]
|
||||
|
||||
result = GetAgentFromRoomSolver().run(room, read_time_index)
|
||||
for i in range(len(result)):
|
||||
_name = result[i]["agent"]
|
||||
_mood = result[i]["mood"]
|
||||
if _name != "":
|
||||
if _name not in self.op_data.operators.keys() and _name in agent_list:
|
||||
self.op_data.add(Operator(_name, ""))
|
||||
update_time = False
|
||||
agent = self.op_data.operators[_name]
|
||||
if self.op_data.operators[_name].need_to_refresh(r=room) or (
|
||||
self.tasks and self.tasks[0].type == TaskTypes.SHIFT_ON
|
||||
):
|
||||
update_time = True
|
||||
|
||||
else:
|
||||
_mood = self.op_data.operators[_name].current_mood()
|
||||
high_no_time = self.op_data.update_detail(
|
||||
_name, _mood, room, i, update_time
|
||||
)
|
||||
result[i]["depletion_rate"] = agent.depletion_rate
|
||||
if high_no_time is not None and high_no_time not in read_time_index:
|
||||
logger.debug(
|
||||
f"检测到高效组休息时间数据不存在:{room},{high_no_time}"
|
||||
)
|
||||
read_time_index.append(high_no_time)
|
||||
|
||||
if i in read_time_index:
|
||||
logger.debug(f"开始记录时间:{room},{i}")
|
||||
self.op_data.refresh_dorm_time(room, i, result[i])
|
||||
logger.debug(f"停止记录时间:{str(result[i])}")
|
||||
for _operator in self.op_data.operators.keys():
|
||||
if self.op_data.operators[
|
||||
_operator
|
||||
|
|
|
@ -1,134 +1,70 @@
|
|||
from datetime import datetime, timedelta
|
||||
|
||||
from arknights_mower.data import agent_list
|
||||
from arknights_mower import __main__
|
||||
from arknights_mower.solvers.base_mixin import BaseMixin
|
||||
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.image import cropimg
|
||||
from arknights_mower.utils.log import logger
|
||||
from arknights_mower.utils.operators import Operator
|
||||
from arknights_mower.utils.scheduler_task import (
|
||||
TaskTypes,
|
||||
)
|
||||
|
||||
name_x = (1288, 1869)
|
||||
name_y = [(135, 326), (344, 535), (553, 744), (532, 723), (741, 932)]
|
||||
name_p = [tuple(zip(name_x, y)) for y in name_y]
|
||||
mood_x = (1470, 1780)
|
||||
mood_y = [(219, 220), (428, 429), (637, 638), (615, 616), (823, 824)]
|
||||
mood_p = [tuple(zip(mood_x, y)) for y in mood_y]
|
||||
time_x = (1650, 1780)
|
||||
time_y = [(270, 305), (480, 515), (690, 725), (668, 703), (877, 912)]
|
||||
time_p = [tuple(zip(time_x, y)) for y in time_y]
|
||||
mood_x = (1470, 1780)
|
||||
mood_y = [(219, 220), (428, 429), (637, 638), (615, 616), (823, 825)]
|
||||
mood_y = (219, 428, 637, 615, 823)
|
||||
mood_y = [(y, y + 1) for y in mood_y]
|
||||
mood_p = [tuple(zip(mood_x, y)) for y in mood_y]
|
||||
|
||||
|
||||
class GetAgentFromRoomSolver(SceneGraphSolver, BaseMixin):
|
||||
def run(self, room: str, read_time_index=None):
|
||||
from arknights_mower import __main__
|
||||
from arknights_mower.solvers.base_schedule import BaseSchedulerSolver
|
||||
|
||||
base_scheduler = __main__.base_scheduler
|
||||
def run(self, room: str, read_agent_time=False):
|
||||
"""
|
||||
Args:
|
||||
room: 房间名
|
||||
read_agent_time: 读取工作或休息时间
|
||||
"""
|
||||
self.room = room
|
||||
self.read_time_index = read_time_index
|
||||
if self.read_time_index is None:
|
||||
self.read_time_index = []
|
||||
self.op_data = base_scheduler.op_data
|
||||
self.tasks = base_scheduler.tasks
|
||||
self.need_swipe = False
|
||||
self.length = len(self.op_data.plan[self.room])
|
||||
self.read_agent_time = read_agent_time
|
||||
self.index = 0
|
||||
self.result = []
|
||||
self.length = len(__main__.base_scheduler.op_data.plan[self.room])
|
||||
self.need_swipe = True if self.length > 3 else False
|
||||
self.wait_start()
|
||||
self.room_classify()
|
||||
super().run()
|
||||
BaseSchedulerSolver().op_data = self.op_data
|
||||
BaseSchedulerSolver().tasks = self.tasks
|
||||
return self.result
|
||||
|
||||
def timeout(self) -> bool:
|
||||
return datetime.now() > self.start_time + timedelta(seconds=5)
|
||||
return datetime.now() > self.start_time + timedelta(seconds=3)
|
||||
|
||||
def wait_start(self):
|
||||
self.start_time = datetime.now()
|
||||
|
||||
def room_classify(self):
|
||||
if self.room == "meeting" and not config.conf.leifeng_mode:
|
||||
self.sleep(0.5)
|
||||
config.recog.update()
|
||||
clue_res = self.read_screen(
|
||||
config.recog.img, limit=10, cord=((645, 977), (755, 1018))
|
||||
)
|
||||
if clue_res != 11:
|
||||
self.clue_count = clue_res
|
||||
logger.info(f"当前拥有线索数量为{self.clue_count}")
|
||||
|
||||
if self.room.startswith("dorm"):
|
||||
self.read_time_index = [
|
||||
i
|
||||
for i, obj in enumerate(self.op_data.plan[self.room])
|
||||
if obj.agent == "Free" or obj.agent == "菲亚梅塔"
|
||||
]
|
||||
|
||||
if self.length > 3:
|
||||
self.need_swipe = True
|
||||
|
||||
def read_agent_data(self):
|
||||
def read_agent_data(self, index):
|
||||
data = {}
|
||||
if self.find("infra_no_operator", scope=name_p[self.index]):
|
||||
_name = ""
|
||||
if self.find("infra_no_operator", scope=name_p[index]):
|
||||
data["agent"] = ""
|
||||
data["mood"] = -1
|
||||
else:
|
||||
_name = self.read_screen(
|
||||
cropimg(config.recog.gray, name_p[self.index]), type="name"
|
||||
data["agent"] = self.read_screen(
|
||||
cropimg(config.recog.gray, name_p[index]), type="name"
|
||||
)
|
||||
_mood = 24
|
||||
# 如果房间不为空
|
||||
if _name != "":
|
||||
if _name not in self.op_data.operators.keys() and _name in agent_list:
|
||||
self.op_data.add(Operator(_name, ""))
|
||||
update_time = False
|
||||
agent = self.op_data.operators[_name]
|
||||
if self.op_data.operators[_name].need_to_refresh(r=self.room) or (
|
||||
self.tasks and self.tasks[0].type == TaskTypes.SHIFT_ON
|
||||
):
|
||||
_mood = self.read_accurate_mood(
|
||||
cropimg(config.recog.gray, mood_p[self.index])
|
||||
)
|
||||
update_time = True
|
||||
else:
|
||||
_mood = self.op_data.operators[_name].current_mood()
|
||||
high_no_time = self.op_data.update_detail(
|
||||
_name, _mood, self.room, self.index, update_time
|
||||
data["mood"] = self.read_accurate_mood(
|
||||
cropimg(config.recog.gray, mood_p[index])
|
||||
)
|
||||
data["depletion_rate"] = agent.depletion_rate
|
||||
if high_no_time is not None and high_no_time not in self.read_time_index:
|
||||
logger.debug(
|
||||
f"检测到高效组休息时间数据不存在:{self.room},{high_no_time}"
|
||||
)
|
||||
self.read_time_index.append(high_no_time)
|
||||
else:
|
||||
_mood = -1
|
||||
data["agent"] = _name
|
||||
data["mood"] = _mood
|
||||
if self.index in self.read_time_index and _name != "":
|
||||
if _mood == 24 or self.room in ["central", "meeting", "factory"]:
|
||||
data["time"] = datetime.now()
|
||||
else:
|
||||
upperLimit = 43200
|
||||
logger.debug(f"开始记录时间:{self.room},{self.index}")
|
||||
data["time"] = self.double_read_time(
|
||||
time_p[self.index], upperLimit=upperLimit
|
||||
)
|
||||
self.op_data.refresh_dorm_time(self.room, self.index, data)
|
||||
logger.debug(f"停止记录时间:{str(data)}")
|
||||
if self.read_agent_time:
|
||||
if data["mood"] == 24 or self.room in ["central", "meeting", "factory"]:
|
||||
data["time"] = datetime.now()
|
||||
else:
|
||||
data["time"] = self.double_read_time(time_p[index])
|
||||
self.result.append(data)
|
||||
|
||||
def transition(self) -> bool:
|
||||
if self.detect_product_complete():
|
||||
logger.info("检测到产物收取提示")
|
||||
self.sleep(1)
|
||||
self.sleep(0.5)
|
||||
elif self.find("room_detail"):
|
||||
self.wait_start()
|
||||
if self.index >= 3 and self.need_swipe:
|
||||
|
@ -146,7 +82,7 @@ class GetAgentFromRoomSolver(SceneGraphSolver, BaseMixin):
|
|||
elif self.index == self.length:
|
||||
return True
|
||||
elif self.index < self.length:
|
||||
self.read_agent_data()
|
||||
self.read_agent_data(self.index)
|
||||
self.index += 1
|
||||
else:
|
||||
EnterRoomSolver().run(self.room)
|
||||
|
|
Loading…
Reference in a new issue