Bot Web

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
dacu
Hacker del Foro
Mensajes: 106
Registrado: 20 May 2010, 00:09

Bot Web

Mensaje por dacu »

Buenas, hoy vengo a enseñaros el bot que estoy haciendo para un juego de Internet.
Espero que me podáis ayudar.

Código Completo

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <INet.au3>




#Region ### START Koda GUI section ### Form=z:\autoit\program\koda_2008-10-03\forms\form1.kxf
$Form1_1 = GUICreate("Form1", 627, 437, 236, 164)
$URL = GUICtrlCreateLabel("URL", 8, 8, 46, 28)
GUICtrlSetFont(-1, 16, 800, 0, "Arial")
$Usser = GUICtrlCreateLabel("Usser", 4, 40, 62, 28)
GUICtrlSetFont(-1, 16, 800, 0, "Arial")
$Pass = GUICtrlCreateLabel("Pass", 8, 72, 54, 28)
GUICtrlSetFont(-1, 16, 800, 0, "Arial")
$INurl = GUICtrlCreateInput("", 72, 8, 265, 21)
$INusser = GUICtrlCreateInput("", 72, 40, 113, 21)
$INpass = GUICtrlCreateInput("", 72, 72, 113, 21)
$Enter = GUICtrlCreateButton("Enter", 344, 8, 105, 25, 0)
$Recursos = GUICtrlCreateGroup("Recursos", 192, 32, 257, 129)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$Metal = GUICtrlCreateLabel("Metal", 208, 64, 49, 28)
$Cristal = GUICtrlCreateLabel("Cristal", 208, 96, 54, 28)
$Deuterio = GUICtrlCreateLabel("Deuterio", 200, 128, 75, 28)
$INcristal = GUICtrlCreateInput("", 280, 96, 145, 24)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$INmetal = GUICtrlCreateInput("", 280, 64, 145, 24)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$INdeuterio = GUICtrlCreateInput("", 280, 128, 145, 24)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Cola_De_Contruccion = GUICtrlCreateGroup("Cola_De_Contruccion", 456, 8, 169, 425)
$lista1 = GUICtrlCreateCombo("", 464, 96, 153, 25)
GUICtrlSetData(-1, "A", "A")
GUICtrlSetData(-1, "B", "A")
$lista2 = GUICtrlCreateCombo("Combo1", 464, 64, 153, 25)
$lista3 = GUICtrlCreateCombo("Combo1", 464, 160, 153, 25)
$lista4 = GUICtrlCreateCombo("Combo1", 464, 128, 153, 25)
$lista5 = GUICtrlCreateCombo("Combo1", 464, 192, 153, 25)
$lista6 = GUICtrlCreateCombo("Combo1", 464, 224, 153, 25)
$lista7 = GUICtrlCreateCombo("Combo1", 464, 256, 153, 25)
$lista8 = GUICtrlCreateCombo("Combo1", 464, 288, 153, 25)
$lista9 = GUICtrlCreateCombo("Combo1", 464, 320, 153, 25)
$lista10 = GUICtrlCreateCombo("Combo1", 464, 32, 153, 25)
$lista11 = GUICtrlCreateCombo("Combo1", 464, 352, 153, 25)
$lista12 = GUICtrlCreateCombo("Combo1", 464, 384, 153, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Nivel_de = GUICtrlCreateGroup("Nivel_de", 192, 160, 257, 273)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Nivel_de_Minas = GUICtrlCreateGroup("Nivel_de_Minas", 0, 96, 185, 337)
GUICtrlCreateLabel("", 8, 128, 4, 4)
GUICtrlSetFont(-1, 12, 800, 0, "Candara")
$Label1 = GUICtrlCreateLabel("Metal", 8, 120, 42, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("Robot", 8, 240, 46, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("Nanobots", 8, 272, 71, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("deuterio", 8, 176, 61, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label6 = GUICtrlCreateLabel("Energia", 8, 208, 58, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label7 = GUICtrlCreateLabel("Cristal", 8, 144, 48, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label8 = GUICtrlCreateLabel("Laboratoio", 8, 400, 79, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label9 = GUICtrlCreateLabel("Almacen Deuterio", 8, 368, 127, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label10 = GUICtrlCreateLabel("Almacen Crsita", 8, 336, 108, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$lvl1 = GUICtrlCreateInput("", 136, 144, 41, 21)
$lvl2 = GUICtrlCreateInput("", 136, 176, 41, 21)
$lvl3 = GUICtrlCreateInput("", 136, 208, 41, 21)
$lvl4 = GUICtrlCreateInput("", 136, 240, 41, 21)
$lvl5 = GUICtrlCreateInput("", 136, 304, 41, 21)
$lvl6 = GUICtrlCreateInput("", 136, 272, 41, 21)
$lvl7 = GUICtrlCreateInput("", 136, 336, 41, 21)
$lvl8 = GUICtrlCreateInput("", 136, 400, 41, 21)
$lvl9 = GUICtrlCreateInput("", 136, 368, 41, 21)
$lvl10 = GUICtrlCreateInput("", 136, 112, 41, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label5 = GUICtrlCreateLabel("Almacen Metal", 8, 304, 106, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

	   $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
        $msg = GUIGetMsg()
        Select
		Case $msg = $Enter
			$web = _IECreate (GUICtrlRead($INurl))
			_IELoadWait ($web)
			
		$US = GUICtrlRead($INusser)
		$CON = GUICtrlRead($INpass)
	
		$Usuario = _IEGetObjByName ($web, "iuser")
		$Pas = _IEGetObjByName ($web, "password")
		$Login = _IEGetObjByName ($web, "image")
		_IEDocInsertText ($Usuario, GUICtrlRead($INusser)) 
        _IEDocInsertText ($Pas , GUICtrlRead($INpass)) 
        _IEAction ($Login, "click")
		_IEFormImageClick ($web, "images/login/go_a.gif")
        _IELoadWait ($web)
		
		
     AdlibRegister("Minas", 2000)
	 Minas()	
Func Minas()
	
	
	    $texto =_IEBodyReadText ($web)
		$html = _IEBodyReadHTML ($web)
		
		

		 $array0 = StringRegExp( $html, "metal>(.*?)<", 1)
for $i0 = 0 to UBound($array0) - 1
    ;msgbox(0, "Prueba RegExp con Opción 2 - " & $i, $array[$i])
	FileWrite ("metal.txt", $array0[$i0])
Next

		 $array1 = StringRegExp( $html, "crystal>(.*?)<", 1)
for $i1 = 0 to UBound($array1) - 1
    ;msgbox(0, "Prueba RegExp con Opción 2 - " & $i, $array[$i])
	FileWrite ("cristal.txt", $array1[$i1])
Next

		 $array2 = StringRegExp( $html, "deut>(.*?)<", 1)
for $i2 = 0 to UBound($array2) - 1
    ;msgbox(0, "Prueba RegExp con Opción 2 - " & $i, $array[$i])
	FileWrite ("deuterio.txt", $array2[$i2])
Next
	 
	 $metal = FileRead ("metal.txt")
	 FileDelete ("metal.txt")
	 
	 $cristal = FileRead ("cristal.txt")
	 FileDelete ("cristal.txt")
	 
	 $deuterio = FileRead ("deuterio.txt")
	 FileDelete ("deuterio.txt")
	 
		 $INmetal = GUICtrlCreateInput($metal, 280, 64, 145, 24)
		 $INcristal = GUICtrlCreateInput($cristal, 280, 96, 145, 24)
		 $INdeuterio = GUICtrlCreateInput($deuterio, 280, 128, 145, 24)
		 sleep ("1000")
		 

EndFunc

_IENavigate ($web, "http://esgame.org/uni1/game.php?page=buildings")
_IELoadWait ($web)
	
		EndSelect
    WEnd
	

Ahora voy a explicar lo que hace el bot.

Ejecutas y te sale una GUI.
Imagen



En las casillas que engloba el cuadro Amarillo, una vez ingresado a la pagina principal del juego, te muestra los recursos que tienes, Gracias a "AdlibRegister" cada x Tiempo se le hace una llamada a la función que se encarga de mostrarme los recursos.

Ahora bien, en los cuadros que engloba el cuadro Rojo Se van a mostrar los niveles de cada Mina.
Es decir

Mina de metal nivel 2
Mina de cristal nivel 6
Mina de deuterio Nivel 4
Energía Nivel 6

Hacer eso es fácil, es lo mismo que mostrar los recursos.

Bien lo complicado viene ahora, Como Bot que es, necesitamos programar una lista de tareas que después el cuando se cumplan ciertas condiciones pueda ejecutar.

En el recuadro verde que engloba la lista de construcción es donde ya me atasco y no consigo seguir, Las condiciones son las siguientes.

Cada Combo "GUICtrlCreateCombo" Va a tener la lista de cada uno de los nombres de los edificios.

es decir.

Combo 1 --> Mina de metal, Mina de cristal, Mina de deuterio, Energía, Robot, Nanobots, Almacén de Metal, Almacén de Cristal, Almacén de deuterio, Laboratorio.

Combo 2 --> Mina de metal, Mina de cristal, Mina de deuterio, Energía, Robot, Nanobots, Almacén de Metal, Almacén de Cristal, Almacén de deuterio, Laboratorio.

Combo 3 --> Mina de metal, Mina de cristal, Mina de deuterio, Energía, Robot, Nanobots, Almacén de Metal, Almacén de Cristal, Almacén de deuterio, Laboratorio.

Tendrás la opción de elegir el edificio que uno quiere subir y poder así crear la cola de construcción. Ejemplo

Combo 1 --> Energía
Combo 2 --> Almacén de deuterio
Combo 3 --> Mina de metal

Esa seria la cola de construcción-, Bien claramente tiene que haber unas condiciones, Siempre se tiene que ejecutar en orden
Combo 1 siempre se ejecutara antes que Combo 2 y así sucesivamente.

Ahora viene lo difícil, En el ejemplo Primero se tiene que subir el edificio "ENERGIA"
¿Cuando se va a subir? y Que nivel se va a subir?
Cuando tengamos los recursos necesarios, Se subirá el un nivel mas del que tiene " que se puede obtener ese dato del cuadro ROJO del nivel de Minas"

¿Tenemos (500 de metal, 200 de Cristal y 400 de deuterio) tenemos los recursos necesarios?
No se compruébalo --> El scrip tendría que irse al cuadro Rojo Donde se muestra los niveles, Ver el nivel del edificio que se quiere subir y Según el nivel de edificio realizar una comparación, la comparación la haría de una lista -- ejemplo

Energia nivel 1 ---> metal 10 , Cristal 20 , deuterio 5
Energia nivel 2 ---> metal 50, Cristal 40 , deuterio 10
Energia nivel 3 ---> metal 100 , Cristal 60 , deuterio 15
Energia nivel 4 ---> metal 150 , Cristal 80 , deuterio 20
Energia nivel 5 ---> metal 200 , Cristal 100 , deuterio 25
Energia nivel 6 ---> metal 250 , Cristal 120 , deuterio 30
Energia nivel 7 ---> metal 300 , Cristal 140 , deuterio 35
Energia nivel 8 ---> metal 350 , Cristal 160 , deuterio 40
Energia nivel 9 ---> metal 400 , Cristal 180 , deuterio 45
Energia nivel 10 ---> metal 450 , Cristal 200 , deuterio 50
Energia nivel 11---> metal 500 , Cristal 220 , deuterio 55

SI no tenemos suficientes recursos, hasta que no tengamos igual o mayor numero de recursos no se Subirá lo que hay en el
Combo 1, Si si disponemos de los recursos Combo 1 ara cambiar una variable que de paso que Combo 2 se compruebe.

Vale, Mas o menos esta claro lo que hay que Hacer..

Creo que lo mas difícil es...
¿Como hacer que sepa el scrip que cuando selecciono el Combo 1 --> Mina de metal va a saber que necesito X metal X cristal X deuterio?

Bueno Lo dejo en vuestras manos que me podáis echar un cable, gustosamente acepto cambios en el código ya echo para minimizar código " ya que seguro que e echo cosas que son muy simples y que yo e metido demasiado código"

Gracias, y saludos..

Dato "si ejecutáis vosotros el código no os va a ir ya que no sabéis la web con la que estoy haciéndolo por lo tanto al darle al botón "enter" el scrip esperara objetos que no va a encontrar y saltara error"
dacu
Hacker del Foro
Mensajes: 106
Registrado: 20 May 2010, 00:09

Re: Bot Web

Mensaje por dacu »

Venga va porfa.. una ayudita. :smt026
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Bot Web

Mensaje por Chefito »

Mmmmm...yo que tú dejaría de preguntar esto y miraría más las Condiciones y normas de las que has estado deacuerdo cuando has creado una cuenta en ese juego (supongo que sea el Ogame). Mira este enlace: http://agb.gameforge.de/index.php?lang= ... _bg=000000. Mira el punto 5.3 :smt012 :
5.3. Al usuario le está completamente prohibido acceder al juego online (incluyendo todas las páginas Web) con cualquier otro programa que no sea el navegador de Internet o los programas cliente dispuestos con este fin. Esto hace relación, sobretodo, a los así llamados "bots", así como a otras herramientas que puedan sustituir o complementar la interfaz Web. También queda prohibido el uso de scripts o programas totalmente automatizados o sólo en parte, que supongan una ventaja del usuario frente al resto de jugadores. Entre estos programas cuentan las funciones de auto-recarga de la página así como otros mecanismos integrados del navegador de Internet, siempre y cuando se trate de procesos automatizados.
Eso es del Gameforge que por lo visto es la base de Ogame.

Además, las reglas de la propia página te lo dice también:
6. Uso de bugs / Uso de scripts

Está terminantemente prohibido aprovecharse de un error de programación o de bugs, así como omitir la existencia de un bug.
Además, está estrictamente prohibido la utilización de programas de interfaz entre los jugadores y el juego, o de programas que generen automáticamente informaciones para dar ventajas injustas a un grupo de jugadores.
Si por casualidad me estoy equivocando de juego (lo dudo) y te refieres al Esgame, tiene los mismos términos.

Recuerda que las normas del foro no nos permiten hablar y hacer cosas ilegales.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Responder