Signup Now
Results 1 to 2 of 2
  1. #1
    Free User
    Join Date
    Mar 2014
    Posts
    1
    Reputation
    4
    Rep Power
    0

    Lightbulb Tibia, IA e Python

    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.
    Code:
    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])
    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 pavio

  2. #2
    Free User downloadkct's Avatar
    Join Date
    Dec 2013
    Location
    Rio de Janeiro
    Posts
    1,166
    Reputation
    25
    Rep Power
    23
    Quote Originally Posted by gugudada View Post
    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 pavio
    Last edited by Dworak; 10-31-2018 at 09:53 AM. Reason: Upload images to imgur.com
    Old 'n Proud Neobot-Elfbot and blackd user

 

 

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •