2 Schleifen Frage ggf mit abbruch bzw neustart

  • Hallo
    ich hab folgende Konstellation in meinem Skript

    [autoit]


    While 1=1
    timer start

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

    while 1=1
    befehle und anweisungen
    und eine @error abfrage
    danach eine
    If @error =1 then
    geh aus dieser Schleife und beginne diese schleife wieder, nicht den timerstart nochmal
    meine meinung hiern
    Wend
    Elseif

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

    mehr Befehle fals kein Error war

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

    dann am ende
    Wend

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

    und ende der obersten schleife

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

    Wend

    [/autoit]

    Meine Frage springt der nun mit der If Error und dann Wend aus der schleife Raus und STARTET sie wieder oder geht er auch aus der "übergelagerten" Schleife raus?

    Weil wär doof wenn er bei jedem error meine Zeit Schleifen neustartet :(


    Danke

    Einmal editiert, zuletzt von fachinformadiga (22. April 2008 um 12:03)

    • Offizieller Beitrag

    Hallo

    Nee, dass musst du mit ExitLoop/ContinueLoop machen:

    Mfg Spider

  • Verwende in diesem Falle ExitLoop ohne Klammerangabe springt ExitLoop aus allen umgebenden Schleifen.
    Sind zwei Schleifen ineinander verschachtelt und Du willst nur aus der innersten Schleife herausspringen, heisst es ExitLoop(1) aus beiden ExitLoop(2). Weiteres in der Hilfe (mit Instanzen sind jeweils Schleifen gemeint) Gruss Jan

    Einmal editiert, zuletzt von janrenzlow (18. April 2008 um 11:47)

  • Danke

    ich will aber nich ganz rausspringen

    ich will dass er sie wieder von Anfang an anfängt, also die Innere, die äußere schleife greißt nur alle 10 minuten


    es is halt wichtig dass er nich wieder die äußerste anfängt, sprich den timer neu startet, mit einmal exitloop beendet er also nur seine eigene schleifen druchlauf und fängt die GLEICHE Schleife wieder an? oder springt er dann in die "oberste" zurück (dann müssst ich noch ne schleife dazwischen hauen)

  • machs doch einfach mit variablen:

    Spoiler anzeigen
    [autoit]

    While 1
    ;Schleife
    $innen = 2
    While $innen = 2
    ;...
    $innen = 1 ;jetzt wird die innere schleife beendet
    Wend
    ;....
    $innen = 2;jetzt sollte er wieder mit der inneren beginnen
    Wend

    [/autoit]


    So würd ich es machen
    gruß

  • im Moment kommts mir vor dass er mir mit exitloop aus beiden schleifen hüpft

    wiso? er darf nich in die äußere, da gehts erst alle 10 Minuten hin :)

    [autoit]

    ; Angelskript
    ; Carsten "Schnitzäl" Groß
    ; Version 2.0
    ; Datum 21.04.2008 - 13:14 Uhr

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

    #include <GUIConstants.au3>
    #Include <Misc.au3>

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

    HotKeySet("{ESC}", "Terminate")

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

    MsgBox (0, "Carsten is Commander ^^ ","Gehe zum Angelpunkt" & @CR & @CR & "zoome die Kamera komplett ran " & @CR & "starte 1x manuel das Angeln" & @CR & "führe die Maus über die rote Feder" & @CR & "klicke linke Maustaste. "& @CR & @CR & "Warte 20 Sekunden und es geht los :-)" )

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

    sleep("20000")

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

    $dll = DllOpen("user32.dll")
    $ttx = @DesktopWidth/2 ; tooltip coords
    $tty = @DesktopHeight*.8

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

    $gui = 0

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

    ;~ Suche nach der Roten Feder Farbe
    ; ne Gui die, die Farbe anzeigt die gerade unterm Cursor ist
    $gui = GUICreate("",200,200,(@DesktopWidth/2)-100,@DesktopHeight-200,$WS_POPUP,$WS_EX_TOPMOST) ; Create a large borderless GUI that is always on top so user can see the color
    GUISetState(@SW_SHOW)
    ; auf den Klick warten
    While -1
    If WinActive("World of Warcraft") = 0 Then WinActivate("World of Warcraft") ; wow aktiv? sicher ^^
    $mouse = MouseGetPos()
    $color = PixelGetColor($mouse[0],$mouse[1])
    ToolTip("<--- Links Klick auf die rote Feder.",$mouse[0]+10,$mouse[1]-5) ; Create a Tooltip away from cursor that the user can use to select a color, mousing over bobber changes its color!
    GUISetBkColor("0x" & Hex($color,6),$gui) ; Update gui with color seen
    GUICtrlCreateLabel (Hex($color), 10, 30) ; mit FF000 schreibweise
    ;~ GUICtrlCreateLabel ($color, 10, 30)
    If _IsPressed("01",$dll) Then ExitLoop; Exit loop when user left clicks
    WEnd
    ToolTip("Habs :-)",$ttx,$tty,"",2)
    Sleep(2000)
    GUISetState(@SW_HIDE) ; GUI for selecting color no longer needed

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

    MsgBox (0, "Carsten is Commander ^^ "," 20 seconds left to Tab to WoW" & @CR & @CR & "4 TEH Info:" & @CR & @CR & "Taste 1: Angeln" & @CR & "Taste 2: Köder" & @CR & "Taste 3: Die Angel" )

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

    sleep("20000") ; 20 Sekunden bis er nach der Input box im Wow sein muss und voll rangezoomt am wasser stehen muss und angel angelegt

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

    send("2") ;köder auf taste 2
    sleep(1000)
    send("3") ;auf angel zaubern
    sleep(5500)

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

    While -1

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

    $begin = TimerInit()

    While -1

    $dif = TimerDiff($begin)
    $max = 550000

    If $dif >= $max Then

    sleep(2000)
    send("{SPACE}")
    sleep(50000)
    send("2") ;köder auf die Angel machen
    sleep(1000)
    send("3")
    sleep(5500)

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

    $begin = TimerInit()
    EndIf

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


    send("1") ;Startet das Angeln und wartet 4 sekunden bis der Köder liegt
    sleep(4000)

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

    $koeder = pixelSearch ( 300, 250, 1100, 570, $color, 5 )
    If @error Then $koeder = pixelSearch ( 300, 250, 1100, 570, $color , 10 )
    If @error Then $koeder = pixelSearch ( 300, 250, 1100, 570, $color , 20 )
    If @error Then $koeder = pixelSearch ( 300, 250, 1100, 570, $color , 35 )
    If @error Then
    ExitLoop
    EndIf

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


    MouseMove($koeder[0] , $koeder[1])

    $koederx1 = $koeder[0] - 25
    $koedery1 = $koeder[1] - 15
    $koederx2 = $koeder[0] + 10
    $koedery2 = $koeder[1] + 10
    sleep(1000)

    $day = 0xF6F6F6
    $splashVariance = 20

    ;~ $check = Pixelsearch($koederx1, $koedery1, $koederx2, $koedery2, $day, $splashvariance)

    $start = Timerinit()

    While 1 = 1 ;klick und such schleife fürn splash
    sleep(100)

    $check = Pixelsearch($koederx1, $koedery1, $koederx2, $koedery2, $day, $splashvariance)

    $dif = TimerDiff($start)

    if $dif >= 21000 then
    Exitloop
    Endif

    if ubound($check) > 1 then
    sleep(1000)
    ;~ send("{shiftdown}") ; oder autoloot an (zu empfehlen)
    mouseclick("right", $koeder[0], $koeder[1])
    ;~ send("{shiftup}")

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

    sleep(3000)
    exitloop
    EndIf
    WEnd

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

    WEnd
    WEnd

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

    Func Terminate()
    Exit
    EndFunc

    [/autoit]


    ich hab das dumme Gefühl dass er wenn er aus der Schleife rausfällt durch das exitloop ( wenn er den Pixelcolor net findet ) und dann aber beide Schleifen beendet und somit auch den wichtigen timer neustartet was mir dann das knickbricht und er sich im pixelcolor im nächsten druchlauf, wenn er die farbe nicht mehr findet (weil er die Farbe nicht mehr finden kann weil der köder net geht ^^)

    ich will bei dem exitloop an der stelle nur dass er die Schleife hochspringt die NACH dem dem timerstart ist

    ps. der timer oben sind 9 minuten und ein paar gequetschte oder? der timer soll abbrechen wenn er > 9:30 is d.h. 60*10*1000 = 600000-30000 oder? oder hab ich wiedern zeitrechen fehler


    und sry ich weiß dass es Bot Forum zu is, ich schreib das Skript auch nur um mir zu beweißen das es funzt, zum benutzten hab ich eh keine Zeit :)


    edit: was passiert den wenn er durch exit loop die innere beendet?
    ich dachte dann fängt er die innere wieder neu an da Endlosschleife oder fällt der dann auch wieder in die äußere?

    danke