AutoIt PixelSearch perfekt zum Botbau

Letztens, beim Artikel über HotKeySet in AutoIt, fragte HansDampf, wie man denn ohne vorgegebene Pixel/Koordinaten in Scripten arbeiten könne. Ich erwähnte in dem Artikel Farberkennung, war mit der Materie aber noch nicht so vertraut.

Mittlerweile habe ich mich mit der Funktion von Farberkennung in AutoIt beschäftigt und bin begeistert.
PixelSearch() sucht euch den ersten Pixel in einem rechteckigen Zielgebiet, auf den die Farbbeschreibung zustimmt.

Code:

Pixelsearch(x-linksoben, y-linksoben, x-rechtsunten, y-rechtsunten, Hexfarbe[, Abweichung, Schritte])

Was für die Funktion also nötig ist sind 2 Koordinatenpaare und die gesuchte Farbe. Die Koordinate der oberen linken Ecke des Suchfelds (x und y) und von der unteren rechten Ecke (x und y). Um von den fixen Koordinaten wegzukommen sollte man den User 1x auffordern, an eine bestimmte Stelle zu klicken und danach alles relativ zum 1. Klick zusammen mit PixelSearch gestalten.
Je größer der Wert der Abweichung, desto ungenauer kann man die Farbe angeben, desto mehr Pixel werden gefunden.
Das letzte Argument gibt an, jeder wievielte Pixel untersucht werden soll. 10 würde bewirken, dass nur jeder 10 Pixel getestet wird. Das pusht natürlich die Geschwindigkeit.

Ein Beispiel:

$waittime = 3000
MsgBox(0,"Ecke oben links","Führe die Maus über die Ecke des Flash-Games oben links, du hast " & ($waittime/1000) & " Sekunden.")
Sleep($waittime)
$ol = MouseGetPos()
; Nur zur Kontrolle
MsgBox(0,"pos",""&$ol[0]&" | " &$ol[1]&" | " &$ol[0]+472& " | " &$ol[1]+315&"")
$center = PixelSearch($ol[0],$ol[1],$ol[0]+472,$ol[1]+315, 0xFFFFFF)
MouseMove($center[0],$center[1],1)

while True
	If Hex(PixelGetColor($center[0]+170,$center[1]+110),6)="FFFFFF" Then
		MouseClick("left",$center[0]+170,$center[1]+110,1,1)
		Sleep(2000)
	EndIf
[...]

Ich frage den Benutzer bewusst nach 1 Koordinate; die der oberen linken Ecke des Flash Games. Diese bekomme ich einfach in dem der Spieler die Maus darüber bewegt und ich die Mauskoordinaten auslese. Da ich weiß wie groß das Flash Game Fenster ist kann ich PixelSearch auch das 2. Koordinatenpaar der Ecke unten rechts übergeben, ohne es vom Nutzer zu fordern.
Ab dem Punkt gehe ich nur noch über relative Pixelangaben vor, keine festen Werte mehr, die angepasst werden müssen.

Der Code geht noch weiter und funktioniert wunderbar in allen Browsern, in allen Monitorauflösungen und Fensterpositionen. Die Lösung kostet auf jeden Fall viel mehr Zeit als wenn der User am Anfang ein paar Koordinaten angibt aber einmal programmiert ist es eben die bessere Lösung.

Stay Tuned, morgen oder Übermorgen zeige ich den ersten Bot basierend auf PixelSearch und PixelGetColor.

5 Kommentare

  1. Irgendwie wird der Blog immer unseriöser.
    Anleitung zum Mail verschicken mit falschen Absender, „Wie baue ich mir einen Bot um bei Spielen zu bescheissen?“ – klasse weiter so! Grüße an den Autor, weil der Kommentar sicher nicht veröffentlicht wird

  2. @Kenny: das müssen sie nicht. Man kann die Ecke auch weit verfehlen.

    @Augustin:
    Lieber Augustin, dir ist schon klar, dass du diesen Blog aus freiem Willen liest?
    Gut, das ist ein wichtiger Punkt.

    Dir sollte auch klar sein, dass ich hier einfach verschiedenste Funktionen von AutoIt präsentiere um zu zeigen, wie mächtig die Sprache ist. Was die Leser damit anfangen ist ja wohl ihre Sache.
    Dass über Rapidshare Filme, Software, Games, Stuff getauscht werden ist eine Sache, kann mir ja scheißegal sein. Jeder muss selbst entscheiden, ob er damit was anfangen kann oder nicht. Ich fang jetzt nicht gleich an zu heulen, dass bei Rapidshare wahrscheinlich die Urheberrechte verrecken, interessiert ja auch niemanden. Ist auch nicht meine Sache.

    Zudem zeige ich all das Scripting an kleinen Flash Games, wo sich keine Sau dafür interessiert, ob ich „trickse“ oder nicht. Ich lande ich keiner Highscore, mit der ich angeben kann, ich schade damit niemanden, ich profitiere selbst in keinster Weise von.
    Mal davon abgesehen, dass ich jedes dieser Flash Games spätestens nach 2 Wochen wieder vergessen habe, da es eh nur Zeitverschwendung ist, sie zu spielen. Ich versuche einfach nur praktische Anwendungen zu finden, an denen ich mein Wissen bezüglich AutoIt verbessern kann. Wie bereits gesagt, ich profitiere in keinster Weise davon.

    Wenn das für dich unserös ist, eine Programmier/Scriptsprache komplexer anzuwenden, dann musst du hier nicht weiter vorbeischauen. Ich lege keinen Wert auf solche Kommentare.

  3. Hallo Hannes,
    vielen Dank für die Ausführung der angedeuteten Idee. Das Beispiel werde ich gleich mal ausprobieren.

    Bin schon ganz gespannt was du uns (über)morgen vorstellst.

  4. @lustiger Augustin:
    Ich finde AutoIt keineswegs unseriös, ganz im Gegenteil. Der OP wo Pixelsearch erläutert wird ist gut geschrieben und könnte ruhig etwas umfangreicher ausfallen. Mag sein, dass die Aimbot Community von Außenstehenden problematisiert wird, aber es geht dort um ernste Themen.

Schreibe einen Kommentar