[AutoiT] Bot de récolte

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Status
Not open for further replies.

ludesert

Nouveau membre
Jan 25, 2011
3
0
421
Salut à tous, je suis en train de faire un bot de récolte pour Dofus basé sur la couleur des ressources.

Le fonctionnement est simple : on demande à l'utilisateur de placer la souris sur la ressource à récolter, d'appuyer sur la touche C et on récolte la couleur en hexa.

Ensuite, le programme cherche un autre pixel de cette couleur, clique dessus, fait une pause (temps de récolte) et ainsi de suite ...


Sauf que j'ai un problème : la souris va toujours cliquer sur le pixel en 1600,0 (en haut à droite) ... et en prime, la couleur relevée est soit blanc (ffff) ou noir (je ne me souviens plus du code). Ce dernier problème de couleur apparaît uniquement sur la fenêtre dofus, pas sur le reste


Donc ... help ? :)

Voici le code qui prose problème pour cliquer :

Code:
$hauteur = @DesktopHeight ; hauteur de la résolution d'acran
$largeur = @DesktopWidth ; lageur de la résolution d'écran

; ces informations sont nécessaires à la fonction PixelSearch() car il faut définir une zone dans laquelle chercher. Ici, nous utiliserons tout l'écran

$coord = PixelSearch(0, 0, $largeur-10, $hauteur-10, $couleur) ; on cherche les coordonnées d'un autre pixel de la couleur détectée précedemment
if Not @error Then ; si le pixel n'est pas trouvé, la fonctione PixelSearch retourne un @error ==> d'où le if Not
   MouseClick("right",$coord[0], $coord[1])
   Sleep($tempsrecolte*1000+1000) ; temps de recolte (pause entre 2 clics)
   MsgBox(0, "coordonnées", "x=" & $coord[0] & "y=" & $coord[1])
EndIf
 

Cyrion

._.
V
Ancien staff
Jul 8, 2010
2,524
2
944
www.bufferoverflow.fr
Récupérer une couleur , c'est pas suffisant.

Il faut minimum 30 couleurs différentes afin d'avoir le plus de chance de récolter , et même là , ça dépens des zones.
 

ludesert

Nouveau membre
Jan 25, 2011
3
0
421
mouais, c'est pas faut ... Sais-tu s'il y a moyen de récupérer cette trentaine de couleurs d'un coup ? (du style un caré de 6x5 pixels autour de la souris)

merci :)

---------- Message ajouté à 08h46 ---------- Le message précédent était à 00h17 ----------

Bon, j'ai essayé de relever les couleurs dans un carré de 3x3 pixels autour du pointeur (c'est un début :p) pour esayer

le code ressemble à ça pour relever la couleur

Code:
Dim $couleur[9]
$couleur[8] = "pas choisi"

while $couleur[8] = "pas choisi"
   
   Local $touche = @HotKeyPressed ; on relève la dernière touche pressée
   if _IsPressed(43) = 1 Then ; 43 est le numéro de la touche "c"
	  
	  $position_souris = mousegetpos() ; on relève la position de la souris
	  

	  $couleur[0] = hex(PixelGetColor($position_souris[0], $position_souris[1]),6) ; on obtient la couleur du pixel en hexadécimal grâce à la fonction hex()
	  $couleur[1] = hex(PixelGetColor($position_souris[0]+1, $position_souris[1]),6) ; on relève les couleurs dans un carré de 3x3 pixels pour agmenter les chances
	  $couleur[2] = hex(PixelGetColor($position_souris[0]+1, $position_souris[1]-1),6) ; de trouver la ressource
	  $couleur[3] = hex(PixelGetColor($position_souris[0], $position_souris[1]-1),6)
	  $couleur[4] = hex(PixelGetColor($position_souris[0]-1, $position_souris[1]-1),6)
	  $couleur[5] = hex(PixelGetColor($position_souris[0]-1, $position_souris[1]),6)
	  $couleur[6] = hex(PixelGetColor($position_souris[0]-1, $position_souris[1]+1),6)
	  $couleur[7] = hex(PixelGetColor($position_souris[0], $position_souris[1]+1),6)
	  $couleur[8] = hex(PixelGetColor($position_souris[0]+1, $position_souris[1]+1),6)
   EndIf  
   Sleep(10) ; petite pause de 10 millisecondes pour éviter de faire une boucle "infinie" qui sature le CPU tant que la touche n'est pas détectée
wend   
   
   
   
MsgBox(0, "Réglages", "Couleurs trouvées ! " & @CRLF & _
			$couleur[0] & @CRLF & _ ; on signale que les couleurs ont bien étés relevées ...
			$couleur[1] & @CRLF & _
			$couleur[2] & @CRLF & _
			$couleur[3] & @CRLF & _
			$couleur[4] & @CRLF & _
			$couleur[5] & @CRLF & _
			$couleur[6] & @CRLF & _
			$couleur[7] & @CRLF & _
			$couleur[8])


Et pour la rechercher :

Code:
$hauteur = @DesktopHeight ; hauteur de la résolution d'acran
$largeur = @DesktopWidth ; lageur de la résolution d'écran

;ces informations sont nécessaires à la fonction PixelSearch() car il faut définir une zone dans laquelle chercher. Ici, nous utiliserons tout l'écran

$coord = PixelSearch(0, 0, $largeur-10, $hauteur-10, $couleur) ; on cherche les coordonnées d'un autre pixel de la couleur détectée précedemment
While Not @error ; si le pixel n'est pas trouvé, la fonctione PixelSearch retourne un @error ==> d'où le if Not
   
   if $couleur[0] = hex(PixelGetColor($coord[0], $coord[1]),6) Then ; on vérifie que toutes les couleurs sont bien présentes
   ElseIf $couleur[1] = hex(PixelGetColor($coord[0]+1, $coord[1]),6) Then
   ElseIf $couleur[2] = hex(PixelGetColor($coord[0]+1, $coord[1]-1),6)Then
   ElseIf $couleur[3] = hex(PixelGetColor($coord[0], $coord[1]-1),6)Then
   ElseIf $couleur[4] = hex(PixelGetColor($coord[0]-1, $coord[1]-1),6) Then
   ElseIf $couleur[5] = hex(PixelGetColor($coord[0]-1, $coord[1]),6)Then
   ElseIf $couleur[6] = hex(PixelGetColor($coord[0]-1, $coord[1]+1),6)Then
   ElseIf $couleur[7] = hex(PixelGetColor($coord[0], $coord[1]+1),6) Then
   ElseIf $couleur[8] = hex(PixelGetColor($coord[0]+1, $coord[1]+1),6) Then
	  
	  MsgBox(0, "Ressource trouvée !") ; signalement pour les test ...
	  MouseClick("right",$coord[0], $coord[1])
	  Sleep($tempsrecolte*1000+1000) ; temps de recolte (pause entre 2 clics)
	  MsgBox(0, "coordonnées", "x=" & $coord[0] & "y=" & $coord[1])
	  
   EndIf
WEnd


Le bot relève bien les couleurs (message de confirmation) mais quand il s'agit de les chercher ... pouf ! Il tourne encore mais ne fait rien (pas de saturation du cpu par une boucle infinie ...)


Quel est le problème ?

Merci



Edit : J'ai trouvé d'où vient le problème : le pixel de couleur est trouvé mais les voisins non ! Donc ça repart au début de la boucle et tombe sur le même pixel ... sans arrêt !

Comment faire pour "sauter" les pixels qui n'ont ps les bons voisins ?

Edit : : j'ai trouvé, il faut redimensionner la zone dans laquelle on cherche le pixel à partir du pixel suivant :

Code:
	  $coord = PixelSearch($coord[0]+1, $coord[1], $largeur-10, $hauteur-10, $couleur) ; changement des valeurs de la zone dans laquelle il faut chercher afin de recommencer la recherche à partir du pixel trouvé non correspondant

Là, le bot charge environ 30 secondes et m'annonce que c'est fini, qu'il n'y a plus de ressources (en gros, il a tout checké et il n'a pas trouvé le carré relevé précédemment ...)

Des idées ?

J'ai l'impression de parler tout seul ...

---------- Message ajouté à 19h11 ---------- Le message précédent était à 08h46 ----------

Up ...
 
Last edited:

ludesert

Nouveau membre
Jan 25, 2011
3
0
421
Salut, merci de ta réponse. Mais la détection des couleurs semble fonctionner, mon problème se trouve plutot sur leur recherche parce que PixelSearch trouve bien la première zone correspondante, mais pas la suite (il fait un boucle sur la première zone)<;

Ce qu'il faudrait, ça serait de pouvoir exclure une zone de la recherche après l'avoir trouvée, c'est possible ?

Merci
 
Status
Not open for further replies.