Skip to content

Commit

Permalink
#425 深度追猎测试完毕
Browse files Browse the repository at this point in the history
DoctorReid committed Jan 24, 2025
1 parent 6ee55d9 commit f53f011
Showing 5 changed files with 100 additions and 43 deletions.
68 changes: 48 additions & 20 deletions assets/game_data/screen_info/notorious_hunt.yml
Original file line number Diff line number Diff line change
@@ -229,10 +229,10 @@ area_list:
- area_name: 按钮-深度追猎-ON
id_mark: false
pc_rect:
- 0
- 0
- 0
- 0
- 1658
- 672
- 1754
- 722
text: 'ON'
lcs_percent: 0.5
template_sub_dir: ''
@@ -249,10 +249,10 @@ area_list:
- area_name: 按钮-深度追猎-确认
id_mark: false
pc_rect:
- 0
- 0
- 0
- 0
- 1030
- 602
- 1226
- 652
text: 确认
lcs_percent: 0.5
template_sub_dir: ''
@@ -263,10 +263,10 @@ area_list:
- area_name: 文本-剩余电量
id_mark: false
pc_rect:
- 0
- 0
- 0
- 0
- 1475
- 1000
- 1523
- 1055
text: ''
lcs_percent: 0.5
template_sub_dir: ''
@@ -277,10 +277,10 @@ area_list:
- area_name: 文本-需要电量
id_mark: false
pc_rect:
- 0
- 0
- 0
- 0
- 1533
- 1000
- 1586
- 1055
text: ''
lcs_percent: 0.5
template_sub_dir: ''
@@ -291,14 +291,42 @@ area_list:
- area_name: 按钮-无报酬模式
id_mark: false
pc_rect:
- 0
- 0
- 0
- 0
- 1602
- 1000
- 1830
- 1055
text: 无报酬模式
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 按钮-街区
id_mark: false
pc_rect:
- 238
- 24
- 388
- 82
text: 街区
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 标题-副本名称
id_mark: false
pc_rect:
- 750
- 168
- 1476
- 265
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
2 changes: 1 addition & 1 deletion src/zzz_od/application/charge_plan/charge_plan_app.py
Original file line number Diff line number Diff line change
@@ -131,7 +131,7 @@ def expert_challenge(self) -> OperationRoundResult:
return self.round_by_op_result(op.execute())

@node_from(from_name='识别副本分类', status='恶名狩猎')
@operation_node(name='专业挑战室')
@operation_node(name='恶名狩猎')
def notorious_hunt(self) -> OperationRoundResult:
op = NotoriousHunt(self.ctx, self.next_plan,
use_charge_power=True,
2 changes: 1 addition & 1 deletion src/zzz_od/application/charge_plan/charge_plan_config.py
Original file line number Diff line number Diff line change
@@ -77,7 +77,7 @@ def save(self):

for plan_item in self.plan_list:
plan_data = {
'tab_name': plan_item.tab_name,
'tab_name': '作战' if plan_item.category_name == '恶名狩猎' else '训练',
'category_name': plan_item.category_name,
'mission_type_name': plan_item.mission_type_name,
'mission_name': plan_item.mission_name,
1 change: 1 addition & 0 deletions src/zzz_od/gui/view/one_dragon/charge_plan_interface.py
Original file line number Diff line number Diff line change
@@ -160,6 +160,7 @@ def _on_category_changed(self, idx: int) -> None:

self.init_mission_type_combo_box()
self.init_mission_combo_box()
self.init_card_num_box()
self.init_notorious_hunt_buff_num_opt()

self.update_by_history()
70 changes: 49 additions & 21 deletions src/zzz_od/operation/compendium/notorious_hunt.py
Original file line number Diff line number Diff line change
@@ -57,21 +57,39 @@ def __init__(self, ctx: ZContext, plan: ChargePlanItem,
self.charge_need: Optional[int] = None
self.move_times: int = 0 # 移动次数

@operation_node(name='等待入口加载', node_max_retry_times=60, is_start_node=True)
@operation_node(name='等待入口加载', node_max_retry_times=60)
def wait_entry_load(self) -> OperationRoundResult:
screen = self.screenshot()
r1 = self.round_by_find_area(screen, '恶名狩猎', '当期剩余奖励次数')
if r1.is_success:
return self.round_success(r1.status)
return self.round_success(r1.status, wait=1) # 画面加载有延时 稍微等待

r2 = self.round_by_find_area(screen, '恶名狩猎', '剩余奖励次数')
r2 = self.round_by_find_area(screen, '恶名狩猎', '按钮-街区')
if r2.is_success:
self.round_by_click_area('菜单', '返回')
return self.round_wait(r2.status, wait=1)
return self.round_success(r2.status, wait=1) # 画面加载有延时 稍微等待

return self.round_retry(r1.status, wait=1)

@node_from(from_name='等待入口加载')
@node_from(from_name='等待入口加载', status='按钮-街区')
@operation_node(name='判断副本名称')
def check_mission(self) -> OperationRoundResult:
screen = self.screenshot()
area = self.ctx.screen_loader.get_area('恶名狩猎', '标题-副本名称')
part = cv2_utils.crop_image_only(screen, area.rect)
ocr_result_map = self.ctx.ocr.run_ocr(part)
is_target_mission: bool = False # 当前是否目标副本
for ocr_result in ocr_result_map.keys():
if str_utils.find_by_lcs(gt(self.plan.mission_type_name), ocr_result, percent=0.5):
is_target_mission = True
break

if is_target_mission:
return self.round_success()
else:
return self.round_by_click_area('菜单', '返回', success_wait=1)

@node_from(from_name='等待入口加载', status='当期剩余奖励次数') # 最开始在外面的副本列表
@node_from(from_name='判断副本名称', status='返回') # 当前副本不符合 返回列表重新选择
@operation_node(name='选择副本')
def choose_mission(self) -> OperationRoundResult:
screen = self.screenshot()
@@ -110,6 +128,7 @@ def choose_mission(self) -> OperationRoundResult:

return self.round_retry(f'未能识别{self.plan.mission_type_name}', wait_round_time=2)

@node_from(from_name='判断副本名称') # 当前副本符合 继续选择
@node_from(from_name='选择副本')
@operation_node(name='选择深度追猎')
def choose_by_use_power(self):
@@ -274,17 +293,18 @@ def wait_battle_screen(self) -> OperationRoundResult:
@node_from(from_name='等待战斗画面加载')
@operation_node(name='移动靠近交互', node_max_retry_times=10)
def first_move(self) -> OperationRoundResult:
if self.plan.mission_type_name == '「霸主侵蚀体·庞培」':
return self._move_by_hint()
else:
if self.node_retry_times == 0: # 第一次移动较远距离
self.ctx.controller.move_w(press=True, press_time=0.8, release=True)
else:
self.ctx.controller.move_w(press=True, press_time=0.2, release=True)
time.sleep(1)

screen = self.screenshot()
return self.round_by_find_area(screen, '战斗画面', '按键-交互')
return self._move_by_hint() # 1.5 更新后 全部都有白点了
# if self.plan.mission_type_name == '「霸主侵蚀体·庞培」':
# return self._move_by_hint()
# else:
# if self.node_retry_times == 0: # 第一次移动较远距离
# self.ctx.controller.move_w(press=True, press_time=0.8, release=True)
# else:
# self.ctx.controller.move_w(press=True, press_time=0.2, release=True)
# time.sleep(1)
#
# screen = self.screenshot()
# return self.round_by_find_area(screen, '战斗画面', '按键-交互')

def _move_by_hint(self) -> OperationRoundResult:
"""
@@ -457,6 +477,8 @@ def no_left_times(self) -> OperationRoundResult:
@node_from(from_name='判断下一次', status='战斗结果-再来一次')
@operation_node(name='重新开始-确认')
def restart_confirm(self) -> OperationRoundResult:
if self.use_charge_power: # 使用体力的时候不需要重新确认
return self.round_success()
screen = self.screenshot()
return self.round_by_find_and_click_area(screen, '恶名狩猎', '重新开始-确认',
success_wait=1, retry_wait_round=1)
@@ -466,10 +488,16 @@ def restart_confirm(self) -> OperationRoundResult:
@operation_node(name='等待返回入口', node_max_retry_times=60)
def wait_back_to_entry(self) -> OperationRoundResult:
screen = self.screenshot()
return self.round_by_find_area(
screen, '恶名狩猎', '剩余奖励次数',
success_wait=1, retry_wait=1
)

result = self.round_by_find_area(screen, '恶名狩猎', '剩余奖励次数')
if result.is_success: # 普通模式
return self.round_success(wait=1)

result = self.round_by_find_area(screen, '恶名狩猎', '按钮-街区')
if result.is_success: # 深度追猎
return self.round_success(wait=1)

return self.round_retry(result.status, wait=1)

@node_from(from_name='移动靠近交互', success=False)
@node_from(from_name='自动战斗', success=False, status=Operation.STATUS_TIMEOUT)

0 comments on commit f53f011

Please sign in to comment.