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:

you2mp3 Convertir videos de youtube a mp3 en linux

Jedit, un editor de texto para programadores

Fluxcripts, controlando fluxbox desde 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 :)

Ahuvar
2010-05-01 07:40:04

Soy programador en PHP y buscando aplicaciones para WoW me he encontrado con este post. Se que hace mas de seis meses que no se ha publicado una respuesta, pero me he sentido obligado a escribir lo que sigue.

El post de apertura cita la diferencia que existe en el modelo de mercado que WoW lleva en este momento con el utilizado anteriormente. Os puedo garantizar que las estrategias, ademas de garantizar mas beneficios, se deben mas a una necesidad de supervivencia dentro del mercado de los MMORPGS mas que a un incontenible animo de lucro.
De todas formas, y habla alguien que ha jugado a D2 antes y despues de la 1.10 y conoce lo que los bots pueden causar, me parece curioso que cuando se plantean estas "luchas" solo se tengan en cuenta dos frentes: el del "enemigo", es decir Blizzard, y la "resistencia", esto es, los que propulsan la destruccion del WoW. Pues bien, existe un tercero, que es el de los millones de jugadores que disfrutan con la experiencia actual, entre los que me incluyo, y que no desean que nadie venga a joderles la marrana, y menos sin ni siquiera pararse a considerar su opinion.

Estoy de acuerdo en que el capitalismo extremo que vivimos no es beneficioso, que en vez de aumentar la calidad de vida exprime los recursos del planeta para crear productos a veces inutiles y que, de unas decadas a esta parte, no crecen en calidad, sino todo lo contrario, se diseñan para que su vida util sea menor y asi recomenzar mas rapido el ciclo consumista, pero... ¿es este el caso de Blizzard?

Nada mas. Se que se tendra poca consideracion a este post en estos foros, pero no es este mi objetivo. Solo intento sacaros del chauvinismo en el que tiende a moverse cualquier movimiento contra lo establecido. Un saludo.

Laurence Shimoda
2010-05-02 12:22:19

Hola Ahuvar,

No te preocupes por el tiempo que lleve este post, en primer lugar entiendo tu punto de vista, entiendo que añadan contenidos para 'mejorar' la experiencia de juego, pero no creo que lo hagan para alargar la vida del producto, es decir, si la alargan, pero simplemente porque es más barato que programar una nuevo juego desde cero. Mientras puedan cobrar mensualidades y expansiones no tienen necesidad de crear un nuevo Wow, algo que por lógica será mas caro que sacar una expansión.

Ten en cuenta que este artículo y el código que lo acompaña no son un intento de atacar a la compañía, es simplemente información: 'esto es lo que se puede hacer y así es como se hace.'

Esta información es pública así que si han detectado que con esto se puede hacer trampa y les ha interesado han tenido tiempo de sobras para buscar una solución.

Se que los bots pueden dañar un juego tipo MMRPG, pero que la compañía permita comprar ventajas con dinero real también perjudica el juego mucho más, y se permite y se promociona.

Adicionalmente, por el simple motivo de que este bot requiere linux, el daño que pueda hacer es insignificante en comparación a el que hace la compra/venta de oro, de personajes, muchos addons permitidos, o la venta por dinero real por parte de la compañía de facilidades como cambios de raza, facción, o objetos varios( aunque solo sean decorativos ).

Si que hay alguna critica a la compañía en el texto, pero no es ni mucho menos una 'llamada a las armas', es más bien una opinión de quien escribe, a quien no le guste el juego que no juegue, a quien no le guste la compañía que no juegue, a quien le guste o le de igual, pues que se divierta con el juego.

El software cliente de warcraft ha sido acusado en varias ocasiones de contener spyware, en teoría enfocado a detectar si los jugadores hacen trampas, no puedo asegurar que ese sea su único cometido, así que simplemente me lo creeré, sin embargo debemos tener en cuenta que ese spyware serviría también en Linux si tras todas las peticiones por parte de tantos usuarios se hubiesen tomado la molestia de crear un cliente nativo. El spyware continuaría siendo algo éticamente 'malo' pero al menos los jugadores de linux (que también pagamos) podríamos jugar decentemente.

En parte lo que oculta este bot tan simple es el echo de que para jugar al wow en linux debas hacerlo dentro de wine, una solución tirando a cutre.

A tu pregunta de si es este el caso de Blizzard, debo decir que mi opinión personal es que si, que ese es el caso también de Blizzard, se ha modificado el juego para conseguir mas altas y en consecuencia más dinero. Porque las compañías miden la calidad de sus productos en base a personas pagando por ellos y/o beneficios obtenidos. Si juegan 100 personas no es un buen juego, si juegan un millón si, y los buenos juegos no se cuentan por número de jugadores.

El ciclo de vida de los mmorpgs no se intenta alargar por motivos éticos, es simplemente que si sacas un juego nuevo seguramente muchas personas no empezaran de nuevo, porque tienen un montón de cosas por las que han luchado durante años dentro del juego y si tienen que empezar de nuevo, pues quizás se replantean si volver a invertir tantas horas, esfuerzos, y dinero.

En fin, que no, blizzard no es satanás, pero tampoco son las hermanitas de la caridad xD

En fin, que si, que los comentarios son en general de descontento hacia el juego y la compañía pero tampoco quieren ser un ataque directo, mas bien una critica.

Yo pase muy buenos ratos con este juego, pero llegó un momento en que no me aportaba nada mas que farmear, aporrear teclas, y muy poco más, así que lo deje ya hace mucho tiempo, aún así no descarto regresar algún día si el juego vuelve a ofrecerme algo que me interese. Dentro de un tiempo volveré para ver que es lo que han modificado, si me gusta me quedare, si no, no.

Gracias por pasarte y gracias por comentar, como ves si ha tenido consideración, saludos.

Envía un comentario, es gratis.

NidoDeCuervos | RSS | Descarga Pirata | Contacto