import random 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 EMITTER_MAIN = "main" EMITTER_MUSH = "mushroom" EMITTER_AMU = "amulett" EMITTER_SWORD = "sword" def run(): EMITTER_TO_USE = EMITTER_MAIN # initialize the user-class config = UserConfigs() # initialize the StunWindowCapture class try: capture_window = WindowCapture( None, "equip", 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() loop_time = time() needles = [] hsv = [] if EMITTER_TO_USE == EMITTER_MUSH: include_books(needles, hsv) include_mushs(needles, hsv) include_pots(needles, hsv) include_bags(needles, hsv) elif EMITTER_TO_USE == EMITTER_AMU: include_books(needles, hsv) include_amus(needles, hsv) include_bags(needles, hsv) elif EMITTER_TO_USE == EMITTER_MAIN: include_books(needles, hsv) include_chests(needles, hsv) include_keys(needles, hsv) include_pots(needles, hsv) include_bags(needles, hsv) include_coins(needles, hsv) include_runes(needles, hsv) elif EMITTER_TO_USE == EMITTER_SWORD: include_books(needles, hsv) include_swords(needles, hsv) include_bags(needles, hsv) 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) 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 = (EMITTER_TO_USE, 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, 15, 1): click_point(config, points[0][0], points[0][1]) if keyboard.is_pressed('p') == True or pause == True: pause = True break else: spawn_0 = (EMITTER_TO_USE, 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 for rer in range(0, len(needles), 1): while True: # do object detection screenshot = capture_window.get_screenshot() processed_screenshot = vision_stun.apply_hsv_filter(screenshot, hsv[rer]) processed_needle = vision_stun.apply_hsv_filter(needles[rer], hsv[rer]) rectangles = vision_stun.find(processed_screenshot, processed_needle, 0.8, 5) # draw the detection results onto the original image # output_image = vision_stun.draw_rectangles(processed_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 points = vision_stun.get_click_points(rectangles) check_and_move_tile(capture_window, vision_stun, config, [70, 70, rectangles[0][0] + 70, rectangles[0][1]], needles[rer], hsv[rer], points[1], [points[0][0] + 70, points[0][1]]) if keyboard.is_pressed('p') == True or pause == True: pause = True break check_and_move_tile(capture_window, vision_stun, config, [70, 70, rectangles[0][0], rectangles[0][1] + 70], needles[rer], hsv[rer], points[2], [points[0][0], points[0][1] + 70]) if keyboard.is_pressed('p') == True or pause == True: pause = True break check_and_move_tile(capture_window, vision_stun, config, [70, 70, rectangles[0][0] + 70, rectangles[0][1] + 70], needles[rer], hsv[rer], points[3], [points[0][0] + 70, points[0][1] + 70]) 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() - loop_time))) loop_time = time() cv.waitKey(150) def include_chests(needles, hsv): needles.append(cv.imread("equip/chest_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(13, 40, 85, 135, 255, 255, 0, 0, 55, 53)) needles.append(cv.imread("equip/chest_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(14, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/chest_3_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) def include_books(needles, hsv): needles.append(cv.imread("equip/book_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 128, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/book_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(49, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/book_3_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 196, 0, 0, 0, 0)) needles.append(cv.imread("equip/book_4_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 156, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/book_5_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 95, 137, 179, 255, 255, 0, 0, 0, 0)) def include_keys(needles, hsv): needles.append(cv.imread("equip/key_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/key_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/key_3_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) def include_pots(needles, hsv): needles.append(cv.imread("equip/pot_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/pot_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/pot_3_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/pot_4_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/pot_5_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/pot_6_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) def include_bags(needles, hsv): needles.append(cv.imread("equip/bag_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/bag_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/bag_3_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/bag_4_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/bag_5_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/bag_6_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) def include_coins(needles, hsv): needles.append(cv.imread("equip/coin_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/coin_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) def include_runes(needles, hsv): needles.append(cv.imread("equip/rune_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/rune_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) def include_mushs(needles, hsv): needles.append(cv.imread("equip/mush_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/mush_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/mush_3_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/mush_4_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/mush_5_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/mush_6_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/mush_7_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/mush_8_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) def include_amus(needles, hsv): needles.append(cv.imread("equip/amu_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/amu_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/amu_3_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/amu_4_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/amu_5_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/amu_6_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/amu_7_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) def include_swords(needles, hsv): needles.append(cv.imread("equip/sword_1_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/sword_2_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/sword_3_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/sword_4_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) needles.append(cv.imread("equip/sword_5_32.jpg", cv.IMREAD_UNCHANGED)) hsv.append(HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)) 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(1, 100) cv.waitKey(250 + w) pydirectinput.moveTo(point_dest[0] + offset_left, point_dest[1] + offset_down) pydirectinput.mouseUp() cv.waitKey(250 + w) def find_emitter(emitter_to_use, vis, screen, layer): if emitter_to_use == EMITTER_MUSH: if layer == 0: return vis.find(screen, cv.imread("equip/mush_e_32.jpg", cv.IMREAD_UNCHANGED), 0.7, 1) else: return vis.find(screen, cv.imread("equip/mush_e2_32.jpg", cv.IMREAD_UNCHANGED), 0.4, 1) elif emitter_to_use == EMITTER_AMU: if layer == 0: return vis.find(screen, cv.imread("equip/amu_e_32.jpg", cv.IMREAD_UNCHANGED), 0.7, 1) else: return vis.find(screen, cv.imread("equip/amu_e2_32.jpg", cv.IMREAD_UNCHANGED), 0.4, 1) elif emitter_to_use == EMITTER_MAIN: if layer == 0: return vis.find(screen, cv.imread("equip/main_e1_32.jpg", cv.IMREAD_UNCHANGED), 0.8, 1) else: return vis.find(screen, cv.imread("equip/main_e2_32.jpg", cv.IMREAD_UNCHANGED), 0.5, 1) elif emitter_to_use == EMITTER_SWORD: if layer == 0: return vis.find(screen, cv.imread("equip/sword_e1_32.jpg", cv.IMREAD_UNCHANGED), 0.8, 1) else: return vis.find(screen, cv.imread("equip/sword_e2_32.jpg", cv.IMREAD_UNCHANGED), 0.7, 1) def check_and_move_tile(capture_win, visio, conf, rect, needl, hsv, point_source, point_dest): screenshot_pos = capture_win.get_screenshot_by_area(rect) processed_screenshot = visio.apply_hsv_filter(screenshot_pos, hsv) processed_needle = visio.apply_hsv_filter(needl, hsv) rectangles2 = visio.find(processed_screenshot, processed_needle, 0.7, 1) # output_by_area = vision_stun.draw_rectangles(screenshot_pos2, rectangles) # cv.imshow("output_image_by_area", output_by_area) # cv.waitKey(150) if len(rectangles2) == 1: # pos 2 filled return else: # pos 2 vacant pass move_tile(conf, point_source, point_dest) 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() if __name__ == "__main__": run()