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:
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());
}
GlobalScreen.addNativeKeyListener(new AutoBot());
System.
out.
println("Usa / para lanzar autobot");
}
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;
}
double altura = screenSize.getHeight()/2;
double ancho = screenSize.getWidth()/2;
area.setBounds((int)altura-20, (int)ancho-20, 20, 20);
boolean noDisparar= false;
while(!noDisparar) {
area2.setBounds((int)altura-20, (int)ancho-20, 20, 20);
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")) {
try {
autoBot();
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
@Override
public void nativeKeyTyped(NativeKeyEvent e) {
}
}
Gracias, un saludo.