Pixelsearch bot, frage zu case´s

05/30/2013 18:50 RF1T2#1
Hallo,
versuche derzeit einen Bot für ein Spiel zu machen und komme auch ganz gut voran.
Mein Bot läuft selbstständig zum Zielort und wartet dann.


Allerdings hab ich folgendes Problem:


Code:
Func Start()
While 1
	$PixelPosMapMark0 = PixelSearch(742 ,116 ,896 ,172 ,0x0710CF , 0)
	$PixelPosMapMark1 = PixelSearch(728 ,123 ,791 ,280 ,0x0710CF , 0)
	$PixelPosMapMark2 = PixelSearch(854 ,130 ,899 ,283 ,0x0710CF , 0)
	$PixelPosMapMark3 = PixelSearch(741 ,234 ,885 ,290 ,0x0710CF , 0)




	Select
	Case	IsArray($PixelPosMapMark0)
			MouseClick("left", $PixelPosMapMark0[0], $PixelPosMapMark0[1], 1, 0)
			Sleep(5)
	Case	IsArray($PixelPosMapMark1)
			MouseClick("left", $PixelPosMapMark1[0], $PixelPosMapMark1[1], 1, 0)
			Sleep(5)
	Case	IsArray($PixelPosMapMark2)
			MouseClick("left", $PixelPosMapMark2[0], $PixelPosMapMark2[1], 1, 0)
			Sleep(5)
	Case	IsArray($PixelPosMapMark3)
			MouseClick("left", $PixelPosMapMark3[0], $PixelPosMapMark3[1], 1, 0)
			Sleep(5)

	Case	@error
			MouseClick("left", 843, 396, 1, 0)


	EndSelect
Ich möchte, dass, wenn er keine passenden Pixel findet, (dann ist er am Ziel) mit dem Script fortfährt, in diesem fall mit "Mouseclick...."

Nur wartet mein Bot momentan einfach bis er die entsprechende Farbe wieder findet.

Ich weiss jedoch nicht wie ich ihm sagen kann, dass er wenn er keine entsprechende Farbe findet aufhören soll und mit dem Script weitermachen soll.

Könntet ihr mir da helfen?
05/30/2013 18:56 Croco™#2
Du sagt dem Script einfach, dass es die schleife verlassen soll, sobald das Array kein Array ist.

[Only registered and activated users can see links. Click Here To Register...]
05/30/2013 21:10 RF1T2#3
Code:
	Select
	Case	IsArray($PixelPosMapMark0)
			MouseClick("left", $PixelPosMapMark0[0], $PixelPosMapMark0[1], 1, 0)
			Sleep(5)
	Case	IsArray($PixelPosMapMark1)
			MouseClick("left", $PixelPosMapMark1[0], $PixelPosMapMark1[1], 1, 0)
			Sleep(5)
	Case	IsArray($PixelPosMapMark2)
			MouseClick("left", $PixelPosMapMark2[0], $PixelPosMapMark2[1], 1, 0)
			Sleep(5)
	Case	IsArray($PixelPosMapMark3)
			MouseClick("left", $PixelPosMapMark3[0], $PixelPosMapMark3[1], 1, 0)
			Sleep(5)

	If	Not	IsArray Then
			ExitLoop
			EndIf

	EndSelect




WEnd
EndFunc


			MouseClick("left", 786, 371, 1, 0)
ich weiss es ist falsch aber ich komme nicht darauf wie ich
"wenn kein array, dann..." sagen kann:confused:
05/30/2013 21:27 omer36#4
If Not IsArray($PixelPosMapMark3)
05/30/2013 21:29 Croco™#5
Du hast richtig Gedacht, aber in diesem Fall ist es anders.
Da keine anderes "Case" erfüllt wird gibst du ein weiteres Case an, das "else Case".
D.h. dieses Case wird nur dann aufgerufen wenn kein Pixel gefunden wurde.
In diesem wird dann der ganze ExitLoop code geschrieben:

Code:
Func Start()
While 1
	$PixelPosMapMark0 = PixelSearch(742 ,116 ,896 ,172 ,0x0710CF , 0)
	$PixelPosMapMark1 = PixelSearch(728 ,123 ,791 ,280 ,0x0710CF , 0)
	$PixelPosMapMark2 = PixelSearch(854 ,130 ,899 ,283 ,0x0710CF , 0)
	$PixelPosMapMark3 = PixelSearch(741 ,234 ,885 ,290 ,0x0710CF , 0)




	Select
	Case	IsArray($PixelPosMapMark0)
			MouseClick("left", $PixelPosMapMark0[0], $PixelPosMapMark0[1], 1, 0)
			Sleep(5)
	Case	IsArray($PixelPosMapMark1)
			MouseClick("left", $PixelPosMapMark1[0], $PixelPosMapMark1[1], 1, 0)
			Sleep(5)
	Case	IsArray($PixelPosMapMark2)
			MouseClick("left", $PixelPosMapMark2[0], $PixelPosMapMark2[1], 1, 0)
			Sleep(5)
	Case	IsArray($PixelPosMapMark3)
			MouseClick("left", $PixelPosMapMark3[0], $PixelPosMapMark3[1], 1, 0)
			Sleep(5)

	[B]Case	Else
	         MouseClick("left", 843, 396, 1, 0)
                 Return 1; Ist besser als ExitLoop ;) ist mir aber auch erst gerade aufgefallen [/B]



	EndSelect
WEnd
EndFunc


			MouseClick("left", 786, 371, 1, 0)
05/30/2013 22:02 RF1T2#6
ty:D,
und danach kann ich auch etwas machen das eine neue func startet sobald ich return 1 habe? danach wieder das selbe also mit return 2 z.B. wieder zur ersten func zurück und so eine schleife erzeugen?
05/30/2013 22:58 Croco™#7
Nein, "return 1" bedeutet das die Funktion die Zahl 1 zurück gibt. Sobald eine Funktion aber etwas zurück gibt ist sie beendet.
05/30/2013 23:58 RF1T2#8
achso!
vielen dank
hast mir sehr geholfen :)

hm entschuldigt dass ich nochmal nerve aber ich bekomms noch nicht so ganz hin

Code:
Func Start()
While 1
	$PixelPosMapMark0 = PixelSearch(742 ,116 ,896 ,172 ,0x0710CF , 0)
	$PixelPosMapMark1 = PixelSearch(728 ,123 ,791 ,280 ,0x0710CF , 0)
	$PixelPosMapMark2 = PixelSearch(854 ,130 ,899 ,283 ,0x0710CF , 0)
	$PixelPosMapMark3 = PixelSearch(741 ,234 ,885 ,290 ,0x0710CF , 0)

	$PixelPosPortalAusgang0 = PixelSearch(0 ,0 ,@DesktopWidth, @DesktopHeight, 0x95936A, 0)

	$PixelPosPortalEingang0 = PixelSearch(0 ,0 ,@DesktopWidth, @DesktopHeight, 0x7CB7EF, 0)



	Select
	Case	IsArray($PixelPosMapMark0)
			MouseClick("left", $PixelPosMapMark0[0], $PixelPosMapMark0[1], 1, 0)
			Sleep(5000)
	Case	IsArray($PixelPosMapMark1)
			MouseClick("left", $PixelPosMapMark1[0], $PixelPosMapMark1[1], 1, 0)
			Sleep(5000)
	Case	IsArray($PixelPosMapMark2)
			MouseClick("left", $PixelPosMapMark2[0], $PixelPosMapMark2[1], 1, 0)
			Sleep(5000)
	Case	IsArray($PixelPosMapMark3)
			MouseClick("left", $PixelPosMapMark3[0], $PixelPosMapMark3[1], 1, 0)
			Sleep(5000)

	Case	Else
			;kommt noch
			;kommt noch
			;kommt noch
			;kommt noch
			Return 1

	EndSelect

WEnd
EndFunc

	Select
	Case	IsArray($PixelPosPortalEingang0)
			MouseClick("left", $PixelPosPortalEingang0[0], $PixelPosPortalEingang0[1], 1, 0)
			Sleep(5000)
	EndSelect
zwar wird (glaube ich) aufgehört nach $pixelposmapmark1 -3 zu suchen aber danach passiert nichts mehr.
hab jetzt rumprobiert aber es nicht rausgefunden bitte nich sauer sein^^