mirror of
https://github.com/ok-oldking/ok-wuthering-waves.git
synced 2025-06-03 09:25:19 +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 = None
|
||||
self.out_of_combat_reason = ""
|
||||
self.combat_check_interval = 0.8
|
||||
self.combat_check_interval = 1
|
||||
self._last_liberation = 0
|
||||
|
||||
@property
|
||||
@ -48,7 +48,8 @@ class CombatCheck:
|
||||
logger.info('out of combat start double check')
|
||||
if self.debug:
|
||||
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
|
||||
self.out_of_combat_reason = reason
|
||||
self.do_reset_to_false()
|
||||
@ -142,10 +143,10 @@ class CombatCheck:
|
||||
def find_target_enemy(self):
|
||||
start = time.time()
|
||||
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)
|
||||
# if self.debug and target_enemy is not None:
|
||||
# self.screenshot('find_target_enemy')
|
||||
if self.debug and target_enemy is None:
|
||||
self.screenshot('find_target_enemy')
|
||||
logger.debug(f'find_target_enemy {target_enemy} {time.time() - start}')
|
||||
return target_enemy is not None
|
||||
|
||||
@ -162,16 +163,19 @@ class CombatCheck:
|
||||
if not self.check_target_enemy():
|
||||
return self.reset_to_false(recheck=False, reason="no target enemy")
|
||||
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.check_boss():
|
||||
return True
|
||||
return self.log_time(now, 'check_boss')
|
||||
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():
|
||||
return True
|
||||
return self.log_time(now, 'ocr_lv_text')
|
||||
self.next_frame()
|
||||
if self.target_enemy():
|
||||
return True
|
||||
return self.log_time(now, 'target_enemy')
|
||||
logger.error('target_enemy failed, try recheck break out of combat')
|
||||
return self.reset_to_false(recheck=True, reason='target enemy failed')
|
||||
else:
|
||||
@ -188,6 +192,10 @@ class CombatCheck:
|
||||
self._in_combat = 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):
|
||||
lvs = self.ocr(box=self.target_area_box,
|
||||
match=re.compile(r'lv\.\d{1,3}', re.IGNORECASE),
|
||||
@ -197,9 +205,10 @@ class CombatCheck:
|
||||
def check_target_enemy(self):
|
||||
if self.calculate_color_percentage(text_white_color,
|
||||
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,
|
||||
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):
|
||||
return True
|
||||
self.log_error(
|
||||
|
@ -2,7 +2,7 @@ from qfluentwidgets import FluentIcon
|
||||
|
||||
from ok.logging.Logger import get_logger
|
||||
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__)
|
||||
|
||||
@ -22,11 +22,17 @@ class AutoCombatTask(BaseCombatTask, TriggerTask):
|
||||
try:
|
||||
logger.debug(f'autocombat loop {self.chars}')
|
||||
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:
|
||||
logger.info(f'auto_combat_task_out_of_combat {e}')
|
||||
if self.debug:
|
||||
self.screenshot(f'auto_combat_task_out_of_combat {e}')
|
||||
break
|
||||
break
|
||||
|
||||
def trigger(self):
|
||||
if self.in_combat():
|
||||
|
@ -68,6 +68,27 @@ class BaseCombatTask(BaseWWTask, FindFeature, OCR, CombatCheck):
|
||||
self.next_frame()
|
||||
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):
|
||||
logger.error(message)
|
||||
if self.reset_to_false(reason=message):
|
||||
@ -197,7 +218,6 @@ class BaseCombatTask(BaseWWTask, FindFeature, OCR, CombatCheck):
|
||||
|
||||
if post_action:
|
||||
post_action()
|
||||
self.next_frame()
|
||||
logger.info(f'switch_next_char end {(current_char.last_switch_time - start):.3f}s')
|
||||
|
||||
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
|
||||
|
||||
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):
|
||||
self.set_check_monthly_card()
|
||||
self.check_main()
|
||||
|
Loading…
x
Reference in New Issue
Block a user