|
You last visited: Today at 03:08
Advertisement
Pixelsearch Bot Problem
Discussion on Pixelsearch Bot Problem within the Nostale forum part of the MMORPGs category.
10/10/2010, 12:54
|
#1
|
elite*gold: 32
Join Date: Jul 2010
Posts: 2,377
Received Thanks: 1,167
|
Pixelsearch Bot Problem
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
|
#2
|
elite*gold: 1
Join Date: Feb 2009
Posts: 834
Received Thanks: 803
|
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)
Code:
HotKeySet("{F1}", "starten")
HotKeySet("{F2}", "pause")
HotKeySet("{F3}", "quit")
HotKeySet("{F4}", "_obereEcke")
HotKeySet("{F5}", "_untereEcke")
HotKeySet("{F6}", "_farbe")
Global $p1,$p2,$p3,$color
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()
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
TrayTip("Bot","Bot gestartet!",5)
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
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
Quote:
Originally Posted by _THE_RAIN_
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
|
#3
|
elite*gold: 32
Join Date: Jul 2010
Posts: 2,377
Received Thanks: 1,167
|
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
|
#4
|
elite*gold: 59
Join Date: Jun 2007
Posts: 374
Received Thanks: 86
|
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"
Oder hier "Mario Bros Theme"
See Ya!
|
|
|
10/10/2010, 16:51
|
#5
|
elite*gold: 32
Join Date: Jul 2010
Posts: 2,377
Received Thanks: 1,167
|
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
|
#6
|
elite*gold: 59
Join Date: Jun 2007
Posts: 374
Received Thanks: 86
|
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
|
#7
|
elite*gold: 32
Join Date: Jul 2010
Posts: 2,377
Received Thanks: 1,167
|
Tut mir leid, aber ich kenn mich leider noch nicht so gut aus. Wie macht man das?
|
|
|
10/10/2010, 19:25
|
#8
|
elite*gold: 59
Join Date: Jun 2007
Posts: 374
Received Thanks: 86
|
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
|
#9
|
elite*gold: 32
Join Date: Jul 2010
Posts: 2,377
Received Thanks: 1,167
|
Den Source-Code findest du oben^^ und ich kanns mal versuchen...
|
|
|
10/10/2010, 23:49
|
#10
|
elite*gold: 112
Join Date: Jan 2010
Posts: 1,531
Received Thanks: 414
|
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 
mfg Freaky
|
|
|
10/10/2010, 23:55
|
#11
|
elite*gold: 32
Join Date: Jul 2010
Posts: 2,377
Received Thanks: 1,167
|
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
|
#12
|
elite*gold: 112
Join Date: Jan 2010
Posts: 1,531
Received Thanks: 414
|
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 
Und das bedeutet das du den Beep Befehl nicht benutzen kannst.
|
|
|
10/11/2010, 00:21
|
#13
|
elite*gold: 32
Join Date: Jul 2010
Posts: 2,377
Received Thanks: 1,167
|
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
|
#14
|
elite*gold: 112
Join Date: Jan 2010
Posts: 1,531
Received Thanks: 414
|
Mach das mal vor das if pixel....
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
|
#15
|
elite*gold: 32
Join Date: Jul 2010
Posts: 2,377
Received Thanks: 1,167
|
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?
|
|
|
 |
|
Similar Threads
|
AutoIt Pixelsearch Problem
05/26/2010 - General Coding - 20 Replies
Hallo Users,
ich habe mir gedacht ich schreib mal einen Bot für Nostale der beim Minigame Steinbruch immer lvl 5 Belohnung holen soll. Nur das Problem ist dass ich nicht weiss wie ich mit Pixelsearch umgehen soll, also hab ich mir den Pixelsearch-Teil von einem Bot rüberkopiert. Doch mein Bot will jetzt nicht funktionieren
So sieht der jetzt im Moment aus
Beim roten Teil liegt mein Problem. Kann mir bitte einer helfen? :handsdown:
mfg
Mr.K
|
Kleines Problem mit PixelSearch
04/08/2010 - AutoIt - 4 Replies
Da bin ich mal wieder >_>
Is eig ganz simpel:
Do
$pixel2=PixelSearch(351,249,431,532,0xFFFFFF, 5)
Until IsArray($pixel2)
If IsArray($pixel2) Then
If $get2 = "German" Then
MouseClick(360, 346)
ElseIf $get2 = "English" Then
MouseClick(400, 293)
|
AutoIt PixelSearch Problem
02/07/2010 - AutoIt - 3 Replies
Hi,
Ich bin gerade an einem Bot,
beschäftigt und möchte in diesem Bot gerne PixelSearch benutzen
Nur wenn ich das in einer While Schleife mache klickt er nur noch und macht die anderen Sachen nicht mehr ..
Hoffe ihr könnt mir helfen
Mfg Selman99
|
pixelsearch problem
09/27/2009 - GW Bots - 4 Replies
hi,
will mir nen bot schreiben komme aba ned weiter QQ
also er soll etwas solange tun bis er via pixelsearch die angegebene farbe ned mehr findet. so weit so gut nur bekomme ich das nich so richtig hin QQ.
hier meine versuche:
nr1:
do
send("1")
sleep(200)
send("2")
|
[AutoIt] Problem mit PixelSearch.
08/19/2007 - General Coding - 3 Replies
Moin moin.
Ich hatte die Idee, dass man mit AutoIt ein PickIt Programm fuer D2 schreiben koennte. Hier erstmal der Code..
Soweit, so gut.. hm. Meine Idee dahinter war es, dass ich ein Script einfach nach der Farbe des Unique Tags in D2 (#958166) suchen und dann einen Mausklick auf das/die entsprechenden Pixel ausfuehren lasse..
Problem: Zurzeit funktioniert daran nichts, ausser die Terminate Funktion. Vielleicht kann mir ja jemand auch diesmal weiterhelfen ;>
|
All times are GMT +1. The time now is 03:10.
|
|