|
You last visited: Today at 09:08
Advertisement
Problem mit Pixelsearch
Discussion on Problem mit Pixelsearch within the AutoIt forum part of the Coders Den category.
05/25/2013, 02:55
|
#1
|
elite*gold: 0
Join Date: May 2013
Posts: 85
Received Thanks: 0
|
Problem mit Pixelsearch
Hallo!
zunächst möchte ich sagen, dass ich nicht neu bin.
ihr müsst mich also nicht willkommen heißen 
zum thema:
ich dacht mir es wäre schlau sich pixelsearch anzuschauen weil die idee doch sehr cool ist^^.jedenfalls habe ich mich jetzt eine weile damit beschäftigt und ein paar sachen gelesen, was gegoogelt und ein bisschen selbst rumprobiert.
lief auch alles ganz gut bis ich auf ein problem gestoßen bin, welches mir eher kopfzerbrechen bereitet als dass es sich von mir allein lösen lässt.
darum wollte ich euch um hilfe bitten
Code:
Func Start()
While 1
$PixelPosAirEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x70AED6, 0)
$PixelPosEarthEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xA86D58, 0)
$PixelPosWaterEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xCB8195, 0)
If Not @error Then
MouseClick("left", $PixelPosAirEss[0], $PixelPosAirEss[1], 1, 0)
Sleep(35000)
Else
MouseClick("left", $PixelPosEarthEss[0], $PixelPosEarthEss[1], 1, 0)
Sleep(35000)
ElseIf
MouseClick("left", $PixelPosWaterEss[0], $PixelPosWaterEss[1], 1, 0)
Sleep(35000)
EndIf
WEnd
EndFunc
autoit sagt mir zwar:
Error: Too many "Else" statements for matching "If" statement.
aber habe trotz rumprobieren trotzdem keine lösung gefunden
(vielleicht habe ich auch etwas übersehen.in dem fall tut es mir leid  )
bin noch relativ neu in autoit und hoffe ihr könnt mir helfen.
danke
|
|
|
05/25/2013, 03:17
|
#2
|
elite*gold: 3570
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
|
Vor dem EndIf hast eine ElseIf Abfrage ohne Abfrage. Mach aus dem ElseIf ein Else.
Bzw. Vollende diese ElseIf Abfrage.
Ich würde dies aber lieber mit Switch Case lösen. Kann aber auch sein dass ich falsch liege (müde)
|
|
|
05/25/2013, 09:59
|
#3
|
elite*gold: 0
Join Date: Jan 2013
Posts: 426
Received Thanks: 129
|
problem: funktion wird deklariert aber nicht aufgerufen.
lösung: while schleife und hotkeyset welcher die funktion aufruft (und ein hotkeyset um das ganze zu beenden)
volles script (mit kommentaren):
Code:
hotkeyset("{F8}","Start") ;wenn F8 gedrückt wurde dann springe zu funktion Start
hotkeyset("{F9}","_Exit") ;wenn F9 gedrückt wurde dann springe zu funktion _Exit
while 1 ;anfang der schleife
sleep(1) ;das hier soll (wort wörtlich) nichts tun
wend ;ende der schleife
Func Start() ;funktion Start fängt hier an
While 1 ;schleife startet
$PixelPosAirEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x70AED6, 0) ;sucht nach pixel
$PixelPosEarthEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xA86D58, 0);sucht nach pixel
$PixelPosWaterEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xCB8195, 0);sucht nach pixel
If IsArray($PixelPosEarthEss) Then ;wenn $PixelPosEarthEss eine array variable ist dann .....
MouseClick("left", $PixelPosEarthEss[0], $PixelPosEarthEss[1], 1, 0) ;klickt auf den ausgesuchten pixel
Sleep(35000) ;wartet 35 sekunden
ElseIf IsArray($PixelPosAirEss) Then ;wenn ... eine array variable ist dann ....
MouseClick("left", $PixelPosAirEss[0], $PixelPosAirEss[1], 1, 0) ;klickt auf den ausgesuchten pixel
Sleep(35000) ;wartet 35 sekunden
ElseIf IsArray($PixelPosWaterEss) Then ;wenn ... eine array variable ist dann ...
MouseClick("left", $PixelPosWaterEss[0], $PixelPosWaterEss[1], 1, 0) ;klickt auf den ausgesuchten pixel
Sleep(35000) ;wartet 35 sekunden
EndIf ;If abfrage endet hier
WEnd ;schleife endet hier
EndFunc ;funktion endet hier
Func _Exit() ;Funktion _Exit startet hier
Exit ;Beendet das script
EndFunc ;Funktion _Exit endet hier
|
|
|
05/25/2013, 17:56
|
#4
|
elite*gold: 0
Join Date: May 2013
Posts: 85
Received Thanks: 0
|
danke für die antworten,
habe es nun so stehen:
Code:
Func Start()
While 1
$PixelPosAirEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x70AED6, 0)
$PixelPosEarthEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xA86D58, 0)
$PixelPosWaterEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xCB8195, 0)
If IsArray($PixelPosAirEss) Then
MouseClick("left", $PixelPosAirEss[0], $PixelPosAirEss[1], 1, 0)
Sleep(35000)
ElseIf IsArray($PixelPosEarthEss) Then
MouseClick("left", $PixelPosEarthEss[0], $PixelPosEarthEss[1], 1, 0)
Sleep(35000)
ElseIf IsArray($PixelPosWaterEss) Then
MouseClick("left", $PixelPosWaterEss[0], $PixelPosWaterEss[1], 1, 0)
Sleep(35000)
EndIf
WEnd
EndFunc
ich bekomme zwar keine fehlermeldung mehr,
allerdings erziele ich nicht das ergebnis auf $PixelPosEarthEss oder $PixelPosWaterEss zu klicken falls sich kein $PixelPosAirEss findet
EDIT:
was ich vergessen hatte zu sagen ist, dass das nur ein ausschnitt des scripts ist das über hotkeyset verfügt. wollte es nur nicht unübersichtlich machen und habe deshalb nur die funktion "Func Start()" gepostet
|
|
|
05/25/2013, 18:51
|
#5
|
elite*gold: 0
Join Date: Jan 2013
Posts: 426
Received Thanks: 129
|
achso! o.k
hier das fertige script
Code:
Func Start() ;funktion Start fängt hier an
While 1 ;schleife startet
$PixelPosAirEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x70AED6, 0) ;sucht nach pixel
$PixelPosEarthEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xA86D58, 0);sucht nach pixel
$PixelPosWaterEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xCB8195, 0);sucht nach pixel
If IsArray($PixelPosEarthEss) Then ;wenn $PixelPosEarthEss eine array variable ist dann .....
MouseClick("left", $PixelPosEarthEss[0], $PixelPosEarthEss[1], 1, 0) ;klickt auf den ausgesuchten pixel
Sleep(35000) ;wartet 35 sekunden
Else ;wenn $PixelPosEarthEss keine array variable ist dann
If IsArray($PixelPosAirEss) Then ;wenn ... eine array variable ist dann ....
MouseClick("left", $PixelPosAirEss[0], $PixelPosAirEss[1], 1, 0) ;klickt auf den ausgesuchten pixel
Sleep(35000) ;wartet 35 sekunden
ElseIf IsArray($PixelPosWaterEss) Then ;wenn ... eine array variable ist dann ...
MouseClick("left", $PixelPosWaterEss[0], $PixelPosWaterEss[1], 1, 0) ;klickt auf den ausgesuchten pixel
Sleep(35000) ;wartet 35 sekunden
EndIf ;If abfrage endet hier
EndIf
WEnd ;schleife endet hier
EndFunc ;funktion endet hier
|
|
|
05/25/2013, 19:55
|
#6
|
elite*gold: 0
Join Date: May 2013
Posts: 85
Received Thanks: 0
|
Code:
Func Start()
While 1
$PixelPosAirEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x70AED6, 0)
$PixelPosEarthEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xA86D58, 0)
$PixelPosWaterEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xCB8195, 0)
If IsArray($PixelPosAirEss) Then
MouseClick("left", $PixelPosAirEss[0], $PixelPosAirEss[1], 1, 0)
Sleep(1000)
Else
If IsArray($PixelPosEarthEss) Then
MouseClick("left", $PixelPosEarthEss[0], $PixelPosEarthEss[1], 1, 0)
Sleep(1000)
ElseIf IsArray($PixelPosWaterEss) Then
MouseClick("left", $PixelPosWaterEss[0], $PixelPosWaterEss[1], 1, 0)
Sleep(1000)
EndIf
EndIf
WEnd
EndFunc
(sleep zu testzwecken verkürzt)
habe leider immernoch das problem, dass nur auf $PixelPosAirEss geklickt wird.
(soll falls es nicht da ist auf $PixelPosEarthEss oder $pixelPosWaterEss klicken)
habe das script schon compiled was aber auch nicht half.
weisst du vllt wo das problem liegt?
habe übrigens keinen speziellen include befehl gegeben
|
|
|
05/25/2013, 20:03
|
#7
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
es liegt am else .....
If
Else
EndIf
=
Wenn
wenn was anderes
Ende wenn
naja so ungefähr also er findet bei dir den pixel also brauch er die else abfrage nicht mehr zu bearbeiten
|
|
|
05/25/2013, 20:11
|
#8
|
elite*gold: 1445
Join Date: Sep 2011
Posts: 199
Received Thanks: 177
|
benutz am besten select
|
|
|
05/25/2013, 20:33
|
#9
|
elite*gold: 0
Join Date: May 2013
Posts: 85
Received Thanks: 0
|
Quote:
Originally Posted by »FlutterShy™
naja so ungefähr also er findet bei dir den pixel also brauch er die else abfrage nicht mehr zu bearbeiten
|
ne wenn er $airEss nich findet dann wartet er nur bis er es tut. aber klickt nicht auf $earthEss oder $waterEss
oder habe ich die jetzt falsch verstanden?
|
|
|
05/25/2013, 20:55
|
#10
|
elite*gold: 1445
Join Date: Sep 2011
Posts: 199
Received Thanks: 177
|
er schaut ob airess gefunden ist , falls nicht schaut er ob wateress gefunden ist , falls keins von beiden gefunden wurde schaut er ob earthess gefunden wurde
allerdings wäre das hier besser:
PHP Code:
Func Start() While 1 $PixelPosAirEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x70AED6, 0) $PixelPosEarthEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xA86D58, 0) $PixelPosWaterEss = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xCB8195, 0) Select Case IsArray($PixelPosAirEss) ;Anweisung Case IsArray($PixelPosEarthEss) ;Anweisung Case IsArray($PixelPosWaterEss) ;Anweisung EndSelect WEnd EndFunc
|
|
|
05/25/2013, 22:11
|
#11
|
elite*gold: 0
Join Date: May 2013
Posts: 85
Received Thanks: 0
|
klappt! 
das hauptproblem war jedoch ein anderes: die farbe von wateress und earthess sind nicht vorgekommen da das objekt in bewegung ist.das ist aber ein anderes problem dem ich mich lieber selbst annehme
dass es nun funtioniert weiss ich daher, dass wenn ich den screenshot,von dem ich die farben habe, in paint öffne übermalt das script alle gewünschten bereiche.
vielen vielen dank an euch für die hilfe
|
|
|
 |
Similar Threads
|
Pixelsearch Problem
02/25/2013 - AutoIt - 7 Replies
Also ich versuche hier gerade ein kleines Tool zu schreiben und habe folgendes Problem:
Es soll in einem Bereich nach einer bestimmten Farbe gesucht werden. Wird die Farbe gefunden, soll er auf Feld1 klicken. Wird die Farbe nicht gefunden, soll er auf Feld2 drücken.
Das Ganze sieht momentan so aus:
Func _Start()
$Xstabbar2 = GuiCtrlRead($Xstabbar) + 5
$Ystabbar2 = GuiCtrlRead($Ystabbar) + 2
$suchebild1 =...
|
> Pixelsearch problem
06/06/2012 - AutoIt - 4 Replies
guten tag und danke im vorraus
Problem
pixelsearch klickt unerwünschte pixel/farbe an (obwohl die PixelID nicht übereinstimmt)
€nglish
Pixelsearch is clicking random pixels,even if the PixelID is wrong
Func Start() ;^^
|
Pixelsearch Problem
03/18/2011 - AutoIt - 7 Replies
Hey Leute,
wie ihr vielleicht mitbekommen habt, hab ich ja einen kleinen Aion Bot erstellt.
Klappt auch alles ganz wunderbar usw...Jetzt hab ich aber folgendes Problem :
Ich hab einen Pixelsearch Befehl eingebaut, damit er erkennt, wenn das Monster tot ist. Also wenn das Monster am Ende kein rotes Leben mehr hat, dann sammelt er Gegenstände auf. Bei mir klappt das auch alles ganz wunderbar. Nur bei einem Freun haben wir es dann nochmal getestet und bei ihm fing er an die Loot Taste zu...
|
Pixelsearch Bot Problem
10/12/2010 - Nostale - 22 Replies
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:
HotKeySet("{F1}", "starten")
HotKeySet("{F2}", "pause")
HotKeySet("{F3}",...
|
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")
|
All times are GMT +1. The time now is 09:09.
|
|