From 4d4339fa9356f8a9b7f2768e3efa55c69fff4399 Mon Sep 17 00:00:00 2001 From: Hazuki-Kaguya Date: Sat, 30 May 2026 22:00:53 +0900 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=B2=89=E7=88=AA=20?= =?UTF-8?q?=E8=B7=AF=E7=BA=BFB=E4=BC=98=E5=8C=96=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=A8=B3=E5=AE=9A=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、游戏更新后,大厅到LG1电梯撬开锁也要再点下开门了,这里修复了这个变动导致的大厅到LG1线路稳定性问题; 2、同步优化了线路A在藏品层的稳定性变动。 --- src/heist_path/HeistPathB.py | 333 ++++++++++++----------------------- 1 file changed, 112 insertions(+), 221 deletions(-) diff --git a/src/heist_path/HeistPathB.py b/src/heist_path/HeistPathB.py index 0624bb2..b5d4a52 100644 --- a/src/heist_path/HeistPathB.py +++ b/src/heist_path/HeistPathB.py @@ -15,6 +15,7 @@ def run_path(self): self.lg1_wp2() self.lg1_wp3() self.lg1_wp4_buster() + self.lg1_wp5_buster() self.wait_team_ui_settle() # if not self.check_current_floor_str("藏品"): # self.check_current_floor(2) @@ -100,10 +101,8 @@ def goto_lg1_skip(self): self.sleep(0.32) self.send_key("a", down_time=0.32) self.sleep(0.32) - self.send_key("a", down_time=0.32) - self.sleep(0.32) - self.send_key("a", down_time=0.16) - self.sleep(0.42) + self.send_key("a", down_time=0.42) + self.sleep(0.76) self.send_key_up("w") self.sleep(0.10) self.send_key("a", down_time=3.80) @@ -139,35 +138,42 @@ def goto_lg1_skip(self): self.send_key("d", down_time=0.32) self.sleep(0.90) self.send_key_down("d") - self.sleep(0.90) + self.sleep(0.80) self.send_key_up("d") self.send_key_up("w") self.switch_to_fighter(check_switched=True, mode=1) # 切到早雾控怪 - self.sleep(0.20) + self.sleep(0.42) self.send_key("s", down_time=0.10) - self.sleep(0.20) + self.sleep(0.72) self.send_key("e", down_time=2.60) - self.sleep(0.20) - self.send_key("w", down_time=0.22) + self.sleep(0.10) self.send_key_down("w") + self.sleep(0.10) self.wait_and_interact(direction="w", is_lock=True, time_out=7.64) - if self.find_interac(): - self.clear_current_combat_spec() + if self.wait_ocr(x=0.60, y=0.52, to_x=0.70, to_y=0.57, match=re.compile("开门"), time_out=1.14): self.sleep(0.10) self.send_key("f", down_time=0.10) self.sleep(0.10) - self.send_key("f", down_time=0.10) + elif self.find_interac(): + self.clear_current_combat() self.sleep(0.10) - self.send_key("f", down_time=0.10) + isOpenDoor = False + isOpenLoop =0 + while isOpenDoor == False and isOpenLoop <3: + if not self.wait_ocr(x=0.60, y=0.52, to_x=0.70, to_y=0.57, match=re.compile("开门"), time_out=1.14): + self.send_key("f", down_time=0.10) + self.sleep(0.32) + isOpenLoop += 1 + isOpenDoor = False + else: + isOpenDoor = True self.send_key_down("w") - self.sleep(0.24) + self.sleep(0.10) self.wait_and_interact(direction="w", is_lock=False, time_out=3.65) - self.sleep(0.36) - if not self.check_current_floor_str("大厅"): - return + self.sleep(0.10) self.send_key_down("w") - self.sleep(0.32) - self.send_key("a", down_time=0.28) + self.sleep(0.24) + self.send_key("a", down_time=0.36) self.wait_and_interact(direction="w", is_lock=False, time_out=3.65) self.sleep(0.30) @@ -187,8 +193,11 @@ def lg1_wp1_safer(self): self.send_key('f', down_time=0.10) self.sleep(0.20) self.send_key_down("f") # start pick - self.send_key('s', down_time=1.25) - self.sleep(0.10) + self.sleep(0.11) + self.send_key_down("s") + self.sleep(1.25) + self.send_key_up("s") + self.sleep(0.11) self.send_key_down("d") self.sleep(3.03) self.send_key_up("d") @@ -219,7 +228,7 @@ def lg1_wp1_safer(self): self.sleep(0.12) def lg1_wp4_buster(self): - self.log_round_info("LG1 WP4 Buster") + self.log_round_info("LG1 WP4 bUSTER") self.send_key_down("d") self.sleep(0.11) self.send_key_down("s") @@ -259,11 +268,11 @@ def lg1_wp4_buster(self): self.send_key_down("w") self.sleep(0.21) self.send_key_down("space") - self.sleep(0.06) + self.sleep(0.14) self.send_key_up("space") - self.sleep(0.31) + self.sleep(0.25) self.send_key_down("space") - self.sleep(0.06) + self.sleep(0.14) self.send_key_up("space") self.sleep(1.30) self.start_interaction_watch() @@ -278,11 +287,11 @@ def lg1_wp4_buster(self): self.send_key_down("d") self.sleep(0.61) self.send_key_down("space") - self.sleep(0.06) + self.sleep(0.14) self.send_key_up("space") - self.sleep(0.56) + self.sleep(0.48) self.send_key_down("space") - self.sleep(0.06) + self.sleep(0.14) self.send_key_up("space") self.sleep(0.14) self.send_key_up("d") @@ -323,191 +332,119 @@ def lg1_wp4_buster(self): self.send_key_up("d") self.sleep(0.12) self.send_key_down("w") - self.sleep(7.70) + self.sleep(7.60) self.send_key_up("w") - self.log_round_info("LG1 WP4 Buster 开始避战路线") + + def lg1_wp5_buster(self): + self.log_round_info("LG1 WP5 Buster 开始避战路线") self.switch_to_avoider(check_switched=True) - self.sleep(0.5) + self.sleep(0.50) self.perform_avoidance_action() - self.sleep(0.11) + self.sleep(0.10) self.send_key_down("w") - self.sleep(6.0) + self.sleep(6.00) self.send_key_up("w") self.switch_to_runner(check_switched=True) - self.sleep(0.5) + self.sleep(0.32) self.wait_and_interact(is_lock=True) - self.sleep(0.11) + self.sleep(0.10) self.send_key_down("w") - self.sleep(1.00) + self.sleep(0.10) self.wait_and_interact(direction="w") # LG2部分优化 - def lg2_wp1_to_exit1_safer(self, isExit=False): - self.log_round_info("LG2 WP1 Safer 搜刮并检测出口1状态") - self.switch_to_runner(check_switched=True) # 换薄荷 - self.sleep(0.10) - self.send_key('w', down_time=5.00) - self.sleep(0.108) - self.send_key_down('a') - self.sleep(0.174) - self.send_key('f', down_time=0.058) - self.sleep(0.141) - self.send_key('f', down_time=0.062) - self.sleep(0.139) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.139) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.06) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.139) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.141) - self.send_key('f', down_time=0.061) - self.sleep(0.139) - self.send_key('f', down_time=0.061) - self.sleep(0.141) - self.send_key('f', down_time=0.062) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.062) - self.sleep(0.14) - self.send_key('f', down_time=0.06) - self.sleep(0.141) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.139) - self.send_key('f', down_time=0.06) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.062) - self.sleep(0.141) - self.send_key('f', down_time=0.061) - self.sleep(0.141) - self.send_key('f', down_time=0.06) - self.sleep(0.14) - self.send_key('f', down_time=0.06) - self.sleep(0.14) - self.send_key('f', down_time=0.062) - self.sleep(0.139) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.141) - self.send_key('f', down_time=0.06) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.141) - self.send_key('f', down_time=0.061) - self.sleep(0.14) - self.send_key('f', down_time=0.061) - self.sleep(0.047) - self.send_key_up('a') - self.sleep(0.108) - self.send_key('s', down_time=0.5) - self.sleep(0.10) - self.send_key('f', down_time=0.06) - self.sleep(0.10) - self.send_key_down('w') - self.sleep(0.511) - self.send_key('d', down_time=1.41) - self.sleep(1.00) - self.send_key_up('w') - self.sleep(0.10) - self.send_key('f', down_time=0.06) - self.sleep(2.42) - self.send_key('s', down_time=0.50) - self.sleep(0.10) - self.send_key('d', down_time=1.1) - self.sleep(0.10) - self.send_key_down("w") - self.sleep(2.20) - if isExit: - self.walk_until_extract_panel(direction="w") - else: - self.exit_state[1] = self.try_open_exit(direction="w") - # self.sleep(0.5) - def lg2_wp2_to_exit2_safer(self): - self.log_round_info("LG2 WP2 Safer 搜刮并检测出口2状态") + self.log_round_info("LG2 WP2 Safer 尝试出口2") self.send_key_down("f") # start pick self.sleep(0.11) self.send_key_down("d") self.sleep(1.21) self.send_key_down("space") - self.sleep(0.06) + self.sleep(0.10) self.send_key_up("space") - self.sleep(0.81) + self.sleep(0.80) self.send_key_up("d") - self.sleep(0.12) + self.sleep(0.20) self.send_key_up("f") # end pick - self.sleep(0.111) - self.send_key('w', down_time=1.702) - self.sleep(0.108) - self.send_key('d', down_time=4.514) - self.sleep(0.108) - self.send_key('s', down_time=0.31) - self.sleep(0.108) - self.send_key('d', down_time=0.801) - self.sleep(0.109) - self.send_key('w', down_time=3.953) - self.sleep(0.108) - self.send_key('a', down_time=0.711) - self.sleep(0.108) - self.send_key('f', down_time=0.062) - self.sleep(0.109) - self.send_key('d', down_time=1.606) - self.sleep(0.108) - self.send_key('f', down_time=0.062) - self.sleep(0.109) - self.send_key('a', down_time=0.711) - self.sleep(1.514) - self.send_key('w', down_time=2.45) - self.sleep(0.10) - self.send_key('d', down_time=2.32) + self.send_key_down('w') + self.sleep(1.70) + self.send_key_up('w') + self.sleep(0.11) + self.send_key_down('d') + self.sleep(0.80) + self.send_key("lshift", down_time=0.10) + self.sleep(2.00) + self.send_key_up('d') + self.sleep(0.11) + self.send_key_down("s") + self.sleep(0.31) + self.send_key_up("s") + self.sleep(0.11) + self.send_key_down("d") + self.sleep(0.81) + self.send_key_up("d") self.sleep(0.11) + self.send_key_down("w") + self.sleep(3.96) + self.send_key_up("w") + self.switch_to_runner() self.send_key_down("f") # start pick - self.sleep(0.10) - self.send_key('d', down_time=0.10) - self.sleep(0.10) + self.sleep(0.11) + self.send_key_down("a") + self.sleep(0.71) + self.send_key_up("a") + self.sleep(0.31) + self.send_key_down("d") + self.sleep(1.61) + self.send_key_up("d") + self.switch_to_runner() + self.sleep(0.20) + self.send_key_down("a") + self.sleep(0.72) + self.send_key_up("a") + self.sleep(1.26) + self.send_key_down("w") + self.sleep(2.60) + self.send_key_up("w") + self.switch_to_runner() + self.sleep(0.11) + self.send_key_down("d") + self.sleep(2.31) + self.send_key_up("d") + self.switch_to_runner() + self.sleep(0.11) self.send_key_down("w") - self.sleep(4.04) + self.sleep(3.63) # 4.03 self.send_key_up("w") + self.switch_to_runner() self.sleep(0.11) self.send_key_down("s") - self.sleep(2.87) + self.sleep(2.75) self.send_key_up("s") + self.switch_to_runner() self.sleep(0.11) self.send_key_down("d") self.sleep(1.51) self.send_key_up("d") + self.switch_to_runner() self.sleep(0.11) - self.send_key_up("f") # end pick + self.send_key_down("s") + self.sleep(0.60) + self.send_key_up("s") self.sleep(0.11) + self.send_key_up("f") # end pick self.switch_to_runner() - self.sleep(0.28) + self.sleep(0.11) self.send_key_down("w") - self.sleep(3.65) + self.sleep(2.56) + self.send_key_down("a") + self.sleep(0.40) + self.send_key_up("a") + self.sleep(1.57) self.exit_state[2] = self.try_open_exit(direction="w") self.sleep(0.40) - # 尝试兼容1600*900分辨率 + # 尝试兼容更低分辨率 def check_current_floor_str(self, floor_str): ret = self.wait_ocr(0.04, 0.23, 0.17, 0.28, match=re.compile(floor_str), time_out=5) if ret: @@ -548,49 +485,3 @@ def switch_to_fighter(self, check_switched=False, mode="all_desc"): dead_keys = set(self._dead_fighter_keys) keys = [item for item in keys if item not in dead_keys] return self._begin_character_switch(self.ROLE_FIGHTER, keys, check_switched) - - def clear_current_combat_spec(self): - """处理并等待当前小战斗结束。 - - 会切到战斗角色、攻击直到红色血条消失,再切回跑图角色。 - 若战斗超时或所有战斗角色不可用会中断路径。 - """ - _key = self.switch_to_fighter(check_switched=True, mode="all_desc") - self.wait_until(self.has_health_bar) - deadline = time.time() + 60 - settle = -1 - in_team_settle = -1 - while time.time() < deadline: - self.send_key_down("space") - self.sleep(0.05) - self.mouse_down() - self.sleep(0.05) - self.send_key_up("space") - self.sleep(0.05) - self.mouse_up() - self.sleep(0.45) - if not self.is_in_team(): - if in_team_settle < 0: - in_team_settle = time.time() - if time.time() - in_team_settle > 1: - self.log_info(f"fighter {_key} dead, try next") - self._dead_fighter_keys.append(_key) - self.ensure_in_team() - _key = self.switch_to_fighter() - else: - in_team_settle = -1 - _key = self._current_fighter_key or _key - self.send_key_down(_key) - self.sleep(0.02) - self.send_key_up(_key) - self.next_frame() - if not self._find_red_health_bar(10): - if settle < 0: - settle = time.time() - if time.time() - settle > 2: - break - else: - settle = -1 - else: - raise AbortException("timeout for clear_current_combat") - self.switch_to_runner(check_switched=True)