Bonjour,
Je vous présente aujourd’hui mon projet de Bot.
Etant donné les bugs que je rencontre avec les Bot pixel, j’ai décidé de créer un bot avec enregistrement de position.
Je ne poste pas mon projet dans « Projet » car il y a peu de chance que le Bot voit le jour dans une version réellement fonctionnelle, en plus, mon poste sert plus à vous demander des conseils sur ma façon de coder ou sur comment réaliser certaine action.
Voilà le code, je le mettrai à jour de temps en temps :
Cliquez pour révéler
Cliquez pour masquer
#RequireAdmin
#cs ----------------------------------------------------------------------------
NOM PROGRAMME : DoBoT Vers. Alpha 0.0
FONCTION : Automate pour Dofus
PROGRAMMEUR : Charles ou neOwx
DATE : 12/12/12
#ce ----------------------------------------------------------------------------
; == Variable ==
Global $Config = 0
Global $PosRessource[90] = 0
Global $PosBanque[90] = 0
Global $Cpt = 0 ; $Cpt est le compteur pour la variable $PosRessource
Global $Cpt1 = 0 ; Cpt1 est le compteur pour la variable $PosBanque
Global $max = 0 ; Sert dans la Fauche
; == Debut (GUI) ==
#include <Misc.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("DoBoT Vers. Alpha 0.0", 443, 194, 192, 124)
$Group1 = GUICtrlCreateGroup(" Infos ", 8, 8, 281, 105)
$Name = GUICtrlCreateLabel("Nom du Personnage :", 24, 32, 107, 17)
$TempsFauche = GUICtrlCreateLabel("Temps de Fauche : ", 24, 56, 99, 17)
$NameRessource = GUICtrlCreateLabel("Nom de Ressource :", 24, 80, 101, 17)
GUICtrlCreateInput("", 152, 32, 121, 21)
GUICtrlCreateInput("", 152, 56, 121, 21)
GUICtrlCreateInput("", 152, 80, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup(" Mode ", 304, 8, 129, 105)
$Radio1 = GUICtrlCreateRadio("Classique", 312, 32, 81, 17)
$Radio2 = GUICtrlCreateRadio("Farmer", 312, 56, 73, 17)
$Radio3 = GUICtrlCreateRadio("Banque", 312, 80, 81, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Sav. Pos. Ressource", 8, 128, 137, 57, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Sav. Pos. Banque", 152, 128, 137, 57, $WS_GROUP)
$Button3 = GUICtrlCreateButton("OK", 304, 128, 129, 57, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
SavePosRessource ()
Case $Button2
SavePosBanque ()
Case $Button3
FRun ()
EndSwitch
WEnd
; == Fonction ==
Func FRun ()
;J 'entre dans la boucle principale
While 1
Fauche()
;VerifAgro()
;VerifPopup()
WEnd
EndFunc
Func Config ()
; Je change la dimenssion de la fenêtre
WinActivate($Name)
Sleep(1000)
WinMove($Name, "", 0, 0, 845, 700)
Sleep(2000)
; Je passe le jeu en qualité Basse
MouseMove(809,41)
MouseClick("left")
MouseMove(306,216)
MouseClick("left")
MouseMove(715,525)
MouseClick("left")
EndFunc
Func SavePosRessource ()
; Je vérifie que D. soit configurer
If $Config = 0 Then
Config ()
$Config = 1
Sleep(1000)
EndIf
MsgBox(0, "Aide", "Pour enregistrer la position des ressources, cliquez sur F1. Appuyer sur ENTRER quand vous avez terminés")
Do
If _IsPressed("70") Then
$Var1 = MouseGetPos()
$PosRessource[$Cpt] = $Var[0]
$Cpt = $Cpt + 1
$PosRessource[$Cpt] = $Var[1]
$Cpt = $Cpt + 1
EndIf
Until _IsPressed("0D")
$max = $Cpt
$Cpt = 0
EndFunc
Func SavePosBanque ()
; Je vérifie que D. soit configurer
If $Config = 0 Then
Config ()
$Config = 1
Sleep(1000)
EndIf
MsgBox(0, "Aide", "Pour enregistrer la position de la banque, cliquez sur F1. Appuyer sur ENTRER quand vous avez terminés")
Do
If _IsPressed("70") Then
$Var1 = MouseGetPos()
$PosBanque[$Cpt1] = $Var[0]
$Cpt2 = $Cpt2 + 1
$PosBanque[$Cpt1] = $Var[1]
$Cpt1 = $Cpt1 + 1
EndIf
Until _IsPressed("0D")
$max = $Cpt1
$Cpt1 = 0
EndFunc
Func Fauche()
MouseMove($PosRessource[$Cpt], $PosRessource[$Cpt + 1])
MouseClick("left")
Sleep($TempsFauche * 1000 + 1000)
$Cpt = $Cpt + 1
If $max = $Cpt Then
$Cpt = 0
EndIf
EndFunc
Func VerifAgro()
$Color = PixelGetColor(406,673)
If $Color = 0xFF6100 Then
Combat()
EndIf
EndFunc
Func VerifPopup()
EndFunc
Func VerifInventaire ()
EndFunc
Func InventairePlein ()
EndFunc
Func Combat()
EndFunc
Bon, je commence donc avec mon premier problème :
Le bot ne fonctionne pas ! Je m’explique : Lorsque je lance le Bot, Il me demande l’autorisation administrateur, j’accepte, et il s’arrête. A cause de ça, je ne peux plus rien faire !
Mise a jour :
#RequireAdmin
#cs ----------------------------------------------------------------------------
NOM PROGRAMME : DoBoT Vers. Alpha 0.4
FONCTION : Automate pour D.
PROGRAMMEUR : Charles ou neOwx
DATE : 12/12/12
#ce ----------------------------------------------------------------------------
#include <Misc.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
; == Variable ==
Global $Config = 0
dim $PosRessource[90]
dim $PosBanque[90]
Global $Cpt = 0 ; $Cpt est le compteur pour la variable $PosRessource
Global $Cpt1 = 0 ; Cpt1 est le compteur pour la variable $PosBanque
Global $Cpt2 = 0 ; Cpt2 est le compteur pour la verif d'inventaire.
Global $max = 0 ; Sert dans la Fauche
; == Debut (GUI) ==
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("DoBoT Vers. Alpha 0.0", 443, 194, 192, 124)
$Group1 = GUICtrlCreateGroup(" Infos ", 8, 8, 281, 105)
$Name = GUICtrlCreateLabel("Nom du Personnage :", 24, 32, 107, 17)
$TempsFauche = GUICtrlCreateLabel("Temps de Fauche : ", 24, 56, 99, 17)
$NameRessource = GUICtrlCreateLabel("Nom de Ressource :", 24, 80, 101, 17)
GUICtrlCreateInput("", 152, 32, 121, 21)
GUICtrlCreateInput("", 152, 56, 121, 21)
GUICtrlCreateInput("", 152, 80, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup(" Mode ", 304, 8, 129, 105)
$Radio1 = GUICtrlCreateRadio("Classique", 312, 32, 81, 17)
$Radio2 = GUICtrlCreateRadio("Farmer", 312, 56, 73, 17)
$Radio3 = GUICtrlCreateRadio("Banque", 312, 80, 81, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Sav. Pos. Ressource", 8, 128, 137, 57, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Sav. Pos. Banque", 152, 128, 137, 57, $WS_GROUP)
$Button3 = GUICtrlCreateButton("OK", 304, 128, 129, 57, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
If $Config = 0 Then
Config()
EndIf
SavePosRessource ()
Case $Button2
If $Config = 0 Then
Config()
EndIf
SavePosBanque ()
Case $Button3
FRun ()
EndSwitch
WEnd
; == Fonction ==
; --- Base ---
Func FRun ()
;J 'entre dans la boucle principale
While 1
Fauche()
VerifAgro()
VerifPopup()
WEnd
EndFunc
Func Config ()
; Je change la dimenssion de la fenêtre
WinActivate($Name)
Sleep(1000)
WinMove($Name, "", 0, 0, 845, 700)
Sleep(3000)
; Je passe le jeu en qualité Basse
MouseMove(809,41)
MouseClick("left")
Sleep(500)
MouseMove(306,216)
MouseClick("left")
Sleep(500)
MouseMove(715,525)
MouseClick("left")
Sleep(1000)
EndFunc
Func SavePosRessource ()
MsgBox(0, "Aide", "Pour enregistrer la position des ressources, cliquez sur F1. Appuyer sur ENTRER quand vous avez terminés")
Do
If _IsPressed("70") Then
$Var1 = MouseGetPos()
$PosRessource[$Cpt] = $Var1[0]
$Cpt = $Cpt + 1
$PosRessource[$Cpt] = $Var1[1]
$Cpt = $Cpt + 1
Sleep(500)
EndIf
Until _IsPressed("0D")
$max = $Cpt
$Cpt = 0
If $Radio3 = 1 Then
SavePosBanque()
EndIf
FRun()
EndFunc
Func SavePosBanque ()
MsgBox(0, "Aide", "Pour enregistrer la position de la banque, cliquez sur F1. Appuyer sur ENTRER quand vous avez terminés")
Do
If _IsPressed("70") Then
$Var1 = MouseGetPos()
$PosBanque[$Cpt1] = $Var1[0]
$Cpt2 = $Cpt2 + 1
$PosBanque[$Cpt1] = $Var1[1]
$Cpt1 = $Cpt1 + 1
EndIf
Until _IsPressed("0D")
$max = $Cpt1
$Cpt1 = 0
FRun()
EndFunc
Func Fauche()
MouseMove($PosRessource[$Cpt], $PosRessource[$Cpt + 1])
MouseClick("left")
Sleep($TempsFauche * 1000 + 1000)
$Cpt = $Cpt + 1
If $max = $Cpt Then
$Cpt = 0
EndIf
$Cpt2 = $Cpt2 + 1
If $Cpt2 = 15 Then
VerifInventaire()
$Cpt2 = 0
EndIf
EndFunc
; --- Verfif ---
Func VerifAgro()
$Color = PixelGetColor(406,673)
If $Color = 0xFF6100 Then
Combat()
EndIf
EndFunc
Func VerifPopup()
EndFunc
Func VerifInventaire ()
MouseMove(558, 679)
MouseClick("left")
Sleep(1000)
$Color = PixelGetColor(662, 536)
If $Color = 0xBB02604 Then
InventairePlein()
EndIf
EndFunc
Func InventairePlein ()
If $Radio1 = 1 Then
Exit
EndIf
If $Radio2 = 1 Then
MouseMove(729, 124)
MouseClick("left")
MouseMove(801, 142)
MouseClick("left")
Send($NameRessource)
Sleep(1000)
MouseMove(667, 176)
MouseClick("right")
MouseMove(569, 228)
MouseClick("left")
MouseMove(615, 201)
MouseClick("left")
MouseMove(720, 203)
MouseClick("left")
MouseMove(366, 395)
MouseClick("left")
EndIf
If $Radio3 = 1 Then
GoBanque ()
EndIf
EndFunc
Func GoBanque ()
EndFunc
; --- Combat ---
Func Combat ()
MouseMove(485, 511)
MouseClick("left")
Do
VerifTour ()
Deplace ()
Attaque ()
$Color = PixelGetColor(485, 511)
Until $Color = 0xFF6100
MouseMove(485, 511)
MouseClick("left")
Sleep(500)
EndFunc
Func VerfiTour ()
Do
$Color = PixelGetColor(448, 609)
Sleep(1000)
Until $Color = 0xFF4D00
EndFunc
Func Deplace ()
$PosPerso = PixelSearch(0, 0, 845, 700, 0xFF0000) ;Je prend la position de perso
$trouver = 0
$ajout_px_x1 = 10
$ajout_px_x2 = 10
$ajout_px_y1 = 10
$ajout_px_y2 = 10
Do
If $PosPerso[0]+$ajout_px_x1 > 845 Then
$ajout_px_x1 = 0
EndIf
If $PosPerso[1]+$ajout_px_x2 > 845 Then
$ajout_px_x2 = 0
EndIf
If $PosPerso[0]+$ajout_px_y1 > 700 Then
$ajout_px_y1= 0
EndIf
If $PosPerso[1]+$ajout_px_y2 > 700 Then
$ajout_px_y2 = 0
EndIf
$PosMonstre = PixelSearch($PosPerso[0]-$ajout_px_x1, $PosPerso[1]-$ajout_px_y1, $PosPerso[0]+$ajout_px_x2, $PosPerso[1]+$ajout_px_y2, 0x0000FF) ; je recherche le monstre le plus proche du perso
If not @error Then
$trouver = 1
EndIf
$ajout_px_x1 = $ajout_px_x1 + 10
$ajout_px_x2 = $ajout_px_x2 + 10
$ajout_px_y1 = $ajout_px_y1 + 10
$ajout_px_y2 = $ajout_px_y2 + 10
Until $trouver = 1
MouseMove($PosPerso[0], $PosPerso[1]) ; Je me déplace sur le perso
Do
If $PosMonstre[0]+$ajout_px_x1 > 845 Then
$ajout_px_x1 = 0
EndIf
If $PosMonstre[1]+$ajout_px_x2 > 845 Then
$ajout_px_x2 = 0
EndIf
If $PosMonstre[0]+$ajout_px_y1 > 700 Then
$ajout_px_y1= 0
EndIf
If $PosMonstre[1]+$ajout_px_y2 > 700 Then
$ajout_px_y2 = 0
EndIf
$PosCase = PixelSearch($PosMonstre[0]-$ajout_px_x1, $PosMonstre[1]-$ajout_px_y1, $PosMonstre[0]+$ajout_px_x2, $PosMonstre[1]+$ajout_px_y2, 0x00CC66) ; Je recherche la case verte la plus proche du monstre
If not @error Then
$trouver = 1
EndIf
$ajout_px_x1 = $ajout_px_x1 + 10
$ajout_px_x2 = $ajout_px_x2 + 10
$ajout_px_y1 = $ajout_px_y1 + 10
$ajout_px_y2 = $ajout_px_y2 + 10
Until $trouver = 1
MouseMove($PosCase[0], $PosCase[1]) ; Je me déplace sur cette case
MouseClick("Left")
EndFunc
Func Attaque ()
MouseMove(547, 619)
MouseClick("left")
MouseMove($PosMonstre[0], $PosMonstre[1])
MouseClick("left")
Sleep(1000)
MouseMove(485, 511)
MouseClick("left")
EndFunc
Bug :
- Non redimensionnement
- Clique au hasard dans le vide pendant chaque fauche
- Bot se ferme au début d'un combat
Merci de votre aide,
neO