Tipo de Conteúdo
Perfis
Fóruns
Atualizações
Quizzes
Raffles
Store
Tudo que bill3002 postou
-
Muitos de nós escolhemos nossos nicknames por motivos curiosos, aleatórios ou cheios de significado. Alguns vêm de personagens, outros de apelidos de infância, datas marcantes, jogos, combinações únicas ou simplesmente algo que apareceu na mente na hora.
-
Apresento o GunBound Precision HUD, uma ferramenta desenvolvida para jogadores que desejam precisão nos disparos, sem precisar usar macros invasivos ou realizar cálculos manuais. Este HUD atua como um assistente visual inteligente, que lê diretamente do jogo os dados de vento, ângulo e posição do inimigo, e retorna em tempo real: Distância até o alvo Força ideal para acertar com precisão Curva simulada da trajetória do disparo Todos os dados são exibidos em uma janela flutuante, leve e transparente O diferencial deste script é que ele é 100% automático: Não exige imagens externas Não exige configurar coordenadas no código Não realiza nenhuma ação automática (sem risco de ban) Apenas informa com precisão o que o jogador deve fazer. # GunBound Precision HUD – Revisado # Requisitos: pip install opencv-python pytesseract pillow pyautogui numpy keyboard # Tesseract OCR: [Hidden Content] import math, time, os, threading import cv2, pytesseract, pyautogui, numpy as np, keyboard import tkinter as tk from PIL import ImageGrab # ========================== # CONFIGURAÇÕES # ========================== INTERVALO_ATUALIZACAO_MS = 800 # 500–1000 recomendado FORCA_MIN, FORCA_MAX = 20, 100 DIST_PADRAO_PX = 300 WIND_MIN, WIND_MAX = -9, 9 ANG_MIN, ANG_MAX = 0, 89 HSV_RED_1 = ((0, 120, 120), (10, 255, 255)) # faixa 1 do vermelho HSV_RED_2 = ((170,120, 120), (180,255, 255)) # faixa 2 do vermelho LOG_ARQ = "hud_log.txt" # Ajuste o caminho do Tesseract se necessário (Windows padrão). try: if os.name == "nt": pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" except: pass # DPI awareness (evita deslocamento de coordenadas no Windows com escala >100%) try: if os.name == "nt": import ctypes ctypes.windll.user32.SetProcessDPIAware() except: pass # ========================== # LOG # ========================== def log(msg): ts = time.strftime('%Y-%m-%d %H:%M:%S') with open(LOG_ARQ, "a", encoding="utf-8") as f: f.write(f"[{ts}] {msg}\n") # ========================== # OCR ROBUSTO # ========================== def ocr_digits_from_img(img_bgr): g = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY) g = cv2.resize(g, None, fx=1.8, fy=1.8, interpolation=cv2.INTER_CUBIC) g = cv2.medianBlur(g, 3) _, bw = cv2.threshold(g, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) cfg = "--oem 3 --psm 7 -c tessedit_char_whitelist=0123456789-+" txt = pytesseract.image_to_string(bw, config=cfg) txt = (txt or "").strip() # Normalizações comuns de OCR txt = (txt .replace('−', '-') # minus unicode .replace('—', '-') # em dash .replace('–', '-') # en dash .replace('O', '0').replace('o', '0') .replace('|', '1').replace('I', '1')) return txt def detectar_texto(bbox): try: img = ImageGrab.grab(bbox=bbox) img_bgr = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR) return ocr_digits_from_img(img_bgr) except Exception as e: log(f"OCR erro: {e}") return "" def to_int_safe(txt, default=0, minv=None, maxv=None): s = ''.join(ch for ch in (txt or "") if ch in "+-0123456789") try: v = int(s) if minv is not None and v < minv: return default if maxv is not None and v > maxv: return default return v except: return default # ========================== # BUSCA ADAPTÁVEL POR HUD # ========================== def scan_grid(): W, H = pyautogui.size() step_x = max(40, W // 40) step_y = max(16, H // 60) y0, y1 = int(0.07 * H), int(0.55 * H) for y in range(y0, y1, step_y): for x in range(0, W, step_x): yield x, y def localizar_valor_angulo(): W, H = pyautogui.size() w, h = max(50, W//32), max(20, H//60) for x, y in scan_grid(): bbox = (x, y, x + w, y + h) txt = detectar_texto(bbox) val = to_int_safe(txt, default=-999, minv=ANG_MIN, maxv=ANG_MAX) if val != -999: log(f"Ângulo candidato '{txt}' @ {bbox} => {val}") return bbox return None def localizar_valor_vento(): W, H = pyautogui.size() w, h = max(60, W//26), max(20, H//60) for x, y in scan_grid(): bbox = (x, y, x + w, y + h) txt = detectar_texto(bbox) val = to_int_safe(txt, default=-999, minv=WIND_MIN, maxv=WIND_MAX) if val != -999: log(f"Vento candidato '{txt}' @ {bbox} => {val}") return bbox return None # ========================== # DETECÇÃO DE INIMIGO (HSV) # ========================== def detectar_distancia(): try: scr = cv2.cvtColor(np.array(ImageGrab.grab()), cv2.COLOR_RGB2BGR) hsv = cv2.cvtColor(scr, cv2.COLOR_BGR2HSV) m1 = cv2.inRange(hsv, HSV_RED_1[0], HSV_RED_1[1]) m2 = cv2.inRange(hsv, HSV_RED_2[0], HSV_RED_2[1]) mask = cv2.bitwise_or(m1, m2) cnts = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] if cnts: c = max(cnts, key=cv2.contourArea) x Requisitos Windows 10 ou superior Python 3 instalado Tesseract OCR instalado GunBound em modo janela HUD padrão do jogo com valores visíveis (ângulo e vento) Instalação 1. Instale o Python Baixe em: [Hidden Content] Marque “Add Python to PATH” durante a instalação Finalize normalmente 2. Instale as dependências: Abra o Prompt de Comando e execute: pip install pyautogui pillow opencv-python pytesseract numpy keyboard 3. Instale o Tesseract OCR: Baixe em: [Hidden Content] Instale normalmente Copie o caminho de instalação (exemplo): C:\Program Files\Tesseract-OCR\tesseract.exe No final do script, edite esta linha: pytesseract.pytesseract.tesseract_cmd = r"C:\\Program Files\\Tesseract-OCR\\tesseract.exe" Como usar 1. Inicie o GunBound (modo janela) 2. Execute o script com: Gunbound.py 3. O HUD será exibido com os dados: Ângulo atual Vento atual Distância até o inimigo Força ideal Curva de disparo simulada 4. Para recalcular manualmente, pressione Ctrl + R Resolução mínima recomendada: 1024 x 768 (modo janela) Essa resolução garante que: Os valores de ângulo e vento fiquem visíveis e legíveis na tela A janela da HUD flutuante tenha espaço suficiente para exibir as informações A varredura do OCR não seja prejudicada por artefatos visuais Importante: O script foi otimizado para modo janela (não em tela cheia exclusiva). Em modo janela, o OCR funciona corretamente porque o sistema pode capturar a tela diretamente. Em resoluções inferiores a 800x600, o OCR terá alta taxa de erro ou não encontrará os valores HUD. Possíveis problemas e soluções HUD não detectada: Use a HUD padrão do jogo com ângulo e vento visíveis Números lidos incorretamente: Aumente brilho do jogo ou melhore a fonte da HUD OCR falha ou retorna vazio: Verifique o caminho do Tesseract no final do código Distância incorreta: Ajuste a cor do inimigo no código (padrão: vermelho puro) Script leve, sem dependências externas além do Python. Ideal para quem deseja acertar com precisão real, sem violar regras ou depender de automações.
- 34 respostas
-
- 474
-
-
-
-
-
Vi que ultimamente está tendo uma boa procura para um macro de Lan, então tomei a liberdade de ajustar os Autodrop postado anteriormente para que funcione como um macro para Lan, onde ele irá andar dentro da zona de drop (não é tão preciso). Ele fará uma verificação de onde o personagem está, com isso ele entrará na zona de drop e fará a filtragem dos itens que julgar preciosos para o player. import pyautogui import cv2 import numpy as np import time import os from PIL import ImageGrab Caminhos para os templates (imagens dos itens e do mapa) TEMPLATE_DIR = "templates/" ITEM_LAN_KEY_IMAGE = TEMPLATE_DIR + "item_lan.png" # Imagem do item que entra na Lan CHECK_LAN_ZONE_IMAGE = TEMPLATE_DIR + "zona_lan_check.png" # Imagem que confirma que o player está na Lan Região da tela onde está o inventário (ajuste conforme sua resolução e posição) INVENTORY_REGION = {"left": 1440, "top": 160, "width": 420, "height": 460} Lista de itens que NÃO devem ser deletados (itens importantes ou usados pelo macro) WHITELIST = [ "templates/item_valioso1.png", "templates/item_valioso2.png", "templates/item_lan.png" # protege o item de entrada da Lan ] Captura uma imagem da região do inventário da tela def capture_inventory(region): bbox = (region["left"], region["top"], region["left"] + region["width"], region["top"] + region["height"]) screenshot = ImageGrab.grab(bbox=bbox) return cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR) Procura por uma imagem (template) dentro da captura atual da tela def match_template(image, template_path, threshold=0.85): if not os.path.exists(template_path): print(f"Template não encontrado: {template_path}") return [] template = cv2.imread(template_path) result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) locations = np.where(result >= threshold) return list(zip(locations[1], locations[0])) # retorna lista de coordenadas Simula clique com botão direito na tela, nas coordenadas recebidas def right_click(x, y): pyautogui.moveTo(x, y) pyautogui.click(button='right') Verifica se já está dentro da zona da Lan; caso não esteja, procura e usa o item de entrada def usar_item_entrada_lan(): print("Verificando se já estamos dentro da zona da Lan...") screenshot = capture_inventory(INVENTORY_REGION) if match_template(screenshot, CHECK_LAN_ZONE_IMAGE, 0.85): print("Já estamos na zona da Lan.") return print("Procurando item de entrada para a Lan...") matches = match_template(screenshot, ITEM_LAN_KEY_IMAGE, 0.85) if matches: x, y = matches[0] abs_x = x + INVENTORY_REGION["left"] abs_y = y + INVENTORY_REGION["top"] right_click(abs_x, abs_y) # usa o item com clique direito print("Item usado. Aguardando teleporte...") time.sleep(5) # espera o tempo do teleporte else: print("Item de entrada para a Lan não encontrado.") Percorre o inventário e remove os itens que não estão na whitelist def manage_inventory(screenshot): for file in os.listdir(TEMPLATE_DIR): if file.startswith("item_") and os.path.join(TEMPLATE_DIR, file) not in WHITELIST: path = os.path.join(TEMPLATE_DIR, file) matches = match_template(screenshot, path, 0.9) for (x, y) in matches: abs_x = x + INVENTORY_REGION["left"] abs_y = y + INVENTORY_REGION["top"] right_click(abs_x, abs_y) # deleta com clique direito print(f"Item deletado: {file} em ({abs_x}, {abs_y})") time.sleep(0.2) # tempo entre cliques Função principal do macro: entra na Lan e gerencia o inventário def main(): print("Macro Lan + AutoDrop iniciado.") usar_item_entrada_lan() # entra na Lan se ainda não estiver time.sleep(2) # Loop infinito que gerencia o inventário while True: screenshot = capture_inventory(INVENTORY_REGION) manage_inventory(screenshot) time.sleep(5) # tempo entre verificações if name == "main": main() Esse código eu testei apenas em um servidor de testes, então qualquer dúvida ou bug, comente aqui que vamos melhorar, mas como o objetivo é criar algo interativo e didático, iremos fazer juntos.
- 6 respostas
-
- 243
-
-
-
-
Boa noite galera, venho aqui repassar um projeto que estava trabalhando a um bom tempo atrás. Se trata de um sistema feito em python, para automatizar a exclusão de itens indesejados no inventário do game com base nas imagens configuradas. (Para quem quer saber mais, o código trabalha conforme alguns robôs de produção, os mesmos que separam produtos com defeitos nas fabricas, se quiser saber mais posso explicar depois). O sistema foi feito com python e usa bibliotecas como Opencv, Pyautogui e mss para capturar a tela, identificar itens por imagem e realizar o drop automaticamente em clientes com interfaces que contem a lixeira no inventário (confirmação de exclusão) ou descarte jogando no chão. Por se tratar de um projeto não concluido, estou repassando para estudos e aprimoramento, espero que quem utilize-o, não faça algo que de alguma forma prejudique os servidores. Também vale ressaltar, que por se trata de um macro de imagem, ele captura a tela do computador e consequentemente o wyd.exe aberto, fazendo com que você precise identificar as coordenadas em sua tela e utilizar tais coordenadas para estar aplicando a configuração do macro (ele se torna indetectável para anti-cheats) Como usar: Código: Observações importantes: 1. Certifique-se de criar a pasta Templates e colocar as imagens dos itens que deseja excluir dentro dela. 2.As coordenadas de região do inventário, slot de exclusão e botão de confirmação precisam ser ajustadas de acordo com sua tela. Podendo usar o pyautogui.position() para pegar as coordenadas corretas. 3. Talvez a função de capturar coordenadas em modo de tela cheia do WYDFAK possa pegar as coordenadas. (não testei) 4. Isso é só a ponta de um projeto incrível que pode ser feito NÃO TESTE COM SEUS ITENS OU DROPS QUE TEM VALOR ALTO Tive essa ideia de projeto, quando estava fazendo uma automação que separa paçocas quebradas.
- 5 respostas
-
- 42
-
-
