Bot Web
Publicado: 16 Ene 2011, 20:21
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
Ahora voy a explicar lo que hace el bot.
Ejecutas y te sale una GUI.
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"
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.
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"