mirror of
https://github.com/ok-oldking/ok-wuthering-waves.git
synced 2025-06-05 08:25:28 +00:00
优化传送治疗
This commit is contained in:
parent
d5bc88457a
commit
fabd21ce12
@ -25,7 +25,7 @@ class CombatCheck:
|
|||||||
self.boss_health_box = None
|
self.boss_health_box = None
|
||||||
self.boss_health = None
|
self.boss_health = None
|
||||||
self.out_of_combat_reason = ""
|
self.out_of_combat_reason = ""
|
||||||
self.combat_check_interval = 0.8
|
self.combat_check_interval = 1
|
||||||
self._last_liberation = 0
|
self._last_liberation = 0
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -48,7 +48,8 @@ class CombatCheck:
|
|||||||
logger.info('out of combat start double check')
|
logger.info('out of combat start double check')
|
||||||
if self.debug:
|
if self.debug:
|
||||||
self.screenshot('out of combat start double check')
|
self.screenshot('out of combat start double check')
|
||||||
if self.wait_until(self.check_health_bar, time_out=1.2, wait_until_before_delay=0):
|
if self.wait_until(self.check_health_bar, time_out=1.2, wait_until_before_delay=0,
|
||||||
|
wait_until_check_delay=0):
|
||||||
return True
|
return True
|
||||||
self.out_of_combat_reason = reason
|
self.out_of_combat_reason = reason
|
||||||
self.do_reset_to_false()
|
self.do_reset_to_false()
|
||||||
@ -142,10 +143,10 @@ class CombatCheck:
|
|||||||
def find_target_enemy(self):
|
def find_target_enemy(self):
|
||||||
start = time.time()
|
start = time.time()
|
||||||
target_enemy = self.find_one('target_enemy_white', box=self.target_area_box,
|
target_enemy = self.find_one('target_enemy_white', box=self.target_area_box,
|
||||||
use_gray_scale=True, threshold=0.83,
|
use_gray_scale=True, threshold=0.7,
|
||||||
frame_processor=keep_only_white)
|
frame_processor=keep_only_white)
|
||||||
# if self.debug and target_enemy is not None:
|
if self.debug and target_enemy is None:
|
||||||
# self.screenshot('find_target_enemy')
|
self.screenshot('find_target_enemy')
|
||||||
logger.debug(f'find_target_enemy {target_enemy} {time.time() - start}')
|
logger.debug(f'find_target_enemy {target_enemy} {time.time() - start}')
|
||||||
return target_enemy is not None
|
return target_enemy is not None
|
||||||
|
|
||||||
@ -162,16 +163,19 @@ class CombatCheck:
|
|||||||
if not self.check_target_enemy():
|
if not self.check_target_enemy():
|
||||||
return self.reset_to_false(recheck=False, reason="no target enemy")
|
return self.reset_to_false(recheck=False, reason="no target enemy")
|
||||||
if self.check_count_down():
|
if self.check_count_down():
|
||||||
return True
|
return self.log_time(now, 'check_count_down')
|
||||||
if self.boss_lv_template is not None:
|
if self.boss_lv_template is not None:
|
||||||
if self.check_boss():
|
if self.check_boss():
|
||||||
return True
|
return self.log_time(now, 'check_boss')
|
||||||
if self.check_health_bar():
|
if self.check_health_bar():
|
||||||
return True
|
return self.log_time(now, 'check_health_bar')
|
||||||
|
if self.find_target_enemy():
|
||||||
|
return self.log_time(now, 'find_target_enemy')
|
||||||
if self.ocr_lv_text():
|
if self.ocr_lv_text():
|
||||||
return True
|
return self.log_time(now, 'ocr_lv_text')
|
||||||
|
self.next_frame()
|
||||||
if self.target_enemy():
|
if self.target_enemy():
|
||||||
return True
|
return self.log_time(now, 'target_enemy')
|
||||||
logger.error('target_enemy failed, try recheck break out of combat')
|
logger.error('target_enemy failed, try recheck break out of combat')
|
||||||
return self.reset_to_false(recheck=True, reason='target enemy failed')
|
return self.reset_to_false(recheck=True, reason='target enemy failed')
|
||||||
else:
|
else:
|
||||||
@ -188,6 +192,10 @@ class CombatCheck:
|
|||||||
self._in_combat = True
|
self._in_combat = True
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def log_time(self, start, name):
|
||||||
|
logger.debug(f'check cost {name} {time.time() - start}')
|
||||||
|
return True
|
||||||
|
|
||||||
def ocr_lv_text(self):
|
def ocr_lv_text(self):
|
||||||
lvs = self.ocr(box=self.target_area_box,
|
lvs = self.ocr(box=self.target_area_box,
|
||||||
match=re.compile(r'lv\.\d{1,3}', re.IGNORECASE),
|
match=re.compile(r'lv\.\d{1,3}', re.IGNORECASE),
|
||||||
@ -197,9 +205,10 @@ class CombatCheck:
|
|||||||
def check_target_enemy(self):
|
def check_target_enemy(self):
|
||||||
if self.calculate_color_percentage(text_white_color,
|
if self.calculate_color_percentage(text_white_color,
|
||||||
self.get_box_by_name('box_target_enemy')) == 0:
|
self.get_box_by_name('box_target_enemy')) == 0:
|
||||||
|
logger.info(f'check target_enemy failed, wait 3 seconds')
|
||||||
if self.wait_until(lambda: self.calculate_color_percentage(text_white_color,
|
if self.wait_until(lambda: self.calculate_color_percentage(text_white_color,
|
||||||
self.get_box_by_name('box_target_enemy')) != 0,
|
self.get_box_by_name('box_target_enemy')) != 0,
|
||||||
wait_until_before_delay=0,
|
wait_until_before_delay=0, wait_until_check_delay=0,
|
||||||
time_out=3):
|
time_out=3):
|
||||||
return True
|
return True
|
||||||
self.log_error(
|
self.log_error(
|
||||||
|
@ -2,7 +2,7 @@ from qfluentwidgets import FluentIcon
|
|||||||
|
|
||||||
from ok.logging.Logger import get_logger
|
from ok.logging.Logger import get_logger
|
||||||
from ok.task.TriggerTask import TriggerTask
|
from ok.task.TriggerTask import TriggerTask
|
||||||
from src.task.BaseCombatTask import BaseCombatTask, NotInCombatException
|
from src.task.BaseCombatTask import BaseCombatTask, NotInCombatException, CharDeadException
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
|
||||||
@ -22,11 +22,17 @@ class AutoCombatTask(BaseCombatTask, TriggerTask):
|
|||||||
try:
|
try:
|
||||||
logger.debug(f'autocombat loop {self.chars}')
|
logger.debug(f'autocombat loop {self.chars}')
|
||||||
self.get_current_char().perform()
|
self.get_current_char().perform()
|
||||||
|
except CharDeadException:
|
||||||
|
logger.info(f'char dead try teleport to heal')
|
||||||
|
try:
|
||||||
|
self.teleport_to_heal()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error('teleport to heal error', e)
|
||||||
except NotInCombatException as e:
|
except NotInCombatException as e:
|
||||||
logger.info(f'auto_combat_task_out_of_combat {e}')
|
logger.info(f'auto_combat_task_out_of_combat {e}')
|
||||||
if self.debug:
|
if self.debug:
|
||||||
self.screenshot(f'auto_combat_task_out_of_combat {e}')
|
self.screenshot(f'auto_combat_task_out_of_combat {e}')
|
||||||
break
|
break
|
||||||
|
|
||||||
def trigger(self):
|
def trigger(self):
|
||||||
if self.in_combat():
|
if self.in_combat():
|
||||||
|
@ -68,6 +68,27 @@ class BaseCombatTask(BaseWWTask, FindFeature, OCR, CombatCheck):
|
|||||||
self.next_frame()
|
self.next_frame()
|
||||||
logger.info(f'send_key_and_wait_animation timed out {key}')
|
logger.info(f'send_key_and_wait_animation timed out {key}')
|
||||||
|
|
||||||
|
def teleport_to_heal(self):
|
||||||
|
self.info['Death Count'] = self.info.get('Death Count', 0) + 1
|
||||||
|
self.send_key('esc')
|
||||||
|
self.sleep(1)
|
||||||
|
self.log_info('click m to open the map')
|
||||||
|
self.send_key('m')
|
||||||
|
self.sleep(2)
|
||||||
|
for i in range(4):
|
||||||
|
self.click_relative(0.94, 0.29, after_sleep=0.5)
|
||||||
|
logger.info(f'click zoom')
|
||||||
|
self.click_relative(0.91, 0.77, after_sleep=1)
|
||||||
|
self.click_relative(0.63, 0.17, after_sleep=1, name="first_map")
|
||||||
|
self.log_info('click change map')
|
||||||
|
self.click_relative(0.77, 0.15, after_sleep=1)
|
||||||
|
self.click_relative(0.48, 0.26, after_sleep=1)
|
||||||
|
logger.info(f'click heal')
|
||||||
|
travel = self.wait_feature('gray_teleport', raise_if_not_found=True, time_out=3)
|
||||||
|
self.click_box(travel, relative_x=1.5)
|
||||||
|
self.wait_in_team_and_world(time_out=20)
|
||||||
|
self.sleep(2)
|
||||||
|
|
||||||
def raise_not_in_combat(self, message, exception_type=None):
|
def raise_not_in_combat(self, message, exception_type=None):
|
||||||
logger.error(message)
|
logger.error(message)
|
||||||
if self.reset_to_false(reason=message):
|
if self.reset_to_false(reason=message):
|
||||||
@ -197,7 +218,6 @@ class BaseCombatTask(BaseWWTask, FindFeature, OCR, CombatCheck):
|
|||||||
|
|
||||||
if post_action:
|
if post_action:
|
||||||
post_action()
|
post_action()
|
||||||
self.next_frame()
|
|
||||||
logger.info(f'switch_next_char end {(current_char.last_switch_time - start):.3f}s')
|
logger.info(f'switch_next_char end {(current_char.last_switch_time - start):.3f}s')
|
||||||
|
|
||||||
def get_liberation_key(self):
|
def get_liberation_key(self):
|
||||||
|
@ -48,26 +48,6 @@ class FarmWorldBossTask(BaseCombatTask):
|
|||||||
|
|
||||||
# not current in use because not stable, right now using one click to scroll down
|
# not current in use because not stable, right now using one click to scroll down
|
||||||
|
|
||||||
def teleport_to_heal(self):
|
|
||||||
self.info['Death Count'] = self.info.get('Death Count', 0) + 1
|
|
||||||
self.send_key('esc')
|
|
||||||
self.sleep(1)
|
|
||||||
self.log_info('click m to open the map')
|
|
||||||
self.send_key('m')
|
|
||||||
self.sleep(2)
|
|
||||||
for i in range(4):
|
|
||||||
self.click_relative(0.94, 0.29, after_sleep=0.5)
|
|
||||||
logger.info(f'click zoom')
|
|
||||||
self.click_relative(0.91, 0.77, after_sleep=1)
|
|
||||||
self.log_info('click change map')
|
|
||||||
self.click_relative(0.77, 0.15, after_sleep=1)
|
|
||||||
self.click_relative(0.48, 0.26, after_sleep=1)
|
|
||||||
logger.info(f'click heal')
|
|
||||||
travel = self.wait_feature('gray_teleport', raise_if_not_found=True, time_out=3)
|
|
||||||
self.click_box(travel, relative_x=1.5)
|
|
||||||
self.wait_in_team_and_world(time_out=20)
|
|
||||||
self.sleep(2)
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.set_check_monthly_card()
|
self.set_check_monthly_card()
|
||||||
self.check_main()
|
self.check_main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user