Pixelsearch Bot Problem

10/10/2010 12:54 Δbraxas#1
Ich habe mich entschlossen auch mal mit Autoit anzufangen und solche einfachen Leertasten Bots u.ä. bekomm ich auch hin aber irgendwie hab ich grade Probleme mit nem Pixelsearch Bot und zwar:

Mein Bot soll einen selbst Auswählbaren Bereich Nach einer Bestimmten Farbe "absuchen" und wenn diese Farbe kommt soll er einen Ton von sich geben - gleichzeitig soll er aber auch Botten. Mein script sieht im Moment so aus:

Code:
 HotKeySet("{F1}", "starten")
HotKeySet("{F2}", "pause")
HotKeySet("{F3}", "quit")
HotKeySet("{F4}", "_obereEcke")
HotKeySet("{F5}", "_untereEcke")
HotKeySet("{F6}", "_farbe")

MsgBox(64, "Pixelsearch Bot - Infos", "Starten = F1 | Pausieren = F2 | Beenden = F3 |  Obere Ecke = F4 | Untere Ecke = F5 | Farbe = F6! |
Erst Koordintaten und Farbe Festlegen dann Starten! ", 5)

Sleep(5000)

While 1
sleep(200)
WEnd

Func _obereEcke()
    $p1 = MouseGetPos()
    Tooltip("Koordinaten von Obere Ecke gespeichert.")
    Sleep (500)
    ToolTip("")
EndFunc

Func _untereEcke()
    $p2 = MouseGetPos()
    Tooltip("Koordinaten von Untere Ecke gespeichert.")
    Sleep (1500)
    ToolTip("")
EndFunc

Func _farbe()
    $p = MouseGetPos()
    $color = PixelGetColor($p[0], $p[1])
    Tooltip("Farbe erfolgreich gespeichert. Sie ist: " & Hex($color, 6)) 
    Sleep (500)
    ToolTip("")
EndFunc



Func starten()
While 1[B]
	$pixel=PixelSearch($p1, $p1 ,$p2 ,$p2, "0x" & Hex($color, 5), 5)
		If isArray($pixel) then 
			Beep(500, 1000)
		Endif[/B]
	sleep(100)
	Controlsend("NosTale","","","Z")
	sleep(100)
	Controlsend("NosTale","","","X")
	sleep(100)		
Wend		
EndFunc


Func pause()
 While True
 Sleep(1000)
 WEnd
 Endfunc
 
 
Func quit()
Exit
Endfunc
Für die Profis unter euch vermutlich sehr schlecht geschrieben^^
Aber egal, auf jeden Fall funktioniert der Bot nicht, denn wenn ich Dann F1 drücke um den Bot zu starten kommt ein Fehler der besagt:

Code:
$pixel=PixelSearch($p1,$p1,$p2,$p2, "0x" & Hex($color,5),5)
$pixel=pixelSearch(^ERROR

Error:Variable used without being declared.

Achja und Außerdem kann ich die Koordinaten nur bestimmen wenn Nostale nicht im Vordergrund ist 0.o? Kann man das irgendwie richtig machen?

Falls jemand eine Idee haben sollte, wie man das richtig macht, ist vermutlich für die meisten hier eine Sache von 3 Minuten, dann wäre es schön, wenn ihr mir helfen könntet!
Achja sorry für den langen Text! =)
Edit: Cool mein 123. Beitrag xDDD
10/10/2010 13:40 Trøjan#2
Zu deinem Hauptfehler würde ich sagen, das du erst die anderen Hotkeys drücken musst und dann erst F1. Weil in der Funktion _starten werden
$p1, $p1 ,$p2 ,$p2 und $color abgefragt.
Diese Variablen werde aber erst in den Anderen Funktionen bestimmt.

Schreibe am besten das an den Anfang des Skriptes:
Code:
Global $p1,$p2,$color
Und in die Funktion starten()
Code:
    If $p1 = "" Then
        MsgBox(0,"","Bitte Punkt 1 bestimmen.")
        Return
    ElseIf $p2 = "" Then
        MsgBox(0,"","Bitte Punkt 2 bestimmen.")
        Return
    ElseIf $color = "" Then
        MsgBox(0,"","Bitte die Farbe bestimmen.")
        Return
    EndIf
Außerdem hast du in der While Schleife die Punkte falsch kontrolliert.
So müsste es aussehen:
Code:
$pixel=PixelSearch($p1[0], $p1[1] ,$p2[0] ,$p2[1], "0x" & Hex($color, 5), 5)
Weil MouseGetPos() schreibt in Arrays also $p1[0] ist x und $p1[1] ist y.


Hoffe du kannst was mit der Hilfe anfangen und wenn nich, frag einfach :]

Hier das Fertige Skript (Bitte erst angucken, wenn alles verstanden ist)

Quote:
Originally Posted by _THE_RAIN_ View Post
Achja und Außerdem kann ich die Koordinaten nur bestimmen wenn Nostale nicht im Vordergrund ist 0.o? Kann man das irgendwie richtig machen?
Als Admin ausführen =]
10/10/2010 16:02 Δbraxas#3
Okay vielen Dank! ich versuchs gleich mal =) Hab wie immer das #requireAdmin vergessen^^

Mh... komischerweise kommt kein Sound wenn ich Angeflüstert werde...?
Aber sonst ist alles Super! Stimmt der Befehl: Beep(500, 1000)?





Achja das find ich cool TrayTip("Bot","Bot gestartet!",5)^^
10/10/2010 16:44 Devil589#4
Hallo, der Befehl Beep(500, 1000) ist richtig und funktioniert bei mir auch.
Der Ton ist nur relativ leise also überprüfe am besten noch mal ob du den Ton vielleicht nicht einfach überhört hast.
Ansonsten kann man auch mit dem Befehl "Beep" kleine Spielereien machen wie z.B. Songs. ;)

Hier mal ein Link zu "Mary had a little lamb"
[Only registered and activated users can see links. Click Here To Register...]

Oder hier "Mario Bros Theme"
[Only registered and activated users can see links. Click Here To Register...]

See Ya!
10/10/2010 16:51 Δbraxas#5
Mh.. Ich hatte zuerst auch gedacht, dass es an dem Ton liegt aber dann hab ich den Befehl durch exit ersetzt und nichts ist passiert!
10/10/2010 16:58 Devil589#6
Dann scheint er wohl nicht in deine Bedingung rein zu springen wenn weder der Beep noch das Exit klappt.
Hast du mal versucht das Array ausgeben zu lassen und geschaut ob da überhaupt was drin steht?
Weil in deiner Bedingung fragst du ja ab ob $pixel ein Array ist oder nicht, und nur wenn es eins ist springt der ja zum Beep.
Also schau am besten mal ob $pixel überhaupt als Array ankommt und wenn ja ob da überhaupt was drin steht.
Das wäre es eine Sache die mir spontan einfällt und die ich auch überprüfen würde.

See Ya!
10/10/2010 17:25 Δbraxas#7
Tut mir leid, aber ich kenn mich leider noch nicht so gut aus. Wie macht man das?
10/10/2010 19:25 Devil589#8
Ich geh mal davon aus dass dein Programm in der While Schleife die ControlSend Befehle ausführt.
Somit kommentiere einfach mal deine Bedingung aus (If) und lass dir die Variable $pixel mal in einer MessageBox ausgeben.

Ansonsten schreib mir per PM mal deine Icq Nummer falls du Icq nutzt dann kann ich dir da vlt. besser weiter helfen.

See Ya!
10/10/2010 19:40 Δbraxas#9
Den Source-Code findest du oben^^ und ich kanns mal versuchen...
10/10/2010 23:49 ¿Freaky¿#10
Wenn du ansaztweise in die Hilfe geschaut hättest, dann wüstest du jetzt das MouseGetPos ein Array zurückgibt. $p[1] = x und $p[2] = y
So da dies geklärt ist, gibt es eine verbesserung:
Dein Script sollte eine Warnung geben. Undzwar das $p nicht declariert ist.
Schreib mal ganz oben hin: Global $p, $p2, $color
So dann beim Pixelsearch wandelst du dein Wert in ein Hex wert um. Für was?
AutoIt kanns auch so lesen, es wandelt eher dein Hex Code in ein Dec Code zurück :D
mfg Freaky
10/10/2010 23:55 Δbraxas#11
Okay danke, aber das hat eigentlich auch Trojan schon gesagt...
Naja Kann mal irgendjemand testen obs bei ihm geht? Bei mir kommt nichts Ich kann alles festlegen und er bottet auch, aber es kommt kein Ton oder irgendwas!
Oder falls jemand ein besseres script hat oder machen könnte wäre es mir auch recht^^

Ich könnte natürlich auch 2 Bots machen, einen Normalen Bot und einen der die ganze Zeit kontrolliert ob jemand was flüstert, aber in einem Bot fände ich das besser!
10/11/2010 00:07 ¿Freaky¿#12
Probier das mal:
Code:
For $i = 1 To 500
    For $j = 1 To 2
        Beep ($i,500*$j)
    Next
Next
Wenn du immer noch nichts hörst, dann hast du kein Beeper :D
Und das bedeutet das du den Beep Befehl nicht benutzen kannst.
10/11/2010 00:21 Δbraxas#13
Ich hab den Beep schon einfach so als Befehl getestet und ich hab ihn klar und deutlich gehört, Ich weiss nicht was falsch ist 0.o?
vermutlich was daran:

Code:
While 1
$pixel=PixelSearch($p1[0], $p1[1] ,$p2[0] ,$p2[1], "0x" & Hex($color, 5), 5)
	If isArray($pixel) then 
		Beep(500, 1000)
	Endif
[....]
WEnd

Achja das mit dem Beep Test ist ja mal witzig vorallem wenn man (wie ich) Als Minianwendung einen Spectrum Analyser hat^^
10/11/2010 00:27 ¿Freaky¿#14
Mach das mal vor das if pixel.... :D
Code:
ToolTip ($p1[0] & @CRLF & $p1[1] & @CRLF & $p2[0] & @CRLF & $p2[1],0,0)
Und guck was es dir anzeigt, wenn es nichts anzeigt dann machst du was falsch bei den MouseGetPost ^^
10/11/2010 00:28 Δbraxas#15
Okay ich probiers mal =)

Edit: Hey es geht! Wie hast du das gemacht :O ?
Es kommt ein Ton und in der linken oberen Ecke werden irgendwelche Zahlen angezeigt! °o°

Es hat zumindest im Test geklappt in Nostale geht es irgendwie net...
Ich hab es zum Testen auf dem Desktop ausprobiert...


Aha: Ich habe eine Theorie: vermutlich überprüft der Bot die Pixel auf dem Desktoop und nicht im Nostale Fenster! kann man das ändern?