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:


Imagen del sitio adecuado para el bot

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.

Quizás te interese:

Jedit, un editor de texto para programadores

Fluxcripts, controlando fluxbox desde PHP

Introducción a la programación de virus en PHP

Comentarios

xsb
2009-06-21 10:11:55

Me alegro que te hayas decidido a publicarlo

kosak01
2009-06-23 11:20:50

Oh amo y webmaster nuestro:

todo paso dado a conseguir el derrumbamiento de lo que es, es un gran paso. He dicho.

kosak01

PS. esto me recuerda al credo final de Aenea en El Ascenso de Endymion: tras muchos años meditando, Aenea, una especie de mesías (spoiler spoiler spoiler hija de un cyborg poeta y de una humana, y capaz de vagar por el tiempo, entre otras virtudes), acaba decidiendo que su religión sea sólo:" Elige de nuevo."

PPS: vale, cargar contra el capitalismo y la democracia capitalista en un post sobre un bot del Wow es un poco basto... pero todo llegará. Esperemos :)

Envía un comentario, es gratis.

NidoDeCuervos | RSS | Contacto