def transferAllObjects(self, filter=None): if filter: Region(1354, 810, 44, 5).click() # click on search region sleep(2) pyautogui.write(filter) Region(1248, 138, 34, 33).click() # click transfer sleep(2) Region(1276, 178, 222, 23).click() # click transfer visible dofus.INV_FIRST_SLOT_R.waitAppear(dofus.EMPTY_SLOT_INV_P)
def discharge(self): self.goToBank() self.openBank() Region(1469, 142, 29, 26).click() # choose resources tab sleep(2) self.transferAllObjects() Region(1418, 146, 28, 15).click() # choose consumable tab sleep(2) self.transferAllObjects("sac") Region(1526, 109, 52, 22).click() # close sleep(1)
def goToZaap(self, zaap): print("moving to zaap: ", zaap['coords']) pyautogui.press(dofus.HAVRE_SAC_SHORTCUT) sleep(4) dofus.HAVRE_SAC_ZAAP_R.click() sleep(2) Region(1116, 230, 21, 14).click() pyautogui.write(zaap['name']) Region(910, 757, 105, 16).click() self.waitMapChange(*zaap['coords'], 60 * 15) if zaap['coords'] == (20, -29): Region(618, 729, 36, 24).click() sleep(4) return True
def goToBank(self): pyautogui.press(dofus.RAPPEL_POTION_SHORTCUT) sleep(2) self.updatePos() self.changeMap(dofus.RIGHT) sleep(2) Region(1067, 440, 25, 43).click() # enter bank click
def goToZaap(self, zapCoords): print("moving to zaap: ", zapCoords) pyautogui.press(dofus.HAVRE_SAC_SHORTCUT) sleep(2) dofus.HAVRE_SAC_ZAAP_R.click() sleep(2) while dofus.ZAAP_SCROLL_BAR_END_L.getpixel( ) != dofus.ZAAP_END_SCROLL_C: print(dofus.ZAAP_SCROLL_BAR_END_L.getpixel()) for k in range(9): box_h = dofus.ZAAP_COORD_R.height() / 9 box_y = dofus.ZAAP_COORD_R.y() + k * box_h box_x = dofus.ZAAP_COORD_R.x() box_w = dofus.ZAAP_COORD_R.width() box_r = Region(box_x, box_y, box_w, box_h) image = env.capture(box_r) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) low_bound = np.array([145, 0, 0]) upper_bound = np.array([255, 255, 14]) bgr_img = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) mask = cv2.inRange(bgr_img, low_bound, upper_bound) result = cv2.bitwise_and(gray, gray, mask=mask) result = cv2.threshold(result, 0, 255, cv2.THRESH_BINARY_INV)[1] newShape = (int(box_w * 15), int(box_h * 15)) result = cv2.resize(result, newShape) result = cv2.blur(result, (5, 5)) text = pytesseract.image_to_string(result, config='--psm 6') res = re.findall("(-?\s*\d+),?(-?\s*\d+)", text) if res: coord = tuple( map(lambda x: int(x.replace(' ', '')), res[0])) print(coord) if coord == zapCoords: box_r.click() sleep(0.2) box_r.click() self.waitMapChange(*zapCoords, 60 * 15) if zapCoords == (20, -29): Region(618, 729, 36, 24).click() return True dofus.ZAAP_COORD_R.scroll(clicks=-3, delay_between_ticks=0.1) dofus.OUT_OF_COMBAT_R.hover() sleep(0.5) raise Exception("Zaap coords not found!")
def __init__(self, pgrid, x, y, i, j, ctype=dofus.ObjType.UNKNOWN): self.i = i self.j = j self.x = x self.y = y self.w = pgrid.cell_w self.h = pgrid.cell_h self.grid = pgrid self.extEllipse = (0.55, 0.6) self.type = ctype self.color = None self.rx, self.ry = self.x - self.grid.x(), self.y - self.grid.y() self.dotted = False self._r = Region(self.x - self.w / 2, self.y - self.h / 2, self.w, self.h)
def loadFromFile(self, filepath, patternsDir): with open(filepath, 'r') as f: data = yaml.load(f, Loader=yaml.FullLoader) self.name = data['name'] for dmap in data['maps']: nmap = Map(self, dmap['x'], dmap['y']) nmap['nbrseen'] = dmap['nbrseen'] nmap['excludedMaps'] = dmap['excludedMaps'] nmap['excludedSpots'] = dmap['excludedSpots'] for spot in dmap['spots']: pattern_path = os.path.join(patternsDir, spot['kind'], spot['patternId']) if os.path.exists(pattern_path): nmap['spots'].append({ 'region': Region(*spot['region']), 'pattern': Pattern(spot['kind'], pattern_path, spot['patternId']) }) self[(dmap['x'], dmap['y'])] = nmap
def discharge(self): pyautogui.press(dofus.RAPPEL_POTION_SHORTCUT) sleep(2) self.updatePos() self.changeMap(dofus.RIGHT) sleep(2) Region(1067, 440, 25, 43).click() # enter bank click dofus.BANK_MAN_R.waitAppear(dofus.BANK_MAN_P) dofus.BANK_MAN_R.click() # click on bank man dofus.BANK_MAN_TALK_R.waitAppear(dofus.BANK_MAN_TALK_P) Region(771, 737, 272, 40).click() # click first choice dofus.INV_OPEN_R.waitAppear(dofus.INVENTAIRE_P) Region(1469, 142, 29, 26).click() # choose resources tab sleep(2) self.transferAllObjects() Region(1418, 146, 28, 15).click() # choose consumable tab sleep(2) Region(1354, 810, 44, 5).click() # click on search region sleep(2) pyautogui.write("sac") self.transferAllObjects() Region(1526, 109, 52, 22).click() # close sleep(1)
import random import threading from time import sleep import cv2 from core import utils from core.bot import Fighter from core import env, Region env.focusDofusWindow() rcenter = Region(1185, 466, 80, 71) rup = Region(1066, 538, 34, 19) rout = Region(1126, 264, 41, 40) resource_r = Region(1166, 338, 127, 118) spots = [ Region(1166, 339, 40, 73), Region(1215, 362, 32, 67), Region(1255, 385, 38, 64) ] empty_spot_ptrn = [ cv2.imread(f"empty_spot{idx}.png", cv2.IMREAD_GRAYSCALE) for idx in range(3) ] am = {"range": 2, "nbr": 2, "shortcut": "r"} class AntiSaveScreen(threading.Thread):
from core.bot import Walker from core import Region from time import sleep import pyautogui from core import dofus, env env.focusDofusWindow() work_dir = os.path.dirname(os.path.abspath(__file__)) bot = Walker(work_dir, "John shooter") bot.mapChangeTimeOut = 60 for k in range(5): bot.goToBank() bot.openBank() Region(1469, 142, 29, 26).click() # choose resources tab sleep(2) bot.transferAllObjects() Region(382, 802, 30, 22).click() # craftable sleep(1) Region(1137,299,19,15).click() #first sleep(2) pyautogui.write("57") #quantity sleep(1) Region(1253,250,45,20).click() #ok sleep(2)
def transferAllObjects(self): Region(1248, 138, 34, 33).click() # click transfer sleep(2) Region(1276, 178, 222, 23).click() # click transfer visible dofus.INV_FIRST_SLOT_R.waitAppear(dofus.EMPTY_SLOT_INV_P)
import os import cv2 from PyQt5.QtCore import Qt from PyQt5.QtGui import QColor from core import Region, Location patterns_dir = r"C:\Users\khalid.majdoub\PycharmProjects\bot2pix\src\patterns" def loadPattern(name): return cv2.imread(os.path.join(patterns_dir, name)) RESIGN_POPUP_R = Region(698, 442, 533, 173) DEFEAT_POPUP_R = Region(762, 696, 415, 141) COMBAT_R = Region(335, 29, 1253, 885) MINIMAP_R = Region(62, 876, 190, 122) PM_R = Region(793, 993, 27, 34) PA_R = Region(729, 983, 55, 42) COMBAT_ENDED_POPUP_R = Region(841, 701, 244, 66) READY_R = Region(1312, 925, 145, 66) COMBAT_ENDED_POPUP_CLOSE_R = Region(1231, 721, 22, 18) MY_TURN_CHECK_R = Region(841, 1009, 17, 8) OUT_OF_COMBAT_R = Region(104, 749, 37, 37) CREATURE_MODE_R = Region(1339, 993, 27, 25) MAP_COORDS_R = Region(0, 28, 298, 98) CONNECT_R = Region(666, 88, 572, 531) RECONNECT_BUTTON_R = Region(880, 381, 161, 57) PLAY_GAME_BUTTON_R = Region(993, 652, 452, 260) BANK_MAN_R = Region(935, 465, 121, 126) BANK_MAN_TALK_R = Region(465, 601, 999, 236)
def openBank(): dofus.BANK_MAN_R.waitAppear(dofus.BANK_MAN_P) dofus.BANK_MAN_R.click() # click on bank man dofus.BANK_MAN_TALK_R.waitAppear(dofus.BANK_MAN_TALK_P) Region(771, 737, 272, 40).click() # click first choice dofus.INV_OPEN_R.waitAppear(dofus.INVENTAIRE_P)