autoit pixelgetcolor

04/20/2012 17:06 H@CT0R#1
habe erst vor kurzem mit autoit angefangen und wollte nun einen trigger bot schreiben, welcher schießt, wenn ein gegner unter dem crosshair ist...
plan: mitte des bildschirms überprüfen ob eine vorher definierte farbe dort erscheint und wenn ja, dann schießen
Code:
while 1
Sleep(100)
$farbe = PixelGetColor (@DesktopWidth/2, @DesktopHeight/2)
$hex = Hex($farbe, 6)
If $hex = "02FF02" Then
   MouseClick("left",@DesktopWidth/2,@DesktopHeight/2)
   Sleep(400)
EndIf
WEnd
Problem 1: Er soll auch die zwei umliegenden Pixelreihen überprüfen: (Grün: Mittlerer Bildschirmpixel, Orange die Reihen die er zusätzlich überprüfen soll, Blau soll nicht mehr überprüft werden)
[Only registered and activated users can see links. Click Here To Register...]
Frage: Wie mache ich das ohne für jeden eine getpixel funktion auszuführen? kann ich wie bei pixelsearch vielleicht ein rechteck definieren?
wenn auch nur einer dieser pixel die definierte farbe annimmt soll der mausklick ausgeführt werden...

Problem 2: Er soll nicht nur auf die Farbe reagieren, da die gefärbten Models ja auch nicht 100%ig nur eine Farbe haben, sondern auch kleine abweichungen soll er nicht nur 02FF02 erkennen, sondern z.B. auch 00FF00 bis max. 0AFF0A
Nur wie soll ich das machen ohne für jede Farbe ein eigenes if auszuführen?

Bin dankbar für jede Hilfe...
04/20/2012 17:19 Njahs#2
Benutz doch Imagesearch
04/20/2012 17:29 H@CT0R#3
Aber gibt imagesearch nicht die koordinaten des punktes aus, wo diese farbe gefunden wurde, und nicht die gefundene farbe?
04/20/2012 19:04 Njahs#4
Quote:
Originally Posted by H@CT0R View Post
Aber gibt imagesearch nicht die koordinaten des punktes aus, wo diese farbe gefunden wurde, und nicht die gefundene farbe?
Ach fail.. mein fehler ,
du kannst aber mit Imagesearch
einen bereich nach etwas absuchen,
ob etwas in einem bestimmten bereich
vorhanden ist
04/20/2012 19:25 H@CT0R#5
imagesearch sucht aber nach einem bild, nicht nach der farbe eines pixels (korrigiere mich wenn ich falsch liege, habe nur kurz danach gegoogelt) und bezieht sich laut google auf den gesamten bildschirm..dann müsste ich ja einen pixel rot färben, als bild speichern und mit imagesearch danach suchen, dadurch kann ich aber das farbspektrum (von 00FF00 über 02FF02 bis max. 0AFF0A) nicht abdecken...
Oder sehe ich das falsch?
04/20/2012 20:50 Achat#6
Quote:
Originally Posted by H@CT0R View Post
habe erst vor kurzem mit autoit angefangen und wollte nun einen trigger bot schreiben, welcher schießt, wenn ein gegner unter dem crosshair ist...
plan: mitte des bildschirms überprüfen ob eine vorher definierte farbe dort erscheint und wenn ja, dann schießen
Code:
while 1
Sleep(100)
$farbe = PixelGetColor (@DesktopWidth/2, @DesktopHeight/2)
$hex = Hex($farbe, 6)
If $hex = "02FF02" Then
   MouseClick("left",@DesktopWidth/2,@DesktopHeight/2)
   Sleep(400)
EndIf
WEnd
Problem 1: Er soll auch die zwei umliegenden Pixelreihen überprüfen: (Grün: Mittlerer Bildschirmpixel, Orange die Reihen die er zusätzlich überprüfen soll, Blau soll nicht mehr überprüft werden)
[Only registered and activated users can see links. Click Here To Register...]
Frage: Wie mache ich das ohne für jeden eine getpixel funktion auszuführen? kann ich wie bei pixelsearch vielleicht ein rechteck definieren?
wenn auch nur einer dieser pixel die definierte farbe annimmt soll der mausklick ausgeführt werden...

Problem 2: Er soll nicht nur auf die Farbe reagieren, da die gefärbten Models ja auch nicht 100%ig nur eine Farbe haben, sondern auch kleine abweichungen soll er nicht nur 02FF02 erkennen, sondern z.B. auch 00FF00 bis max. 0AFF0A
Nur wie soll ich das machen ohne für jede Farbe ein eigenes if auszuführen?

Bin dankbar für jede Hilfe...
Also von der Logik her würde ich das so machen:
Code:
IF PixelGetColor(@DesktopWidth/2, @DesktopHeight/2) = Farbe AND Pixelgetcolor(@DesktopWidth/2+1, @DesktopHeight/2+1) = Farbe AND .... usw. Then
MouseClick()
Endif
Warum speicherst du denn die Farbe von Pixelgetcolor und vergleichst sie dann? Geht doch auch direkt mit Pixelgetcolor beim If ;) Mit F1 kannst du die Hilfe zu einer Funktion aufrufen.

MfG

EDIT:
Zum IF:

Code:
If Hex(PixelGetColor(@DesktopWidth/2, @DesktopHeight/2)) = "02FF02" Then ; <--- spart dir 2 Variablen und 2 Zeilen Code
04/20/2012 21:39 H@CT0R#7
Quote:
Originally Posted by Achat View Post
Also von der Logik her würde ich das so machen:
Code:
IF PixelGetColor(@DesktopWidth/2, @DesktopHeight/2) = Farbe AND Pixelgetcolor(@DesktopWidth/2+1, @DesktopHeight/2+1) = Farbe AND .... usw. Then
MouseClick()
Endif
AND, macht der das dann nicht nur, wenn ALLE Bedingungen erfüllt sind?
Da wäre ein und/oder gut, also eins von beidem...vmtl. würde ein OR aber schon reichen, werde ich die tage mal ausprobieren, danke

Quote:
Warum speicherst du denn die Farbe von Pixelgetcolor und vergleichst sie dann? Geht doch auch direkt mit Pixelgetcolor beim If ;) Mit F1 kannst du die Hilfe zu einer Funktion aufrufen.
Habe die Funktionen alle Nacheinander geschrieben und miteinander verknüpft, aber deine Möglichkeit ist natürlich besser, danke dafür ;)