Experimento de "truco" simple para Counter-strike en Java

Iniciado por snake_linux, 1 Diciembre 2019, 22:04 PM

0 Miembros y 1 Visitante están viendo este tema.

snake_linux

Buenas, estoy escribiendo un "truco" para CSGO muy simple en Java, es para fines educativos exclusivamente, por cacharrear, no tengo intención de utilizarlo para ganar.

Básicamente lo que quiero es que cuando el enemigo se ponga en la mira (que siempre está justo en el centro de la pantalla) se produzca un disparo, para ello necesito que el programa haga una "captura" de una pequeña región en el centro de la pantalla y lo compare con otras capturas que hace constantemente para ver si se ha producido o no un cambio.

Además, utilizo una biblioteca externa para lanzar el evento (arrancar el bot para que se ponga a comparar), la comparación la hago pixel a pixel con una función que encontré en internet.

El problema es que creo que no se está centrando correctamente, ya que no me detecta el cambio en el centro de la pantalla pero si en otras areas.

Les dejo el código:

Código (Java) [Seleccionar]


import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

public class AutoBot  implements NativeKeyListener {

public static void main(String[] args) {


// Get the logger for "org.jnativehook" and set the level to off.
Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
logger.setLevel(Level.OFF);

try {
GlobalScreen.registerNativeHook();
} catch (NativeHookException ex) {
System.err.println("Error Nativehook");
System.err.println(ex.getMessage());

System.exit(1);
}



GlobalScreen.addNativeKeyListener(new AutoBot());
System.out.println("Usa / para lanzar autobot");

}

public static boolean bufferedImagesEqual(BufferedImage img1, BufferedImage img2) {

int margen=0;

   if (img1.getWidth() == img2.getWidth() && img1.getHeight() == img2.getHeight()) {
       for (int x = 0; x < img1.getWidth(); x++) {
           for (int y = 0; y < img1.getHeight(); y++) {
               if (img1.getRGB(x, y) != img2.getRGB(x, y))
                   return false;
           }
       }
   } else {
       return false;
   }
   return true;
}

public static void autoBot() throws AWTException {

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Robot robot = new Robot();

double altura = screenSize.getHeight()/2;
double ancho = screenSize.getWidth()/2;

Rectangle area = new Rectangle();
area.setBounds((int)altura-20, (int)ancho-20, 20, 20);
BufferedImage bufferedImage = robot.createScreenCapture(area);
boolean noDisparar= false;

while(!noDisparar) {

Rectangle area2 = new Rectangle();
area2.setBounds((int)altura-20, (int)ancho-20, 20, 20);
BufferedImage bufferedImage2 = robot.createScreenCapture(area2);

if(!bufferedImagesEqual(bufferedImage, bufferedImage2)) {
// robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
// robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
System.out.println("ha cambiado");
noDisparar = true;
}
}
}

@Override
public void nativeKeyPressed(NativeKeyEvent e) {

}


@Override
public void nativeKeyReleased(NativeKeyEvent e) {

String tecla = NativeKeyEvent.getKeyText(e.getKeyCode());

if (tecla.equals("Barra")) {
System.out.println("dale");
try {
autoBot();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}

@Override
public void nativeKeyTyped(NativeKeyEvent e) {

}
}


Gracias, un saludo.