added multi run and energy limits to equip

This commit is contained in:
2022-05-21 23:49:37 +02:00
parent 36c0b2fcb0
commit ccea230bf1

View File

@@ -17,13 +17,15 @@ EMITTER_SWORD = "sword"
EMITTER_STAFF = "staff" EMITTER_STAFF = "staff"
EMITTER_WAND = "wand" EMITTER_WAND = "wand"
EMITTER_RING = "ring" EMITTER_RING = "ring"
EMITTER_ALL = "all"
HSV_DEFAULT = HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0) HSV_DEFAULT = HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0)
def run(): def run():
EMITTER_TO_USE = EMITTER_WAND EMITTER_TO_USE = EMITTER_ALL
SPAWN_COUNT = 15 SPAWN_COUNT = 15
ENERGY_TO_USE = 3000
# initialize the user-class # initialize the user-class
config = UserConfigs() config = UserConfigs()
@@ -46,152 +48,168 @@ def run():
hsvs = [] hsvs = []
tresholds = [] tresholds = []
masks = [] masks = []
emitters = []
if EMITTER_TO_USE == EMITTER_MUSH: if EMITTER_TO_USE == EMITTER_ALL:
include_books(needles, hsvs, tresholds, masks) emitters.append(EMITTER_RING)
include_mushs(needles, hsvs, tresholds, masks) emitters.append(EMITTER_WAND)
include_pots(needles, hsvs, tresholds, masks) emitters.append(EMITTER_SWORD)
include_bags(needles, hsvs, tresholds, masks) emitters.append(EMITTER_STAFF)
elif EMITTER_TO_USE == EMITTER_AMU: emitters.append(EMITTER_AMU)
include_books(needles, hsvs, tresholds, masks) else:
include_amus(needles, hsvs, tresholds, masks) emitters.append(EMITTER_TO_USE)
include_bags(needles, hsvs, tresholds, masks)
elif EMITTER_TO_USE == 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_TO_USE == EMITTER_SWORD:
include_books(needles, hsvs, tresholds, masks)
include_swords(needles, hsvs, tresholds, masks)
include_bags(needles, hsvs, tresholds, masks)
elif EMITTER_TO_USE == EMITTER_STAFF:
include_books(needles, hsvs, tresholds, masks)
include_staffs(needles, hsvs, tresholds, masks)
include_bags(needles, hsvs, tresholds, masks)
elif EMITTER_TO_USE == EMITTER_RING:
include_books(needles, hsvs, tresholds, masks)
include_rings(needles, hsvs, tresholds, masks)
include_bags(needles, hsvs, tresholds, masks)
elif EMITTER_TO_USE == EMITTER_WAND:
include_books(needles, hsvs, tresholds, masks)
include_wands(needles, hsvs, tresholds, masks)
include_bags(needles, hsvs, tresholds, masks)
energy_counter = 0
pause = True pause = True
while True: for emitter in emitters:
if keyboard.is_pressed('p') == True: if emitter == EMITTER_MUSH:
pause = True include_books(needles, hsvs, tresholds, masks)
print('q pressed') include_mushs(needles, hsvs, tresholds, masks)
elif keyboard.is_pressed('o') == True: include_pots(needles, hsvs, tresholds, masks)
pause = False include_bags(needles, hsvs, tresholds, masks)
print('o pressed') elif emitter == EMITTER_AMU:
if pause: include_books(needles, hsvs, tresholds, masks)
# cv.waitKey(500) include_amus(needles, hsvs, tresholds, masks)
print("pausing") include_bags(needles, hsvs, tresholds, masks)
continue 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)
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_0_location = [] while True:
spawn_1 = find_emitter(EMITTER_TO_USE, vision_stun, screenshot, 1) if keyboard.is_pressed('p') == True:
if len(spawn_1) == 1: pause = True
spawn_button_active = True print('q pressed')
points = vision_stun.get_click_points(spawn_1) elif keyboard.is_pressed('o') == True:
for i in range(0, SPAWN_COUNT, 1): pause = False
click_point(config, points[0][0], points[0][1]) print('o pressed')
if keyboard.is_pressed('p') == True or pause == True: if pause:
pause = True # cv.waitKey(500)
break print("pausing")
else: continue
spawn_0 = find_emitter(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: try:
pause = True # get an updated image of the game
break
continue
cv.waitKey(500)
for rer in range(0, len(needles), 1):
screenshot = capture_window.get_screenshot_by_area(config.returnOKWindowPos())
rectangles = vision_stun.find(screenshot, cv.imread("dig/ok_button.jpg", cv.IMREAD_UNCHANGED), 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
while True:
# do object detection
screenshot = capture_window.get_screenshot() screenshot = capture_window.get_screenshot()
# processed_screenshot = vision_stun.apply_hsv_filter(screenshot, hsvs[rer]) # screenshot = cv.imread("buffbar.jpg")
# processed_needle = vision_stun.apply_hsv_filter(needles[rer], hsvs[rer]) 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
rectangles = vision_stun.find_by_mask_and_validate(screenshot, needles[rer], masks[rer], 5) spawn_1 = find_emitter(emitter, vision_stun, screenshot, 1)
# draw the detection results onto the original image if len(spawn_1) == 1:
# output_image = vision_stun.draw_rectangles(screenshot, rectangles) spawn_button_active = True
# cv.imshow("output_image", output_image) points = vision_stun.get_click_points(spawn_1)
# cv.waitKey(150) 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 len(rectangles) is not 5: if keyboard.is_pressed('p') == True or pause == True:
break pause = True
if keyboard.is_pressed('p') == True or pause == True: break
pause = True continue
break
# sort rectangles by top cv.waitKey(500)
rectangles = sorted(rectangles, key=itemgetter(1)) for rer in range(0, len(needles), 1):
screenshot = capture_window.get_screenshot_by_area(config.returnOKWindowPos())
rectangles = vision_stun.find(screenshot, cv.imread("dig/ok_button.jpg", cv.IMREAD_UNCHANGED), 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
while True:
# 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])
points = vision_stun.get_click_points(rectangles) 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)
move_breaker = check_and_move_tile(capture_window, vision_stun, config, if len(rectangles) is not 5:
[70, 70, rectangles[0][0] + 70, rectangles[0][1]], needles[rer], break
hsvs[rer], tresholds[rer], masks[rer], if keyboard.is_pressed('p') == True or pause == True:
points[1], [points[0][0] + 70, points[0][1]]) pause = True
if move_breaker: break
break
if keyboard.is_pressed('p') == True or pause == True: # sort rectangles by top
pause = True rectangles = sorted(rectangles, key=itemgetter(1))
break
move_breaker = check_and_move_tile(capture_window, vision_stun, config, points = vision_stun.get_click_points(rectangles)
[70, 70, rectangles[0][0], rectangles[0][1] + 70], needles[rer],
hsvs[rer], tresholds[rer], masks[rer], move_breaker = check_and_move_tile(capture_window, vision_stun, config,
points[2], [points[0][0], points[0][1] + 70]) [70, 70, rectangles[0][0] + 70, rectangles[0][1]], needles[rer],
if move_breaker: hsvs[rer], tresholds[rer], masks[rer],
break points[1], [points[0][0] + 70, points[0][1]])
if keyboard.is_pressed('p') == True or pause == True: if move_breaker:
pause = True break
break if keyboard.is_pressed('p') == True or pause == True:
move_breaker = check_and_move_tile(capture_window, vision_stun, config, pause = True
[70, 70, rectangles[0][0] + 70, rectangles[0][1] + 70], break
needles[rer], hsvs[rer], tresholds[rer], masks[rer], move_breaker = check_and_move_tile(capture_window, vision_stun, config,
points[3], [points[0][0] + 70, points[0][1] + 70]) [70, 70, rectangles[0][0], rectangles[0][1] + 70], needles[rer],
if move_breaker: hsvs[rer], tresholds[rer], masks[rer],
break points[2], [points[0][0], points[0][1] + 70])
move_tile(config, points[4], [points[0][0], points[0][1]]) if move_breaker:
if keyboard.is_pressed('p') == True or pause == True: break
pause = True if keyboard.is_pressed('p') == True or pause == True:
break pause = True
# debug the loop rate break
print('FPS {}'.format(1 / (time() - loop_time))) move_breaker = check_and_move_tile(capture_window, vision_stun, config,
loop_time = time() [70, 70, rectangles[0][0] + 70, rectangles[0][1] + 70],
cv.waitKey(150) 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() - loop_time)))
loop_time = time()
cv.waitKey(150)
def check_and_move_tile(capture_win, visio, conf, rect, needl, hsv, tresh, mask, point_source, point_dest): def check_and_move_tile(capture_win, visio, conf, rect, needl, hsv, tresh, mask, point_source, point_dest):