stalin_bro

bot

May 5th, 2022 (edited)
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.36 KB | None | 0 0
  1. """Бот для рыбалки WOW 3.3.5"""
  2. import time
  3. import os
  4. from PIL import ImageGrab
  5. import cv2
  6. import numpy as np
  7. import pyautogui
  8.  
  9. dev = False
  10. directory = 'floats'  # В случае наличия другой папки с поплавками указать путь к ней
  11. floats = os.listdir(directory)  # Получаем список шаблонов в папке
  12. # quantity_floats = len(floats)
  13.  
  14. def use_skill():
  15.     pyautogui.press('1')
  16.     time.sleep(2)
  17.     # print('Удочка закинута!', time.strftime("%M:%S", time.gmtime()))
  18.  
  19. def make_screenshot():
  20.     """Функция создания скриншотов, возвращает имя
  21.     и путь сохраненного скриншота"""
  22.     # Делаем и сохраняем скриншот
  23.     screen_screenshot = ImageGrab.grab()
  24.     screen_screenshot.save("screenshotsFS/screenshot.png")  # FS(For Search), нужно создать папку
  25.     return "screenshotsFS/screenshot.png"
  26.  
  27. def find_float(screenshot):
  28.     # print('Старт функции поиска', time.strftime("%M:%S", time.gmtime()))
  29.     """Функция поиска поплавка по шаблонам.
  30.    В нее подгружаются скриншоты постоянно.
  31.    На основе шаблона ищется поплавок"""
  32.     for float in floats:
  33.         # Считываем шаблон, необходимо делать шаблон под локацию
  34.         template = cv2.imread(f"floats/{float}", 0)
  35.         w, h = template.shape[::-1]
  36.         # Считываем скриншот
  37.         img_rgb = cv2.imread(screenshot)
  38.         img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
  39.         # Поиск по шаблону с помощью OpenCV
  40.         res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
  41.         # Порог точности
  42.         threshold = 0.6
  43.         # numpy фильтрует наши результаты по порогу
  44.         loc = np.where(res >= threshold)
  45.  
  46.         # выводим результаты на картинку
  47.         for pt in zip(*loc[::-1]):
  48.             cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
  49.             x = int(pt[0])
  50.             y = int(pt[1])
  51.         # и если результаты всё же есть, то возвращаем координаты и сохраняем картинку
  52.         if loc[0].any():
  53.             # print(loc[0], x, y)
  54.             # print(f'Поплавок {float} найден!', time.strftime("%M %S", time.gmtime()))
  55.             cv2.imwrite(f'succesS/result{time.strftime("%M %S", time.gmtime())}.png', img_rgb)
  56.             # print('Конец функции поиска', time.strftime("%M:%S", time.gmtime()))
  57.             return (x + w / 2), (y + h / 2), x, y, w, h # возврат координат в случае успеха
  58.  
  59. def move_mouse(coordinates):
  60.     """Перемещение мыши к координатам из find_float"""
  61.     pyautogui.moveTo(coordinates)
  62.     time.sleep(1)
  63.  
  64. def check_fish(coordinates, arg):
  65.     """Проверка поклёвки"""
  66.     success = False
  67.     average = [0]
  68.     x, y, w, h = coordinates
  69.     for _ in range(arg):
  70.         clean_screen = ImageGrab.grab(bbox=(x, y, x + w, y + h))  # получение скрина поплавка
  71.         mean = np.mean(clean_screen)
  72.         # print(mean)
  73.         diff = average[-1] - mean
  74.         print(average[-1] - mean)
  75.         average.append(mean)
  76.         return diff >= 4
  77.  
  78.  
  79. def snatch():
  80.     """Вытаскивание рыбы"""
  81.     pyautogui.click(button='right')
  82.     print('Рыба поймана')
  83.  
  84. def main():
  85.     use_skill()
  86.     screenshot = make_screenshot()
  87.     coordinates = find_float(screenshot)
  88.     if coordinates:
  89.         coord4move = coordinates[0], coordinates[1]
  90.         move_mouse(coord4move)
  91.         coord4check = coordinates[2], coordinates[3], coordinates[4], coordinates[5]
  92.         # print(coord4check)
  93.         # print(check_fish(coord4check))
  94.         if check_fish(coord4check, 10):
  95.             snatch()
  96.         else:
  97.             print('Поплавок не обнаружился на поклевку')
  98.             time.sleep(5)
  99.             snatch()
  100.  
  101.     else:
  102.         print('Поплавок не найден')
  103.  
  104.  
  105. for _ in range(50):
  106.     time.sleep(3)
  107.     main()
Add Comment
Please, Sign In to add comment