diff --git a/breed1.jpg b/breed1.jpg deleted file mode 100644 index 6fc6e58..0000000 Binary files a/breed1.jpg and /dev/null differ diff --git a/breed2.jpg b/breed2.jpg deleted file mode 100644 index ba1f903..0000000 Binary files a/breed2.jpg and /dev/null differ diff --git a/candy-c/grid.jpg b/candy-c/grid.jpg deleted file mode 100644 index 9ac1662..0000000 Binary files a/candy-c/grid.jpg and /dev/null differ diff --git a/candy-c/repeat.jpg b/candy-c/repeat.jpg deleted file mode 100644 index 408e0ee..0000000 Binary files a/candy-c/repeat.jpg and /dev/null differ diff --git a/candy-c/reset.jpg b/candy-c/reset.jpg deleted file mode 100644 index 039e9a9..0000000 Binary files a/candy-c/reset.jpg and /dev/null differ diff --git a/combine_main.py b/combine_main.py deleted file mode 100644 index 6796763..0000000 --- a/combine_main.py +++ /dev/null @@ -1,202 +0,0 @@ -import random -from time import time -from window_capture import WindowCapture -from vision import Vision -import cv2 as cv -import pytesseract -from hsvfilter import HsvFilter -from config_file import UserConfigs -# import pyautogui -import pydirectinput -import keyboard - - -def run(): - # initialize the user-class - config = UserConfigs() - - # initialize the StunWindowCapture class - try: - capture_window = WindowCapture( - None, "magic", config) - video_mode = False - except: - # StunWindowCapture.list_window_names() - # print("Game not running, switching to video mode") - # capture_window = cv.VideoCapture("snip_slam.mp4") - video_mode = True - - # initialize the StunVision class - vision_stun = Vision() - # initialize the StunOverlay class - hsv_filter_orange = HsvFilter(10, 156, 0, 17, 255, 255, 0, 0, 0, 0) - hsv_filter_p = HsvFilter(130, 156, 0, 179, 255, 255, 0, 0, 0, 0) - hsv_filter_b = HsvFilter(88, 156, 0, 128, 255, 255, 0, 0, 0, 0) - hsv_filter_g = HsvFilter(34, 156, 0, 74, 255, 255, 0, 0, 0, 0) - hsv_filter_y = HsvFilter(24, 156, 0, 33, 255, 255, 0, 0, 0, 0) - hsv_filter_0 = HsvFilter(0, 0, 0, 179, 255, 255, 255, 0, 0, 0) - hsv_filter_w = HsvFilter(69, 25, 0, 94, 255, 255, 0, 0, 0, 0) - - loop_time = time() - pause = True - - magic_list = {"1": "body", "2": "finding", "3": "mind", "4": "perceiving", "5": "physical", "6": "seeing", - "7": "spiritual"} - tier_list = {"1": "0", "2": "orange", "3": "y", "4": "g", "5": "b", "6": "p"} # , "w"} - hsv_filter_list = {"1": hsv_filter_0, "2": hsv_filter_orange, "3": hsv_filter_y, "4": hsv_filter_g, - "5": hsv_filter_b, "6": hsv_filter_p} - - needle_list = [] - hsv_list = [] - for key1 in tier_list: - for key2 in magic_list: - - needle_list.append(cv.imread("magic/" + magic_list[key2] + "_" + tier_list[key1] + ".jpg", - cv.IMREAD_UNCHANGED)) - hsv_list.append(hsv_filter_list[key1]) - - - while True: - if keyboard.is_pressed('p') == True: - pause = True - print('q pressed') - elif keyboard.is_pressed('o') == True: - pause = False - print('o pressed') - if pause: - # cv.waitKey(500) - print("pausing") - continue - - if video_mode: - break - else: - try: - # get an updated image of the game - screenshot = capture_window.get_screenshot() - # screenshot = cv.imread("buffbar.jpg") - except: - capture_window.release() - print("Game window not available - shutting down application") - break - #cv.imshow("screenshot", screenshot) - #cv.waitKey(150) - #continue - - spawn_1 = vision_stun.find(screenshot, cv.imread("magic/spawn_1.jpg", cv.IMREAD_UNCHANGED), 0.25, 1) - if len(spawn_1) == 1: - spawn_button_active = True - points = vision_stun.get_click_points(spawn_1) - for i in range(0, 100, 1): - pydirectinput.moveTo(points[0][0], points[0][1]) - pydirectinput.mouseDown() - w = random.randint(1, 50) - cv.waitKey(30 + w) - pydirectinput.mouseUp() - else: - spawn_0 = vision_stun.find(screenshot, cv.imread("magic/spawn_0.jpg", cv.IMREAD_UNCHANGED), 0.7, 1) - points = vision_stun.get_click_points(spawn_0) - for point in points: - pydirectinput.moveTo(point[0], point[1]) - pydirectinput.mouseDown() - cv.waitKey(500) - pydirectinput.mouseUp() - continue - - # for needles in needle_list: - for rer in range(0, len(needle_list), 1): - #for needle in needle_list: - # do object detection - # processed_image = vision_stun.apply_hsv_filter(screenshot, hsv_filter) - # screenshot = capture_window.get_screenshot() - #cv.imshow("output_image", needle_list[rer]) - #cv.waitKey(150) - - while True: - screenshot = capture_window.get_screenshot() - processed_screenshot = vision_stun.apply_hsv_filter(screenshot, hsv_list[rer]) - processed_needle = vision_stun.apply_hsv_filter(needle_list[rer], hsv_list[rer]) - - #cv.imshow("output_image", processed_screenshot) - cv.imshow("output_needle", processed_needle) - cv.waitKey(150) - - rectangles = vision_stun.find(processed_screenshot, processed_needle, 0.7, 2) - # draw the detection results onto the original image - #output_image = vision_stun.draw_rectangles(screenshot, rectangles) - #cv.imshow("output_image", output_image) - #cv.waitKey(150) - - # only trigger ocr reading if a stun is detected - points = vision_stun.get_click_points(rectangles) - if len(points) == 2: - pydirectinput.moveTo(points[0][0], points[0][1]) - pydirectinput.mouseDown() - w = random.randint(1, 100) - cv.waitKey(250 + w) - pydirectinput.moveTo(points[1][0], points[1][1]) - pydirectinput.mouseUp() - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - else: - break - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - - needles_white = [] - needles_white.append(cv.imread("magic/body_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/finding_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/mind_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/perceiving_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/physical_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/seeing_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/spiritual_w.jpg", cv.IMREAD_UNCHANGED)) - - for needle_w in needles_white: - # do object detection - screenshot = capture_window.get_screenshot() - processed_screenshot = vision_stun.apply_hsv_filter(screenshot,hsv_filter_w) - processed_needle = vision_stun.apply_hsv_filter(needle_w, hsv_filter_w) - rectangles = vision_stun.find(processed_screenshot, processed_needle, 0.7, 1) - # draw the detection results onto the original image - # output_image = vision_stun.draw_rectangles(screenshot, rectangles) - # cv.imshow("output_image", output_image) - # cv.waitKey(150) - - points = vision_stun.get_click_points(rectangles) - if len(points) >= 1: - pydirectinput.moveTo(points[0][0], points[0][1]) - pydirectinput.mouseDown() - w = random.randint(1, 100) - cv.waitKey(100 + w) - pydirectinput.mouseUp() - screenshot = capture_window.get_screenshot() - rectangles = vision_stun.find(screenshot, cv.imread("magic/collect.jpg", cv.IMREAD_UNCHANGED), 0.8, 1) - points = vision_stun.get_click_points(rectangles) - if len(points) >= 1: - pydirectinput.moveTo(points[0][0], points[0][1]) - pydirectinput.mouseDown() - w = random.randint(1, 100) - cv.waitKey(100 + w) - pydirectinput.mouseUp() - - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - - # debug the loop rate - print('FPS {}'.format(1 / (time() - loop_time))) - loop_time = time() - cv.waitKey(150) - - -if __name__ == "__main__": - run() diff --git a/combine_main_ui.py b/combine_main_ui.py deleted file mode 100644 index ebea974..0000000 --- a/combine_main_ui.py +++ /dev/null @@ -1,187 +0,0 @@ -import random -from time import time -from window_capture import WindowCapture -from vision import Vision -import cv2 as cv -import pytesseract -from hsvfilter import HsvFilter -from config_file import UserConfigs -# import pyautogui -import pydirectinput -import keyboard -from combine_overlay import CombineOverlay - - -def run(): - # initialize the user-class - config = UserConfigs() - overlay = CombineOverlay() - - while True: - if overlay.run_mode == 'stopped': - overlay.update_status_label("stopped", "0") - 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", "0") - overlay.run_mode = 'init' - continue - else: - break - - SPAWN_COUNT = int(overlay.spawn_use.get()) - - capture_window = WindowCapture(None, "magic", config) - - # initialize the StunVision class - vision_stun = Vision() - # initialize the StunOverlay class - hsv_filter_orange = HsvFilter(10, 156, 0, 17, 255, 255, 0, 0, 0, 0) - hsv_filter_p = HsvFilter(130, 156, 0, 179, 255, 255, 0, 0, 0, 0) - hsv_filter_b = HsvFilter(88, 156, 0, 128, 255, 255, 0, 0, 0, 0) - hsv_filter_g = HsvFilter(34, 156, 0, 74, 255, 255, 0, 0, 0, 0) - hsv_filter_y = HsvFilter(24, 156, 0, 33, 255, 255, 0, 0, 0, 0) - hsv_filter_0 = HsvFilter(0, 0, 0, 179, 255, 255, 255, 0, 0, 0) - hsv_filter_w = HsvFilter(69, 25, 0, 94, 255, 255, 0, 0, 0, 0) - - loop_time = time() - pause = True - - magic_list = {"1": "body", "2": "finding", "3": "mind", "4": "perceiving", "5": "physical", "6": "seeing", - "7": "spiritual"} - tier_list = {"1": "0", "2": "orange", "3": "y", "4": "g", "5": "b", "6": "p"} # , "w"} - hsv_filter_list = {"1": hsv_filter_0, "2": hsv_filter_orange, "3": hsv_filter_y, "4": hsv_filter_g, - "5": hsv_filter_b, "6": hsv_filter_p} - - needle_list = [] - hsv_list = [] - for key1 in tier_list: - for key2 in magic_list: - - needle_list.append(cv.imread("magic/" + magic_list[key2] + "_" + tier_list[key1] + ".jpg", - cv.IMREAD_UNCHANGED)) - hsv_list.append(hsv_filter_list[key1]) - - while True: - if overlay.run_mode == 'paused': - continue - elif overlay.run_mode == 'stopped': - break - - try: - # get an updated image of the game - screenshot = capture_window.get_screenshot() - # screenshot = cv.imread("buffbar.jpg") - except: - capture_window.release() - print("Game window not available - shutting down application") - break - #cv.imshow("screenshot", screenshot) - #cv.waitKey(150) - #continue - - spawn_1 = vision_stun.find(screenshot, cv.imread("magic/spawn_1.jpg", cv.IMREAD_UNCHANGED), 0.4, 1) - if len(spawn_1) == 1: - spawn_button_active = True - points = vision_stun.get_click_points(spawn_1) - for i in range(0, SPAWN_COUNT, 1): - pydirectinput.moveTo(points[0][0], points[0][1]) - pydirectinput.mouseDown() - w = random.randint(1, 50) - cv.waitKey(30 + w) - pydirectinput.mouseUp() - if overlay.run_mode == 'stopped': - break - else: - spawn_0 = vision_stun.find(screenshot, cv.imread("magic/spawn_0.jpg", cv.IMREAD_UNCHANGED), 0.7, 1) - points = vision_stun.get_click_points(spawn_0) - for point in points: - pydirectinput.moveTo(point[0], point[1]) - pydirectinput.mouseDown() - cv.waitKey(500) - pydirectinput.mouseUp() - if overlay.run_mode == 'stopped': - break - continue - if overlay.run_mode == 'stopped': - break - # for needles in needle_list: - for rer in range(0, len(needle_list), 1): - while True: - screenshot = capture_window.get_screenshot() - processed_screenshot = vision_stun.apply_hsv_filter(screenshot, hsv_list[rer]) - processed_needle = vision_stun.apply_hsv_filter(needle_list[rer], hsv_list[rer]) - - rectangles = vision_stun.find(processed_screenshot, processed_needle, 0.7, 2) - # draw the detection results onto the original image - - # only trigger ocr reading if a stun is detected - points = vision_stun.get_click_points(rectangles) - if len(points) == 2: - pydirectinput.moveTo(points[0][0], points[0][1]) - pydirectinput.mouseDown() - w = random.randint(1, 100) - cv.waitKey(250 + w) - pydirectinput.moveTo(points[1][0], points[1][1]) - pydirectinput.mouseUp() - if overlay.run_mode == 'stopped': - break - else: - break - if overlay.run_mode == 'stopped': - break - if overlay.run_mode == 'stopped': - break - - needles_white = [] - needles_white.append(cv.imread("magic/body_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/finding_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/mind_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/perceiving_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/physical_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/seeing_w.jpg", cv.IMREAD_UNCHANGED)) - needles_white.append(cv.imread("magic/spiritual_w.jpg", cv.IMREAD_UNCHANGED)) - - for needle_w in needles_white: - # do object detection - screenshot = capture_window.get_screenshot() - processed_screenshot = vision_stun.apply_hsv_filter(screenshot,hsv_filter_w) - processed_needle = vision_stun.apply_hsv_filter(needle_w, hsv_filter_w) - rectangles = vision_stun.find(processed_screenshot, processed_needle, 0.7, 1) - # draw the detection results onto the original image - # output_image = vision_stun.draw_rectangles(screenshot, rectangles) - # cv.imshow("output_image", output_image) - # cv.waitKey(150) - - points = vision_stun.get_click_points(rectangles) - if len(points) >= 1: - pydirectinput.moveTo(points[0][0], points[0][1]) - pydirectinput.mouseDown() - w = random.randint(1, 100) - cv.waitKey(100 + w) - pydirectinput.mouseUp() - screenshot = capture_window.get_screenshot() - rectangles = vision_stun.find(screenshot, cv.imread("magic/collect.jpg", cv.IMREAD_UNCHANGED), 0.8, 1) - points = vision_stun.get_click_points(rectangles) - if len(points) >= 1: - pydirectinput.moveTo(points[0][0], points[0][1]) - pydirectinput.mouseDown() - w = random.randint(1, 100) - cv.waitKey(100 + w) - pydirectinput.mouseUp() - - if overlay.run_mode == 'stopped': - break - if overlay.run_mode == 'stopped': - break - -if __name__ == "__main__": - run() diff --git a/combine_overlay.py b/combine_overlay.py deleted file mode 100644 index 477e004..0000000 --- a/combine_overlay.py +++ /dev/null @@ -1,77 +0,0 @@ -# Run tkinter code in another thread -import threading -import tkinter as tk -from tkinter import ttk - - -class CombineOverlay(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - - self.run_mode = 'init' - - self.root = tk.Tk - - self.spawn_use = tk.StringVar - self.SpawnLabel = tk.Label - self.SpawnEntry = tk.Entry - - self.ButtonFrame = tk.Frame - - self.StartButton = tk.Button - self.StopButton = tk.Button - self.TkPosition = '133x75+60+600' - - self.StatusLabel = tk.Label - - self.start() - - def run(self): - self.root = tk.Tk() - self.spawn_use = tk.StringVar(self.root, value='100') - self.SpawnLabel = tk.Label(self.root, text="Spawn:", font=("Helvetica", 10, "bold"), - background="grey") - self.SpawnLabel.grid(row=0, column=0) - self.SpawnEntry = tk.Entry(self.root, textvariable=self.spawn_use, font=("Helvetica", 10, "bold"), width='12') - - self.SpawnEntry.grid(row=0, column=1, columnspan=2) - self.ButtonFrame = tk.Frame(self.root) - self.StartButton = tk.Button(self.ButtonFrame, text="Start", command=self.start_button_callback, width='8') - self.StartButton.grid(row=1, column=0) - self.StopButton = tk.Button(self.ButtonFrame, text="Stop", command=self.stop_button_callback, width='8', - state=tk.DISABLED) - self.StopButton.grid(row=1, column=1) - - self.ButtonFrame.grid(row=3, column=0, columnspan=2) - - self.StatusLabel = tk.Label(self.root, text="", font=("Helvetica", 10, "bold"), - background="grey") - self.StatusLabel.grid(row=4, 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 start_button_callback(self): - self.StartButton.configure(state=tk.DISABLED) - self.StopButton.configure(state=tk.NORMAL) - self.StatusLabel.configure(text='') - self.run_mode = 'started' - - def stop_button_callback(self): - self.StartButton.configure(state=tk.NORMAL) - self.StopButton.configure(state=tk.DISABLED) - self.run_mode = 'stopped' - - def get_run_mode(self): - return self.run_mode - - def update_status_label(self, mode, energy_to_go): - text = mode + ": " + str(energy_to_go) - self.StatusLabel.configure(text=text) diff --git a/craft_table/craft_overlay.py b/craft_table/craft_overlay.py deleted file mode 100644 index b4a1a3c..0000000 --- a/craft_table/craft_overlay.py +++ /dev/null @@ -1,93 +0,0 @@ -# Run tkinter code in another thread -import threading -import tkinter as tk -from tkinter import ttk - - -class CraftOverlay(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - - self.run_mode = 'init' - - self.root = tk.Tk - - self.crafts_use = tk.StringVar - self.mode_use = tk.StringVar - - self.CraftsLabel = tk.Label - self.CraftsEntry = tk.Entry - self.ModeLabel = tk.Label - self.Mode_Box = ttk.Combobox - self.ButtonFrame = tk.Frame - - self.StartButton = tk.Button - self.StopButton = tk.Button - self.TkPosition = '133x92+60+600' - - self.StatusLabel = tk.Label - - self.start() - - def run(self): - self.root = tk.Tk() - - self.crafts_use = tk.StringVar(self.root, value='100') - self.mode_use = tk.StringVar(self.root, value='m25x1') - - self.CraftsLabel = tk.Label(self.root, text="Crafts:", font=("Helvetica", 10, "bold"), - background="grey") - self.CraftsLabel.grid(row=0, column=0, sticky='w') - self.CraftsEntry = tk.Entry(self.root, textvariable=self.crafts_use, font=("Helvetica", 10, "bold"), width='12') - - self.CraftsEntry.grid(row=0, column=1, columnspan=2) - - self.ModeLabel = tk.Label(self.root, text="Mode:", font=("Helvetica", 10, "bold"), - background="grey") - self.ModeLabel.grid(row=2, column=0, sticky='w') - self.Mode_Box = ttk.Combobox(self.root, textvariable=self.mode_use, font=("Helvetica", 8, "bold"), - width='11') - self.Mode_Box['values'] = ('m25x1', 'm10x2', 'm5x3', 'simple', 'm1x5_T', 'm1x5_X', 'house') - - self.Mode_Box.grid(row=2, column=1, columnspan=2, sticky='w') - - self.ButtonFrame = tk.Frame(self.root) - self.StartButton = tk.Button(self.ButtonFrame, text="Start", command=self.start_button_callback, width='8') - self.StartButton.grid(row=0, column=0) - self.StopButton = tk.Button(self.ButtonFrame, text="Stop", command=self.stop_button_callback, width='8', - state=tk.DISABLED) - self.StopButton.grid(row=0, column=1) - - self.ButtonFrame.grid(row=3, column=0, columnspan=2) - - self.StatusLabel = tk.Label(self.root, text="", font=("Helvetica", 10, "bold"), - background="grey") - self.StatusLabel.grid(row=4, 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 start_button_callback(self): - self.StartButton.configure(state=tk.DISABLED) - self.StopButton.configure(state=tk.NORMAL) - self.StatusLabel.configure(text='') - self.run_mode = 'started' - - def stop_button_callback(self): - self.StartButton.configure(state=tk.NORMAL) - self.StopButton.configure(state=tk.DISABLED) - self.run_mode = 'stopped' - - def get_run_mode(self): - return self.run_mode - - def update_status_label(self, mode, energy_to_go): - text = mode + ": " + str(energy_to_go) - self.StatusLabel.configure(text=text) diff --git a/craft_table/main_craft.py b/craft_table/main_craft.py deleted file mode 100644 index f282213..0000000 --- a/craft_table/main_craft.py +++ /dev/null @@ -1,337 +0,0 @@ -from time import time -import sys -import cv2 as cv -import keyboard -from utils import get_click_point, dig_point, check_for_craft_ok_button, check_for_craft_button -import pydirectinput -from craft_overlay import CraftOverlay -from config_file import UserConfigs -from window_capture import WindowCapture -from vision import Vision - -MODE25X1 = "m25x1" -MODE10X2 = "m10x2" -MODE5X3 = "m5x3" -MODE_SIMPLE_STACK = "simple" -MODE1X5_T = "m1x5_T" -MODE1X5_X = "m1x5_X" -MODE_HOUSE = "house" - -def run(): - overlay = CraftOverlay() - - while True: - if overlay.run_mode == 'stopped': - overlay.update_status_label("stopped", "0") - overlay.run_mode = 'init' - continue - elif overlay.run_mode == 'started': - cv.waitKey(1000) - elif overlay.run_mode == 'init': - cv.waitKey(1) - continue - elif overlay.run_mode == 'finished': - overlay.update_status_label("finished", "0") - overlay.run_mode = 'init' - continue - else: - #boelk - pass - - mode = str(overlay.mode_use.get()) - run_target = int(overlay.crafts_use.get()) - - run_counter = 0 - - while True: - if overlay.run_mode == 'stopped': - break - - if run_counter >= run_target: - run_counter = 0 - overlay.run_mode = 'finished' - break - - ab1 = [420, 1180, 142, 142] - ab2 = [562, 1180, 142, 142] - ab3 = [704, 1180, 142, 142] - ab4 = [846, 1180, 142, 142] - ab5 = [986, 1180, 142, 142] - ab6 = [1128, 1180, 142, 142] - ab10 = [1698, 1180, 142, 142] - - if mode == MODE25X1: - click_square_center(ab1) - - # grid 770 1630 160 1020 172 o - dim = 172 - for i in range(0, 5, 1): - for e in range(0, 5, 1): - click_square_center([770 + (i * dim), 160 + (e * dim), dim, dim]) - if overlay.run_mode == 'stopped': - break - - click_craft_button() - - for i in range(0, 5, 1): - for e in range(0, 5, 1): - collect_grid_reverse_click([770 + (i * dim), 160 + (e * dim), dim, dim]) - run_counter = run_counter + 1 - overlay.update_status_label(mode, run_target - run_counter) - if overlay.run_mode == 'stopped': - break - click_square_center(ab10) - elif mode == MODE10X2: - for r in range(0, 2, 1): - # grid 770 1630 160 1020 172 - dim = 172 - if r == 0: - click_square_center(ab1) - start = 0 - target = 3 - else: - click_square_center(ab2) - start = 1 - target = 4 - - for i in range(start, target, 2): - for e in range(0, 5, 1): - click_square_center([770 + (i * dim), 160 + (e * dim), dim, dim]) - if overlay.run_mode == 'stopped': - break - - click_craft_button() - - for i in range(0, 4, 2): - for e in range(0, 5, 1): - collect_grid_reverse_click([770 + (i * dim), 160 + (e * dim), dim, dim]) - run_counter = run_counter + 1 - overlay.update_status_label(mode, run_target - run_counter) - if overlay.run_mode == 'stopped': - break - click_square_center(ab10) - elif mode == MODE5X3: - if overlay.run_mode == 'stopped': - break - for r in range(0, 3, 1): - # grid 770 1630 160 1020 172oo - dim = 172 - if r == 0: - click_square_center(ab1) - start = 0 - target = 1 - elif r == 1: - click_square_center(ab2) - start = 1 - target = 2 - else: - click_square_center(ab3) - start = 2 - target = 3 - - for i in range(start, target, 1): - for e in range(0, 5, 1): - click_square_center([770 + (i * dim), 160 + (e * dim), dim, dim]) - if overlay.run_mode == 'stopped': - break - - click_craft_button() - - for i in range(0, 1, 1): - if overlay.run_mode == 'stopped': - break - for e in range(0, 5, 1): - collect_grid_reverse_click([770 + (i * dim), 160 + (e * dim), dim, dim]) - run_counter = run_counter + 1 - overlay.update_status_label(mode, run_target - run_counter) - if overlay.run_mode == 'stopped': - break - click_square_center(ab10) - elif mode == MODE1X5_T: - dim = 172 - - tps = [] - tps.append(ab1) - tps.append([770 + (0 * dim), 160 + (2 * dim), dim, dim]) - tps.append([770 + (1 * dim), 160 + (2 * dim), dim, dim]) - tps.append(ab2) - tps.append([770 + (2 * dim), 160 + (1 * dim), dim, dim]) - tps.append([770 + (2 * dim), 160 + (2 * dim), dim, dim]) - tps.append([770 + (2 * dim), 160 + (3 * dim), dim, dim]) - - result_tp = [770 + (0 * dim), 160 + (3 * dim), dim, dim] - - for tp in tps: - click_square_center(tp) - if overlay.run_mode == 'stopped': - break - - click_craft_button() - if overlay.run_mode == 'stopped': - break - click_square_center(result_tp) - if overlay.run_mode == 'stopped': - break - click_square_center(ab10) - - run_counter = run_counter + 1 - overlay.update_status_label(mode, run_target - run_counter) - - if overlay.run_mode == 'stopped': - break - elif mode == MODE1X5_X: - dim = 172 - - tps = [] - tps.append(ab1) - tps.append([770 + (0 * dim), 160 + (3 * dim), dim, dim]) - tps.append([770 + (1 * dim), 160 + (3 * dim), dim, dim]) - tps.append([770 + (2 * dim), 160 + (3 * dim), dim, dim]) - tps.append([770 + (1 * dim), 160 + (4 * dim), dim, dim]) - tps.append([770 + (1 * dim), 160 + (2 * dim), dim, dim]) - - result_tp = [770 + (0 * dim), 160 + (4 * dim), dim, dim] - - for tp in tps: - click_square_center(tp) - if overlay.run_mode == 'stopped': - break - - click_craft_button() - if overlay.run_mode == 'stopped': - break - click_square_center(result_tp) - if overlay.run_mode == 'stopped': - break - click_square_center(ab10) - - run_counter = run_counter + 1 - overlay.update_status_label(mode, run_target - run_counter) - - if overlay.run_mode == 'stopped': - break - elif mode == MODE_HOUSE: - dim = 172 - - cements = [] - cements.append([770 + (0 * dim), 160 + (4 * dim), dim, dim]) - cements.append([770 + (1 * dim), 160 + (4 * dim), dim, dim]) - cements.append([770 + (2 * dim), 160 + (4 * dim), dim, dim]) - cements.append([770 + (3 * dim), 160 + (4 * dim), dim, dim]) - cements.append([770 + (4 * dim), 160 + (4 * dim), dim, dim]) - - bricks = [] - bricks.append([770 + (0 * dim), 160 + (3 * dim), dim, dim]) - bricks.append([770 + (1 * dim), 160 + (3 * dim), dim, dim]) - bricks.append([770 + (3 * dim), 160 + (3 * dim), dim, dim]) - bricks.append([770 + (4 * dim), 160 + (3 * dim), dim, dim]) - bricks.append([770 + (0 * dim), 160 + (2 * dim), dim, dim]) - bricks.append([770 + (2 * dim), 160 + (2 * dim), dim, dim]) - bricks.append([770 + (4 * dim), 160 + (2 * dim), dim, dim]) - - boards = [] - boards.append([770 + (2 * dim), 160 + (3 * dim), dim, dim]) - boards.append([770 + (0 * dim), 160 + (1 * dim), dim, dim]) - boards.append([770 + (1 * dim), 160 + (1 * dim), dim, dim]) - boards.append([770 + (2 * dim), 160 + (1 * dim), dim, dim]) - boards.append([770 + (3 * dim), 160 + (1 * dim), dim, dim]) - boards.append([770 + (4 * dim), 160 + (1 * dim), dim, dim]) - boards.append([770 + (2 * dim), 160 + (0 * dim), dim, dim]) - - glasses = [] - glasses.append([770 + (1 * dim), 160 + (2 * dim), dim, dim]) - glasses.append([770 + (3 * dim), 160 + (2 * dim), dim, dim]) - - tp_hammer = [770 + (1 * dim), 160 + (0 * dim), dim, dim] - tp_nails = [770 + (3 * dim), 160 + (0 * dim), dim, dim] - tp_result = [770 + (0 * dim), 160 + (4 * dim), dim, dim] - - click_square_center(ab1) - - for cement in cements: - click_square_center(cement) - if overlay.run_mode == 'stopped': - break - - click_square_center(ab2) - - for brick in bricks: - click_square_center(brick) - if overlay.run_mode == 'stopped': - break - - click_square_center(ab3) - - for board in boards: - click_square_center(board) - if overlay.run_mode == 'stopped': - break - - click_square_center(ab4) - - for glass in glasses: - click_square_center(glass) - if overlay.run_mode == 'stopped': - break - - click_square_center(ab5) - click_square_center(tp_hammer) - if overlay.run_mode == 'stopped': - break - - click_square_center(ab6) - click_square_center(tp_nails) - if overlay.run_mode == 'stopped': - break - - click_craft_button() - if overlay.run_mode == 'stopped': - break - - click_square_center(tp_result) - click_square_center(ab10) - if overlay.run_mode == 'stopped': - break - - run_counter = run_counter + 1 - overlay.update_status_label(mode, run_target - run_counter) - - if overlay.run_mode == 'stopped': - break - elif mode == MODE_SIMPLE_STACK: - # initialize the StunWindowCapture class - capture_config = UserConfigs() - #capture_window = WindowCapture(None, "screen_conf", capture_config) - - capture_window2 = WindowCapture(None, "bla", capture_config) - - # initialize the StunVision class - vision_stun = Vision() - # odig_overlay = DiggingOverlay(config) - check_for_craft_button(capture_window2, vision_stun, capture_config) - check_for_craft_ok_button(capture_window2, vision_stun) - run_counter = run_counter + 1 - overlay.update_status_label(mode, run_target - run_counter) - #check_for_ok_button(capture_window, vision_stun, capture_config) - -def collect_grid_reverse_click(square): - pydirectinput.moveTo(get_click_point(square)[0], get_click_point(square)[1]) - cv.waitKey(50) - pydirectinput.mouseUp() - cv.waitKey(50) - pydirectinput.mouseDown() - cv.waitKey(100) - -def click_craft_button(): - dig_point(1910, 330, 100) - cv.waitKey(1500) - - -def click_square_center(square): - cp = get_click_point(square) - dig_point(cp[0], cp[1], 100) - cv.waitKey(100) - -if __name__ == "__main__": - run() - sys.exit() diff --git a/crop/Field_Representation_crop.py b/crop/Field_Representation_crop.py deleted file mode 100644 index 2d8a3e4..0000000 --- a/crop/Field_Representation_crop.py +++ /dev/null @@ -1,554 +0,0 @@ -import random -import cv2 as cv -import numpy as np -import pydirectinput -from window_capture import WindowCapture -from vision import Vision -from config_file import UserConfigs -from utils import mse -from utils import get_click_point -from hsvfilter import HsvFilter - -GREEN = 1 -YELLOW = 2 -RED = 3 -BLUE = 4 -PURPLE = 5 -RAINBOW = 6 -BIGBOMB = 7 -BOMB = 8 -ARROW_DOWN = 9 -ARROW_RIGHT = 10 -ROCK_1 = 11 -ROCK_2 = 12 -ROCK_3 = 13 -BURGER = 14 -PAB1 = 15 -GOLDBAR = 16 -MAGINENT = 21 -CHEMTRANT = 22 -TENESENT = 23 -CIBUTRANT = 24 -ARTISENT = 25 - -STATUS_FOUND_CONTINUATION = "1" -STATUS_FOUND_DEADEND = "2" -STATUS_FOUND_ENDING = "3" - -RAINBOW_STRATEGY = 11 -BIGBOMB_STRATEGY = 9 -ROCKET_STRATEGY = 7 -BOMB_STRATEGY = 5 - -class Field: - data_value_grid = [] - data_coordinates = [] - screenshot = [] - next_level = cv.imread("next_level.jpg", cv.IMREAD_COLOR) - next_level_x = cv.imread("next_level_x.jpg", cv.IMREAD_COLOR) - reset_board = cv.imread("reset_button.jpg", cv.IMREAD_COLOR) - reset_confirm = cv.imread("reset_confirm.jpg", cv.IMREAD_COLOR) - reset_counter = 0 - colors_at_standard = True - needles = {} - hsh_needles = {} - explosives = [RAINBOW, ARROW_RIGHT, ARROW_DOWN, BIGBOMB, BOMB] - colors = [GREEN, YELLOW, RED, BLUE, PURPLE, MAGINENT, CHEMTRANT, TENESENT, CIBUTRANT, ARTISENT] - - def __init__(self): - self.data_value_grid = np.zeros((8, 14), dtype=int) - self.data_coordinates = np.zeros((8, 14), dtype=object) - self.data_score_map = np.zeros((8, 14), dtype=int) - self.observation = np.zeros((8, 14), dtype=int) - - self.current_strategy = RAINBOW_STRATEGY - - # 230 to 2110 = 1883 / 14 = 134.5 - # 60 to 1130 = 1076 / 8 = 134.5 - dim = 134.5 - for e in range(0, 8, 1): - for i in range(0, 14, 1): - self.data_coordinates[e][i] = [i * dim, e * dim, dim, dim] - - # initialize the user-class - self.config = UserConfigs() - - # initialize the StunWindowCapture class - self.capture_window = WindowCapture(None, None, self.config) - # initialize the StunVision class - self.vision_stun = Vision() - - self.set_color_order((GREEN, YELLOW, RED, BLUE, PURPLE)) - - def reset(self): - self.observation = [] - - def set_color_order(self, order): - self.needles.clear() - self.needles = {order[0]: cv.imread("green.jpg", cv.IMREAD_COLOR), - order[1]: cv.imread("yellow.jpg", cv.IMREAD_COLOR), - order[2]: cv.imread("red.jpg", cv.IMREAD_COLOR), - order[3]: cv.imread("blue.jpg", cv.IMREAD_COLOR), - order[4]: cv.imread("purple.jpg", cv.IMREAD_COLOR), - - RAINBOW: cv.imread("rainbow.jpg", cv.IMREAD_COLOR), - BIGBOMB: cv.imread("bigbomb.jpg", cv.IMREAD_COLOR), - BOMB: cv.imread("bomb.jpg", cv.IMREAD_COLOR), - ARROW_DOWN: cv.imread("arrow_down.jpg", cv.IMREAD_COLOR), - ARROW_RIGHT: cv.imread("arrow_right.jpg", cv.IMREAD_COLOR), - - MAGINENT: cv.imread("maginent.jpg", cv.IMREAD_COLOR), - CHEMTRANT: cv.imread("chemtrant.jpg", cv.IMREAD_COLOR), - TENESENT: cv.imread("tenesent.jpg", cv.IMREAD_COLOR), - CIBUTRANT: cv.imread("cibutrant.jpg", cv.IMREAD_COLOR), - ARTISENT: cv.imread("artisent.jpg", cv.IMREAD_COLOR) - } - self.hsh_needles.clear() - self.hsh_needles = {order[0]: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - order[1]: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - order[2]: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - order[3]: HsvFilter(60, 40, 0, 115, 255, 255, 0, 0, 0, 0), - order[4]: HsvFilter(120, 45, 0, 170, 255, 255, 0, 0, 0, 0), - - RAINBOW: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - BIGBOMB: HsvFilter(60, 40, 0, 179, 129, 129, 0, 0, 0, 0), - BOMB: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - ARROW_DOWN: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - ARROW_RIGHT: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - - MAGINENT: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - CHEMTRANT: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - TENESENT: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - CIBUTRANT: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0), - ARTISENT: HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0) - } - - def assess_playfield_and_make_move(self): - - new_observation, new_screenshot = self.get_current_board_state() - - # wrong movement detection - # last board state is same as actual - if mse(new_observation, self.observation) == 0.0: - # no movement detected -> blow explosives or reset - - self.reset_counter += 1 - if self.reset_counter == 1: - pass - elif self.reset_counter == 2: - if self.detonate_explosive_when_stuck(new_observation): - self.reset_counter = 0 - return - elif self.reset_counter >= 3: - screenshot = self.capture_window.get_screenshot() - if self.check_for_button_and_execute(screenshot, self.reset_board): - cv.waitKey(500) - screenshot = self.capture_window.get_screenshot() - if self.check_for_button_and_execute(screenshot, self.reset_confirm): - cv.waitKey(500) - - 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.reset_counter = 0 - return - else: - return - - self.find_patterns_and_valid_moves(new_observation) - self.observation = new_observation - return new_observation - - def move_to(self, x, y): - point_src = (1113, 598) - pydirectinput.moveTo(point_src[0], point_src[1]) - pydirectinput.mouseDown() - w = random.randint(1, 100) - cv.waitKey(150 + w) - pydirectinput.moveTo(x, y) - pydirectinput.mouseUp() - cv.waitKey(500 + w) - - def change_value(self, x, y, val): - self.data_value_grid[x][y] = val - - def point_in_rect(self, point): - for e in range(0, 8, 1): - for i in range(0, 14, 1): - x1, y1, w, h = self.data_coordinates[e][i] - x2, y2 = x1 + w, y1 + h - x, y = point - if x1 < x and x < x2: - if y1 < y and y < y2: - return e, i - return None, None - - def check_for_button_and_execute(self, screen, needle, offset_left=0, offset_down=0): - rectangles = self.vision_stun.find(screen, needle, 0.70, 1) - if len(rectangles) == 0: - return False - point = self.vision_stun.get_click_points(rectangles)[0] - self.dig_point(point[0] + offset_left, point[1] + offset_down, 500) - return True - - def get_current_board_state(self): - try: - # get an updated image of the game - screenshot = self.capture_window.get_screenshot() - # screenshot = cv.imread("playfield.jpg") - screenshot = screenshot[58:1134, 230:2113] # 1883,1076 - self.screenshot = screenshot - # gray = cv.cvtColor(screenshot, cv.COLOR_BGR2GRAY) - # thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1] - offset_left = 230 - offset_down = 58 - if self.check_for_button_and_execute(screenshot, self.next_level, offset_left, offset_down): - self.set_color_order((GREEN, YELLOW, RED, BLUE, PURPLE)) - self.current_strategy = RAINBOW_STRATEGY - cv.waitKey(500) - screenshot = self.capture_window.get_screenshot() - screenshot = screenshot[58:1134, 230:2113] - if self.check_for_button_and_execute(screenshot, self.next_level_x, offset_left, offset_down): - cv.waitKey(500) - screenshot = self.capture_window.get_screenshot() - screenshot = screenshot[58:1134, 230:2113] - - except: - # self.capture_window.release() - # print("Game window not available - shutting down application") - # return None - pass - # cv.imshow("screenshot", screenshot) - # cv.waitKey(150) - # continue - data_coords = np.zeros((8, 14), dtype=object) - # field = Field() - - for needle_key in self.needles.keys(): - # gray_needle = cv.cvtColor(self.needles[needle_key], cv.COLOR_BGR2GRAY) - # thresh_needle = cv.threshold(gray_needle, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1] - processed_screenshot = self.vision_stun.apply_hsv_filter(screenshot, self.hsh_needles[needle_key]) - processed_needle = self.vision_stun.apply_hsv_filter(self.needles[needle_key], self.hsh_needles[needle_key]) - rectangles = self.vision_stun.find(processed_screenshot, processed_needle, 0.70, 56) - # rectangles = self.vision_stun.find(screenshot, self.needles[needle_key], 0.70, 56) - if len(rectangles) == 0: - continue - points = self.vision_stun.get_click_points(rectangles) - - for point in points: - x, y = self.point_in_rect(point) - if x is not None and y is not None: - data_coords[x][y] = int(needle_key) - # self.change_value(x, y, int(needle_key)) - # print(field.data_value_grid) - # cv.circle(screenshot, points[0], 7, (0, 255, 0), -1) - # output_image = vision_stun.draw_rectangles(screenshot, rectangles) - # cv.imshow("output_image", output_image) - # cv.waitKey(150) - - score_map = np.zeros((8, 14), dtype=object) - for x in range(0, 8, 1): - for y in range(0, 14, 1): - score_map[x, y] = self.score_for_attached_same_color_all_directions(data_coords, x, y) - cv.putText(screenshot, str(score_map[x, y]), - self.get_click_point(self.data_coordinates[x, y]), cv.FONT_HERSHEY_SIMPLEX, - 1, (0, 0, 0), 3, 2) - cv.imwrite('screenshot_scored.jpg', screenshot) - - return data_coords, screenshot - - def detonate_explosive_when_stuck(self, state): - for e in range(0, 8, 1): - for i in range(0, 14, 1): - for explosive in self.explosives: - if self.local_pos_check(state, e, i, 0, 0, explosive): - src_pt = self.get_click_point(self.data_coordinates[e, i]) - if self.local_pos_checks(state, e, i, 1, 0, self.colors): - dest_pt = self.get_click_point(self.data_coordinates[e + 1, i]) - self.move_tile(src_pt, dest_pt) - return True - elif self.local_pos_checks(state, e, i, 0, 1, self.colors): - dest_pt = self.get_click_point(self.data_coordinates[e, i + 1]) - self.move_tile(src_pt, dest_pt) - return True - elif self.local_pos_checks(state, e, i, -1, 0, self.colors): - dest_pt = self.get_click_point(self.data_coordinates[e - 1, i]) - self.move_tile(src_pt, dest_pt) - return True - elif self.local_pos_checks(state, e, i, 0, -1, self.colors): - dest_pt = self.get_click_point(self.data_coordinates[e, i - 1]) - self.move_tile(src_pt, dest_pt) - return True - else: - continue - return False - - def check_explosives(self, state, e, i): - for explosive in self.explosives: - if self.local_pos_check(state, e, i, 0, 0, explosive): - dest_pt = self.get_click_point(self.data_coordinates[e, i]) - if self.local_pos_checks(state, e, i, 1, 0, self.explosives): - src_pt = self.get_click_point(self.data_coordinates[e + 1, i]) - self.move_tile(src_pt, dest_pt) - elif self.local_pos_checks(state, e, i, 0, 1, self.explosives): - src_pt = self.get_click_point(self.data_coordinates[e, i + 1]) - self.move_tile(src_pt, dest_pt) - elif self.local_pos_checks(state, e, i, -1, 0, self.explosives): - src_pt = self.get_click_point(self.data_coordinates[e - 1, i]) - self.move_tile(src_pt, dest_pt) - elif self.local_pos_checks(state, e, i, 0, -1, self.explosives): - src_pt = self.get_click_point(self.data_coordinates[e, i - 1]) - self.move_tile(src_pt, dest_pt) - else: - continue - return True - else: - continue - return False - - def find_patterns_and_valid_moves(self, state): - - # score_map = np.zeros((8, 14), dtype=object) - for x in range(0, 8, 1): - for y in range(0, 14, 1): - self.data_score_map[x, y] = self.score_for_attached_same_color_all_directions(state, x, y) - - full_moves = [] - reserve_moves = [] - for x in range(0, 8, 1): - for y in range(0, 14, 1): - if self.check_explosives(state, x, y): - return - if self.data_score_map[x, y] >= 4: - path_option = [[x, y]] - recursion_reminder = [[x, y]] - result = self.find_next_same_color_all_directions_recursion(state, x, y, path_option, - recursion_reminder, True) - if result == STATUS_FOUND_ENDING: - path_option.append([x, y]) - if len(path_option) >= 5: - full_moves.append((state[x, y], path_option)) - if self.data_score_map[x, y] >= 1: - path_option = [[x, y]] - self.find_next_same_color_all_directions_recursion2(state, x, y, path_option) - if len(path_option) >= 3: - reserve_moves.append((state[x, y], path_option)) - # print(self.data_score_map) - - # screenshot = cv.imread("screenshot_scored.jpg") - full_dic = self.convert_moves_to_dic_by_color(full_moves) - res_dic = self.convert_moves_to_dic_by_color(reserve_moves) - - full_moves.sort(key=len, reverse=True) - reserve_moves.sort(key=len, reverse=True) - - if len(full_dic) >= 1: - for key in sorted(full_dic): - if len(full_dic[key]) >= self.current_strategy: - self.print_move(full_dic[key]) - self.execute_move(full_dic[key]) - return - if len(reserve_moves) >= 1: - for key in sorted(res_dic): - self.print_move(res_dic[key]) - self.execute_move(res_dic[key]) - break - - def convert_moves_to_dic_by_color(self, reserve_moves): - dic = {} - for color, move in reserve_moves: - if color in dic: - if len(move) > len(dic[color]): - dic[color] = move - else: - dic[color] = move - return dic - - def print_move(self, move): - mp = [] - for point in move: - cp = self.get_click_point(self.data_coordinates[point[0], point[1]]) - mp.append(cp) - cv.polylines(self.screenshot, - [np.array(mp)], - isClosed=False, - color=(0, 255, 0), - thickness=3) - - cv.imwrite('screenshot_pathed.jpg', self.screenshot) - - def execute_move(self, move): - offset_left = 230 - offset_down = 58 - - first = True - for cords in move: - square = self.data_coordinates[cords[0], cords[1]] - pydirectinput.moveTo(get_click_point(square)[0] + offset_left, get_click_point(square)[1] + offset_down) - cv.waitKey(50) - if first: - pydirectinput.mouseDown() - cv.waitKey(100) - first = False - pydirectinput.mouseUp() - cv.waitKey(50) - - def get_directions_array(self, current_x, current_y): - left_x = current_x - left_y = current_y - 1 - - right_x = current_x - right_y = current_y + 1 - - upper_x = current_x - 1 - upper_y = current_y - - lower_x = current_x + 1 - lower_y = current_y - - lower_left_x = current_x + 1 - lower_left_y = current_y - 1 - - lower_right_x = current_x + 1 - lower_right_y = current_y + 1 - - upper_left_x = current_x - 1 - upper_left_y = current_y - 1 - - upper_right_x = current_x - 1 - upper_right_y = current_y + 1 - - directions = [[left_x, left_y], [lower_left_x, lower_left_y], [lower_x, lower_y], - [lower_right_x, lower_right_y], [right_x, right_y], [upper_right_x, upper_right_y], - [upper_x, upper_y], [upper_left_x, upper_left_y]] - - return directions - - def find_next_same_color_all_directions_recursion(self, state, current_x, current_y, path_store, recursion_reminder, - look_for_ending): - directions = self.get_directions_array(current_x, current_y) - color = state[current_x, current_y] - - for direction in directions: - if self.is_direction_in_bounce_and_same_color(state, direction, color) == 1: - if (self.data_score_map[direction[0], direction[1]] >= 2) and (direction not in recursion_reminder): - recursion_reminder.append(direction) - result = self.find_next_same_color_all_directions_recursion(state, direction[0], direction[1], - path_store, recursion_reminder, - look_for_ending) - if result == STATUS_FOUND_CONTINUATION: - path_store.append(direction) - return STATUS_FOUND_CONTINUATION - elif result == STATUS_FOUND_DEADEND: - if look_for_ending: - continue - else: - path_store.append(direction) - return STATUS_FOUND_DEADEND - elif result == STATUS_FOUND_ENDING: - path_store.append(direction) - return STATUS_FOUND_ENDING - - if look_for_ending: - for direction in directions: - if direction == path_store[0]: - # path_store.append(direction) - return STATUS_FOUND_ENDING - - return STATUS_FOUND_DEADEND - - def find_next_same_color_all_directions_recursion2(self, state, current_x, current_y, path_store): - directions = self.get_directions_array(current_x, current_y) - color = state[current_x, current_y] - - for direction in directions: - if self.is_direction_in_bounce_and_same_color(state, direction, color) == 1: - if (self.data_score_map[direction[0], direction[1]] >= 1) and (direction not in path_store): - path_store.append(direction) - result = self.find_next_same_color_all_directions_recursion2(state, direction[0], direction[1], - path_store) - - if result == STATUS_FOUND_DEADEND: - return STATUS_FOUND_DEADEND - - return STATUS_FOUND_DEADEND - - def score_for_attached_same_color_all_directions(self, state, current_x, current_y): - directions = self.get_directions_array(current_x, current_y) - - score = 0 - color = state[current_x, current_y] - if color not in self.colors: - return score - for direction in directions: - score = score + self.is_direction_in_bounce_and_same_color(state, direction, color) - - return score - - def is_direction_in_bounce_and_same_color(self, 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): - 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): - 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: - return True - else: - continue - return False - - def move_tile(self, point_source, point_dest): - offset_left = 230 - offset_down = 58 - pydirectinput.moveTo(point_source[0] + offset_left, point_source[1] + offset_down) - # pydirectinput.moveTo(0,0) - 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 check_for_button_and_click_it(self, button_url): - screenshot = self.capture_window.get_screenshot() - # gray = cv.cvtColor(screenshot, cv.COLOR_BGR2GRAY) - # thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1] - # gray_needle = cv.cvtColor(cv.imread(button_url, cv.IMREAD_UNCHANGED), cv.COLOR_BGR2GRAY) - # thresh_needle = cv.threshold(gray_needle, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1] - needle = cv.imread(button_url, cv.IMREAD_UNCHANGED) - # rectangles = self.vision_stun.find(thresh, thresh_needle, 0.4, 1) - rectangles = self.vision_stun.find(screenshot, needle, 0.7, 1) - - if len(rectangles) == 1: - pointis = self.vision_stun.get_click_points(rectangles) - for pointi in pointis: - self.dig_point(pointi[0], pointi[1], 150) - - def dig_point(self, point1, point2, dig_time): - pydirectinput.moveTo(point1, point2) - cv.waitKey(dig_time) - pydirectinput.mouseDown() - w = random.randint(50, 100) - cv.waitKey(w) - pydirectinput.mouseUp() - - def get_click_point(self, rectangle): - # Loop over all the rectangles - x, y, w, h = rectangle - # Determine the center position - center_x = x + int(w / 2) - center_y = y + int(h / 2) - # Save the points - return int(center_x), int(center_y) diff --git a/crop/crop_overlay.py b/crop/crop_overlay.py deleted file mode 100644 index fea02c8..0000000 --- a/crop/crop_overlay.py +++ /dev/null @@ -1,66 +0,0 @@ -# Run tkinter code in another thread -import threading -import tkinter as tk -from tkinter import ttk - - -class CropOverlay(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - - self.run_mode = 'init' - - self.root = tk.Tk - - self.ButtonFrame = tk.Frame - - self.StartButton = tk.Button - self.StopButton = tk.Button - self.TkPosition = '133x52+60+600' - - self.StatusLabel = tk.Label - - self.start() - - def run(self): - self.root = tk.Tk() - self.ButtonFrame = tk.Frame(self.root) - self.StartButton = tk.Button(self.ButtonFrame, text="Start", command=self.start_button_callback, width='8') - self.StartButton.grid(row=0, column=0) - self.StopButton = tk.Button(self.ButtonFrame, text="Stop", command=self.stop_button_callback, width='8', - state=tk.DISABLED) - self.StopButton.grid(row=0, column=1) - - self.ButtonFrame.grid(row=3, column=0, columnspan=2) - - self.StatusLabel = tk.Label(self.root, text="", font=("Helvetica", 10, "bold"), - background="grey") - self.StatusLabel.grid(row=4, 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 start_button_callback(self): - self.StartButton.configure(state=tk.DISABLED) - self.StopButton.configure(state=tk.NORMAL) - self.StatusLabel.configure(text='') - self.run_mode = 'started' - - def stop_button_callback(self): - self.StartButton.configure(state=tk.NORMAL) - self.StopButton.configure(state=tk.DISABLED) - self.run_mode = 'stopped' - - def get_run_mode(self): - return self.run_mode - - def update_status_label(self, mode, energy_to_go): - text = mode + ": " + str(energy_to_go) - self.StatusLabel.configure(text=text) diff --git a/crop/main_crop_ui.py b/crop/main_crop_ui.py deleted file mode 100644 index 8b362b4..0000000 --- a/crop/main_crop_ui.py +++ /dev/null @@ -1,36 +0,0 @@ -from Field_Representation_crop import Field -from time import time -import cv2 as cv -import keyboard -from crop_overlay import CropOverlay - - -def run(): - field = Field() - overlay = CropOverlay() - - while True: - if overlay.run_mode == 'stopped': - overlay.update_status_label("stopped", "0") - overlay.run_mode = 'init' - continue - elif overlay.run_mode == 'started': - cv.waitKey(1000) - elif overlay.run_mode == 'init': - cv.waitKey(1) - continue - else: - # boelk - pass - - while True: - if overlay.run_mode == 'stopped': - break - - cords = field.assess_playfield_and_make_move() - print(cords) - cv.waitKey(1000) - - -if __name__ == "__main__": - run() diff --git a/equipment_main.py b/equipment_main.py deleted file mode 100644 index 29c34d3..0000000 --- a/equipment_main.py +++ /dev/null @@ -1,769 +0,0 @@ -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 -import keyboard -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 = "all" - -HSV_DEFAULT = HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0) - - -def run(): - EMITTER_TO_USE = EMITTER_MULTI - SPAWN_COUNT = 25 - ENERGY_TO_USE = 3000 - # initialize the user-class - config = UserConfigs() - - # initialize the StunWindowCapture class - try: - capture_window = WindowCapture( - None, "equip", config) - except: - # StunWindowCapture.list_window_names() - print("Game not running, exiting") - # capture_window = cv.VideoCapture("snip_slam.mp4") - return - - # initialize the StunVision class - vision_stun = Vision() - - outer_loop_time = time() - - needles = [] - hsvs = [] - tresholds = [] - masks = [] - emitters = [] - - if EMITTER_TO_USE == EMITTER_MULTI: - emitters.append(EMITTER_RING) - emitters.append(EMITTER_WAND) - emitters.append(EMITTER_SWORD) - emitters.append(EMITTER_STAFF) - emitters.append(EMITTER_AMU) - else: - emitters.append(EMITTER_TO_USE) - - energy_counter = 0 - pause = True - for emitter in emitters: - if emitter == EMITTER_MUSH: - include_books(needles, hsvs, tresholds, masks) - include_mushs(needles, hsvs, tresholds, masks) - include_pots(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_AMU: - include_books(needles, hsvs, tresholds, masks) - include_amus(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_MAIN: - include_books(needles, hsvs, tresholds, masks) - include_chests(needles, hsvs, tresholds, masks) - include_keys(needles, hsvs, tresholds, masks) - include_pots(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - include_coins(needles, hsvs, tresholds, masks) - include_runes(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_SWORD: - include_books(needles, hsvs, tresholds, masks) - include_swords(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_STAFF: - include_books(needles, hsvs, tresholds, masks) - include_staffs(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_RING: - include_books(needles, hsvs, tresholds, masks) - include_rings(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_WAND: - include_books(needles, hsvs, tresholds, masks) - include_wands(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - - c_needle = cv.imread("equip/chests/chest_4_32.jpg", cv.IMREAD_UNCHANGED) - c_mask = cv.imread("equip/chests/chest_4_32-mask.png", cv.IMREAD_COLOR) - k_needle = cv.imread("equip/keys/key_4_32.jpg", cv.IMREAD_UNCHANGED) - k_mask = cv.imread("equip/keys/key_4_32-mask.png", cv.IMREAD_COLOR) - dig_button = cv.imread("dig/ok_button.jpg", cv.IMREAD_UNCHANGED) - loop_time_p = time() - - while True: - if keyboard.is_pressed('p') == True: - pause = True - print('q pressed') - elif keyboard.is_pressed('o') == True: - pause = False - print('o pressed') - - if pause: - # cv.waitKey(500) - if (time() - loop_time_p) >= 5: - loop_time_p = time() - print("pausing") - continue - - try: - # get an updated image of the game - screenshot = capture_window.get_screenshot() - # screenshot = cv.imread("buffbar.jpg") - except: - capture_window.release() - print("Game window not available - shutting down application") - break - # cv.imshow("screenshot", screenshot) - # cv.waitKey(150) - # continue - if energy_counter >= ENERGY_TO_USE: - energy_counter = 0 - break - - spawn_1 = find_emitter(emitter, vision_stun, screenshot, 1) - if len(spawn_1) == 1: - spawn_button_active = True - points = vision_stun.get_click_points(spawn_1) - for i in range(0, SPAWN_COUNT, 1): - click_point(config, points[0][0], points[0][1]) - energy_counter = energy_counter + 1 - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - else: - spawn_0 = find_emitter(emitter, vision_stun, screenshot, 0) - points = vision_stun.get_click_points(spawn_0) - for point in points: - click_point(config, points[0][0], points[0][1]) - - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - continue - - cv.waitKey(500) - - if emitter == EMITTER_MAIN: - while True: - screenshot = capture_window.get_screenshot() - c_rectangles = vision_stun.find(screenshot, c_needle, 0.95, 1, True, c_mask) - k_rectangles = vision_stun.find(screenshot, k_needle, 0.95, 1, True, k_mask) - if (len(c_rectangles) == 1) and (len(k_rectangles) == 1): - c_point = vision_stun.get_click_points(c_rectangles)[0] - k_point = vision_stun.get_click_points(k_rectangles)[0] - move_tile(config, k_point, c_point) - else: - break - - for rer in range(0, len(needles), 1): - loop_time = time() - while True: - if (time() - loop_time) >= 60: - break - screenshot = capture_window.get_screenshot_by_area(config.returnOKWindowPos()) - rectangles = vision_stun.find(screenshot, dig_button, 0.5, 1) - if len(rectangles) == 1: - pointis = vision_stun.get_click_points(rectangles) - for pointi in pointis: - dig_point(pointi[0] + config.returnOKWindowPos()[2], - pointi[1] + config.returnOKWindowPos()[3], 150) - cv.waitKey(60000) - continue - # do object detection - screenshot = capture_window.get_screenshot() - # processed_screenshot = vision_stun.apply_hsv_filter(screenshot, hsvs[rer]) - # processed_needle = vision_stun.apply_hsv_filter(needles[rer], hsvs[rer]) - - rectangles = vision_stun.find_by_mask_and_validate(screenshot, needles[rer], masks[rer], 5) - # draw the detection results onto the original image - # output_image = vision_stun.draw_rectangles(screenshot, rectangles) - # cv.imshow("output_image", output_image) - # cv.waitKey(150) - - if len(rectangles) is not 5: - break - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - - # sort rectangles by top - rectangles = sorted(rectangles, key=itemgetter(1)) - - points = vision_stun.get_click_points(rectangles) - - move_breaker = check_and_move_tile(capture_window, vision_stun, config, - [70, 70, rectangles[0][0] + 70, rectangles[0][1]], needles[rer], - hsvs[rer], tresholds[rer], masks[rer], - points[1], [points[0][0] + 70, points[0][1]]) - if move_breaker: - break - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - move_breaker = check_and_move_tile(capture_window, vision_stun, config, - [70, 70, rectangles[0][0], rectangles[0][1] + 70], needles[rer], - hsvs[rer], tresholds[rer], masks[rer], - points[2], [points[0][0], points[0][1] + 70]) - if move_breaker: - break - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - move_breaker = check_and_move_tile(capture_window, vision_stun, config, - [70, 70, rectangles[0][0] + 70, rectangles[0][1] + 70], - needles[rer], hsvs[rer], tresholds[rer], masks[rer], - points[3], [points[0][0] + 70, points[0][1] + 70]) - if move_breaker: - break - move_tile(config, points[4], [points[0][0], points[0][1]]) - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - # debug the loop rate - print('FPS {}'.format(1 / (time() - outer_loop_time))) - outer_loop_time = time() - cv.waitKey(150) - - -def check_and_move_tile(capture_win, visio, conf, rect, needl, hsv, tresh, mask, point_source, point_dest): - screenshot_p = capture_win.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) - _minVal2, _maxVal2, minLoc2, maxLoc2 = cv.minMaxLoc(result2, None) - # rectangles2 = visio.find(screenshot_pos, needl, tresh, 1, True, mask) - # output_by_area = 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 _maxVal2 <= 0.9: - move_tile(conf, point_source, point_dest) - - return False - - -def click_point(conf, x, y): - offset_left = conf.returnEquipmentWindowPos()[2] - offset_down = conf.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(conf, point_source, point_dest): - offset_left = conf.returnEquipmentWindowPos()[2] - offset_down = conf.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(emitter_to_use, vis, screen, layer): - if 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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.find(screen, needle, 0.96, 1, True, mask) - - -def include_chests(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/chests/chest_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.95) - mask.append(cv.imread("equip/chests/chest_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/chests/chest_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.95) - mask.append(cv.imread("equip/chests/chest_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/chests/chest_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/chests/chest_3_32-mask.png", cv.IMREAD_COLOR)) - - -def include_books(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/books/book_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/books/book_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.9) - mask.append(cv.imread("equip/books/book_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.87) - mask.append(cv.imread("equip/books/book_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/books/book_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/books/book_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.9) - mask.append(cv.imread("equip/books/book_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/books/book_7_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_8_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/books/book_8_32-mask.png", cv.IMREAD_COLOR)) - - -def include_keys(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/keys/key_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/keys/key_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/keys/key_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/keys/key_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/keys/key_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/keys/key_3_32-mask.png", cv.IMREAD_COLOR)) - - -def include_pots(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/pots/pot_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.94) - mask.append(cv.imread("equip/pots/pot_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_6_32-mask.png", cv.IMREAD_COLOR)) - - -def include_bags(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/bags/bag_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.88) - mask.append(cv.imread("equip/bags/bag_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_coins(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/coins/coin_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/coins/coin_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/coins/coin_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/coins/coin_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/coins/coin_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_5_32-mask.png", cv.IMREAD_COLOR)) - - -def include_runes(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/runes/rune_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/runes/rune_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/runes/rune_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/runes/rune_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/runes/rune_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/runes/rune_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/runes/rune_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/runes/rune_4_32-mask.png", cv.IMREAD_COLOR)) - -def include_mushs(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/mushrooms/mush_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_amus(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/amus/amu_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.9) - mask.append(cv.imread("equip/amus/amu_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.9) - mask.append(cv.imread("equip/amus/amu_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_swords(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/swords/sword_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_7_32-mask.png", cv.IMREAD_COLOR)) - -def include_staffs(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/staffs/staff_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_rings(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/rings/ring_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.925) - mask.append(cv.imread("equip/rings/ring_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.94) - mask.append(cv.imread("equip/rings/ring_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/rings/ring_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/rings/ring_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/rings/ring_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/rings/ring_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/rings/ring_7_32-mask.png", cv.IMREAD_COLOR)) - -def include_wands(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/wands/wand_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_7_32-mask.png", cv.IMREAD_COLOR)) - -if __name__ == "__main__": - run() diff --git a/equipment_main_ui.py b/equipment_main_ui.py deleted file mode 100644 index 0a23876..0000000 --- a/equipment_main_ui.py +++ /dev/null @@ -1,795 +0,0 @@ -import random -from operator import itemgetter -from time import time - -import equipment_overlay -from window_capture import WindowCapture -from vision import Vision -import cv2 as cv -from hsvfilter import HsvFilter -from config_file import UserConfigs -import pydirectinput -import keyboard -from utils import dig_point -from equipment_overlay import EquipmentOverlay - -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) - - -def run(): - config = UserConfigs() - overlay = EquipmentOverlay(config) - - while True: - if overlay.run_mode == 'stopped': - overlay.update_status_label("stopped", "0") - 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", "0") - overlay.run_mode = 'init' - continue - else: - break - - EMITTER_TO_USE = str(overlay.emitter_use.get()) - SPAWN_COUNT = int(overlay.spawn_use.get()) - ENERGY_TO_USE = int(overlay.energy_use.get()) - - # initialize the StunWindowCapture class - try: - capture_window = WindowCapture( - None, "equip", config) - except: - # StunWindowCapture.list_window_names() - print("Game not running, exiting") - # capture_window = cv.VideoCapture("snip_slam.mp4") - return - - # initialize the StunVision class - vision_stun = Vision() - - outer_loop_time = time() - - needles = [] - hsvs = [] - tresholds = [] - masks = [] - emitters = [] - - if EMITTER_TO_USE == EMITTER_MULTI: - emitters.append(EMITTER_RING) - emitters.append(EMITTER_WAND) - emitters.append(EMITTER_SWORD) - emitters.append(EMITTER_AMU) - emitters.append(EMITTER_STAFF) - else: - emitters.append(EMITTER_TO_USE) - - energy_counter = 0 - - for emitter in emitters: - if overlay.run_mode == 'stopped': - break - if emitter == EMITTER_MUSH: - include_books(needles, hsvs, tresholds, masks) - include_mushs(needles, hsvs, tresholds, masks) - include_pots(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_AMU: - include_books(needles, hsvs, tresholds, masks) - include_amus(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_MAIN: - include_books(needles, hsvs, tresholds, masks) - include_chests(needles, hsvs, tresholds, masks) - include_keys(needles, hsvs, tresholds, masks) - include_pots(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - include_coins(needles, hsvs, tresholds, masks) - include_runes(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_SWORD: - include_books(needles, hsvs, tresholds, masks) - include_swords(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_STAFF: - include_books(needles, hsvs, tresholds, masks) - include_staffs(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_RING: - include_books(needles, hsvs, tresholds, masks) - include_rings(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif emitter == EMITTER_WAND: - include_books(needles, hsvs, tresholds, masks) - include_wands(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - - c_needle = cv.imread("equip/chests/chest_4_32.jpg", cv.IMREAD_UNCHANGED) - c_mask = cv.imread("equip/chests/chest_4_32-mask.png", cv.IMREAD_COLOR) - k_needle = cv.imread("equip/keys/key_4_32.jpg", cv.IMREAD_UNCHANGED) - k_mask = cv.imread("equip/keys/key_4_32-mask.png", cv.IMREAD_COLOR) - dig_button = cv.imread("dig/ok_button.jpg", cv.IMREAD_UNCHANGED) - loop_time_p = time() - - while True: - if overlay.run_mode == 'paused': - cv.waitKey(1) - if (time() - loop_time_p) >= 5: - loop_time_p = time() - print("pausing") - continue - elif overlay.run_mode == 'stopped': - break - - try: - # get an updated image of the game - screenshot = capture_window.get_screenshot() - # screenshot = cv.imread("buffbar.jpg") - except: - capture_window.release() - print("Game window not available - shutting down application") - break - # cv.imshow("screenshot", screenshot) - # cv.waitKey(150) - # continue - if energy_counter >= ENERGY_TO_USE: - energy_counter = 0 - break - - spawn_1 = find_emitter(emitter, vision_stun, screenshot, 1) - if len(spawn_1) == 1: - spawn_button_active = True - points = vision_stun.get_click_points(spawn_1) - for i in range(0, SPAWN_COUNT, 1): - click_point(config, points[0][0], points[0][1]) - energy_counter = energy_counter + 1 - overlay.update_status_label(emitter, ENERGY_TO_USE - energy_counter) - if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': - break - else: - spawn_0 = find_emitter(emitter, vision_stun, screenshot, 0) - points = vision_stun.get_click_points(spawn_0) - for point in points: - click_point(config, points[0][0], points[0][1]) - - if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': - break - continue - - cv.waitKey(500) - - if emitter == EMITTER_MAIN: - while True: - screenshot = capture_window.get_screenshot() - c_rectangles = vision_stun.find(screenshot, c_needle, 0.95, 1, True, c_mask) - k_rectangles = vision_stun.find(screenshot, k_needle, 0.95, 1, True, k_mask) - if (len(c_rectangles) == 1) and (len(k_rectangles) == 1): - c_point = vision_stun.get_click_points(c_rectangles)[0] - k_point = vision_stun.get_click_points(k_rectangles)[0] - move_tile(config, k_point, c_point) - else: - break - - for rer in range(0, len(needles), 1): - loop_time = time() - while True: - if (time() - loop_time) >= 60: - break - screenshot = capture_window.get_screenshot_by_area(config.returnOKWindowPos()) - rectangles = vision_stun.find(screenshot, dig_button, 0.5, 1) - if len(rectangles) == 1: - pointis = vision_stun.get_click_points(rectangles) - for pointi in pointis: - dig_point(pointi[0] + config.returnOKWindowPos()[2], - pointi[1] + config.returnOKWindowPos()[3], 150) - cv.waitKey(60000) - continue - # do object detection - screenshot = capture_window.get_screenshot() - # processed_screenshot = vision_stun.apply_hsv_filter(screenshot, hsvs[rer]) - # processed_needle = vision_stun.apply_hsv_filter(needles[rer], hsvs[rer]) - - rectangles = vision_stun.find_by_mask_and_validate(screenshot, needles[rer], masks[rer], 5) - # draw the detection results onto the original image - # output_image = vision_stun.draw_rectangles(screenshot, rectangles) - # cv.imshow("output_image", output_image) - # cv.waitKey(150) - - if len(rectangles) is not 5: - break - if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': - break - - # sort rectangles by top - rectangles = sorted(rectangles, key=itemgetter(1)) - - points = vision_stun.get_click_points(rectangles) - - move_breaker = check_and_move_tile(capture_window, vision_stun, config, - [70, 70, rectangles[0][0] + 70, rectangles[0][1]], - needles[rer], - hsvs[rer], tresholds[rer], masks[rer], - points[1], [points[0][0] + 70, points[0][1]]) - if move_breaker: - break - if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': - break - move_breaker = check_and_move_tile(capture_window, vision_stun, config, - [70, 70, rectangles[0][0], rectangles[0][1] + 70], - needles[rer], - hsvs[rer], tresholds[rer], masks[rer], - points[2], [points[0][0], points[0][1] + 70]) - if move_breaker: - break - if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': - break - move_breaker = check_and_move_tile(capture_window, vision_stun, config, - [70, 70, rectangles[0][0] + 70, rectangles[0][1] + 70], - needles[rer], hsvs[rer], tresholds[rer], masks[rer], - points[3], [points[0][0] + 70, points[0][1] + 70]) - if move_breaker: - break - move_tile(config, points[4], [points[0][0], points[0][1]]) - if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': - break - if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': - break - # debug the loop rate - print('FPS {}'.format(1 / (time() - outer_loop_time))) - outer_loop_time = time() - cv.waitKey(150) - overlay.run_mode = 'finished' - - - -def check_and_move_tile(capture_win, visio, conf, rect, needl, hsv, tresh, mask, point_source, point_dest): - screenshot_p = capture_win.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) - _minVal2, _maxVal2, minLoc2, maxLoc2 = cv.minMaxLoc(result2, None) - # rectangles2 = visio.find(screenshot_pos, needl, tresh, 1, True, mask) - # output_by_area = 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 _maxVal2 <= 0.9: - move_tile(conf, point_source, point_dest) - - return False - - -def click_point(conf, x, y): - offset_left = conf.returnEquipmentWindowPos()[2] - offset_down = conf.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(conf, point_source, point_dest): - offset_left = conf.returnEquipmentWindowPos()[2] - offset_down = conf.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(emitter_to_use, vis, screen, layer): - if 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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.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 vis.find(screen, needle, 0.96, 1, True, mask) - - -def include_chests(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/chests/chest_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.95) - mask.append(cv.imread("equip/chests/chest_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/chests/chest_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.95) - mask.append(cv.imread("equip/chests/chest_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/chests/chest_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/chests/chest_3_32-mask.png", cv.IMREAD_COLOR)) - - -def include_books(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/books/book_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/books/book_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.9) - mask.append(cv.imread("equip/books/book_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.87) - mask.append(cv.imread("equip/books/book_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/books/book_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/books/book_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.9) - mask.append(cv.imread("equip/books/book_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/books/book_7_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/books/book_8_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/books/book_8_32-mask.png", cv.IMREAD_COLOR)) - - -def include_keys(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/keys/key_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/keys/key_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/keys/key_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/keys/key_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/keys/key_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/keys/key_3_32-mask.png", cv.IMREAD_COLOR)) - - -def include_pots(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/pots/pot_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.94) - mask.append(cv.imread("equip/pots/pot_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/pots/pot_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/pots/pot_6_32-mask.png", cv.IMREAD_COLOR)) - - -def include_bags(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/bags/bag_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.88) - mask.append(cv.imread("equip/bags/bag_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/bags/bag_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/bags/bag_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_coins(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/coins/coin_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/coins/coin_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/coins/coin_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/coins/coin_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/coins/coin_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/coins/coin_5_32-mask.png", cv.IMREAD_COLOR)) - - -def include_runes(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/runes/rune_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/runes/rune_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/runes/rune_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/runes/rune_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/runes/rune_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/runes/rune_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/runes/rune_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/runes/rune_4_32-mask.png", cv.IMREAD_COLOR)) - - -def include_mushs(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/mushrooms/mush_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/mushrooms/mush_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/mushrooms/mush_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_amus(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/amus/amu_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.9) - mask.append(cv.imread("equip/amus/amu_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.9) - mask.append(cv.imread("equip/amus/amu_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/amus/amu_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/amus/amu_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_swords(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/swords/sword_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/swords/sword_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/swords/sword_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_staffs(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/staffs/staff_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/staffs/staff_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/staffs/staff_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_rings(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/rings/ring_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.925) - mask.append(cv.imread("equip/rings/ring_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.94) - mask.append(cv.imread("equip/rings/ring_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/rings/ring_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/rings/ring_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/rings/ring_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.91) - mask.append(cv.imread("equip/rings/ring_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/rings/ring_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/rings/ring_7_32-mask.png", cv.IMREAD_COLOR)) - - -def include_wands(needles, hsv, tresh, mask): - needles.append(cv.imread("equip/wands/wand_1_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_1_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_2_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_2_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_3_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_3_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_4_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_4_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_5_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_5_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_6_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_6_32-mask.png", cv.IMREAD_COLOR)) - - needles.append(cv.imread("equip/wands/wand_7_32.jpg", cv.IMREAD_UNCHANGED)) - hsv.append(HSV_DEFAULT) - tresh.append(0.93) - mask.append(cv.imread("equip/wands/wand_7_32-mask.png", cv.IMREAD_COLOR)) - - -if __name__ == "__main__": - run() diff --git a/equipment_overlay.py b/equipment_overlay.py deleted file mode 100644 index 9a672a2..0000000 --- a/equipment_overlay.py +++ /dev/null @@ -1,121 +0,0 @@ -# Run tkinter code in another thread -import threading -import tkinter as tk -from tkinter import ttk - - -class EquipmentOverlay(threading.Thread): - - def __init__(self, config): - threading.Thread.__init__(self) - - self.run_mode = 'init' - - self.root = tk.Tk - - 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.StartButton = tk.Button - self.StopButton = tk.Button - self.PauseButton = tk.Button - self.TkPosition = '135x115+60+600' - - self.StatusLabel = tk.Label - - # self.TkPosition = config.returnEnemyPlayerOverlayPos() - self.start() - - def run(self): - self.root = tk.Tk() - - 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.root, text="Energy:", font=("Helvetica", 10, "bold"), - background="grey") - self.EnergyLabel.grid(row=0, column=0) - self.EnergyEntry = tk.Entry(self.root, textvariable=self.energy_use, font=("Helvetica", 10, "bold"), width='12') - - self.EnergyEntry.grid(row=0, column=1, columnspan=2) - - self.SpawnLabel = tk.Label(self.root, text="Spawn:", font=("Helvetica", 10, "bold"), - background="grey") - self.SpawnLabel.grid(row=1, column=0) - self.SpawnEntry = tk.Entry(self.root, textvariable=self.spawn_use, font=("Helvetica", 10, "bold"), width='12') - - self.SpawnEntry.grid(row=1, column=1, columnspan=2) - - self.EmitterLabel = tk.Label(self.root, text="Emitter:", font=("Helvetica", 10, "bold"), - background="grey") - self.EmitterLabel.grid(row=2, column=0) - self.Emitter_Box = ttk.Combobox(self.root, textvariable=self.emitter_use, font=("Helvetica", 8, "bold"), - width='10') - self.Emitter_Box['values'] = ('multi', 'main', 'mushroom', 'amulett', 'sword', 'staff', 'wand', 'ring') - self.Emitter_Box.grid(row=2, column=1, columnspan=2, sticky='w') - - # self.EnemyLabel.pack() - self.ButtonFrame = tk.Frame(self.root) - self.StartButton = tk.Button(self.ButtonFrame, text="Start", command=self.start_button_callback, width='5') - self.StartButton.grid(row=0, column=0) - self.StopButton = tk.Button(self.ButtonFrame, text="Stop", command=self.stop_button_callback, width='5', - state=tk.DISABLED) - self.StopButton.grid(row=0, column=1) - self.PauseButton = tk.Button(self.ButtonFrame, text="Pause", command=self.pause_button_callback, width='5', - state=tk.DISABLED) - self.PauseButton.grid(row=0, column=2) - self.ButtonFrame.grid(row=3, column=0, columnspan=2) - - self.StatusLabel = tk.Label(self.root, text="", font=("Helvetica", 10, "bold"), - background="grey") - self.StatusLabel.grid(row=4, 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 update_enemy_label(self, _text): - self.EnergyLabel.configure(text=_text) - # self.EnemyLabel.pack() - - def start_button_callback(self): - self.StartButton.configure(state=tk.DISABLED) - self.StopButton.configure(state=tk.NORMAL) - self.PauseButton.configure(state=tk.NORMAL) - self.StatusLabel.configure(text='') - 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) - 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 get_run_mode(self): - return self.run_mode - - def update_status_label(self, emitter, energy_to_go): - text = emitter + ": " + str(energy_to_go) - self.StatusLabel.configure(text=text) \ No newline at end of file diff --git a/farm/Field_Representation.py b/farm/Field_Representation.py deleted file mode 100644 index b5cb801..0000000 --- a/farm/Field_Representation.py +++ /dev/null @@ -1,551 +0,0 @@ -import random -import cv2 as cv -import numpy as np -import pydirectinput -from window_capture import WindowCapture -from vision import Vision -from config_file import UserConfigs -from utils import mse - -GREEN = 1 -YELLOW = 2 -BLUE = 3 -RED = 4 -PINK = 5 -RAINBOW = 6 -BIGBOMB = 7 -BOMB = 8 -ARROW_DOWN = 9 -ARROW_RIGHT = 10 -ROCK_1 = 11 -ROCK_2 = 12 -ROCK_3 = 13 -BURGER = 14 -PAB1 = 15 -GOLDBAR = 16 -MAGINENT = 21 -CHEMTRANT = 22 -TENESENT = 23 -CIBUTRANT = 24 -ARTISENT = 25 - - -class Field: - data_value_grid = [] - data_coordinates = [] - next_level = cv.imread("next_level.jpg", cv.IMREAD_COLOR) - next_level_x = cv.imread("next_level_x.jpg", cv.IMREAD_COLOR) - reset_board = cv.imread("reset_button.jpg", cv.IMREAD_COLOR) - reset_confirm = cv.imread("reset_confirm.jpg", cv.IMREAD_COLOR) - reset_counter = 0 - - explosives = [] - explosives.append(RAINBOW) - explosives.append(ARROW_RIGHT) - explosives.append(ARROW_DOWN) - explosives.append(BIGBOMB) - explosives.append(BOMB) - colors = [] - colors.append(GREEN) - colors.append(YELLOW) - colors.append(BLUE) - colors.append(RED) - colors.append(PINK) - colors.append(MAGINENT) - colors.append(CHEMTRANT) - colors.append(TENESENT) - colors.append(CIBUTRANT) - colors.append(ARTISENT) - - - def __init__(self): - self.data_value_grid = np.zeros((8, 14), dtype=int) - self.data_coordinates = np.zeros((8, 14), dtype=object) - self.observation = np.zeros((8, 14), dtype=int) - - # 230 to 2110 = 1883 / 14 = 134.5 - # 60 to 1130 = 1076 / 8 = 134.5 - dim = 134.5 - for e in range(0, 8, 1): - for i in range(0, 14, 1): - self.data_coordinates[e][i] = [i * dim, e * dim, dim, dim] - - # initialize the user-class - self.config = UserConfigs() - - # initialize the StunWindowCapture class - self.capture_window = WindowCapture(None, None, self.config) - # initialize the StunVision class - self.vision_stun = Vision() - - self.needles = {GREEN: cv.imread("green.jpg", cv.IMREAD_COLOR), - YELLOW: cv.imread("yellow.jpg", cv.IMREAD_COLOR), - BLUE: cv.imread("blue.jpg", cv.IMREAD_COLOR), - RED: cv.imread("red.jpg", cv.IMREAD_COLOR), - PINK: cv.imread("pink.jpg", cv.IMREAD_COLOR), - RAINBOW: cv.imread("rainbow.jpg", cv.IMREAD_COLOR), - BIGBOMB: cv.imread("bigbomb.jpg", cv.IMREAD_COLOR), - BOMB: cv.imread("bomb.jpg", cv.IMREAD_COLOR), - ARROW_DOWN: cv.imread("arrow_down.jpg", cv.IMREAD_COLOR), - ARROW_RIGHT: cv.imread("arrow_right.jpg", cv.IMREAD_COLOR), - ROCK_1: cv.imread("rock1.jpg", cv.IMREAD_COLOR), - ROCK_2: cv.imread("rock2.jpg", cv.IMREAD_COLOR), - ROCK_3: cv.imread("rock3.jpg", cv.IMREAD_COLOR), - BURGER: cv.imread("burger.jpg", cv.IMREAD_COLOR), - GOLDBAR: cv.imread("burger.jpg", cv.IMREAD_COLOR), - PAB1: cv.imread("pab1.jpg", cv.IMREAD_COLOR), - MAGINENT: cv.imread("maginent.jpg", cv.IMREAD_COLOR), - CHEMTRANT: cv.imread("chemtrant.jpg", cv.IMREAD_COLOR), - TENESENT: cv.imread("tenesent.jpg", cv.IMREAD_COLOR), - CIBUTRANT: cv.imread("cibutrant.jpg", cv.IMREAD_COLOR), - ARTISENT: cv.imread("artisent.jpg", cv.IMREAD_COLOR) - } - - def reset(self): - self.observation = [] - - def assess_playfield_and_make_move(self): - - new_observation, new_screenshot = self.get_current_board_state() - - # wrong movement detection - # last board state is same as actual - if mse(new_observation, self.observation) == 0.0: - # no movement detected -> blow explosives or reset - - self.reset_counter += 1 - if self.reset_counter == 1: - pass - elif self.reset_counter == 2: - if self.detonate_explosive_when_stuck(new_observation): - self.reset_counter = 0 - return - elif self.reset_counter >= 3: - screenshot = self.capture_window.get_screenshot() - if self.check_for_button_and_execute(screenshot, self.reset_board): - cv.waitKey(500) - screenshot = self.capture_window.get_screenshot() - if self.check_for_button_and_execute(screenshot, self.reset_confirm): - cv.waitKey(500) - - self.reset_counter = 0 - return - else: - return - - self.find_patterns_and_valid_moves(new_observation) - self.observation = new_observation - return new_observation - - def check_for_button_and_execute(self, screen, needle, offset_left=0, offset_down=0): - rectangles = self.vision_stun.find(screen, needle, 0.70, 1) - if len(rectangles) == 0: - return False - point = self.vision_stun.get_click_points(rectangles)[0] - self.dig_point(point[0] + offset_left, point[1] + offset_down, 500) - return True - - def move_to(self, x, y): - point_src = (1113, 598) - pydirectinput.moveTo(point_src[0], point_src[1]) - pydirectinput.mouseDown() - w = random.randint(1, 100) - cv.waitKey(150 + w) - pydirectinput.moveTo(x, y) - pydirectinput.mouseUp() - cv.waitKey(500 + w) - - def change_value(self, x, y, val): - self.data_value_grid[x][y] = val - - def pointInRect(self, point): - for e in range(0, 8, 1): - for i in range(0, 14, 1): - x1, y1, w, h = self.data_coordinates[e][i] - x2, y2 = x1 + w, y1 + h - x, y = point - if (x1 < x and x < x2): - if (y1 < y and y < y2): - return e, i - return None, None - - def check_for_next_level(self, screen, needle): - offset_left = 230 - offset_down = 58 - rectangles = self.vision_stun.find(screen, needle, 0.70, 1) - if len(rectangles) == 0: - return False - point = self.vision_stun.get_click_points(rectangles)[0] - self.dig_point(point[0]+ offset_left, point[1] + offset_down, 500) - return True - - def get_current_board_state(self): - try: - # get an updated image of the game - screenshot = self.capture_window.get_screenshot() - #screenshot = cv.imread("field_farm.jpg") - screenshot = screenshot[58:1134, 230:2113] # 1883,1076 - # gray = cv.cvtColor(screenshot, cv.COLOR_BGR2GRAY) - # thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1] - if self.check_for_next_level(screenshot, self.next_level): - cv.waitKey(500) - screenshot = self.capture_window.get_screenshot() - screenshot = screenshot[58:1134, 230:2113] - if self.check_for_next_level(screenshot, self.next_level_x): - cv.waitKey(500) - screenshot = self.capture_window.get_screenshot() - screenshot = screenshot[58:1134, 230:2113] - - except: - self.capture_window.release() - print("Game window not available - shutting down application") - return None - # cv.imshow("screenshot", screenshot) - # cv.waitKey(150) - # continue - data_coords = np.zeros((8, 14), dtype=object) - # field = Field() - for needle_key in self.needles.keys(): - # gray_needle = cv.cvtColor(self.needles[needle_key], cv.COLOR_BGR2GRAY) - # thresh_needle = cv.threshold(gray_needle, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1] - rectangles = self.vision_stun.find(screenshot, self.needles[needle_key], 0.70, 56) - if len(rectangles) == 0: - continue - points = self.vision_stun.get_click_points(rectangles) - - for point in points: - x, y = self.pointInRect(point) - if x is not None and y is not None: - data_coords[x][y] = int(needle_key) - # self.change_value(x, y, int(needle_key)) - # print(field.data_value_grid) - # cv.circle(screenshot, points[0], 7, (0, 255, 0), -1) - # output_image = vision_stun.draw_rectangles(screenshot, rectangles) - # cv.imshow("output_image", output_image) - # cv.waitKey(150) - return data_coords, screenshot - - def find_patterns_and_valid_moves(self, state): - for e in range(0, 8, 1): - for i in range(0, 14, 1): - if self.check_explosives(state, e, i): - return - - for e in range(0, 8, 1): - for i in range(0, 14, 1): - for color in self.colors: - if self.check_5_horizontal(state, e, i, color): - return - if self.check_5_vertical(state, e, i, color): - return - - for e in range(0, 8, 1): - for i in range(0, 14, 1): - for color in self.colors: - if self.check_3_horizontal(state, e, i, color): - return - if self.check_3_vertical(state, e, i, color): - return - if self.check_3_with_gap(state, e, i, color): - return - - def detonate_explosive_when_stuck(self, state): - for e in range(0, 8, 1): - for i in range(0, 14, 1): - for explosive in self.explosives: - if self.local_pos_check(state, e, i, 0, 0, explosive): - dest_pt = self.get_click_point(self.data_coordinates[e, i]) - if self.local_pos_checks(state, e, i, 1, 0, self.colors): - src_pt = self.get_click_point(self.data_coordinates[e + 1, i]) - self.move_tile(src_pt, dest_pt) - return True - elif self.local_pos_checks(state, e, i, 0, 1, self.colors): - src_pt = self.get_click_point(self.data_coordinates[e, i + 1]) - self.move_tile(src_pt, dest_pt) - return True - elif self.local_pos_checks(state, e, i, -1, 0, self.colors): - src_pt = self.get_click_point(self.data_coordinates[e - 1, i]) - self.move_tile(src_pt, dest_pt) - return True - elif self.local_pos_checks(state, e, i, 0, -1, self.colors): - src_pt = self.get_click_point(self.data_coordinates[e, i - 1]) - self.move_tile(src_pt, dest_pt) - return True - else: - continue - return False - - def check_explosives(self, state, e, i): - for explosive in self.explosives: - if self.local_pos_check(state, e, i, 0, 0, explosive): - dest_pt = self.get_click_point(self.data_coordinates[e, i]) - if self.local_pos_checks(state, e, i, 1, 0, self.explosives): - src_pt = self.get_click_point(self.data_coordinates[e + 1, i]) - self.move_tile(src_pt, dest_pt) - elif self.local_pos_checks(state, e, i, 0, 1, self.explosives): - src_pt = self.get_click_point(self.data_coordinates[e, i + 1]) - self.move_tile(src_pt, dest_pt) - elif self.local_pos_checks(state, e, i, -1, 0, self.explosives): - src_pt = self.get_click_point(self.data_coordinates[e - 1, i]) - self.move_tile(src_pt, dest_pt) - elif self.local_pos_checks(state, e, i, 0, -1, self.explosives): - src_pt = self.get_click_point(self.data_coordinates[e, i - 1]) - self.move_tile(src_pt, dest_pt) - else: - continue - return True - else: - continue - return False - - def local_pos_check(self, 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): - 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: - return True - else: - continue - return False - - def check_5_horizontal(self, state, e, i, color): - try: - # - if state[e, i] == color and state[e, i + 1] == color and state[e, i + 3] == color and state[ - e, i + 4] == color: - if state[e, i + 2] <= 0 or state[e, i + 2] >= 6: - return False - # - if e - 1 >= 0 and i + 2 <= 13: - if state[e - 1, i + 2] == color: - return True - return False - except: - return False - - def check_5_vertical(self, state, e, i, color): - try: - # - if state[e, i] == color and state[e + 1, i] == color and state[e + 3, i] == color and state[ - e + 4, i] == color: - if state[e + 2, i] <= 0 or state[e + 2, i] >= 6: - return False - # third left upper - if e + 2 <= 7 and i - 1 >= 0: - if state[e + 2, i - 1] == color: - print("upper left", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e + 2, i - 1]) - dest_pt = self.get_click_point(self.data_coordinates[e + 2, i]) - self.move_tile(src_pt, dest_pt) - return True - if e + 2 <= 7 and i + 1 <= 13: - if state[e + 2, i + 1] == color: - print("upper left", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e + 2, i + 1]) - dest_pt = self.get_click_point(self.data_coordinates[e + 2, i]) - self.move_tile(src_pt, dest_pt) - return True - return False - except: - return False - - def check_3_with_gap(self, state, e, i, color): - try: - # second color next to starting point - if i + 2 <= 13: - if state[e, i] == color and state[e, i + 2] == color: - # third upper - if e - 1 >= 0 and i + 1 <= 13: - #if state[e - 1, i - 1] == color and (state[e, i - 1] >= 1 and state[e, i - 1] <= 5): - if state[e - 1, i + 1] == color and (state[e, i + 1] in self.colors): - src_pt = self.get_click_point(self.data_coordinates[e - 1, i + 1]) - dest_pt = self.get_click_point(self.data_coordinates[e, i + 1]) - self.move_tile(src_pt, dest_pt) - return True - # third left lower - if e + 1 <= 7 and i + 1 <= 13: - if state[e + 1, i + 1] == color and (state[e, i + 1] in self.colors): - src_pt = self.get_click_point(self.data_coordinates[e + 1, i + 1]) - dest_pt = self.get_click_point(self.data_coordinates[e, i + 1]) - self.move_tile(src_pt, dest_pt) - return True - if e + 2 <= 7: - if state[e, i] == color and state[e + 2, i] == color: - # third upper - if e + 1 >= 0 and i + 1 <= 13: - #if state[e - 1, i - 1] == color and (state[e, i - 1] >= 1 and state[e, i - 1] <= 5): - if state[e + 1, i + 1] == color and (state[e + 1, i] in self.colors): - src_pt = self.get_click_point(self.data_coordinates[e + 1, i + 1]) - dest_pt = self.get_click_point(self.data_coordinates[e + 1, i]) - self.move_tile(src_pt, dest_pt) - return True - # third left lower - if e + 1 <= 7 and i - 1 >= 0: - if state[e + 1, i - 1] == color and (state[e + 1, i] in self.colors): - src_pt = self.get_click_point(self.data_coordinates[e + 1, i - 1]) - dest_pt = self.get_click_point(self.data_coordinates[e + 1, i]) - self.move_tile(src_pt, dest_pt) - return True - except: - return False - - def check_3_horizontal(self, state, e, i, color): - try: - # second color next to starting point - if state[e, i] == color and state[e, i + 1] == color: - # third left upper - if e - 1 >= 0 and i - 1 >= 0: - if state[e - 1, i - 1] == color and (state[e, i - 1] in self.colors): - print("upper left", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e - 1, i - 1]) - dest_pt = self.get_click_point(self.data_coordinates[e, i - 1]) - self.move_tile(src_pt, dest_pt) - return True - # third left lower - if e + 1 <= 7 and i - 1 >= 0: - if state[e + 1, i - 1] == color and (state[e, i - 1] in self.colors): - print("lower left", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e + 1, i - 1]) - dest_pt = self.get_click_point(self.data_coordinates[e, i - 1]) - self.move_tile(src_pt, dest_pt) - return True - # third left with gap - if i - 2 >= 0: - if state[e, i - 2] == color and (state[e, i - 1] in self.colors): - print("left gap ", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e, i - 2]) - dest_pt = self.get_click_point(self.data_coordinates[e, i - 1]) - self.move_tile(src_pt, dest_pt) - return True - # third right upper - if e - 1 >= 0 and i + 2 <= 13: - if state[e - 1, i + 2] == color and (state[e, i + 2] in self.colors): - print("upper right", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e - 1, i + 2]) - dest_pt = self.get_click_point(self.data_coordinates[e, i + 2]) - self.move_tile(src_pt, dest_pt) - return True - # third right lower - if e + 1 <= 7 and i + 2 <= 13: - if state[e + 1, i + 2] == color and (state[e, i + 2] in self.colors): - print("upper lower", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e + 1, i + 2]) - dest_pt = self.get_click_point(self.data_coordinates[e, i + 2]) - self.move_tile(src_pt, dest_pt) - return True - - # third right with gap - if i + 3 <= 13: - if state[e, i + 3] == color and (state[e, i + 2] in self.colors): - print("right gap ", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e, i + 3]) - dest_pt = self.get_click_point(self.data_coordinates[e, i + 2]) - self.move_tile(src_pt, dest_pt) - return True - except: - return False - - def check_3_vertical(self, state, e, i, color): - try: - # second color next to starting point o - if state[e, i] == color and state[e + 1, i] == color: - # third left upper - if e - 1 >= 0 and i - 1 >= 0: - if state[e - 1, i - 1] == color and (state[e - 1, i] in self.colors): - print("upper left", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e - 1, i - 1]) - dest_pt = self.get_click_point(self.data_coordinates[e - 1, i]) - self.move_tile(src_pt, dest_pt) - return True - # third left lower - if e + 2 <= 7 and i - 1 >= 0: - if state[e + 2, i - 1] == color and (state[e + 2, i] in self.colors): - print("lower left", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e + 2, i - 1]) - dest_pt = self.get_click_point(self.data_coordinates[e + 2, i]) - self.move_tile(src_pt, dest_pt) - return True - # third right upper - if e - 1 >= 0 and i + 1 <= 13: - if state[e - 1, i + 1] == color and (state[e - 1, i] in self.colors): - print("upper right", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e - 1, i + 1]) - dest_pt = self.get_click_point(self.data_coordinates[e - 1, i]) - self.move_tile(src_pt, dest_pt) - return True - # third right lower - if e + 2 <= 7 and i + 1 <= 13: - if state[e + 2, i + 1] == color and (state[e + 2, i] in self.colors): - print("upper lower", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e + 2, i + 1]) - dest_pt = self.get_click_point(self.data_coordinates[e + 2, i]) - self.move_tile(src_pt, dest_pt) - return True - # third upper with gap - if e - 2 >= 0: - if state[e - 2, i] == color and (state[e - 1, i] in self.colors): - print("upper gap ", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e - 2, i]) - dest_pt = self.get_click_point(self.data_coordinates[e - 1, i]) - self.move_tile(src_pt, dest_pt) - return True - # third lower with gap - if e + 3 <= 7: - if state[e + 3, i] == color and (state[e + 2, i] in self.colors): - print("lower gap ", color, e, i) - src_pt = self.get_click_point(self.data_coordinates[e + 3, i]) - dest_pt = self.get_click_point(self.data_coordinates[e + 2, i]) - self.move_tile(src_pt, dest_pt) - return True - except: - return False - - def move_tile(self, point_source, point_dest): - offset_left = 230 - offset_down = 58 - pydirectinput.moveTo(point_source[0] + offset_left, point_source[1] + offset_down) - # pydirectinput.moveTo(0,0) - 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 check_for_button_and_click_it(self, button_url): - screenshot = self.capture_window.get_screenshot() - # gray = cv.cvtColor(screenshot, cv.COLOR_BGR2GRAY) - # thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1] - # gray_needle = cv.cvtColor(cv.imread(button_url, cv.IMREAD_UNCHANGED), cv.COLOR_BGR2GRAY) - # thresh_needle = cv.threshold(gray_needle, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1] - needle = cv.imread(button_url, cv.IMREAD_UNCHANGED) - # rectangles = self.vision_stun.find(thresh, thresh_needle, 0.4, 1) - rectangles = self.vision_stun.find(screenshot, needle, 0.7, 1) - - if len(rectangles) == 1: - pointis = self.vision_stun.get_click_points(rectangles) - for pointi in pointis: - self.dig_point(pointi[0], pointi[1], 150) - - def dig_point(self, point1, point2, dig_time): - pydirectinput.moveTo(point1, point2) - cv.waitKey(dig_time) - pydirectinput.mouseDown() - w = random.randint(50, 100) - cv.waitKey(w) - pydirectinput.mouseUp() - - def get_click_point(self, rectangle): - # Loop over all the rectangles - x, y, w, h = rectangle - # Determine the center position - center_x = x + int(w / 2) - center_y = y + int(h / 2) - # Save the points - return int(center_x), int(center_y) diff --git a/farm/farm_overlay.py b/farm/farm_overlay.py deleted file mode 100644 index ebc753d..0000000 --- a/farm/farm_overlay.py +++ /dev/null @@ -1,66 +0,0 @@ -# Run tkinter code in another thread -import threading -import tkinter as tk -from tkinter import ttk - - -class FarmOverlay(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - - self.run_mode = 'init' - - self.root = tk.Tk - - self.ButtonFrame = tk.Frame - - self.StartButton = tk.Button - self.StopButton = tk.Button - self.TkPosition = '133x52+60+600' - - self.StatusLabel = tk.Label - - self.start() - - def run(self): - self.root = tk.Tk() - self.ButtonFrame = tk.Frame(self.root) - self.StartButton = tk.Button(self.ButtonFrame, text="Start", command=self.start_button_callback, width='8') - self.StartButton.grid(row=0, column=0) - self.StopButton = tk.Button(self.ButtonFrame, text="Stop", command=self.stop_button_callback, width='8', - state=tk.DISABLED) - self.StopButton.grid(row=0, column=1) - - self.ButtonFrame.grid(row=3, column=0, columnspan=2) - - self.StatusLabel = tk.Label(self.root, text="", font=("Helvetica", 10, "bold"), - background="grey") - self.StatusLabel.grid(row=4, 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 start_button_callback(self): - self.StartButton.configure(state=tk.DISABLED) - self.StopButton.configure(state=tk.NORMAL) - self.StatusLabel.configure(text='') - self.run_mode = 'started' - - def stop_button_callback(self): - self.StartButton.configure(state=tk.NORMAL) - self.StopButton.configure(state=tk.DISABLED) - self.run_mode = 'stopped' - - def get_run_mode(self): - return self.run_mode - - def update_status_label(self, mode, energy_to_go): - text = mode + ": " + str(energy_to_go) - self.StatusLabel.configure(text=text) diff --git a/farm/main_farm.py b/farm/main_farm.py deleted file mode 100644 index 1f25a98..0000000 --- a/farm/main_farm.py +++ /dev/null @@ -1,39 +0,0 @@ -from Field_Representation import Field -from time import time -import cv2 as cv -import keyboard - -def run(): - field = Field() - loop_time_p = time() - pause = True - - while True: - if keyboard.is_pressed('p') == True: - pause = True - print('q pressed') - elif keyboard.is_pressed('o') == True: - pause = False - print('o pressed') - - if pause: - # cv.waitKey(500) - if (time() - loop_time_p) >= 5: - loop_time_p = time() - print("pausing") - continue - - - #cords, screenshot = field.get_current_board_state() - cords = field.assess_playfield_and_make_move() - print(cords) - cv.waitKey(1000) - - - #cv.imshow("screenshot", screenshot) - #cv.waitKey(150) - #print(cords) - - -if __name__ == "__main__": - run() \ No newline at end of file diff --git a/farm/main_farm_ui.py b/farm/main_farm_ui.py deleted file mode 100644 index 2be0056..0000000 --- a/farm/main_farm_ui.py +++ /dev/null @@ -1,36 +0,0 @@ -from Field_Representation import Field -from time import time -import cv2 as cv -import keyboard -from farm_overlay import FarmOverlay - - -def run(): - field = Field() - overlay = FarmOverlay() - - while True: - if overlay.run_mode == 'stopped': - overlay.update_status_label("stopped", "0") - overlay.run_mode = 'init' - continue - elif overlay.run_mode == 'started': - cv.waitKey(1000) - elif overlay.run_mode == 'init': - cv.waitKey(1) - continue - else: - # boelk - pass - - while True: - if overlay.run_mode == 'stopped': - break - - cords = field.assess_playfield_and_make_move() - print(cords) - cv.waitKey(1000) - - -if __name__ == "__main__": - run()