Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e46edbc6aa | ||
|
|
e304e227c8 | ||
|
|
77149a621f |
+281
-184
@@ -19,9 +19,10 @@ class Hammerdin(IChar):
|
||||
super().__init__(skill_hotkeys, screen, template_finder, ui_manager)
|
||||
self._pather = pather
|
||||
self._do_pre_move = True
|
||||
|
||||
self._pickit = pickit #for Diablo
|
||||
self._picked_up_items = False #for Diablo
|
||||
#hammerdin needs to be closer to shenk to reach it with hammers
|
||||
self._pather.offset_node(149, (70, 10))
|
||||
|
||||
def _cast_hammers(self, time_in_s: float, aura: str = "concentration"):
|
||||
if aura in self._skill_hotkeys and self._skill_hotkeys[aura]:
|
||||
@@ -54,8 +55,6 @@ class Hammerdin(IChar):
|
||||
# ass most likely we will click on some mobs and already cast hammers
|
||||
if capabilities.can_teleport_natively:
|
||||
self._do_pre_move = False
|
||||
#hammerdin needs to be closer to shenk to reach it with hammers
|
||||
self._pather.offset_node(149, (70, 10))
|
||||
|
||||
def pre_move(self):
|
||||
# select teleport if available
|
||||
@@ -152,7 +151,7 @@ class Hammerdin(IChar):
|
||||
wait(0.1, 0.15)
|
||||
self._cast_hammers(1.2, "redemption")
|
||||
return True
|
||||
|
||||
|
||||
def kill_summoner(self) -> bool:
|
||||
# move mouse to below altar
|
||||
pos_m = self._screen.convert_abs_to_monitor((0, 20))
|
||||
@@ -166,36 +165,38 @@ class Hammerdin(IChar):
|
||||
wait(0.1, 0.15)
|
||||
self._cast_hammers(1.6, "redemption")
|
||||
return True
|
||||
|
||||
########################################################################################
|
||||
|
||||
########################################################################################
|
||||
# Chaos Sanctuary, Trash, Seal Bosses (a = Vizier, b = De Seis, c = Infector) & Diablo #
|
||||
########################################################################################
|
||||
|
||||
|
||||
def kill_cs_trash(self, location:str) -> bool:
|
||||
|
||||
|
||||
###########
|
||||
# SEALDANCE
|
||||
###########
|
||||
|
||||
|
||||
if location == "sealdance": #if seal opening fails & trash needs to be cleared -> used at ANY seal
|
||||
### APPROACH
|
||||
### APPROACH
|
||||
### ATTACK ###
|
||||
pos_m = self._screen.convert_abs_to_monitor((0, 0))
|
||||
mouse.move(*pos_m, randomize=80, delay_factor=[0.5, 0.7])
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.5, 1.0) #clear seal from corpses
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.5, 1.0) #clear seal from corpses
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
|
||||
################
|
||||
# CLEAR CS TRASH
|
||||
################
|
||||
|
||||
|
||||
elif location == "rof_01": #node 603 - outside CS in ROF
|
||||
### APPROACH ###
|
||||
if not self._pather.traverse_nodes([603], self, time_out=3): return False #calibrate after static path
|
||||
@@ -206,15 +207,17 @@ class Hammerdin(IChar):
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
### LOOT ###
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
if not self._pather.traverse_nodes([603], self): return False #calibrate after looting
|
||||
|
||||
|
||||
|
||||
elif location == "rof_02": #node 604 - inside ROF
|
||||
### APPROACH ###
|
||||
if not self._pather.traverse_nodes([604], self, time_out=3): return False #threshold=0.8 (ex 601)
|
||||
@@ -224,13 +227,15 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
|
||||
elif location == "entrance_hall_01": ##static_path "diablo_entrance_hall_1", node 677, CS Entrance Hall1
|
||||
### APPROACH ###
|
||||
self._pather.traverse_nodes_fixed("diablo_entrance_hall_1", self) # 604 -> 671 Hall1
|
||||
@@ -240,13 +245,15 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
|
||||
elif location == "entrance_hall_02": #node 670,671, CS Entrance Hall1, CS Entrance Hall1
|
||||
### APPROACH ###
|
||||
if not self._pather.traverse_nodes([670], self): return False # pull top mobs 672 to bottom 670
|
||||
@@ -258,16 +265,18 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
#Move to Layout Check
|
||||
if not self._pather.traverse_nodes([671], self): return False # calibrate before static path
|
||||
self._pather.traverse_nodes_fixed("diablo_entrance_hall_2", self) # 671 -> LC Hall2
|
||||
|
||||
|
||||
|
||||
|
||||
# TRASH LAYOUT A
|
||||
@@ -280,10 +289,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
if not self._pather.traverse_nodes([673], self): return False # , time_out=3): # Re-adjust itself and continues to attack
|
||||
@@ -296,10 +307,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
self._pather.traverse_nodes_fixed("diablo_entrance_1_1", self) # Moves char to postion close to node 674 continues to attack
|
||||
@@ -313,10 +326,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
@@ -333,10 +348,12 @@ class Hammerdin(IChar):
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-50, -150), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._move_and_attack((50, 150), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
@@ -350,10 +367,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
@@ -369,10 +388,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
@@ -391,10 +412,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
@@ -417,10 +440,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((50, 150), self._char_config["atk_len_cs_trashmobs"] * 0.2)
|
||||
self._move_and_attack((250, -150), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._move_and_attack((-250, -150), self._char_config["atk_len_cs_trashmobs"] * 0.2)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
@@ -441,13 +466,15 @@ class Hammerdin(IChar):
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -100), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._move_and_attack((30, 100), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
|
||||
elif location == "dia_trash_b": #trash before between Pentagramm and Seal B Layoutcheck
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
@@ -457,13 +484,15 @@ class Hammerdin(IChar):
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -100), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._move_and_attack((30, 100), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
|
||||
elif location == "dia_trash_c": ##trash before between Pentagramm and Seal C Layoutcheck
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
@@ -473,10 +502,12 @@ class Hammerdin(IChar):
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -100), self._char_config["atk_len_cs_trashmobs"])
|
||||
self._move_and_attack((30, 100), self._char_config["atk_len_cs_trashmobs"])
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
@@ -488,7 +519,7 @@ class Hammerdin(IChar):
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
Logger.debug("No attack choreography available in hammerdin.py for this node " + location + " - skipping to shorten run.")
|
||||
|
||||
|
||||
elif location == "layoutcheck_b": #layout check seal B, node 634 B1-S, node 649 B2-U
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
@@ -497,13 +528,15 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
|
||||
elif location == "layoutcheck_c": #layout check seal C, node 656 C1-F, node 664 C2-G
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
@@ -512,10 +545,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
@@ -528,7 +563,7 @@ class Hammerdin(IChar):
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
Logger.debug("No attack choreography available in hammerdin.py for this node " + location + " - skipping to shorten run.")
|
||||
|
||||
|
||||
elif location == "pent_before_b": #node 602, pentagram, before CTA buff & depature to layout check
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
@@ -537,13 +572,15 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
|
||||
elif location == "pent_before_c": #node 602, pentagram, before CTA buff & depature to layout check
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
@@ -552,10 +589,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
@@ -572,9 +611,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
|
||||
@@ -582,7 +624,9 @@ class Hammerdin(IChar):
|
||||
### APPROACH ###
|
||||
if not self._pather.traverse_nodes([612], self): return False # , time_out=3):
|
||||
### ATTACK ###
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
pos_m = self._screen.convert_abs_to_monitor((0, 0))
|
||||
mouse.move(*pos_m, randomize=80, delay_factor=[0.5, 0.7])
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
@@ -590,9 +634,12 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._cast_hammers(0.5, "cleansing")
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
|
||||
@@ -609,16 +656,21 @@ class Hammerdin(IChar):
|
||||
self._cast_hammers(0.5, "cleansing")
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
|
||||
elif location == "A1-L_seal1": #node 613 seal layout A1-L: fake_seal
|
||||
### APPROACH ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
if not self._pather.traverse_nodes([614], self): return False
|
||||
### ATTACK ###
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
|
||||
@@ -626,7 +678,9 @@ class Hammerdin(IChar):
|
||||
### APPROACH ###
|
||||
if not self._pather.traverse_nodes([613, 615], self): return False # , time_out=3):
|
||||
### ATTACK ###
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
|
||||
@@ -640,33 +694,39 @@ class Hammerdin(IChar):
|
||||
Logger.info("A2-Y: Hop!")
|
||||
#if not self._pather.traverse_nodes([622], self): return False # , time_out=3):
|
||||
if not self._pather.traverse_nodes([622], self): return False
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### ATTACK ###
|
||||
pos_m = self._screen.convert_abs_to_monitor((0, 0))
|
||||
mouse.move(*pos_m, randomize=80, delay_factor=[0.5, 0.7])
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.2, 0.4)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
|
||||
elif location == "A2-Y_02": #node 623 seal layout A2-Y: center
|
||||
### APPROACH ###
|
||||
# if not self._pather.traverse_nodes([623,624], self): return False #
|
||||
# if not self._pather.traverse_nodes([623,624], self): return False #
|
||||
### ATTACK ###
|
||||
pos_m = self._screen.convert_abs_to_monitor((0, 0))
|
||||
mouse.move(*pos_m, randomize=80, delay_factor=[0.5, 0.7])
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.2, 0.4)
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
|
||||
@@ -676,42 +736,46 @@ class Hammerdin(IChar):
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
Logger.debug("No attack choreography available in hammerdin.py for this node " + location + " - skipping to shorten run.")
|
||||
|
||||
|
||||
elif location == "A2-Y_seal1": #node 625 seal layout A2-Y: fake seal
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
if not self._pather.traverse_nodes([625], self): return False # , time_out=3):
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
|
||||
elif location == "A2-Y_seal2":
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
self._pather.traverse_nodes_fixed("dia_a2y_sealfake_sealboss", self) #instead of traversing node 626 which causes issues
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
|
||||
###########
|
||||
# SEAL B1-S
|
||||
###########
|
||||
|
||||
elif location == "B1-S_01":
|
||||
elif location == "B1-S_01":
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
Logger.debug("No attack choreography available in hammerdin.py for this node " + location + " - skipping to shorten run.")
|
||||
|
||||
elif location == "B1-S_02":
|
||||
elif location == "B1-S_02":
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
Logger.debug("No attack choreography available in hammerdin.py for this node " + location + " - skipping to shorten run.")
|
||||
|
||||
elif location == "B1-S_03":
|
||||
elif location == "B1-S_03":
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
@@ -722,22 +786,24 @@ class Hammerdin(IChar):
|
||||
### APPROACH ###
|
||||
if not self._pather.traverse_nodes([634], self): return False # , time_out=3):
|
||||
### ATTACK ###
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
|
||||
|
||||
|
||||
###########
|
||||
# SEAL B2-U
|
||||
###########
|
||||
|
||||
elif location == "B2-U_01":
|
||||
elif location == "B2-U_01":
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
Logger.debug("No attack choreography available in hammerdin.py for this node " + location + " - skipping to shorten run.")
|
||||
|
||||
elif location == "B2-U_02":
|
||||
elif location == "B2-U_02":
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
@@ -758,9 +824,11 @@ class Hammerdin(IChar):
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
|
||||
|
||||
|
||||
###########
|
||||
# SEAL C1-F
|
||||
###########
|
||||
@@ -771,15 +839,15 @@ class Hammerdin(IChar):
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
Logger.debug("No attack choreography available in hammerdin.py for this node " + location + " - skipping to shorten run.")
|
||||
|
||||
elif location == "C1-F_02":
|
||||
|
||||
elif location == "C1-F_02":
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
# we loot at boss
|
||||
Logger.debug("No attack choreography available in hammerdin.py for this node " + location + " - skipping to shorten run.")
|
||||
|
||||
elif location == "C1-F_03":
|
||||
|
||||
elif location == "C1-F_03":
|
||||
### APPROACH ###
|
||||
### ATTACK ###
|
||||
### LOOT ###
|
||||
@@ -789,7 +857,7 @@ class Hammerdin(IChar):
|
||||
elif location == "C1-F_seal1":
|
||||
### APPROACH ###
|
||||
wait(0.1,0.3)
|
||||
self._pather.traverse_nodes_fixed("dia_c1f_hop_fakeseal", self)
|
||||
self._pather.traverse_nodes_fixed("dia_c1f_hop_fakeseal", self)
|
||||
wait(0.1,0.3)
|
||||
if not self._pather.traverse_nodes([655], self): return False # , time_out=3):
|
||||
### ATTACK ###
|
||||
@@ -798,14 +866,19 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
if not self._pather.traverse_nodes([655], self): return False # , time_out=3):
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
|
||||
elif location == "C1-F_seal2":
|
||||
### APPROACH ###
|
||||
self._pather.traverse_nodes_fixed("dia_c1f_654_651", self)
|
||||
@@ -816,13 +889,18 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
if not self._pather.traverse_nodes([652], self): return False # , time_out=3):
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
|
||||
###########
|
||||
# SEAL C2-G
|
||||
@@ -863,12 +941,17 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
"""
|
||||
|
||||
elif location == "C2-G_seal2":
|
||||
@@ -889,8 +972,9 @@ class Hammerdin(IChar):
|
||||
self._cast_hammers(1.2, "redemption")
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.5)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if not self._pather.traverse_nodes([664, 665], self): return False # , time_out=3):
|
||||
|
||||
else:
|
||||
@@ -902,13 +986,16 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
self._cast_hammers(0.75, "redemption")
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_cs_trashmobs"] * 0.5)
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
return True
|
||||
|
||||
|
||||
|
||||
|
||||
def kill_vizier(self, seal_layout:str) -> bool:
|
||||
@@ -927,15 +1014,19 @@ class Hammerdin(IChar):
|
||||
self._move_and_attack((30, 15), self._char_config["atk_len_diablo_vizier"] * 0.5)
|
||||
self._move_and_attack((-30, -15), self._char_config["atk_len_diablo_vizier"]) # no factor, so merc is not reset by teleport and he his some time to move & kill stray bosses
|
||||
self._cast_hammers(1, "redemption")
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["cleansing"]:
|
||||
keyboard.send(self._skill_hotkeys["cleansing"])
|
||||
wait(0.1, 0.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
wait(0.3, 1.2)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
if not self._pather.traverse_nodes([612], self): return False # , time_out=3):
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
if not self._pather.traverse_nodes([612], self): return False # , time_out=3): # recalibrate after loot
|
||||
|
||||
@@ -961,20 +1052,24 @@ class Hammerdin(IChar):
|
||||
wait(0.1, 0.15)
|
||||
self._cast_hammers(2, "redemption")
|
||||
self._cast_hammers(1, "cleansing")
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 1.2)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
if not self._pather.traverse_nodes([624], self): return False
|
||||
if not self._pather.traverse_nodes([624], self): return False
|
||||
if not self._pather.traverse_nodes_fixed("dia_a2y_hop_622", self): return False
|
||||
Logger.info(seal_layout + ": Hop!")
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 1.2)
|
||||
if not self._pather.traverse_nodes([622], self): return False #, time_out=3):
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
if not self._pather.traverse_nodes([622], self): return False #, time_out=3):
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
if not self._pather.traverse_nodes([622], self): return False # , time_out=3): #recalibrate after loot
|
||||
|
||||
|
||||
else:
|
||||
Logger.debug(seal_layout + ": Invalid location for kill_deseis("+ seal_layout +"), should not happen.")
|
||||
return False
|
||||
@@ -1011,12 +1106,13 @@ class Hammerdin(IChar):
|
||||
wait(0.1, 0.2)
|
||||
self._cast_hammers(2, "redemption")
|
||||
self._cast_hammers(1, "cleansing")
|
||||
keyboard.send(self._skill_hotkeys["redemption"]) # to keep redemption on for a couple of seconds before the next teleport to have more corpses cleared & increase chance to find next template
|
||||
Logger.debug(seal_layout + ": Waiting with Redemption active to clear more corpses.")
|
||||
wait(2.5, 3.5)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(2.5, 3.5) # to keep redemption on for a couple of seconds before the next teleport to have more corpses cleared & increase chance to find next template
|
||||
Logger.debug(seal_layout + ": Waiting with Redemption active to clear more corpses.")
|
||||
#if self._config.general["info_screenshots"]: cv2.imwrite(f"./info_screenshots/info_check_deseis_dead" + seal_layout + "_" + time.strftime("%Y%m%d_%H%M%S") + ".png", self._screen.grab())
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
elif seal_layout == "B2-U":
|
||||
### APPROACH ###
|
||||
@@ -1047,8 +1143,9 @@ class Hammerdin(IChar):
|
||||
wait(0.1, 0.2)
|
||||
self._cast_hammers(2, "redemption")
|
||||
self._cast_hammers(1, "cleansing")
|
||||
keyboard.send(self._skill_hotkeys["redemption"]) # to keep redemption on for a couple of seconds before the next teleport to have more corpses cleared & increase chance to find next template
|
||||
wait(0.2, 0.5)
|
||||
if self._skill_hotkeys["redemption"]:
|
||||
keyboard.send(self._skill_hotkeys["redemption"])
|
||||
wait(0.3, 0.6)
|
||||
#if self._config.general["info_screenshots"]: cv2.imwrite(f"./info_screenshots/info_check_deseis_dead" + seal_layout + "_" + time.strftime("%Y%m%d_%H%M%S") + ".png", self._screen.grab())
|
||||
### LOOT ###
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
@@ -1058,11 +1155,11 @@ class Hammerdin(IChar):
|
||||
if not self._pather.traverse_nodes([646], self): return False # , time_out=3):
|
||||
if not self._pather.traverse_nodes([640], self): return False # , time_out=3):
|
||||
self._picked_up_items |= self._pickit.pick_up_items(self)
|
||||
|
||||
|
||||
else:
|
||||
Logger.debug(seal_layout + ": Invalid location for kill_deseis("+ seal_layout +"), should not happen.")
|
||||
return False
|
||||
return True
|
||||
return True
|
||||
|
||||
|
||||
|
||||
@@ -1087,10 +1184,10 @@ class Hammerdin(IChar):
|
||||
elif seal_layout == "C2-G":
|
||||
# NOT killing infector here, because for C2G its the only seal where a bossfight occures BETWEEN opening seals his attack sequence can be found in C2-G_seal2
|
||||
Logger.debug(seal_layout + ": No need for attacking Infector at position 1/1 - he was killed during clearing the seal")
|
||||
|
||||
|
||||
else:
|
||||
Logger.debug(seal_layout + ": Invalid location for kill_infector("+ seal_layout +"), should not happen.")
|
||||
return False
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
|
||||
+10
-10
@@ -235,7 +235,7 @@ class Pather:
|
||||
# SEAL A1L Vizier
|
||||
610: {'DIA_A1L2_24': (-329, 18),'DIA_A1L2_20': (-423, 160),'DIA_A1L2_21': (-214, -247),'DIA_A1L2_22': (-123, 143), 'DIA_A1L2_23': (134, -105), "DIA_A1L2_8": (-99, 161), "DIA_A1L2_4": (299, -13), "DIA_A1L2_1": (49, 300), "DIA_A1L2_7": (160, 389), "DIA_A1L2_2": (-60, 480), "DIA_A1L2_3": (212, 447), "DIA_A1L2_18": (340, 460), "DIA_A1L2_0": (571, -107), "DIA_A1L2_6": (358, 467), }, #approach1
|
||||
611: {'DIA_A1L2_22': (-338, 41),'DIA_A1L2_23': (-80, -212), "DIA_A1L2_4": (85, -120), "DIA_A1L2_1": (-165, 193), "DIA_A1L2_7": (-53, 282), "DIA_A1L2_8": (-313, 54), "DIA_A1L2_3": (-2, 339), "DIA_A1L2_18": (126, 353), "DIA_A1L2_9": (140, 350), "DIA_A1L2_6": (144, 360), "DIA_A1L2_0": (357, -214), },#safe-dist
|
||||
612: {"DIA_A1L2_9": (-126, 171), "DIA_A1L2_6": (-122, 181), "DIA_A1L2_18": (-140, 174), "DIA_A1L2_3": (-268, 160), "DIA_A1L2_7": (-319, 103), "DIA_A1L2_4": (-181, -299), "DIA_A1L2_5_OPEN": (335, 110), "DIA_A1L2_5_CLOSED": (335, 110), "DIA_A1L2_5_MOUSEOVER": (335, 110), "DIA_A1L2_0": (91, -393), "DIA_A1L2_1": (-431, 14), }, # seal boss far
|
||||
612: {"DIA_A1L2_9": (-126, 171), "DIA_A1L2_6": (-122, 181), "DIA_A1L2_18": (-140, 174), "DIA_A1L2_3": (-268, 160), "DIA_A1L2_7": (-319, 103), "DIA_A1L2_4": (-181, -299), "DIA_A1L2_5_OPEN": (335, 110), "DIA_A1L2_5_CLOSED": (335, 110), "DIA_A1L2_5_MOUSEOVER": (335, 110), "DIA_A1L2_0": (91, -393), "DIA_A1L2_1": (-431, 14), }, # seal boss far
|
||||
613: {"DIA_A1L2_6": (62, -157), "DIA_A1L2_18": (44, -164), "DIA_A1L2_9": (58, -167), "DIA_A1L2_13": (-170, -52), "DIA_A1L2_3": (-84, -178), "DIA_A1L2_7": (-136, -235), "DIA_A1L2_14_OPEN": (-251, 155), "DIA_A1L2_14_CLOSED": (-251, 155), "DIA_A1L2_14_MOUSEOVER": (-251, 155), "DIA_A1L2_2": (-356, -144), "DIA_A1L2_19": (344, 198), },# seal fake far
|
||||
614: {"DIA_A1L2_14_OPEN": (-109, 10), "DIA_A1L2_14_CLOSED": (-109, 10), "DIA_A1L2_14_MOUSEOVER": (-109, 10), "DIA_A1L2_14_CLOSED_DARK": (-109, 10),"DIA_A1L2_13": (-28, -196), "DIA_A1L2_3": (58, -322), "DIA_A1L2_2": (-214, -289), "DIA_A1L2_18": (186, -308), "DIA_A1L2_6": (204, -302), "DIA_A1L2_9": (200, -312), "DIA_A1L2_7": (6, -380), "DIA_A1L2_1": (-105, -469), }, # seal fake close
|
||||
615: {"DIA_A1L2_10": (314, -49), "DIA_A1L2_18": (-354, 39), "DIA_A1L2_19": (-53, 396), "DIA_A1L2_3": (-481, 25), "DIA_A1L2_7": (-533, -33), "DIA_A1L2_0": (-122, -528), "DIA_A1L2_4": (-394, -434), "DIA_A1L2_13": (-567, 151), "DIA_A1L2_1": (-644, -121), }, # seal boss close
|
||||
@@ -253,11 +253,11 @@ class Pather:
|
||||
|
||||
# SEAL B1S De Seis
|
||||
630: {"DIA_B1S3_1": (201, -191), "DIA_B1S3_6": (369, 38), "DIA_B1S3_0": (494, -45), "DIA_B1S3_3": (489, -172), "DIA_B1S3_4": (723, -39),}, #cross river
|
||||
631: {"DIA_B1S2_2": (-232, -78), "DIA_B1S2_3": (169, -361), "DIA_B1S2_5": (-225, -86), "DIA_B1S2_12": (-29, 199), "DIA_B1S2_13": (-358, 52), "DIA_B1S2_15": (-42, 210), "DIA_B1S2_16": (168, 124), "DIA_B1S2_18": (-197, 117), }, #corner left
|
||||
631: {"DIA_B1S2_2": (-232, -78), "DIA_B1S2_3": (169, -361), "DIA_B1S2_5": (-225, -86), "DIA_B1S2_12": (-29, 199), "DIA_B1S2_13": (-358, 52), "DIA_B1S2_15": (-42, 210), "DIA_B1S2_16": (168, 124), "DIA_B1S2_18": (-197, 117), }, #corner left
|
||||
632: {"DIA_B1S2_2": (87, -224), "DIA_B1S2_8": (-330, -95), "DIA_B1S2_11": (-120, -306), "DIA_B1S2_12": (290, 53), "DIA_B1S2_13": (-38, -93), "DIA_B1S2_15": (277, 64), "DIA_B1S2_17": (-200, 25), "DIA_B1S2_18": (122, -29), "DIA_B1S2_19": (-174, 287), "DIA_B1S2_21": (-307, -67), }, #corner
|
||||
633: {"DIA_B1S2_2": (99, 278), "DIA_B1S2_6": (37, -391), "DIA_B1S2_8": (-285, -280), "DIA_B1S2_13": (352, -100), "DIA_B1S2_19": (216, 279), "DIA_B1S2_20": (-208, 69), "DIA_B1S2_21": (83, -75), "DIA_B1S2_25": (62, -114), "DIA_B1S2_26": (-96, -228), }, #corner right
|
||||
634: {"DIA_B1S2_6": (253, -156), "DIA_B1S2_7": (78, -233), "DIA_B1S2_20": (8, 303),"DIA_B1S2_24_OPEN": (-345, -57),"DIA_B1S2_24_CLOSED": (-345, -57),"DIA_B1S2_24_MOUSEOVER": (-345, -57),"DIA_B1S2_25": (278, 121), "DIA_B1S2_26": (120, 7),}, #seal close
|
||||
635: {"DIA_B1S2_7": (315, -167), "DIA_B1S2_8": (169, 21), "DIA_B1S2_24_OPEN": (-108, 9), "DIA_B1S2_24_CLOSED": (-108, 9),"DIA_B1S2_24_MOUSEOVER": (-108, 9),"DIA_B1S2_26": (357, 73), "DIA_B1S2_27": (-94, -146),"DIA_B1S2_29": (-325, -6), "DIA_B1S2_30": (143, 21),}, # seal far
|
||||
634: {"DIA_B1S2_6": (253, -156), "DIA_B1S2_7": (78, -233), "DIA_B1S2_20": (8, 303),"DIA_B1S2_24_OPEN": (-345, -57),"DIA_B1S2_24_CLOSED": (-345, -57),"DIA_B1S2_24_MOUSEOVER": (-345, -57),"DIA_B1S2_25": (278, 121), "DIA_B1S2_26": (120, 7),}, #seal close
|
||||
635: {"DIA_B1S2_7": (315, -167), "DIA_B1S2_8": (169, 21), "DIA_B1S2_24_OPEN": (-108, 9), "DIA_B1S2_24_CLOSED": (-108, 9),"DIA_B1S2_24_MOUSEOVER": (-108, 9),"DIA_B1S2_26": (357, 73), "DIA_B1S2_27": (-94, -146),"DIA_B1S2_29": (-325, -6), "DIA_B1S2_30": (143, 21),}, # seal far
|
||||
636: {"DIA_B1S2_4": (383, -111), "DIA_B1S2_5": (187, 256), "DIA_B1S2_6": (-252, 100), "DIA_B1S2_7": (-427, 23), "DIA_B1S2_11": (-20, 177), "DIA_B1S2_25": (-228, 377), }, #cross river
|
||||
637: {"DIA_B1S2_2": (-210, 122), "DIA_B1S2_4": (-20, -251), "DIA_B1S2_5": (-216, 116), "DIA_B1S2_6": (-663, -35), "DIA_B1S2_7": (-838, -112), "DIA_B1S2_11": (-430, 42), "DIA_B1S2_26": (-796, 127), }, #close circle
|
||||
|
||||
@@ -283,10 +283,10 @@ class Pather:
|
||||
656: {"DIA_C1F7_48": (-61, 13), "DIA_C1F7_39": (71, 101), "DIA_C1F7_44": (129, -56), "DIA_C1F7_49": (-139, -76), "DIA_C1F7_52": (141, -82), "DIA_C1F7_51": (147, 119), "DIA_C1F7_36": (146, 271), "DIA_C1F7_35": (276, 194), },#layoutcheck
|
||||
|
||||
#SEAL C2G_new Infector
|
||||
660: {"DIA_C2G2_2": (-182, 71), "DIA_C2G2_3": (-258, 115), "DIA_C2G2_18": (151, -250), "DIA_C2G2_6": (-310, -9), "DIA_C2G2_15": (430, -74), "DIA_C2G2_11": (-272, -406), }, # approach
|
||||
660: {"DIA_C2G2_2": (-182, 71), "DIA_C2G2_3": (-258, 115), "DIA_C2G2_18": (151, -250), "DIA_C2G2_6": (-310, -9), "DIA_C2G2_15": (430, -74), "DIA_C2G2_11": (-272, -406), }, # approach
|
||||
661: {"DIA_C2G2_14": (33, 153), "DIA_C2G2_5": (20, 226), "DIA_C2G2_11": (322, -90), "DIA_C2G2_6": (284, 307), "DIA_C2G2_17": (-420, 110), "DIA_C2G2_10": (-429, 146), "DIA_C2G2_8": (-407, 277), "DIA_C2G2_22": (56, 514), },# seal boss close
|
||||
662: {"DIA_C2G2_15": (-54, -160), "DIA_C2G2_12": (271, -138), "DIA_C2G2_17": (-137, 280), "DIA_C2G2_10": (-146, 316), "DIA_C2G2_9": (-251, 354), "DIA_C2G2_7_CLOSED": (433, 88), "DIA_C2G2_7_OPEN": (433, 88),"DIA_C2G2_7_MOUSEOVER": (433, 88),"DIA_C2G2_14": (315, 323), "DIA_C2G2_8": (-124, 447), }, # seal boss far
|
||||
663: {"DIA_C2G2_9": (94, 181), "DIA_C2G2_17": (207, 107), "DIA_C2G2_10": (198, 143), "DIA_C2G2_21_OPEN": (16, 297), "DIA_C2G2_21_CLOSED": (16, 297),"DIA_C2G2_21_MOUSEOVER": (16, 297),"DIA_C2G2_8": (221, 274), "DIA_C2G2_15": (290, -333), "DIA_C2G2_20": (-435, 93), "DIA_C2G2_19": (-504, 24), }, # safe dist
|
||||
662: {"DIA_C2G2_15": (-54, -160), "DIA_C2G2_12": (271, -138), "DIA_C2G2_17": (-137, 280), "DIA_C2G2_10": (-146, 316), "DIA_C2G2_9": (-251, 354), "DIA_C2G2_7_CLOSED": (433, 88), "DIA_C2G2_7_OPEN": (433, 88),"DIA_C2G2_7_MOUSEOVER": (433, 88),"DIA_C2G2_14": (315, 323), "DIA_C2G2_8": (-124, 447), }, # seal boss far
|
||||
663: {"DIA_C2G2_9": (94, 181), "DIA_C2G2_17": (207, 107), "DIA_C2G2_10": (198, 143), "DIA_C2G2_21_OPEN": (16, 297), "DIA_C2G2_21_CLOSED": (16, 297),"DIA_C2G2_21_MOUSEOVER": (16, 297),"DIA_C2G2_8": (221, 274), "DIA_C2G2_15": (290, -333), "DIA_C2G2_20": (-435, 93), "DIA_C2G2_19": (-504, 24), }, # safe dist
|
||||
664: {"DIA_C2G2_20": (-214, -66), "DIA_C2G2_21_OPEN": (237, 137), "DIA_C2G2_21_CLOSED": (237, 137),"DIA_C2G2_21_MOUSEOVER": (237, 137),"DIA_C2G2_19": (-284, -135), "DIA_C2G2_9": (315, 22), "DIA_C2G2_10": (419, -16), "DIA_C2G2_17": (428, -52), "DIA_C2G2_8": (442, 115), "DIA_C2G2_5": (868, 63), }, # seal fake far
|
||||
665: {"DIA_C2G2_8": (43, -27), "DIA_C2G2_9": (-85, -121), "DIA_C2G2_10": (19, -158), "DIA_C2G2_21_OPEN": (-163, -6), "DIA_C2G2_21_CLOSED": (-163, -6),"DIA_C2G2_21_MOUSEOVER": (-163, -6),"DIA_C2G2_17": (28, -194), "DIA_C2G2_5": (468, -80), "DIA_C2G2_14": (480, -153), "DIA_C2G2_22": (503, 208), "DIA_C2G2_20": (-614, -208), }, # seal boss close
|
||||
|
||||
@@ -664,8 +664,8 @@ class Pather:
|
||||
last_move = time.time()
|
||||
|
||||
# Sometimes we get stuck at a Shrine or Stash, after a few seconds check if the screen was different, if force a left click.
|
||||
if teleport_count > 30:
|
||||
Logger.debug("Stuck: Performing check for Shrine")
|
||||
if (teleport_count + 1) % 30 == 0:
|
||||
Logger.debug("Longer-than-expected traverse: Check for an occluding shrine")
|
||||
img = self._screen.grab()
|
||||
if self._template_finder.search(["SHRINE", "HIDDEN_STASH", "SKULL_PILE"], img, roi=self._config.ui_roi["shrine_check"], threshold=0.8, best_match=True).valid:
|
||||
if self._config.general["info_screenshots"]: cv2.imwrite(f"./info_screenshots/info_shrine_check_before" + time.strftime("%Y%m%d_%H%M%S") + ".png", self._screen.grab())
|
||||
@@ -764,6 +764,6 @@ if __name__ == "__main__":
|
||||
char = Hammerdin(config.hammerdin, screen, t_finder, ui_manager, pather, PickIt) #config.char,
|
||||
char.discover_capabilities()
|
||||
|
||||
|
||||
|
||||
#pather.traverse_nodes([602], char)
|
||||
#pather.traverse_nodes_fixed("dia_trash_c", char)
|
||||
|
||||
+1
-1
@@ -510,7 +510,7 @@ class Diablo:
|
||||
if not self._pather.traverse_nodes([602], self._char): return False
|
||||
self._char.kill_diablo()
|
||||
if self._config.general["info_screenshots"]: cv2.imwrite(f"./info_screenshots/info_dia_kill_" + time.strftime("%Y%m%d_%H%M%S") + ".png", self._screen.grab())
|
||||
self._picked_up_items = self._pickit.pick_up_items(self)
|
||||
self._picked_up_items = self._pickit.pick_up_items(char=self._char)
|
||||
wait(0.5, 0.7)
|
||||
return (Location.A4_DIABLO_END, self._picked_up_items)
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
__version__ = '0.6.5-dev'
|
||||
__version__ = '0.6.6-dev'
|
||||
|
||||
Reference in New Issue
Block a user