参照保全优化AutoFight
This commit is contained in:
parent
edb37a0660
commit
2032c6b5c8
4 changed files with 28 additions and 16 deletions
|
@ -12,9 +12,6 @@ class FightSolver:
|
|||
auto_choose: bool = True,
|
||||
squad: int = None,
|
||||
support_oper: list = [],
|
||||
min_elite: int = 2,
|
||||
min_level: int = 60,
|
||||
retry_times: int = 10,
|
||||
):
|
||||
"""
|
||||
Args:
|
||||
|
@ -36,8 +33,5 @@ class FightSolver:
|
|||
groups,
|
||||
squad,
|
||||
support_oper,
|
||||
min_elite,
|
||||
min_level,
|
||||
retry_times,
|
||||
)
|
||||
AutoFight().run(level_name, opers, actions, groups)
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
from copy import deepcopy
|
||||
|
||||
import cv2
|
||||
from scipy.signal import argrelmax
|
||||
from skimage.metrics import structural_similarity
|
||||
|
@ -35,9 +37,9 @@ class AutoFight(SceneGraphSolver):
|
|||
self.level_name = level_name
|
||||
level = find_level(level_name, None)
|
||||
self.calc = Calc(1920, 1080, level)
|
||||
self.actions = actions # 行动列表
|
||||
self.actions = deepcopy(actions) # 行动列表
|
||||
self.opers = opers # 干员列表
|
||||
self.groups = groups # 干员组
|
||||
self.groups = deepcopy(groups) # 干员组
|
||||
self.speed = 1 # 一倍/二倍速
|
||||
self.loading = True # 等待加载
|
||||
self.playing = True # 暂停/继续
|
||||
|
@ -49,7 +51,9 @@ class AutoFight(SceneGraphSolver):
|
|||
self.post_delay = 0 # 行动后等待时间
|
||||
self.watching = {} # 需要开技能的干员
|
||||
self.replacements = {} # 将干员组的名字替换为对应干员
|
||||
self.success = True
|
||||
super().run()
|
||||
return self.success
|
||||
|
||||
def change_group(self):
|
||||
for group in self.groups:
|
||||
|
@ -61,7 +65,7 @@ class AutoFight(SceneGraphSolver):
|
|||
def update_watching(self):
|
||||
for op in self.opers:
|
||||
name = op["name"]
|
||||
self.watching[name] = op
|
||||
self.watching[name] = deepcopy(op)
|
||||
self.watching[name]["location"] = None
|
||||
|
||||
def number(self, scope: tp.Scope, height: int, thres: int) -> int:
|
||||
|
@ -198,6 +202,8 @@ class AutoFight(SceneGraphSolver):
|
|||
|
||||
def update_operators(self):
|
||||
"识别可部署的干员"
|
||||
if config.conf.avatar_recog_pause:
|
||||
self.pause()
|
||||
config.recog.update()
|
||||
y = 887
|
||||
img = cropimg(config.recog.gray, ((0, y), (1920, 905)))
|
||||
|
@ -231,6 +237,8 @@ class AutoFight(SceneGraphSolver):
|
|||
name = self.replacements[name] if name in self.replacements else name
|
||||
self.operators[name] = {"scope": scope, "cost": cost[idx]}
|
||||
logger.debug(self.operators)
|
||||
if config.conf.avatar_recog_pause:
|
||||
self.play()
|
||||
|
||||
@property
|
||||
def action(self):
|
||||
|
@ -378,7 +386,11 @@ class AutoFight(SceneGraphSolver):
|
|||
pos = self.calc.get_skill_screen_pos(x, y)
|
||||
pos = int(pos.x), int(pos.y)
|
||||
self.tap(pos)
|
||||
self.sleep(1)
|
||||
self.sleep(0.8)
|
||||
if self.find("fight/attack"):
|
||||
self.tap((1900, 30))
|
||||
return False
|
||||
return True
|
||||
|
||||
def action_skill(self):
|
||||
"使用action中指定位置的技能"
|
||||
|
@ -414,12 +426,12 @@ class AutoFight(SceneGraphSolver):
|
|||
continue
|
||||
x, y = self.location[w]
|
||||
if self.skill_ready(x, y):
|
||||
self.use_skill(x, y)
|
||||
if d["skill_usage"] == 2:
|
||||
d["skill_times"] -= 1
|
||||
if d["skill_times"] <= 0:
|
||||
del self.watching[w]
|
||||
return
|
||||
if self.use_skill(x, y):
|
||||
if d["skill_usage"] == 2:
|
||||
d["skill_times"] -= 1
|
||||
if d["skill_times"] <= 0:
|
||||
del self.watching[w]
|
||||
return
|
||||
if self.action is None:
|
||||
return
|
||||
if not self.condition_satified:
|
||||
|
@ -450,6 +462,7 @@ class AutoFight(SceneGraphSolver):
|
|||
|
||||
elif scene == Scene.OPERATOR_FAILED:
|
||||
logger.warning("行动失败,请检查干员/练度")
|
||||
self.success = False
|
||||
return True
|
||||
|
||||
elif scene == Scene.OPERATOR_FINISH:
|
||||
|
@ -458,6 +471,7 @@ class AutoFight(SceneGraphSolver):
|
|||
|
||||
elif scene == Scene.CONFIRM:
|
||||
logger.warning("被顶号")
|
||||
self.success = False
|
||||
return True
|
||||
|
||||
elif scene in self.waiting_scene:
|
||||
|
|
|
@ -152,6 +152,7 @@ template_matching = {
|
|||
"episode": (535, 937),
|
||||
"factory_accelerate": (1800, 775),
|
||||
"fight/attack": (15, 270),
|
||||
"fight/defend": (27, 406),
|
||||
"fight/gear": (82, 45),
|
||||
"fight/use": (1037, 845),
|
||||
"friend_list": (61, 306),
|
||||
|
|
|
@ -16,6 +16,8 @@ Res = Literal[
|
|||
"business_card",
|
||||
"choose_agent/battle_confirm",
|
||||
"choose_agent/battle_empty",
|
||||
"choose_agent/battle_filter",
|
||||
"choose_agent/battle_filter_close",
|
||||
"choose_agent/clear",
|
||||
"choose_agent/clear_battle",
|
||||
"choose_agent/confirm",
|
||||
|
@ -116,6 +118,7 @@ Res = Literal[
|
|||
"fight/collection",
|
||||
"fight/collection_on",
|
||||
"fight/complete",
|
||||
"fight/defend",
|
||||
"fight/elite1",
|
||||
"fight/elite2",
|
||||
"fight/enemy",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue