[AutoIt] Probleme mit Var und Funktionen

06/03/2019 01:13 Nazas#1
Hallo zusammen,
ich hoffe mir kann hier jemand helfen.
Ich bastel im Moment an einem kleine AutoIt script/programm das mir Bestimmte bilder anklicken soll. Habe aber für die Bildersuche zwei Funktionen da die eine suche abschaltbar sein soll. Es funktioniert auch wunderbar, nun wollte ich das ganze mit einem GUI versehen und das ganze über ein Button starten. Nun kommt das Problem wenn ich die Funktion auf den button lege sag er mir das die Var nich definiert ist... egal wie ich es mache. Rufe ich die Funktionen aber über eine While schleife beim programm start ab läuft es... Kann mir wer helfen?

Code:
func Farmer()
Dim $Farm[10]
    $Farm[0] = 4
	$Farm[1] = 'fight.bmp'
	$Farm[2] = 'again.bmp'
	$Farm[3] = 'select.bmp'
	$Farm[4] = 'okay.bmp'

Global $resF = _WaitForImagesSearch($Farm,5,1,$x,$y,100)



Switch $resF
	case 0

	Case 1
		MouseClick('left',$x,$y,1,100)

	Case 2
		MouseClick('left',$x,$y,1,100)

	Case 3
		MouseClick('left',$x,$y,1,100)

	Case 4
		MouseClick('left',$x,$y,1,100)

EndSwitch
EndFunc
das ist die funktion


Code:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Button1
              Farmer()
	          RunenCheck()
		Case $Button2
			Exit
	EndSwitch
WEnd
so ist es auf den button gelegt
[Only registered and activated users can see links. Click Here To Register...]

das ist der fehler

Bitte um hilfe.
Lg
Nazas
06/03/2019 17:03 Moneypulation#2
Du musst $x und $y definiert haben, bevor du sie als Parameter in der ImageSearch Funktion übergibst. Also Local $x,$y bzw. Global $x,$y vor dem Aufruf sollte dein Problem lösen
06/03/2019 23:33 False#3
#moved
06/04/2019 11:37 Nazas#4
Hi,
ich habe x und y so wie die anderen var als Global gesetzt. Hab auch noch 2 arrays bei einmal 4elemente und einmal 10 elemente, wenn ich sie unter die GUI While schleife setze dann kriege ich den error wenn ich sie über die schleife setze reagiert das GUI nicht/sehr langsam.
lg

Code:
Global $x = 0, $y = 0, $start = 0

Global $get = _ImageSearch('data\rune\get.bmp',1,$x,$y,10)
Global $sell = _ImageSearch('data\rune\sell.bmp',1,$x,$y,10)
Global $lose = _ImageSearch('data\farm\lose.bmp',1,$x,$y,10)



While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Button1
			  _start()
		Case $Button2
			Exit
		Case $Checkbox4
			 If (GUICtrlRead($Checkbox4)) = $GUI_CHECKED Then
				$start = 1
			 EndIf

	EndSwitch
WEnd

Dim $Farm[9]
	$Farm[0] = 8
	$Farm[1] = 'data\farm\fight.bmp'
	$Farm[2] = 'data\farm\again.bmp'
	$Farm[3] = 'data\farm\select.bmp'
	$Farm[4] = 'data\farm\okay.bmp'
	$Farm[5] = 'data\farm\chest.bmp'
	$Farm[6] = 'data\farm\lose.bmp'
	$Farm[7] = 'data\farm\nores.bmp'
	$Farm[8] = 'data\farm\win.bmp'

Dim $Rune[4]
    $Rune[0] = 3
	$Rune[1] = 'data\rune\blue.bmp'
	$Rune[2] = 'data\rune\purple.bmp'
	$Rune[3] = 'data\rune\orange.bmp'

Global $resF = _WaitForImagesSearch($Farm,5,1,$x,$y,100)
Global $resR = _WaitForImagesSearch($Rune,5,1,$x,$y,100)


Func _Start()
	While 1
		If $start = 1 Then
		  _farmer()
	    EndIf
    WEnd
EndFunc
ja sieht grade was komisch aus bin noch am basteln^^
wenn ich es so mache reagiert das GUI wunderbar, aber ich kriege bessagten error lege ich die sachen anders rum also die schleife nach unten dann reagiert das gui wieder nicht
06/05/2019 23:02 Moneypulation#5
Oh man, wo soll man da anfangen

1. Deine 2 Arrays werden nie definiert, weil sie im Programmcode nach einer Endlosschleife stehen. Das gehört ganz nach oben, wie deine anderen Variablen

2. Du brauchst nicht die Länge deiner Arrays mitspeichern. Das kannst du mit UBound($arr) abfragen

3. Wenn du bei $GUI_CHECKED die Variable $start auf 1 setzt, wäre es logisch, wenn die Checkbox nicht checked ist, sie wieder auf 0 zu setzen, oder nicht?

4. Wenn du $Button1 klickst, gehst du in die _Start() Funktion, aus der du nicht mehr rauskommst, weil darin auch eine Endlosschleife ist => GUI reagiert nicht mehr, weil du aus der GUI Loop raus bist

5. Ich weiß nicht, ob du das Pseudo-Code mäßig hingeschrieben hast, aber falls nicht: Du kannst in die ImageSearch Funktionen nicht einfach ein Array als Bildpfad angeben. Du musst schon durch das Array durchiterieren wie hier z.B.

PHP Code:
For $i 0 To UBound($Farm)-1 Step 1
    $search 
_WaitForImageSearch($Farm[$i],5,1,$x,$y,100)
Next 
06/08/2019 04:08 Nazas#6
Aber ist dafür nicht normal das _WaitForImagesSearch da?
06/08/2019 16:51 Moneypulation#7
Quote:
Originally Posted by Nazas View Post
Aber ist dafür nicht normal das _WaitForImagesSearch da?
Ah lol, wusste gar nicht dass es die Funktion gibt. Ja, dann kannst du Punkt 2 und 5 von mir ignorieren
06/08/2019 21:35 Nazas#8
Aber die frage ist ja dann warum er immer wieder auf die position von einem bild fährt und nicht auf die von dem bild das aktuell da ist