100 lines
3.7 KiB
Python
100 lines
3.7 KiB
Python
from mower.solvers.fight.battle_choose.battle_fill_choose import BattleFillChooseSolver
|
|
from mower.solvers.infra.base_mixin import BaseMixin
|
|
from mower.utils import config
|
|
from mower.utils import typealias as tp
|
|
from mower.utils.character_recognize import match_portrait
|
|
from mower.utils.email import assistants_template, send_message
|
|
from mower.utils.graph import SceneGraphSolver
|
|
from mower.utils.log import logger
|
|
from mower.utils.recognize import Scene
|
|
|
|
pos_name = ["控制中枢", "B1", "B2", "B3", "B4"]
|
|
|
|
trust_number_scope = [
|
|
((590, 500), (670, 530)),
|
|
((230, 950), (310, 980)),
|
|
((470, 950), (550, 980)),
|
|
((710, 950), (790, 980)),
|
|
((950, 950), (1030, 980)),
|
|
]
|
|
|
|
portrait_scope = [
|
|
((542, 250), (729, 380)),
|
|
((183, 713), (370, 823)),
|
|
((423, 713), (610, 823)),
|
|
((663, 713), (850, 823)),
|
|
((903, 713), (1090, 823)),
|
|
]
|
|
|
|
|
|
class SwitchAssistantsSolver(SceneGraphSolver, BaseMixin):
|
|
def run(self) -> None:
|
|
logger.info("Start:切换高信赖基建副手")
|
|
self.limit = config.conf.trust_limit # 设置的信赖值阈值
|
|
self.assistants_before = [] # 记录切换前的干员
|
|
self.switched_scope = set() # 记录已切换过的位置
|
|
self.init = False
|
|
self.switched = False
|
|
super().run()
|
|
assistants_after = self.current_operators if self.switched else []
|
|
send_message(
|
|
assistants_template.render(
|
|
assistants_before=self.assistants_before,
|
|
assistants_after=assistants_after,
|
|
limit=str(self.limit) + "%",
|
|
),
|
|
"基建副手汇总通知",
|
|
"INFO",
|
|
config.recog.img,
|
|
)
|
|
|
|
@property
|
|
def current_operators(self) -> list:
|
|
result = []
|
|
opers = match_portrait(config.recog.gray, segment=portrait_scope)
|
|
for i in range(5):
|
|
if num := self.number(trust_number_scope[i], 14, 130):
|
|
result.append([pos_name[i], opers[i][0], str(num) + "%"])
|
|
else:
|
|
result.append([pos_name[i], None])
|
|
return result
|
|
|
|
def number(self, scope: tp.Scope, height: int, thres: int) -> int:
|
|
"数字识别"
|
|
return config.recog.num.number_int("noto", scope, height, thres, rect_ed=-3)
|
|
|
|
def transition(self) -> bool:
|
|
if (scene := self.scene()) == Scene.RIIC_REPORT:
|
|
if not self.find("riic/assistants_title"):
|
|
self.tap((20, 80))
|
|
return
|
|
|
|
if not self.init:
|
|
self.assistants_before = self.current_operators
|
|
self.black_list = [
|
|
assistant[1] for assistant in self.assistants_before if assistant[1]
|
|
] # 记录已在位置和选择过的干员
|
|
self.init = True
|
|
|
|
if pos := self.find("riic/none"):
|
|
self.tap(pos)
|
|
self.switched = True
|
|
return
|
|
for pos in trust_number_scope:
|
|
if (num := self.number(pos, 14, 130)) >= self.limit:
|
|
if pos in self.switched_scope:
|
|
return True
|
|
logger.debug(f"{pos}, {num}")
|
|
self.tap(pos)
|
|
self.switched = True
|
|
self.switched_scope.add(pos)
|
|
return
|
|
return True
|
|
elif scene == Scene.OPERATOR_AGENT_SELECT:
|
|
if name := BattleFillChooseSolver().run("信赖值", 1, self.black_list):
|
|
self.black_list.append(name[0])
|
|
if self.find("choose_agent/battle_confirm"):
|
|
self.tap_element("choose_agent/battle_confirm")
|
|
self.sleep(0.5)
|
|
else:
|
|
self.scene_graph_step(Scene.RIIC_REPORT)
|