Bonjour,
Une petite suggestion concernant les bots D.2, pourquoi ne pas utiliser imagesearch plutot que pixelsearch?
Un exemple de code:
Code à inclure (le dll est dispo un peu partout):
Func _ImageSearchArea($FindImage, $ResultPosition, $x1, $y1, $right, $bottom, ByRef $x, ByRef $y, $Tolerance)
If $Tolerance > 0 Then $FindImage = "*" & $Tolerance & " " & $FindImage
If @AutoItX64 Then
$Result = DllCall("ImageSearchDLL_x64.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $FindImage)
Else
$Result = DllCall("ImageSearchDLL.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $FindImage)
EndIf
If $Result = "0" Then Return 0
$Array = StringSplit($Result[0], "|")
If (UBound($Array) >= 4) Then
$x = Int(Number($Array[2]))
$y = Int(Number($Array[3]))
If $ResultPosition = 1 Then
$x = $x + Int(Number($Array[4]) / 2)
$y = $y + Int(Number($Array[5]) / 2)
EndIf
Return 1
EndIf
EndFunc
Exemple de code:
$image = _ImageSearchArea('secu.png', 1, 791, 242, 831, 281, $x, $y, 10)
If $image = 1 Then;croix rouge
Sleep(200)
MouseClick("left", $x, $y, 2, 0)
Sleep(500)
Return 1
EndIf;return 1
En gros on fais un screen d'un arbre, perso etc... on retaille est sauve en png ou bmp.
La fonction s'utilise comme suit:
$image = _ImageSearchArea('***image à chercher en png/bmp ***', ***1 ou 2, 1 correspond au centre de l'image, 2 en haut à gauche***, x, y, x[1], y[1] *** ici la zone à scanner***, $x, $y *** les coordonnées de l'image si elle est trouvée***, 1 ***la précision de la recherche de 1(précis) à 254(trouve n'importe quoi)***)
L'avantage est de pouvoir identifier une image plutot qu'un pixel est donc d'éviter les faux-positifs.
Utilisation concrète:
Prennez un screen d'un arbre, blé, etc ... avant récolte, un autre après récolte, et il sera possible d'identifier les chose à récolter.
Note supplémentaire:
Il est possible de rechercher plusieurs images en même temps:
$image = _ImageSearchArea('green.png', 1, 495, 175, 705, 555, $x, $y, 50)
$image2 = _ImageSearchArea('green2.png', 1, 495, 175, 705, 555, $x, $y, 50)
$image3 = _ImageSearchArea('green3.png', 1, 495, 175, 705, 555, $x, $y, 50)
If $image = 1 Or $image2 = 1 Or $image3 = 1 And $limit1 < 10 Then;atk
Return 8
EndIf
Enfin, dernière idée, le memory reading reste une option à envisager...