While Schleifen parallel?

02/23/2012 20:20 ultrawayoflife#1
nabend leute!

ich beschäftige mich seit wenigen Stunden mit AutoIt hauptsächlich um mir erstmal selbst nen Bot zu basteln für Swtor.

nun meine Frage zu diesem Script hier ist, wie schaff ich es das er nach der ersten While Schleife die 2te macht? bzw. die letzte sollte immer (falls "true") vor den 2 starten.

hier das script:

Code:
WinActive ("Star Wars: The Old Republic")

While 1 
   $qyzen = PixelSearch (239,423, 270,450, 0x8E9EA2)
   if IsArray($qyzen) = True Then
	  MouseMove($qyzen [0], $qyzen [1], 1)
	  sleep (500)
	  MouseClick($qyzen)
	  sleep (1000)
	  MouseClick ("left", 979,350)
	  sleep (1000)
	  MouseClick ("left", 1144,759)
	  
   EndIf
   WEnd
   
While 1
   $tharan = PixelSearch (241,502, 271,533, 0x99A99A)
   if IsArray($tharan) = True Then
	  MouseMove($tharan [0], $tharan [1], 1)
	  sleep (500)
	  MouseClick($tharan)
	  sleep (1000)
	  MouseClick ("left", 996,356)
	  sleep (1000)
	  MouseClick ("left", 1110,759)
   EndIf
   WEnd

While 1
   $variable = PixelSearch ( 901, 546, 1195, 716, 0x99D8F2)
   if IsArray($variable) = True Then
	  MouseMove($variable [0], $variable [1], 1)
	  sleep (500)
	  Mouseclick($variable)
	  EndIf
   WEnd
	  
   Func _Exit ()
	  Exit
	  EndFunc
02/23/2012 20:28 YunoSubs#2
Mit der Funktion ExitLoop tritts du aus einer Schleife aus
02/23/2012 20:31 jacky919#3
Du kannst keine Schleifen parallel zueinander benutzen. Es gibt aber eine Funktion mit der ähnliches möglich ist: [Only registered and activated users can see links. Click Here To Register...]
02/23/2012 20:33 omer36#4
Einfach alles in 1 While-Schleife?
02/23/2012 20:37 K1ramoX#5
Da Multithreading mit AutoIt nicht geht wirst du wohl wie jacky919 vorgeschlagen hat, auf Alternativen zurückgreifen müssen.
02/23/2012 20:39 rexfox#6
Ich hoffe ich verstehe dich nicht falsch, aber du kannst der While-Schleife auch eine Bedingung geben, sodass sie nur weitergeführt wird wenn etwas bestimmtes ist bzw nicht ist.
02/23/2012 21:18 ultrawayoflife#7
danke erstmals =)
habs jetzt mal so probiert:
da bekomm ich aber die Fehlermeldung: "Error: "Wend" statement with no matching "while" statement.

Code:
WinActive ("Star Wars: The Old Republic")

While 1 
   
   $variable = PixelSearch ( 901, 546, 1195, 716, 0x99D8F2)
   if IsArray($variable) = True Then
	  MouseMove($variable [0], $variable [1], 1)
	  sleep (500)
	  Mouseclick($variable)
	  
   $qyzen = PixelSearch (239,423, 270,450, 0x8E9EA2)
   if IsArray($qyzen) = True Then
	  MouseMove($qyzen [0], $qyzen [1], 1)
	  sleep (500)
	  MouseClick($qyzen)
	  sleep (1000)
	  MouseClick ("left", 979,350)
	  sleep (1000)
	  MouseClick ("left", 1144,759)
	  
 $tharan = PixelSearch (241,502, 271,533, 0x99A99A)
   if IsArray($tharan) = True Then
	  MouseMove($tharan [0], $tharan [1], 1)
	  sleep (500)
	  MouseClick($tharan)
	  sleep (1000)
	  MouseClick ("left", 996,356)
	  sleep (1000)
	  MouseClick ("left", 1110,759)
	  
   EndIf
WEnd

   Func _Exit ()
	  Exit
	  EndFunc
02/23/2012 21:42 K1ramoX#8
Quote:
Originally Posted by ultrawayoflife View Post
danke erstmals =)
habs jetzt mal so probiert:
da bekomm ich aber die Fehlermeldung: "Error: "Wend" statement with no matching "while" statement.

WinActive ("Star Wars: The Old Republic")

While 1

$variable = PixelSearch ( 901, 546, 1195, 716, 0x99D8F2)
if IsArray($variable) = True Then
MouseMove($variable [0], $variable [1], 1)
sleep (500)
Mouseclick($variable)
Endif ;vermutung
$qyzen = PixelSearch (239,423, 270,450, 0x8E9EA2)
if IsArray($qyzen) = True Then
MouseMove($qyzen [0], $qyzen [1], 1)
sleep (500)
MouseClick($qyzen)
sleep (1000)
MouseClick ("left", 979,350)
sleep (1000)
MouseClick ("left", 1144,759)
Endif ;vermutung
$tharan = PixelSearch (241,502, 271,533, 0x99A99A)
if IsArray($tharan) = True Then
MouseMove($tharan [0], $tharan [1], 1)
sleep (500)
MouseClick($tharan)
sleep (1000)
MouseClick ("left", 996,356)
sleep (1000)
MouseClick ("left", 1110,759)

EndIf
WEnd

Func _Exit ()
Exit
EndFunc
Du hast noch 2 if abfragen die nicht mit endif abgeschlossen sind. Hab sie mal rot markiert.
02/23/2012 21:46 ultrawayoflife#9
ok also doch noch ein Problem!

wie krieg ich es hin das er die abfrage des If "variable" immer vor "qyzen" und "tharan" vorzieht?

problem ist nämlich das oft "variable" und "qyzen" od. "tharan" gleichzeitig "true" werden und das Script sollte dann automatisch die If-Schleife "variable" als erstes abarbeiten!

wie is das möglich?
02/24/2012 15:25 Njahs#10
Quote:
Originally Posted by ultrawayoflife View Post
ok also doch noch ein Problem!

wie krieg ich es hin das er die abfrage des If "variable" immer vor "qyzen" und "tharan" vorzieht?

problem ist nämlich das oft "variable" und "qyzen" od. "tharan" gleichzeitig "true" werden und das Script sollte dann automatisch die If-Schleife "variable" als erstes abarbeiten!

wie is das möglich?
Code:
WinActive ("Star Wars: The Old Republic")

While 1 
   
   $variable = PixelSearch ( 901, 546, 1195, 716, 0x99D8F2)
   $tharan = PixelSearch (241,502, 271,533, 0x99A99A)
   $qyzen = PixelSearch (239,423, 270,450, 0x8E9EA2)

   if IsArray($variable) = True Then
	  MouseMove($variable [0], $variable [1], 1)
	  sleep (500)
	  Mouseclick($variable)
	  
   elseif IsArray($qyzen) = True Then
	  MouseMove($qyzen [0], $qyzen [1], 1)
	  sleep (500)
	  MouseClick($qyzen)
	  sleep (1000)
	  MouseClick ("left", 979,350)
	  sleep (1000)
	  MouseClick ("left", 1144,759)
	  
   elseif IsArray($tharan) = True Then
	  MouseMove($tharan [0], $tharan [1], 1)
	  sleep (500)
	  MouseClick($tharan)
	  sleep (1000)
	  MouseClick ("left", 996,356)
	  sleep (1000)
	  MouseClick ("left", 1110,759)
	  
   EndIf
WEnd

   Func _Exit ()
	  Exit
   EndFunc
Guck dich mal in der Tutorial Sektion an,
dort gibts viele antworten auf deine
Fragen. [Only registered and activated users can see links. Click Here To Register...]