diff --git a/combined_bot_main.py b/combined_bot_main.py new file mode 100644 index 0000000..4a1a23c --- /dev/null +++ b/combined_bot_main.py @@ -0,0 +1,42 @@ +import sys +from time import time +import cv2 as cv +import keyboard +from combined_user_interface import PrimaryOverlay +from equipment import Equipment + + +def run(): + overlay = PrimaryOverlay() + + while True: + if overlay.run_mode == 'stopped': + overlay.update_status_label("stopped") + overlay.run_mode = 'init' + continue + elif overlay.run_mode == 'started': + cv.waitKey(1000) + pass + elif overlay.run_mode == 'init': + cv.waitKey(1) + continue + elif overlay.run_mode == 'paused': + continue + elif overlay.run_mode == 'finished': + overlay.update_status_label("finished") + overlay.run_mode = 'init' + continue + elif overlay.run_mode == 'quit': + overlay.destroy() + return + else: + break + + if overlay.rb_int.get() == 1: + equip = Equipment(overlay) + equip.execute_main_loop() + + +if __name__ == "__main__": + run() + sys.exit() diff --git a/combined_user_interface.py b/combined_user_interface.py new file mode 100644 index 0000000..051b2aa --- /dev/null +++ b/combined_user_interface.py @@ -0,0 +1,157 @@ +# Run tkinter code in another thread +import threading +import tkinter as tk +from tkinter import ttk + + +class PrimaryOverlay(threading.Thread): + + def __init__(self): + threading.Thread.__init__(self) + + self.run_mode = 'init' + + self.root = tk.Tk + self.rb_frame = tk.Frame + self.ButtonFrame = tk.Frame + self.parameter_frame = tk.Frame + self.parameter_label_frame = tk.Frame + + self.rb_int = tk.IntVar + self.energy_use = tk.StringVar + self.spawn_use = tk.StringVar + self.emitter_use = tk.StringVar + + self.EnergyLabel = tk.Label + self.EnergyEntry = tk.Entry + self.SpawnLabel = tk.Label + self.SpawnEntry = tk.Entry + self.EmitterLabel = tk.Label + self.Emitter_Box = ttk.Combobox + + self.RadioButtons = dict + self.RadioButtonNames = ["Equip", "Crops", "Farm", "Magic", "Craft", "Mine"] + self.RadioButton1 = tk.Radiobutton + self.RadioButton2 = tk.Radiobutton + self.RadioButton3 = tk.Radiobutton + self.RadioButton4 = tk.Radiobutton + self.RadioButton5 = tk.Radiobutton + self.RadioButton6 = tk.Radiobutton + + self.StartButton = tk.Button + self.StopButton = tk.Button + self.PauseButton = tk.Button + self.QuitButton = tk.Button + self.TkPosition = '133x239+60+600' + + self.StatusLabel = tk.Label + + # self.TkPosition = config.returnEnemyPlayerOverlayPos() + self.start() + + def run(self): + self.root = tk.Tk() + + self.rb_frame = tk.Frame(self.root) + self.rb_int = tk.IntVar(self.root, value=1) + self.RadioButtons = dict() + #var = tk.IntVar(value=1) + for i in range(1, 7): + self.RadioButtons[i] = tk.Radiobutton(self.rb_frame, text=self.RadioButtonNames[i-1], variable=self.rb_int, + value=i) + self.RadioButtons[i].grid(row=i, column=0, sticky='w') + + self.parameter_frame = tk.Frame(self.root) + self.energy_use = tk.StringVar(self.root, value='2000') + self.spawn_use = tk.StringVar(self.root, value='25') + self.emitter_use = tk.StringVar(self.root, value='multi') + + self.EnergyLabel = tk.Label(self.parameter_frame, text="Runs:", font=("Helvetica", 10, "bold"), + background="grey", width='6') + self.EnergyEntry = tk.Entry(self.parameter_frame, textvariable=self.energy_use, font=("Helvetica", 10, "bold"), width='10') + self.SpawnLabel = tk.Label(self.parameter_frame, text="Spawn:", font=("Helvetica", 10, "bold"), + background="grey", width='6') + self.SpawnEntry = tk.Entry(self.parameter_frame, textvariable=self.spawn_use, font=("Helvetica", 10, "bold"), width='10') + self.EmitterLabel = tk.Label(self.parameter_frame, text="Emitter:", font=("Helvetica", 10, "bold"), + background="grey", width='6') + self.Emitter_Box = ttk.Combobox(self.parameter_frame, textvariable=self.emitter_use, font=("Helvetica", 8, "bold"), + width='9') + self.Emitter_Box['values'] = ('multi', 'main', 'mushroom', 'amulett', 'sword', 'staff', 'wand', 'ring') + + self.EnergyLabel.grid(row=0, column=0, sticky='w') + self.EnergyEntry.grid(row=0, column=1) + self.SpawnLabel.grid(row=1, column=0, sticky='w') + self.SpawnEntry.grid(row=1, column=1) + self.EmitterLabel.grid(row=2, column=0, sticky='w') + self.Emitter_Box.grid(row=2, column=1) + + self.ButtonFrame = tk.Frame(self.root) + self.StartButton = tk.Button(self.ButtonFrame, text="Start", command=self.start_button_callback, width='5') + self.StopButton = tk.Button(self.ButtonFrame, text="Stop", command=self.stop_button_callback, width='5', + state=tk.DISABLED) + self.PauseButton = tk.Button(self.ButtonFrame, text="Pause", command=self.pause_button_callback, width='5', + state=tk.DISABLED) + self.QuitButton = tk.Button(self.ButtonFrame, text="Quit", command=self.quit_button_callback, width='5', + state=tk.NORMAL) + + self.StartButton.grid(row=0, column=0) + self.StopButton.grid(row=1, column=0) + self.PauseButton.grid(row=2, column=0) + self.QuitButton.grid(row=4, column=0) + + self.StatusLabel = tk.Label(self.root, text="Nothing to see here", font=("Helvetica", 10, "bold"), + background="grey", anchor=tk.CENTER) + + self.rb_frame.grid(row=0, column=0, sticky='w') + self.ButtonFrame.grid(row=0, column=1, sticky='w') + self.parameter_frame.grid(row=1, column=0, columnspan=2, sticky='w') + self.StatusLabel.grid(row=2, column=0, columnspan=2) + + # self.ClearButton.pack(side="top") + self.root.geometry(self.TkPosition) + self.root.overrideredirect(1) # fenster ohne aussen rum :-) + #self.root.attributes('-alpha', 0.7) # fenster transparent + self.root.attributes('-topmost', 1) # fenster immer im vordergrund + # self.root.wm_attributes("-disabled", True) + #self.root.configure(background='black') + + self.root.mainloop() + + def destroy(self): + self.root.destroy() + + def start_button_callback(self): + self.StartButton.configure(state=tk.DISABLED) + self.StopButton.configure(state=tk.NORMAL) + self.PauseButton.configure(state=tk.NORMAL) + for i in range(1, 7): + tt = self.rb_int.get() + if self.rb_int.get() != i: + (self.RadioButtons[i]).configure(state=tk.DISABLED) + self.StatusLabel.configure(text='started') + self.run_mode = 'started' + + # self.EnemyLabel.pack() + + def stop_button_callback(self): + self.StartButton.configure(state=tk.NORMAL) + self.StopButton.configure(state=tk.DISABLED) + self.PauseButton.configure(state=tk.DISABLED) + for i in range(1, 7): + self.RadioButtons[i].configure(state=tk.NORMAL) + self.run_mode = 'stopped' + + def pause_button_callback(self): + self.StartButton.configure(state=tk.NORMAL) + self.StopButton.configure(state=tk.NORMAL) + self.PauseButton.configure(state=tk.DISABLED) + self.run_mode = 'paused' + + def quit_button_callback(self): + self.run_mode = 'quit' + + def get_run_mode(self): + return self.run_mode + + def update_status_label(self, msg): + self.StatusLabel.configure(text=msg) \ No newline at end of file diff --git a/equipment.py b/equipment.py new file mode 100644 index 0000000..8e0ebd0 --- /dev/null +++ b/equipment.py @@ -0,0 +1,728 @@ +import random +from operator import itemgetter +from time import time +from window_capture import WindowCapture +from vision import Vision +import cv2 as cv +from hsvfilter import HsvFilter +from config_file import UserConfigs +import pydirectinput +from utils import dig_point + +EMITTER_MAIN = "main" +EMITTER_MUSH = "mushroom" +EMITTER_AMU = "amulett" +EMITTER_SWORD = "sword" +EMITTER_STAFF = "staff" +EMITTER_WAND = "wand" +EMITTER_RING = "ring" +EMITTER_MULTI = "multi" + +HSV_DEFAULT = HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0) + + +class Equipment: + needles = [] + hsvs = [] + tresholds = [] + masks = [] + emitters = [] + + def __init__(self, overlay): + self.overlay = overlay + self.config = UserConfigs() + + self.EMITTER_TO_USE = str(overlay.emitter_use.get()) + self.SPAWN_COUNT = int(overlay.spawn_use.get()) + self.ENERGY_TO_USE = int(overlay.energy_use.get()) + + # initialize the StunWindowCapture class + self.capture_window = WindowCapture(None, "equip", self.config) + + # initialize the StunVision class + self.vision_stun = Vision() + + 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.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) + self.k_needle = cv.imread("equip/keys/key_4_32.jpg", cv.IMREAD_UNCHANGED) + self.k_mask = cv.imread("equip/keys/key_4_32-mask.png", cv.IMREAD_COLOR) + self.dig_button = cv.imread("dig/ok_button.jpg", cv.IMREAD_UNCHANGED) + + self.energy_counter = 0 + + def execute_main_loop(self): + for emitter in self.emitters: + while True: + if self.overlay.run_mode == 'paused': + cv.waitKey(1) + continue + elif self.overlay.run_mode == 'stopped': + break + + # get an updated image of the game + screenshot = self.capture_window.get_screenshot() + + # cv.imshow("screenshot", screenshot) + # cv.waitKey(150) + # continue + if self.energy_counter >= self.ENERGY_TO_USE: + self.energy_counter = 0 + break + + spawn_1 = self.find_emitter(emitter, screenshot, 1) + if len(spawn_1) == 1: + points = self.vision_stun.get_click_points(spawn_1) + for i in range(0, self.SPAWN_COUNT, 1): + self.click_point(points[0][0], points[0][1]) + self.energy_counter = self.energy_counter + 1 + self.overlay.update_status_label(emitter + ": " + str(self.ENERGY_TO_USE - self.energy_counter)) + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + break + else: + spawn_0 = self.find_emitter(emitter, screenshot, 0) + points = self.vision_stun.get_click_points(spawn_0) + for point in points: + 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) + + if emitter == EMITTER_MAIN: + while True: + screenshot = self.capture_window.get_screenshot() + c_rectangles = self.vision_stun.find(screenshot, self.c_needle, 0.95, 1, True, self.c_mask) + k_rectangles = self.vision_stun.find(screenshot, self.k_needle, 0.95, 1, True, self.k_mask) + if (len(c_rectangles) == 1) and (len(k_rectangles) == 1): + c_point = self.vision_stun.get_click_points(c_rectangles)[0] + k_point = self.vision_stun.get_click_points(k_rectangles)[0] + self.move_tile(k_point, c_point) + else: + break + + for rer in range(0, len(self.needles), 1): + loop_time = time() + while True: + if (time() - loop_time) >= 60: + break + screenshot = self.capture_window.get_screenshot_by_area(self.config.returnOKWindowPos()) + rectangles = self.vision_stun.find(screenshot, self.dig_button, 0.5, 1) + if len(rectangles) == 1: + pointis = self.vision_stun.get_click_points(rectangles) + for pointi in pointis: + dig_point(pointi[0] + self.config.returnOKWindowPos()[2], + pointi[1] + self.config.returnOKWindowPos()[3], 150) + cv.waitKey(60000) + continue + # do object detection + screenshot = self.capture_window.get_screenshot() + # processed_screenshot = self.vision_stun.apply_hsv_filter(screenshot, self.hsvs[rer]) + # processed_needle = self.vision_stun.apply_hsv_filter(self.needles[rer], self.hsvs[rer]) + + rectangles = self.vision_stun.find_by_mask_and_validate(screenshot, self.needles[rer], + self.masks[rer], 5) + # draw the detection results onto the original image + # output_image = self.vision_stun.draw_rectangles(screenshot, rectangles) + # cv.imshow("output_image", output_image) + # cv.waitKey(150) + + if len(rectangles) is not 5: + break + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + break + + # sort rectangles by top + rectangles = sorted(rectangles, key=itemgetter(1)) + + points = self.vision_stun.get_click_points(rectangles) + + move_breaker = self.check_and_move_tile([70, 70, rectangles[0][0] + 70, rectangles[0][1]], + self.needles[rer], + points[1], [points[0][0] + 70, points[0][1]]) + if move_breaker: + break + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + break + move_breaker = self.check_and_move_tile([70, 70, rectangles[0][0], rectangles[0][1] + 70], + self.needles[rer], + points[2], [points[0][0], points[0][1] + 70]) + if move_breaker: + break + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + break + move_breaker = self.check_and_move_tile([70, 70, rectangles[0][0] + 70, rectangles[0][1] + 70], + self.needles[rer], + points[3], [points[0][0] + 70, points[0][1] + 70]) + if move_breaker: + break + self.move_tile(points[4], [points[0][0], points[0][1]]) + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + break + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + break + cv.waitKey(150) + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + break + if self.overlay.run_mode == 'stopped': + break + self.overlay.run_mode = 'finished' + + def check_and_move_tile(self, rect, needl, point_source, point_dest): + screenshot_p = self.capture_window.get_screenshot() + screenshot_p_w = screenshot_p.shape[1] + screenshot_p_h = screenshot_p.shape[0] + w = rect[0] + h = rect[1] + x = rect[2] + y = rect[3] + if h >= screenshot_p_h or w >= screenshot_p_w: + return True + + screenshot_pos = screenshot_p[y:y + h, x:x + w] # (w, h, x+w, y+h) + # processed_screenshot = visio.apply_hsv_filter(screenshot_pos, hsv) + # processed_needle = visio.apply_hsv_filter(needl, hsv) + result2 = cv.matchTemplate(screenshot_pos, needl, cv.TM_CCOEFF_NORMED) + _min_val2, _max_val2, min_loc2, max_loc2 = cv.minMaxLoc(result2, None) + # rectangles2 = visio.find(screenshot_pos, needl, tresh, 1, True, mask) + # output_by_area = self.vision_stun.draw_rectangles(screenshot_pos2, rectangles) + # cv.imshow("output_image_by_area", screenshot_pos) + # cv.waitKey(150) + # print("thresh in movecheck:" + str(_maxVal2)) + if _max_val2 <= 0.9: + self.move_tile(point_source, point_dest) + + return False + + def click_point(self, x, y): + offset_left = self.config.returnEquipmentWindowPos()[2] + offset_down = self.config.returnEquipmentWindowPos()[3] + pydirectinput.moveTo(x + offset_left, y + offset_down) + pydirectinput.mouseDown() + w = random.randint(1, 50) + cv.waitKey(30 + w) + pydirectinput.mouseUp() + + def move_tile(self, point_source, point_dest): + offset_left = self.config.returnEquipmentWindowPos()[2] + offset_down = self.config.returnEquipmentWindowPos()[3] + pydirectinput.moveTo(point_source[0] + offset_left, point_source[1] + offset_down) + pydirectinput.mouseDown() + w = random.randint(25, 50) + cv.waitKey(100 + w) + pydirectinput.moveTo(point_dest[0] + offset_left, point_dest[1] + offset_down) + pydirectinput.mouseUp() + cv.waitKey(400 + w) + + def find_emitter(self, emitter_to_use, screen, layer): + if self.EMITTER_TO_USE == EMITTER_MUSH: + if layer == 0: + needle = cv.imread("equip/emitters/mush_e_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/mush_e_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/mush_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/mush_e2_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.98, 1, True, mask) + elif emitter_to_use == EMITTER_AMU: + if layer == 0: + needle = cv.imread("equip/emitters/amu_e_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/amu_e_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/amu_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/amu_e2_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + elif emitter_to_use == EMITTER_MAIN: + if layer == 0: + needle = cv.imread("equip/emitters/main_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/main_e1_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/main_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/main_e2_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + elif emitter_to_use == EMITTER_SWORD: + if layer == 0: + needle = cv.imread("equip/emitters/sword_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/sword_e1_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/sword_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/sword_e2_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.98, 1, True, mask) + elif emitter_to_use == EMITTER_STAFF: + if layer == 0: + needle = cv.imread("equip/emitters/staff_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/staff_e1_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/staff_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/staff_e2_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.99, 1, True, mask) + elif emitter_to_use == EMITTER_RING: + if layer == 0: + needle = cv.imread("equip/emitters/ring_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/ring_e1_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/ring_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/ring_e2_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + elif emitter_to_use == EMITTER_WAND: + if layer == 0: + needle = cv.imread("equip/emitters/wand_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/wand_e1_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/wand_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/wand_e2_32-mask.png", cv.IMREAD_COLOR) + return self.vision_stun.find(screen, needle, 0.96, 1, True, mask) + + def include_chests(self): + self.needles.append(cv.imread("equip/chests/chest_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.95) + self.masks.append(cv.imread("equip/chests/chest_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/chests/chest_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.95) + self.masks.append(cv.imread("equip/chests/chest_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/chests/chest_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/chests/chest_3_32-mask.png", cv.IMREAD_COLOR)) + + def include_books(self): + self.needles.append(cv.imread("equip/books/book_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/books/book_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/books/book_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.9) + self.masks.append(cv.imread("equip/books/book_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/books/book_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.87) + self.masks.append(cv.imread("equip/books/book_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/books/book_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/books/book_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/books/book_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/books/book_5_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/books/book_6_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.9) + self.masks.append(cv.imread("equip/books/book_6_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/books/book_7_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/books/book_7_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/books/book_8_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/books/book_8_32-mask.png", cv.IMREAD_COLOR)) + + def include_keys(self): + self.needles.append(cv.imread("equip/keys/key_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/keys/key_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/keys/key_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/keys/key_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/keys/key_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/keys/key_3_32-mask.png", cv.IMREAD_COLOR)) + + def include_pots(self): + self.needles.append(cv.imread("equip/pots/pot_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/pots/pot_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/pots/pot_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/pots/pot_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/pots/pot_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.94) + self.masks.append(cv.imread("equip/pots/pot_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/pots/pot_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/pots/pot_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/pots/pot_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/pots/pot_5_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/pots/pot_6_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/pots/pot_6_32-mask.png", cv.IMREAD_COLOR)) + + def include_bags(self): + self.needles.append(cv.imread("equip/bags/bag_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/bags/bag_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/bags/bag_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.88) + self.masks.append(cv.imread("equip/bags/bag_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/bags/bag_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/bags/bag_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/bags/bag_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/bags/bag_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/bags/bag_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/bags/bag_5_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/bags/bag_6_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/bags/bag_6_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/bags/bag_7_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/bags/bag_7_32-mask.png", cv.IMREAD_COLOR)) + + def include_coins(self): + self.needles.append(cv.imread("equip/coins/coin_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/coins/coin_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/coins/coin_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/coins/coin_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/coins/coin_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/coins/coin_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/coins/coin_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/coins/coin_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/coins/coin_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/coins/coin_5_32-mask.png", cv.IMREAD_COLOR)) + + def include_runes(self): + self.needles.append(cv.imread("equip/runes/rune_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/runes/rune_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/runes/rune_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/runes/rune_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/runes/rune_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/runes/rune_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/runes/rune_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/runes/rune_4_32-mask.png", cv.IMREAD_COLOR)) + + def include_mushs(self): + self.needles.append(cv.imread("equip/mushrooms/mush_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/mushrooms/mush_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/mushrooms/mush_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/mushrooms/mush_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/mushrooms/mush_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/mushrooms/mush_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/mushrooms/mush_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/mushrooms/mush_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/mushrooms/mush_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/mushrooms/mush_5_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/mushrooms/mush_6_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/mushrooms/mush_6_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/mushrooms/mush_7_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/mushrooms/mush_7_32-mask.png", cv.IMREAD_COLOR)) + + def include_amus(self): + self.needles.append(cv.imread("equip/amus/amu_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.9) + self.masks.append(cv.imread("equip/amus/amu_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/amus/amu_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.9) + self.masks.append(cv.imread("equip/amus/amu_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/amus/amu_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/amus/amu_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/amus/amu_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/amus/amu_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/amus/amu_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/amus/amu_5_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/amus/amu_6_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/amus/amu_6_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/amus/amu_7_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/amus/amu_7_32-mask.png", cv.IMREAD_COLOR)) + + def include_swords(self): + self.needles.append(cv.imread("equip/swords/sword_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/swords/sword_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/swords/sword_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/swords/sword_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/swords/sword_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/swords/sword_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/swords/sword_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/swords/sword_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/swords/sword_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/swords/sword_5_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/swords/sword_6_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/swords/sword_6_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/swords/sword_7_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/swords/sword_7_32-mask.png", cv.IMREAD_COLOR)) + + def include_staffs(self): + self.needles.append(cv.imread("equip/staffs/staff_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/staffs/staff_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/staffs/staff_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/staffs/staff_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/staffs/staff_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/staffs/staff_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/staffs/staff_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/staffs/staff_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/staffs/staff_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/staffs/staff_5_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/staffs/staff_6_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/staffs/staff_6_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/staffs/staff_7_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/staffs/staff_7_32-mask.png", cv.IMREAD_COLOR)) + + def include_rings(self): + self.needles.append(cv.imread("equip/rings/ring_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.925) + self.masks.append(cv.imread("equip/rings/ring_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/rings/ring_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.94) + self.masks.append(cv.imread("equip/rings/ring_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/rings/ring_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/rings/ring_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/rings/ring_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/rings/ring_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/rings/ring_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/rings/ring_5_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/rings/ring_6_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.91) + self.masks.append(cv.imread("equip/rings/ring_6_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/rings/ring_7_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/rings/ring_7_32-mask.png", cv.IMREAD_COLOR)) + + def include_wands(self): + self.needles.append(cv.imread("equip/wands/wand_1_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/wands/wand_1_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/wands/wand_2_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/wands/wand_2_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/wands/wand_3_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/wands/wand_3_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/wands/wand_4_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/wands/wand_4_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/wands/wand_5_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/wands/wand_5_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/wands/wand_6_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/wands/wand_6_32-mask.png", cv.IMREAD_COLOR)) + + self.needles.append(cv.imread("equip/wands/wand_7_32.jpg", cv.IMREAD_UNCHANGED)) + self.hsvs.append(HSV_DEFAULT) + self.tresholds.append(0.93) + self.masks.append(cv.imread("equip/wands/wand_7_32-mask.png", cv.IMREAD_COLOR))