mower-ng/mower/solvers/rogue/node_option_select.py
2024-12-26 23:22:47 +08:00

52 lines
2 KiB
Python

from functools import cached_property
from mower.utils import config
from mower.utils.graph import SceneGraphSolver
from mower.utils.log import logger
from mower.utils.recognize import Scene
from .utils.utils import find_text
class NodeOptionSelectSolver(SceneGraphSolver):
solver_name = "节点选项选择"
_option = {
"Sarkaz": {
"相遇": ["它邀请对方共享猎物"],
"在故事结束之后": ["时光的永恒在此定格", "战士的长角生根发芽"],
"虫卡兹!": ["这怎么可能嘛?"],
"阴魂不散": ["问他为什么哭"],
"戴冠式": ["兄长为妹妹戴上冠冕"],
"高空坠物": ["找些帮手来把这里搬空", "从中寻找有用的物件"],
"前瞻": ["留意当下"],
"原初异途": ["一个方盒", "那是一只角,还是一把铳?"],
"待诉说的真相": ["收集散落的思绪"],
"解惑": ["他们的头顶都生出了光环", "萨科塔杀死了萨卡兹"],
}
}
@cached_property
def options(self):
for stage_name in self._option[config.conf.maa_rg_theme]:
if find_text(
stage_name, 36, scope=([165, 700], [165 + len(stage_name) * 50, 800])
):
return self._option[config.conf.maa_rg_theme][stage_name]
logger.error("未登记节点选项")
return []
def transition(self):
if (scene := self.scene()) == Scene.ROGUE_NODE_OPTION_SELECT:
if pos := self.find("rogue/node_check_to_do"):
self.ctap(pos, 3)
return
for option in self.options:
if pos := find_text(option, 36, scope=((1270, 70), (1920, 940))):
self.ctap(pos, 3)
return
elif scene in self.waiting_scene:
self.waiting_solver()
elif scene == Scene.ROGUE_NODE_LOADING:
self.scene_graph_step(Scene.ROGUE_MAIN)
else:
return True