From f1bde80746ead399204d360034a6d9769717b771 Mon Sep 17 00:00:00 2001 From: Thaloria Date: Sat, 22 Oct 2022 12:05:45 +0200 Subject: [PATCH] refactoring bug fix equip multi --- .idea/misc.xml | 2 +- crops.py | 9 ++-- equipment.py | 103 +++++++++++++++++++++------------------------ game_base_class.py | 22 +++++++--- 4 files changed, 71 insertions(+), 65 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 8cf69bc..f137e70 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/crops.py b/crops.py index 4f8de28..1576025 100644 --- a/crops.py +++ b/crops.py @@ -126,7 +126,8 @@ class Crops(GameBase): color_list = [PURPLE, BLUE, RED, YELLOW, GREEN] random.shuffle(color_list) self.set_color_order(color_list) - self.current_strategy = random.choice([RAINBOW_STRATEGY, BIGBOMB_STRATEGY, ROCKET_STRATEGY, BOMB_STRATEGY]) + self.current_strategy = random.choice([RAINBOW_STRATEGY, BIGBOMB_STRATEGY, + ROCKET_STRATEGY, BOMB_STRATEGY]) self.reset_counter = 0 return else: @@ -256,7 +257,8 @@ class Crops(GameBase): self.execute_move(res_dic[key]) break - def convert_moves_to_dic_by_color(self, reserve_moves): + @staticmethod + def convert_moves_to_dic_by_color(reserve_moves): dic = {} for color, move in reserve_moves: if color in dic: @@ -295,7 +297,8 @@ class Crops(GameBase): pydirectinput.mouseUp() cv.waitKey(50) - def get_directions_array(self, current_x, current_y): + @staticmethod + def get_directions_array(current_x, current_y): left_x = current_x left_y = current_y - 1 diff --git a/equipment.py b/equipment.py index a2aae32..85727d5 100644 --- a/equipment.py +++ b/equipment.py @@ -21,16 +21,15 @@ HSV_DEFAULT = HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0) class Equipment(GameBase): + needles = [] + hsvs = [] + tresholds = [] + masks = [] + emitters = [] def __init__(self, overlay): super().__init__(overlay) - self.needles = [] - self.hsvs = [] - self.tresholds = [] - self.masks = [] - self.emitters = [] - # initialize the StunWindowCapture class self.capture_window = WindowCapture(None, "equip", self.config) @@ -38,49 +37,7 @@ class Equipment(GameBase): self.SPAWN_COUNT = int(overlay.spawn_use.get()) self.ENERGY_TO_USE = int(overlay.energy_use.get()) - if self.EMITTER_TO_USE == EMITTER_MULTI: - self.emitters.append(EMITTER_RING) - self.emitters.append(EMITTER_WAND) - self.emitters.append(EMITTER_SWORD) - self.emitters.append(EMITTER_AMU) - self.emitters.append(EMITTER_STAFF) - else: - self.emitters.append(self.EMITTER_TO_USE) - - for emitter in self.emitters: - if emitter == EMITTER_MUSH: - self.include_books() - self.include_mushs() - self.include_pots() - self.include_bags() - elif emitter == EMITTER_AMU: - self.include_books() - self.include_amus() - self.include_bags() - elif emitter == EMITTER_MAIN: - self.include_books() - self.include_chests() - self.include_keys() - self.include_pots() - self.include_bags() - self.include_coins() - self.include_runes() - elif emitter == EMITTER_SWORD: - self.include_books() - self.include_swords() - self.include_bags() - elif emitter == EMITTER_STAFF: - self.include_books() - self.include_staffs() - self.include_bags() - elif emitter == EMITTER_RING: - self.include_books() - self.include_rings() - self.include_bags() - elif emitter == EMITTER_WAND: - self.include_books() - self.include_wands() - self.include_bags() + self.init_emitters_to_use() self.c_needle = cv.imread("equip/chests/chest_4_32.jpg", cv.IMREAD_UNCHANGED) self.c_mask = cv.imread("equip/chests/chest_4_32-mask.png", cv.IMREAD_COLOR) @@ -90,14 +47,55 @@ class Equipment(GameBase): self.energy_counter = 0 + def init_emitters_to_use(self): + self.emitters.clear() + if self.EMITTER_TO_USE == EMITTER_MULTI: + self.emitters.append(EMITTER_RING) + self.emitters.append(EMITTER_WAND) + self.emitters.append(EMITTER_SWORD) + self.emitters.append(EMITTER_AMU) + self.emitters.append(EMITTER_STAFF) + else: + self.emitters.append(self.EMITTER_TO_USE) + + def init_needles_for_emitter_to_use(self, emitter): + self.needles.clear() + self.hsvs.clear() + self.tresholds.clear() + self.masks.clear() + + self.include_books() + self.include_bags() + + if emitter == EMITTER_MUSH: + self.include_mushs() + self.include_pots() + elif emitter == EMITTER_AMU: + self.include_amus() + elif emitter == EMITTER_MAIN: + self.include_chests() + self.include_keys() + self.include_pots() + self.include_coins() + self.include_runes() + elif emitter == EMITTER_SWORD: + self.include_swords() + elif emitter == EMITTER_STAFF: + self.include_staffs() + elif emitter == EMITTER_RING: + self.include_rings() + elif emitter == EMITTER_WAND: + self.include_wands() + def execute_main_loop(self): start_time = time() breaks = self.init_breaks() for emitter in self.emitters: + self.init_needles_for_emitter_to_use(emitter) while True: self.check_breaks(start_time, breaks) if self.overlay.run_mode == 'paused': - cv.waitKey(1) + cv.waitKey(10) continue elif self.overlay.run_mode == 'stopped': break @@ -124,11 +122,8 @@ class Equipment(GameBase): else: spawn_0 = self.find_emitter(emitter, screenshot, 0) points = self.vision_stun.get_click_points(spawn_0) - for point in points: + if len(points) >= 1: self.click_point(points[0][0], points[0][1]) - - if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': - break continue cv.waitKey(500) diff --git a/game_base_class.py b/game_base_class.py index f77e837..9071827 100644 --- a/game_base_class.py +++ b/game_base_class.py @@ -78,10 +78,12 @@ class GameBase: def init_breaks(self): breaks = [] + if int(self.breaks) == 0: + return breaks #breaks.append(7) for i in range(1, int(self.breaks) + 1, 1): avr_in_sec = int(self.stop_time) * 60 * 60 / int(self.breaks) - breaks.append(random.randint(i * avr_in_sec * 0.60, i * avr_in_sec)) + breaks.append(random.randint(int(i * avr_in_sec * 0.60), int(i * avr_in_sec))) return breaks def check_breaks(self, start_time, breaks): @@ -178,21 +180,24 @@ class GameBase: continue return False - def is_direction_in_bounce_and_same_color(self, state, loc, color): + @staticmethod + def is_direction_in_bounce_and_same_color(state, loc, color): x, y = loc if x <= 7 and x >= 0 and y <= 13 and y >= 0: if state[x, y] == color: return 1 return 0 - def local_pos_check(self, state, e, i, e_check, i_check, needle): + @staticmethod + def local_pos_check(state, e, i, e_check, i_check, needle): if e + e_check >= 0 and e + e_check <= 7 and i + i_check >= 0 and i + i_check <= 13: if state[e + e_check, i + i_check] == needle: return True else: return False - def local_pos_checks(self, state, e, i, e_check, i_check, needles): + @staticmethod + def local_pos_checks(state, e, i, e_check, i_check, needles): if e + e_check >= 0 and e + e_check <= 7 and i + i_check >= 0 and i + i_check <= 13: for needle in needles: if state[e + e_check, i + i_check] == needle: @@ -201,7 +206,8 @@ class GameBase: continue return False - def get_click_point(self, rectangle): + @staticmethod + def get_click_point(rectangle): # Loop over all the rectangles x, y, w, h = rectangle # Determine the center position @@ -237,7 +243,8 @@ class GameBase: for pointi in pointis: self.dig_point(pointi[0], pointi[1], 150) - def dig_point(self, point1, point2, dig_time): + @staticmethod + def dig_point(point1, point2, dig_time): pydirectinput.moveTo(point1, point2) cv.waitKey(dig_time) pydirectinput.mouseDown() @@ -245,7 +252,8 @@ class GameBase: cv.waitKey(w) pydirectinput.mouseUp() - def move_to(self, x, y): + @staticmethod + def move_to(x, y): point_src = (1113, 598) pydirectinput.moveTo(point_src[0], point_src[1]) pydirectinput.mouseDown()