AutoIt Script beendet sich sofort

05/01/2015 01:08 kollergen#1
Hi Community,
ich bin dabei mir einen PixelBot zu schreiben und es sieht auch recht soliede aus, nur habe ich das Problem, dass wenn ich die AutoIt Datei starte, sie sich sofort wieder beendet.

Mein Script sieht wie folgt aus:

Code:
HotKeySet("{F2}", "Search")
HotKeySet("{ESC}", "ende")


Func Search()
	  While 1
		 $BB = PixelSearch (7, 64, 1903, 1022, 0xFFFFFD)
			If IsArray($BB) Then
			MouseClick("Left", $BB Random[1,5], $BB Random[1,5], 1, Random(3,7))
			Sleep(Random(8000,9000))
		 Else
			MouseClick("Left", Random(1721, 1897), Random(1013, 910), 1, Random(3,7))
			   If IsArray($BB) Then
				  MouseClick("Left", $BB Random[1,5], $BB Random[1,5], 1, Random(3,7))
			   EndIf
			EndIf
	  WEnd
EndFunc


Func ende()
	Exit
 EndFunc
Wenn der Bot mit F2 gestartet wird, soll nach einem bestimmten Pixel gesucht werden.
Findet er diesen, soll er in einem zufälligen Radius zu diesem Pixel einen Klick machen.
Findet er diesen Pixel nicht, soll er durch einen Klick auf der Karte (zum fortbewegen im Spiel) sich bewegen und während der Bewegung bereits suchen - will da ungern eine Sleep Funktion einbauen, da er dann an den bestimmten Pixel vorbei läuft.
Hat er während der Suche/Bewegung den Pixel gefunden, soll er ihn wie oben anklicken und die Schleife von neuem beginnen.

Hoffentlich könnt Ihr mir helfen.

MfG
05/01/2015 01:30 Moneypulation#2
Dein Script beendet sich wieder sofort, weil es deinen Code abgearbeitet hat und du keine Schleife hast, in der es sozusagen hängenbleibt. Füge nach deinen HotKeySets eine Endlosschleife hinzu. Am besten mit einem Sleep, damit deine CPU nicht unnötig belastet wird:

PHP Code:
While Sleep(200)
WEnd 
05/01/2015 01:51 kollergen#3
Ich habe eine While Schleife doch gegeben, die sich im Grunde immer wiederholen müsste, oder meinst du etwas anderes?
05/01/2015 02:01 Moneypulation#4
Quote:
Originally Posted by kollergen View Post
Ich habe eine While Schleife doch gegeben, die sich im Grunde immer wiederholen müsste, oder meinst du etwas anderes?
Ja, du hast eine While-Schleife. Aber die ist in einer Funktion, die nur durch einen HotKey ausgelöst wird. Die Funktionen Search() und ende() hast du definiert, jedoch werden sie niemals aufgerufen (außer mit deinem HotKey). Und bis du einen HotKey drückst, muss dein Script irgendwo "pausieren" und dazu brauchst du eine While-Schleife außerhalb der Funktion, die beim Ausführen des Scripts ausgelöst wird und dein Bot somit diese so oft durchläuft bis du per HotKey eine Funktion aufrufst
05/01/2015 02:14 kollergen#5
Vielen Dank
Das Problem ist schon mal behoben.

Kannst du mir eventuell noch einmal helfen?

Ich würde gerne eine Random Funktion einbauen, wenn er einen Pixel gefunden hat, damit die Maus nicht immer auf den selben Pixel klickt und der Bot somit schwerer zu erkennen ist.
Ist das irgendwie möglich, dass wenn der Pixel gefunden wurde, in einem bestimmten zufälligen Umfeld von diesem Pixel der Mausklick ausgeübt wird?
05/01/2015 02:18 Moneypulation#6
Quote:
Originally Posted by kollergen View Post
Vielen Dank
Das Problem ist schon mal behoben.

Kannst du mir eventuell noch einmal helfen?

Ich würde gerne eine Random Funktion einbauen, wenn er einen Pixel gefunden hat, damit die Maus nicht immer auf den selben Pixel klickt und der Bot somit schwerer zu erkennen ist.
Ist das irgendwie möglich, dass wenn der Pixel gefunden wurde, in einem bestimmten zufälligen Umfeld von diesem Pixel der Mausklick ausgeübt wird?
Google ist dein Freund :p

[Only registered and activated users can see links. Click Here To Register...]
05/01/2015 02:48 kollergen#7
Auf diese Seite bin ich auch schon gestoßen, nur bringt sie mich eher zur Verzweifelung als das sie mir weiterhelfen könnte.

Ich habe den Bot nun ein wenig umgeschrieben:

Quote:
HotKeySet("{F2}", "Search")
HotKeySet("{ESC}", "ende")

$iCounter = 1

While 1
Sleep(100)
While $iCounter <= 1
MsgBox (64, "Tastenbelegung", "F2: Sammeln beginnen" & @CRLF & "ESC: Script beenden")
$iCounter +=1
WEnd
WEnd

Func Search()
While 1
$BB = PixelSearch (7, 64, 1903, 1022, 0xFFFFFD)
If IsArray($BB) Then
MouseClick("Left", $BB[0], $BB[1], 1, Random(3,7))
Sleep(Random(3000,4000))
Else
Sleep (Random (2000, 4000))
MouseClick("Left", Random(1720, 1896), Random(908, 1012), 1, Random(3,7))
Sleep (Random (3000, 5000))
If IsArray($BB) Then
MouseClick("Left", $BB[0], $BB[1], 1, Random(3,7))
Sleep (Random (3000, 5000))
EndIf If IsArray($BB) Then
MouseClick("Left", $BB[0], $BB[1], 1, Random(3,7))
Sleep (Random (3000, 5000))
EndIf
EndIf
WEnd
EndFunc


Func ende()
Exit
EndFunc
Nun wird 3mal auf dem Weg zum angeklickten Punkt auf der Karte "gescannt" ob der Pixel zu finden ist.
Nur die Random Funktion bekomme ich nicht hin.

EDIT: Hab es doch hinbekommen
Vielen vielen Dank für deine Hilfe zur so später Stunde.
Kann abgeschlossen werden.
05/01/2015 14:43 snow#8
#closed