Wo liegt der Fehler in dieser Schleife?

  • Komme nicht weiter und würde mich über Hilfe sehr freuen. :)


    [autoit]

    Func _Start()

    [/autoit][autoit][/autoit][autoit]

    $MG = 0
    Do

    [/autoit][autoit][/autoit][autoit]

    MouseClick ("left", 676, 287, 1, 100) ;Mouseklick auf "Button"
    MouseClick ("left", 675, 454, 1, 100) ;Mouseklich auf "Button"
    Sleep (2000)

    [/autoit][autoit][/autoit][autoit]

    $pxs = PixelSearch (1153, 700, 1221, 716, 0xE34747)

    [/autoit][autoit][/autoit][autoit]

    If IsArray($pxs) Then
    $MG + 10
    MsgBox (0, "BESTÄTIGUNG", "If Is Array", 5)
    Mouseclick ("left", 584, 285, 2, 100) ;Mouseklich auf "Button"
    Send ("0.00000005")
    Else
    $MG + 1
    MsgBox (0, "BESTÄTIGUNG", "Else", 5)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Until $MG <= 10
    EndFunc

    [/autoit]


    Die Schleife soll enden wenn $MG den Wert 10 erreicht hat.


    Entweder:

    1. Wenn er durch den Pixelsearch Befehl die Farbe (0xE34747) gefunden hat soll er $MG mit 10 addieren, wodurch die Schleife beendet wird.

    2. Wenn er durch den Pixelsearch Befehl die Farbe (0xE34747) nicht gefunden hat, soll er $MG mit 1 addieren, die Schleife wiederholen und bei jeder Wiederholung $MG jeweils erneut mit 1 addieren, bis $MG auf diesem Weg 10 erreicht hat oder zwischenzeitig die Farbe (0xE34747) gefunden wurde.
    _____________________________________________________

    1. Funktioniert prima...

    2. Funktioniert leider nicht, selbst wenn ich $MG + 10 befehle, wird das nicht registriert und die Schleife läuft endlos weiter bis die Farbe (0xE34747) irgendwann gefunden wurde.


    Wo liegt das Problem? Ich komme irgendwie nicht drauf... ?(

    Einmal editiert, zuletzt von I30R6 (2. Oktober 2014 um 05:11)

  • Wozu wird das Skript gebraucht?

    Ist doch ziemlich offensichtlich wofür man so ein Script verwendet...


    Aber ausnahmsweise hier einige Anmerkungen, da er ja immerhin eine Frage zur Programmlogik hat:

    Fehler 1 wurde ja schon genannt.
    Fehler 2 dürfte sein, dass der ELSE Zweig niemals eintritt, weil pixelsearch soweit ich die Hilfe verstehe immer ein Array zurückgibt und im Fehlerfall lediglich @error setzt. Du solltest also den Wert von @error in deiner if Bedingung verwenden, so wie es auch im zugehörigen Hilfebeispiel gemacht wird.
    Fehler 3 ist die Abbruch Bedingung der do...until Schleife. Du willst abbrechen wenn die Farbe gefunden wurde, andernfalls willst du es 10 mal probieren und dann abbrechen. Deine Abbruchbedingung ist aber immer schon beim ersten Durchlauf der Schleife erfüllt, weil du abbrichst wenn der Wert kleiner oder gleich 10 ist. Das ist immer der Fall, egal ob du nun den if oder den else Zweig passierst. Der Wert ist entweder 1 oder 10, also beides mal kleiner oder gleich 10. Die Bedingung sollte also wohl größer oder gleich 10 lauten. Alternativ kannst du dir den Kram auch gleich schenken und ein exitloop einbauen sobald die Farbe gefunden wurde und eine for...to Schleife verwenden die maximal 10 mal durchläuft wenn nicht vorzeitig verlassen wird.

    Und zu guter letzt lies dir bitte die Forenregeln durch. Spielebots haben hier nichts verloren, dafür gibt es andere Foren.

  • Danke für eure Ratschläge... peinlicherweise funtkionierte die Schleife aber anscheinend die ganze Zeit, es folgt leiglich ein Scriptabschnitt im Anschluss welcher der Schleife sehr ähnlich ist und das habe ich im Eifer des Gefechts nicht auseinander halten können.

    Ich habe trotzdem die Syntax etwas verbessert und die Eingabe <= durch >= korrigiert.

    Da ich jetzt weiß wo der Fehler lag, habe ich das Script entsprechend angepasst.


    [autoit]

    Func _Start()

    [/autoit][autoit][/autoit][autoit]

    $ML = 0
    $MG = 0
    Do

    [/autoit][autoit][/autoit][autoit]

    MouseClick ("left", 676, 287, 1, 100) ;Mouseklick auf "Button"
    MouseClick ("left", 675, 454, 1, 100) ;Mouseklich auf "Button"
    Sleep (2000)

    [/autoit][autoit][/autoit][autoit]

    $pxs = PixelSearch (1153, 700, 1221, 716, 0xE34747)

    [/autoit][autoit][/autoit][autoit]

    If IsArray($pxs) Then
    $MG+=10
    MsgBox (0, "BESTÄTIGUNG", "If Is Array", 5)
    Mouseclick ("left", 584, 285, 2, 100) ;Mouseklick auf "Button"
    Send ("0.00000005")
    Else
    $ML+=1
    MsgBox (0, "BESTÄTIGUNG", "Else", 5)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Until $MG >=10 or $ML >=10
    If $ML >=10 then Exit

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]


    Scheint auf Anhieb zu funktionieren, weswegen ich noch ein wenig ungläubig bin... mal abwarten.


    Bezüglich der Fragen bzw Spekulationen zum Hintergrund des Scripts
    __________________________________________________________
    Das Ganze ist nur ein Ausschnitt aus einem Script mit dem ich Abläufe auf meinem PC automatisieren will, vorweigend Bilder sortieren und filtern. Aus dem Zusammenhang gerissen sieht es aber wirklich wie ein Spielebot aus ;) bzw. einige Elemente entspringen ursprünglich auch Anleitungen aus dem Netz die mit Spielebots im zusammenhang stehen. :P