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])