Bot simple en PHP para World Of Warcraft ( Linux )
World of Warcraft es un juego MMORPG que goza de bastante popularidad, durante un tiempo estuve jugando a este juego y lo deje ya que cada vez (en mi opinión) ha perdido más y más calidad. Traicionando la empresa a los jugadores mas veteranos para conseguir más y más altas, como siempre las grandes masas han hundido un producto bueno.
Durante un tiempo me plantee si era buena idea publicar este mini-howto, puesto que quizás lo único que conseguiré es que más y más críos sin interés en investigar maneras imaginativas de hacer trampas ( hacer trampas es algo bueno ) se dediquen a copiar y pastear 4 lineas sin entender nada. Aún así y como me dijeron hace poco, hay un buen motivo para publicar esto: la información debe ser libre.
Bot PHP para World of Warcraft
El bot requiere Linux
Repito que este Bot funciona solo en Linux, en Windows, seguramente algo parecido no seria aplicable debido a las enormes cantidades de Spyware que Blizzard introduce en el juego, destinado 'en teoría' a evitar que los jugadores hagan trampas, pero spyware después de todo. Recalcado este punto, los que dejen un comentario preguntando como se hace en Windows serán ejecutados.
Limitaciones del bot
Este 'bot' tiene ciertas limitaciones, ya que en realidad no interactua con el juego, en cierto modo es 'ciego' y no puede saber lo que esta ocurriendo en el juego. Es decir, no sabe si el jugador esta vivo o muerto, si hay un enemigo cerca o no ni cuanta vida tiene el jugador, no sabe si estas en combate o no. Este bot solo sirve para efectuar operaciones repetitivas o cansinas, por ejemplo, farmear un tipo concreto de enemigo, soltar tonterías incansablemente por el chat, o permanecer quieto durante horas hasta que esa mina reaparezca y así farmearla otra vez. Probablemente la mejor aplicación es farmear un tipo de ítem en concreto para su posterior venta.
Requisitos
Para usar este bot tendremos que tener instalado Linux, el programa XTE y PHP, hacer funcionar Warcraft sobre Linux es otro tema que no trataremos aquí hay estupendas guías en internet para hacerlo, y con las ultimas versiones de Wine es realmente fácil. Este NO es el lugar adecuado al que enviar comentarios acerca de eso.
Funcionamiento del bot
Nuestro bot funcionará enviando teclas falsas a la aplicación de Warcraft, en teoría y gracias a que Blizzard no nos deja a los jugadores de Linux mas alternativa que emular un Sistema Operativo para poder jugar a ese juego por el cual también pagamos, este proceso de envío de teclas quedará fuera de la emulación y no sera visible por toda esa basura que espia nuestro PC y que Blizzard nos instala con el juego.
Si miramos la pagina man de xte podemos ver que es una aplicación que permite enviar teclas y eventos de ratón al sistema gráfico X11, podemos programar cosas como, hacer click en el menu, hacer click en editor de textos, escribir "HOLA", pulsar control+s para guardar y ALT+F4 para cerrar el editor. Para más info consultar la man page de xte.
Programar el bot
En nuestro caso vamos a programar un Bot para que quedándose nuestro jugador quieto en una zona vaya marcando enemigos cercanos y exterminándolos, para recoger el drop. En el caso de ejemplo el jugador era un warlock, con otros jugadores tunearemos las secuencias de teclas según convenga, hay que tener en cuenta que al final el enemigo debe morir delante nuestro, ya que el bot desconoce su posición y no podrá acercarse a el para recoger lo que suelte. En esta ejemplo el juego esta configurado para recoger automáticamente el drop, eso es, con un solo click recoger todo lo que el bicho suelte.
<?php
// funciones de teclas y raton
function runKey($key){
$h=fopen('bt.txt','w');
fwrite($h,"key $key\n");
fclose($h);
exec("xte < bt.txt");
}
// Click derecho
function rightClick(){
$h= fopen('bt.txt','w');
fwrite($h,"mouseclick 3\n");
fclose($h);
exec("xte < bt.txt");
}
// Mover raton
function mouseMove($x,$y){
$h=fopen('bt.txt','w');
fwrite($h,"mousemove $x $y\n");
fclose($h);
exec("xte < bt.txt");
}
// Esperar de 1,6 a 2 segundos
function duerme(){
$x=rand(1600000,2000000);
usleep($x);
}
// Clicks alrededor del personaje
// para recoger drop
function pillaDrop(){
for ($x=180;$x<380;$x=$x+30){
for ($y=300;$y<500;$y=$y+30){
mouseMove($y,$x);
rightClick();
duermep();
}
}
}
// ------------------------ INICIO ---------- //
// Esperamos 5 segundos para que el usuario pueda
// seleccionar la ventana de warcraft antes de empezar
sleep(5);
// Iniciamos un bucle infinito
while(1){
runkey('Tab'); // Marcamos enemigo mas proximo
duerme(); // Esperamos
runKey('y'); // Warlock > Poseer
duerme(); // Esperamos
runKey('6'); // Warlock maldicion de agonia
duerme(); // Esperamos
runKey('4'); // Warlock corrupcion
duerme(); // Esperamos
runKey('5'); // Warlock, dolor abrasador
pillaDrop(); // Clickeamos alrededor del personaje
// para recoger drop
// Este bloque se ejecutara cada 5 veces
if($aux%5==0){
runKey('r'); // Lock, transfusion de vida
sleep(4); // Esperamos 4 seg
runKey('w'); // Paso adelante
runKey('a'); // paso atras
}
// Este bloque se ejecutara cada 12 veces
if($aux%10 == 0){
runkey("F12"); // Lock Armadura demoniaca
}
$aux++;
}
// Fin de bucle infinito
?>
El código esta comentado y es bastante simple, en este caso el bot esta programado para marcar a los enemigos cercanos, el compañero del warlock en este ejemplo era el sucubo en defensivo pero con el enamorar desactivado para maximizar daño sin que nos quiten el agro, recordemos que el mob debe morir cerca del personaje para que este pueda recoger el drop. La combinación para matar seleccionada fue: 'poseer','agonia','corrupción', y 'dolor abrasador'.
Colocando el personaje
Tras esto, entendemos que el mob esta muerto, y procedemos a clickear alrededor del personaje para que lo despoje. Enemigos mas duros pueden requerir un poco mas de fuego para morir, y deberiamos posicionarnos en algún sitio seguro antes de lanzar el bot, se recomienda cerca de donde reaparezcanlos enemigos que queremos farmear, pero sin posibilidad de que nos ataquen desde la espalda o desde los lados, los enemigos deberían respawnear un poco apartados de nosotros para evitar recibir demasiados tortazos, pero que estén a rango de seleccionarlos con el tabulador, un ejemplo gráfico:
Arranque del bot
Una vez estamos ejecutando Warcraft y nuestro personaje esta en posición, pulsaremos alt+tab para volver al entorno gráfico, abriremos una consola y ejecutaremos el programa anterior, si lo guardamos como bot.php, pues algo así:
user@computadora:~$ php bot.php
Ahora, rápidamente antes de que pasen los 5 segundos de espera, volvemos a la aplicación de Warcraft y esperamos a que el script tome el control del personaje. Nuestro personaje empezara a lanzar fuego contra los mobs y a recoger sus drops. Si cuando recoga el drop veis que hay algun problema, que por ejemplo los clicks del ratón no llegan, probada a jugar un poco con la posición de la camara.
Si todo salió bien podemos ir a tomar unas cañas mientras nuestro lock mata mobs y recoge premios :)
Update: Las posiciones de ratón que hay en el código están pensadas para que el jugador use una resolución de pantalla de 800x600, deberéis seleccionar esa resolución para que funcione bien, o adaptar el código.