Bom, não sei se aqui é um dos bons lugares para se expor um código, mas enfim, recentemente comecei a programar em python e encontrei uma biblioteca chamada OpenCV, essa biblioteca me despertou pelo fato de trabalhar com IA para reconher pessoas/objetos onde eu poderia até classificar um tipo de objetivo usando algumas outras bibliotecas junto ao OpenCV. Então resolvi brincar um pouco e consegui fazer um pequeno código para reconhecer qualquer item do tíbia na tela do computador, o que meu código faz é capturar a tela em tempo real, converter uma imagem em PNG (essa imagem está sem bordas e pega apenas uma parte do item do tamanho de 15x15) para template, logo o opencv captura a posição da imagem na tela e me retorna, assim consigo colocar o cursor/ ponteiro em cima dela e fazer um click ou algo do tipo. Descobri que a sprite do item tem um aumento de 4 pixel quando está fora do inventario do seu personagem (no chão) então fiz um esquema pra quando o OpenCV comparar imagem do tamanho 15x15 e não encontrar, buscar novamente com o tamanho 19x19. Antes de colocar aqui meu código gostaria de lembrar o motivo por usar python que pode ser substituido por qualquer outra linguagem. O python você pode migrar para um linux facilmente alterando a biblioteca para capturar tela (no linux n tem battleye), meu codigo é esse abaixo, espero que ajude nossa comunidade de bots.
Fiz pra minha resolução, pra ficar utilizável você devera ajustar o bbox para suas, e também pode-se utilizar o win32gui para capturar o tamanho da janela do tibia e a posição. o que fiz foi apenas uma faísca para o pavioCode:import time import pyautogui import cv2 import numpy as np from PIL import ImageGrab #simple bot for detect Tibia item image on screen without inject in client #You need only crop the image of item in 15x15 (for work) #note i develope this for works on 1360x768 resolution if you need another change the bbox on ImageGrab().grab #for completly use u need adapt this with win32gui (for get window rect/position) #Thanks a lot. #_JMG/Sleepy22 def imagesearch(image, precision=0.8): im = ImageGrab.grab() img_rgb = np.array(im) img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) w,h = image.shape[::-1] res = cv2.matchTemplate(img_gray, image, cv2.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) if max_val < precision: return [-1,-1] return max_loc def imageinrange(image,precision,type): if type == "ground": im = ImageGrab.grab(bbox=(288, 85, 897, 529)) img_rgb = np.array(im) img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) w, h = image.shape[::-1] res = cv2.matchTemplate(img_gray, image, cv2.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) if max_val < precision: return [-1, -1] return max_loc[0]+288, max_loc[1]+85 else: im = ImageGrab.grab(bbox=(1188, 40, 1360, 726)) img_rgb = np.array(im) img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) w, h = image.shape[::-1] res = cv2.matchTemplate(img_gray, image, cv2.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) if max_val < precision: return [-1, -1] return max_loc[0]+1188,max_loc[1]+40 def getground(image): template = cv2.imread(image, 0) template = cv2.resize(template, dsize=(19, 19), interpolation=cv2.INTER_CUBIC) tp = imageinrange(template,0.8,'ground') return tp def getinventory(image): template = cv2.imread(image, 0) template = cv2.resize(template, dsize=(15, 15), interpolation=cv2.INTER_CUBIC) tp = imageinrange(template, 0.8,'inventory') return tp def getall(image): tp = getground(image) if tp == [-1,-1]: tp = getinventory(image) return tp time.sleep(3) p = getall("teste.png") pyautogui.moveTo(p[0],p[1])