Untitled
unknown
plain_text
2 years ago
9.7 kB
5
Indexable
# -*- coding: utf-8 -*- """ Created on Thu Mar 23 00:09:06 2023 @author: salihcanturan """ # dogrulamaBOT değişkeni bağlı olmaksızın her zaman çalışır dogrulamaBOT = True # me tinBOT açık olsun mu, Metin konfigürasyonu yapılmalı metinBOT = False # dereceBOT açık olsun mu, Skill konfigürasyonu yapılması gerekebilir dereceBOT = True # skillBOT skillBOT = False from pytesseract import pytesseract import threading import pygetwindow from pynput.keyboard import Key, Controller import win32api, win32con from win32gui import GetWindowText, GetForegroundWindow from PIL import ImageFont import pyautogui import mss import numpy as np import cv2 import time import pyuac import keyboard import pickle import uuid from unidecode import unidecode from DatasetLoader import getItemIconDictionary import re path_to_tesseract = r'C:\Program Files\Tesseract-OCR\tesseract.exe' pytesseract.tesseract_cmd = path_to_tesseract print('Is user admin?', pyuac.isUserAdmin()) WINDOW_NAME = 'Harbi2 | shaula666' titles = pygetwindow.getAllTitles() program_active = 100 stopApp = False screenshot = None dogrulama_screenshot = None active_window = None resized = None imageDataset = getItemIconDictionary() controller = Controller() def click(x, y): old = pyautogui.position() win32api.SetCursorPos((x,y)) time.sleep(0.1) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0) time.sleep(0.1) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0) win32api.SetCursorPos(old) def string_benzerligi(str1, str2): str1 = str1[:-4] str1 = str1.lower() str2 = str2.lower() str1 = re.sub('[^A-Za-z]+', '', unidecode(str1)) str2 = re.sub('[^A-Za-z]+', '', unidecode(str2)) toplam_benzerlik = 0 for karakter in set(str1 + str2): toplam_benzerlik += min(str1.count(karakter), str2.count(karakter)) return 100.0 * toplam_benzerlik / (len(str1) + len(str2)) + 1 def mse_benzerligi(img1, img2): return np.mean((img1[:,:,:3].astype("float") - img2.astype("float")) ** 2) metinThreadDone = True def metinBOTThread(region, ratio): global metinThreadDone metinThreadDone = False found = False x = None y = None # Metin tespit kısa kodu tüm piksellere bakar. for i in range(100, len(screenshot)-50, 2): for j in range(0, len(screenshot[0]), 2): blue = screenshot[i, j][0] green = screenshot[i, j][1] red = screenshot[i, j][2] if abs(150 - blue) < 40 and abs(46 - green) < 20 and abs(95 - red) < 20: found = True x = int(region['left']+j*(1/ratio)) y = int(region['top']+i*(1/ratio)) break if found: break if found: click(x, y) controller.press('q') time.sleep(1.5) controller.release('q') if found: time.sleep(10) metinThreadDone = True def dereceBOTThread(): global program_active ss = {'1': [0, 274], '2': [0, 174], '3': [0, 174]} curr_time = 0 cooldown = 30 while True and not stopApp and program_active > 0: if active_window != WINDOW_NAME: controller.release(Key.space) continue print(program_active) program_active -= 1 controller.press(Key.space) if curr_time % 40 == 0: controller.press('4') time.sleep(0.1) for skill in ss: ss[skill][0] -= 0.1 controller.release('4') curr_time += 1 if skillBOT: if cooldown > 0: cooldown -= 1 else: for skill in ss: if ss[skill][0] < 0 and cooldown <= 0: controller.press('h') time.sleep(0.2) controller.release('h') controller.press(skill) time.sleep(0.2) controller.release(skill) controller.press('h') time.sleep(0.2) controller.release('h') for skill2 in ss: ss[skill2][0] -= 0.4 ss[skill][0] = ss[skill][1] print(ss[skill][0], ss[skill][1]) curr_time += 4 cooldown = 40 curr_time += 1 time.sleep(0.1) for skill in ss: ss[skill][0] -= 0.1 def updateScreenshotThread(): global dogrulama_screenshot, screenshot sct = mss.mss() window = pygetwindow.getWindowsWithTitle(WINDOW_NAME) if len(window) == 0: return window = window[0] left, top = window.topleft right, bottom = window.bottomright region = {'top': top, 'left': left, 'width': right-left, 'height': bottom-top} raw_screenshot = sct.grab(region) raw_screenshot = np.array(raw_screenshot)[:,:,:3] ratio = 1000 / raw_screenshot.shape[0] width = int(raw_screenshot.shape[1] * ratio) height = int(raw_screenshot.shape[0] * ratio + 0.001) raw_screenshot = cv2.resize(raw_screenshot, (width, height), interpolation=cv2.INTER_AREA) screenshot = raw_screenshot.copy() dogrulama_screenshot = raw_screenshot[203:446, 405:884, :] return ratio, region, np.sum(dogrulama_screenshot[20:30, 0:100]) / \ np.prod(dogrulama_screenshot[20:30, 0:100].shape) < 20 def mainThread(): global stopApp, screenshot, active_window, metinThreadDone, resized, program_active i = 0 while True: program_active = 100 pack = updateScreenshotThread() if pack is None: time.sleep(0.5) continue ratio, region, validation_came = pack active_window = GetWindowText(GetForegroundWindow()) if not validation_came: if metinThreadDone and active_window == WINDOW_NAME and metinBOT: metinThread = threading.Thread(target=metinBOTThread, args=(region, ratio,)).start() time.sleep(0.1) if resized is not None: cv2.imshow("DOGRULAMA TESPIT", resized) continue if screenshot is None: time.sleep(0.1) continue if active_window != WINDOW_NAME: print(GetWindowText(GetForegroundWindow())) cv2.imshow("DOGRULAMA TESPIT", resized) if cv2.waitKey(1) == ord('x'): stopApp=True cv2.destroyAllWindows() break continue text_img = dogrulama_screenshot[5:40, 50:400, :] text = pytesseract.image_to_string(text_img, lang="tur") max_val = 0 max_key = None for key in imageDataset: if max_val < string_benzerligi(key, text): max_val = string_benzerligi(key, text) max_key = key image_to_compare = imageDataset[max_key] resized = cv2.resize(dogrulama_screenshot, (dogrulama_screenshot.shape[1]*2, dogrulama_screenshot.shape[0]*2), interpolation=cv2.INTER_AREA) resized = cv2.rectangle(resized, (100, 10), ((800, 80)), (0, 255, 0), 1) slots = [] for j in range(9): slots.append(cv2.resize(dogrulama_screenshot[45:165,10+j*52:50+j*52], (4, 12), interpolation=cv2.INTER_AREA)) min_fark = 9999999 match_idx = 0 for idx, slot in enumerate(slots): if min_fark > mse_benzerligi(image_to_compare, slot): match_idx = idx min_fark = mse_benzerligi(image_to_compare, slot) resized = cv2.rectangle(resized, (124, 90), ((204, 330)), (0, 255, 0), -1) for j in range(9): resized[90:330, 20+104*j:100+104*j] = cv2.resize(slots[j], (80, 240), interpolation=cv2.INTER_AREA) for j in range(9): if j == match_idx: print(text) print(max_key) click(int(region['left'] + (405 + 30+j*52) * (1/ratio)), int(region['top'] + (203 + 105) * (1/ratio)) ) time.sleep(0.1) cv2.rectangle(resized, (20+j*104, 90), ((100+j*104, 330)), (0, 255, 0), 5) else: cv2.rectangle(resized, (20+j*104, 90), ((100+j*104, 330)), (255, 0, 0), 1) font = cv2.FONT_HERSHEY_DUPLEX fontScale = 2 thickness = 2 cv2.putText(resized, re.sub('[^A-Za-z]+', '', unidecode(text)), (200, 70), font, fontScale, (0,255,0), thickness, cv2.LINE_AA) cv2.putText(resized, unidecode(max_key), (100, 400), font, fontScale, (0,255,0), thickness, cv2.LINE_AA) cv2.imshow("DOGRULAMA TESPIT", resized) if cv2.waitKey(1) == ord('x'): cv2.destroyAllWindows() stopApp=True break i += 1 if dereceBOT: threading.Thread(target=dereceBOTThread).start() mainThread()
Editor is loading...