Fehlermeldung

  • Hallo mitnander,

    ich habe gestern ein Script fertiggestellt, das den ganzen Tag super lief ohne Probleme/Fehlermeldungen, und so wollte ich das ganze auch die Nacht und den Vormittag laufen lassen - so 20 Stunden.

    Nun komm ich heim und sehe das schon wohl nach ca. 1 Stunde diese Fehlermeldung mein Script beendet hat.

    In der Help File hab ich leider nichts gefunden, was bedeutet dieser Fehler - bzw wie kann man ihn verhindern ?

    -> Fehlermeldung: http://usera.imagecave.com/Marle22/error.JPG

    ich danke für eure Tipps,

    Lg Marle

  • Du hast das Rekursionlimit überschritten.
    Steht in der Hilfe

    Zitat

    Maximale Tiefe rekursiver Funktionsaufrufe: 384 Level

    Zeig mal den Code, du rufst bestimmt unabsichtlich Funktionen ineinander auf.

  • aber bitte nicht lachen :D ich mach das noch net lang^^

    Spoiler anzeigen
    [autoit]

    $B = IniRead("settings.ini", "settings", "B", "NotFound")
    HotKeySet($B, "B")

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

    $LongSleep = 500 ;for page loadings
    $MidSleep = 150 ;for waits inbeteewn searches
    $ShortSleep = 30 ;attacks/ect
    $Heal1 = 100 ;Max healing time in secs
    $Heal2 = 100 ;Max time for mana in secs

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

    func B()

    MouseClick("left", 1012, 129, 2)
    sleep(100)
    MouseClick("left", 1012, 129, 2)
    sleep(100)
    MouseClick("left", 1012, 129, 2)
    sleep(100)
    ToolTip("Make sure page is up", 700, 500)
    Sleep($MidSleep) ;Waits for me to get web up
    MouseClick("left", 800, 450, 2)
    Send("^a");select all
    Sleep(500)
    Send("^c");copy to clipboard
    $text=ClipGet();set text to clipboard
    If StringInStr(ClipGet(), "Take") Then
    Pick()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "vanquished") Then
    LifeMana()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Attack w/") Then
    Attack()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Fight Another Level") Then
    StartFight()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Enter Combat Arena") Then
    X()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Fight this Opponent") Then
    X()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Back to main Menu") Then
    T()
    Else
    Sleep(200)
    EndIf
    MouseClick("left", 800, 450, 2)
    $text=ClipGet();set text to clipboard

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

    endfunc

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

    Func LifeMana()

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

    MouseClick("left", 1012, 129, 2)

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

    $y= 191
    $x =250

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

    dim $A

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

    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß

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

    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $A Then
    call("StartFight")
    Endif
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $C Then
    sleep(2000)
    call("B")
    Endif

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

    EndFunc

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

    Func StartFight()
    ToolTip("Fighting", 700, 500)
    Send ("^f")
    Sleep($MidSleep)
    Send ("Fight Another Level")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the tool (you may need to edit the X and Y)
    Sleep($MidSleep)
    Send ("^G")
    Sleep($MidSleep)
    Send ("{ENTER}")
    Sleep(1000)

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

    Call("B")
    EndFunc

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

    Func Attack()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Attack w/")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the tool (you may need to edit the X and Y)
    Sleep(500)

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

    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)

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

    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)

    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)

    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)

    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)

    call("E")
    EndFunc

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

    Func T()

    MouseClick("left", 1012, 129, 2)
    Send ("^f")
    Sleep($MidSleep)
    Send ("Run Away")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the tool (you may need to edit the X and Y)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep) ;<- ready
    call("R")
    EndFunc

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

    Func L()

    ToolTip("Combat", 700, 500)
    Send ("^f")
    Sleep($MidSleep)
    Send ("Fight This Opponent")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the find tool (you may need to edit the X and Y)
    Sleep(4000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)

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

    call("b")

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

    endfunc

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

    Func Pick()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Take Item")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the find tool (you may need to edit the X and Y)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)

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

    Call("B")

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

    EndFunc

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

    func E()
    MouseClick("left", 1012, 129, 2)

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

    $y= 192
    $x =44

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

    dim $A

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

    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß

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

    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $A Then
    call("B")
    Endif
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $C Then
    call("T")
    endif
    EndFunc

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

    func X()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Enter Combat Arena")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the find tool (you may need to edit the X and Y)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)
    Send ("^f")
    Sleep($MidSleep)
    Send ("Fight This Opponent")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the find tool (you may need to edit the X and Y)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)
    call("B")

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

    EndFunc

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

    Func R()

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

    MouseClick("left", 1012, 129, 2)
    MouseClick("left", 1012, 129, 2)

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

    $y= 191
    $x =250

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

    dim $A

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

    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß

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

    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $A Then
    call("B")
    Endif
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $C Then
    sleep(2000)
    call("R")
    Endif

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

    EndFunc

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

    While 1
    Sleep(50)
    WEnd

    [/autoit]

    edit: [ autoit] und [ spoiler] eingefügt. Gun-Food

  • Ich habe mir mal erlaubt ein bisschen zu formatieren.
    Der Rekursionsfehler kommt dadurch das du andauernd am Ende deiner Funktion wieder die Funktion B aufrufst. Das ist nicht nötig.
    Wenn sowieso in Funktion B eine andere aufgerufen wird wird, nachdem die aufgerufene Funktion fertig ist, wieder zurückgewechselt an den Ort wo die Funktion aufgerufen wurde, also in B.
    Nur musst du dann eine Endlosschleife starten.
    Ich habs mal mit eingefügt. Hoffe das funktioniert so^^

    Spoiler anzeigen
    [autoit]

    $B = IniRead("settings.ini", "settings", "B", "NotFound")
    HotKeySet($B, "B")

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

    $LongSleep = 500 ;for page loadings
    $MidSleep = 150 ;for waits inbeteewn searches
    $ShortSleep = 30 ;attacks/ect
    $Heal1 = 100 ;Max healing time in secs
    $Heal2 = 100 ;Max time for mana in secs

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

    func B()
    MsgBox(0,"","")
    While 1
    MouseClick("left", 1012, 129, 2)
    sleep(100)
    MouseClick("left", 1012, 129, 2)
    sleep(100)
    MouseClick("left", 1012, 129, 2)
    sleep(100)
    ToolTip("Make sure page is up", 700, 500)
    Sleep($MidSleep) ;Waits for me to get web up
    MouseClick("left", 800, 450, 2)
    Send("^a");select all
    Sleep(500)
    Send("^c");copy to clipboard
    $text=ClipGet();set text to clipboard
    If StringInStr(ClipGet(), "Take") Then
    Pick()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "vanquished") Then
    LifeMana()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Attack w/") Then
    Attack()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Fight Another Level") Then
    StartFight()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Enter Combat Arena") Then
    X()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Fight this Opponent") Then
    X()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Back to main Menu") Then
    T()
    Else
    Sleep(200)
    EndIf
    MouseClick("left", 800, 450, 2)
    $text=ClipGet();set text to clipboard
    WEnd
    endfunc

    Func LifeMana()
    Local $x,$y
    Local $A,$C
    $y= 191
    $x =250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseClick("left", 1012, 129, 2)
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $A Then
    call("StartFight")
    Endif
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $C Then
    sleep(2000)
    Endif
    EndFunc

    Func StartFight()
    ToolTip("Fighting", 700, 500)
    Send ("^f")
    Sleep($MidSleep)
    Send ("Fight Another Level")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the tool (you may need to edit the X and Y)
    Sleep($MidSleep)
    Send ("^G")
    Sleep($MidSleep)
    Send ("{ENTER}")
    Sleep(1000)
    EndFunc

    Func Attack()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Attack w/")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the tool (you may need to edit the X and Y)
    Sleep(500)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    call("E")
    EndFunc

    Func T()
    MouseClick("left", 1012, 129, 2)
    Send ("^f")
    Sleep($MidSleep)
    Send ("Run Away")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the tool (you may need to edit the X and Y)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep) ;<- ready
    call("R")
    EndFunc

    Func L()
    ToolTip("Combat", 700, 500)
    Send ("^f")
    Sleep($MidSleep)
    Send ("Fight This Opponent")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the find tool (you may need to edit the X and Y)
    Sleep(4000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)
    endfunc

    Func Pick()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Take Item")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the find tool (you may need to edit the X and Y)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)
    EndFunc

    func E()
    MouseClick("left", 1012, 129, 2)
    Local $A,$C
    Local $x,$y
    $y= 192
    $x =44
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $C Then
    call("T")
    endif
    EndFunc

    func X()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Enter Combat Arena")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the find tool (you may need to edit the X and Y)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)
    Send ("^f")
    Sleep($MidSleep)
    Send ("Fight This Opponent")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2) ;Closes the find tool (you may need to edit the X and Y)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)
    EndFunc

    Func R()
    Local $A,$C
    $y= 191
    $x =250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    While PixelGetColor($x,$y) = $C ; Solange weiß ist soll weitgeklickt werden
    MouseClick("left", 1012, 129, 2)
    MouseClick("left", 1012, 129, 2)
    MouseMove($x,$y)
    WEnd
    EndFunc

    While 1
    Sleep(50)
    WEnd

    [/autoit]
  • Danke für die schnellen Antworten und die Hilfe Wesloth,

    ich muss das etz erstmal alles bissal studieren und umbauen.

    Warum ich immer die Funktion B aufrufen wollte will ich aber noch kurz erklären:

    Der Sinn hinter diesem Script ist folgender :

    Funktion B sollte die Ausgangsfunktion sein - aus der dann Handlungen folgen.

    Die erste Tat grundsätzlich sollte sein, alles in den Clipboard zu kopieren und es auf Schlüsselwörter, in Reihenfolge, zu kontrollieren und wenn eins gefunden wurde eine Handlung auszuführen - für diese Handlungen dacht ich mir mach ich halt neue Funktionen.

    Nun dacht ich mir am Ende jeder dieser "Ausführfunktionen" muss ich wieder die B Funktion aufrufen - oder nicht?

    Die B Funktion starte ich immer mit einer Taste "Num5" hab ich im Setting festgelegt - anders passierte immer nichts wenn ich das ohne Hotkey gemacht hab - nun möchte ich die "Num5" jedoch nur einmal drücken - dann zur Uni oder pennen gehen und das Script läuft die ganze Zeit weiter :)

    Soweit sogut, noch ne kleinigkeit , warum die MSgBox am anfang Wesloth?

    lg Marle

  • Hups... die MsgBox war zum testen^^.
    Hab mich gewundert warum der Hotkey nicht funktioniert, dachte das sei die B-Taste, habs später dann bemerkt das sie es nicht ist und dann vergessen die MsgBox rauszunehmen.

    Zitat

    Nun dacht ich mir am Ende jeder dieser "Ausführfunktionen" muss ich wieder die B Funktion aufrufen - oder nicht?


    Nein :), passiert automatisch.

    Einmal editiert, zuletzt von Wesloth (23. November 2007 um 17:10)

  • So siehts nun erstmal aus:

    Spoiler anzeigen
    [autoit]


    $B = IniRead("settings.ini", "settings", "B", "NotFound")
    HotKeySet($B, "B")

    $LongSleep = 500
    $MidSleep = 400
    $ShortSleep = 200

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

    func B()

    While 1
    MouseClick("left", 1012, 129, 2)
    sleep(100)
    MouseClick("left", 1012, 129, 2)
    sleep(100)
    MouseClick("left", 1012, 129, 2)
    sleep(100)
    MouseClick("left", 800, 450, 2)
    Send("^a")
    Sleep(500)
    Send("^c")
    $text=ClipGet()
    If StringInStr(ClipGet(), "Take") Then
    P()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "vanquished") Then
    L()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Attack w/") Then
    A()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Fight Another Level") Then
    F()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Enter Combat Arena") Then
    C()
    Else
    Sleep(200)
    EndIf
    If StringInStr(ClipGet(), "Choose Your Opponent Level") Then
    R()
    Else
    Sleep(200)
    EndIf
    WEnd
    endfunc

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

    ;Funktion P = Pickit-Funktion
    func P()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Take")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2)
    Sleep($MidSleep)
    Send ("^G")
    Sleep($MidSleep)
    Send ("{ENTER}")
    Sleep(1000)
    EndFunc

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

    ;Funktion zum Checken von Life
    Func L()
    Local $x,$y
    Local $A,$C
    $y= 191
    $x =250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseClick("left", 1012, 129, 2)
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $A Then
    call("F")
    Endif
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $C Then
    Call ("B")
    Endif
    EndFunc

    ;Angriffsfunktion
    Func A()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Attack w/")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2)
    Sleep(500)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    Sleep($ShortSleep)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep(150)
    call("E")
    EndFunc

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

    ;Find/Sucht weitere Gegner
    func F()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Fight Another Level")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2)
    Sleep($MidSleep)
    Send ("^G")
    Sleep($MidSleep)
    Send ("{ENTER}")
    Sleep(1000)
    EndFunc

    ;Beitreten der Combat Area
    func C()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Enter Combat Arena")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)
    EndFunc

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

    ;Checken des Lifes in der Combat Area
    Func R()
    Local $A,$C
    $y= 191
    $x =250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseClick("left", 1012, 129, 2)
    MouseClick("left", 1012, 129, 2)
    IF PixelGetColor($x,$y) = $C then
    Call O()
    endif
    IF PixelGetColor($x,$y) = $A then
    Call R()
    endif
    EndFunc

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

    ;Wenn Life durch "R" gecheckt auf 100% is -> auf Fight This O drücken.
    Func O()
    Send ("^f")
    Sleep($MidSleep)
    Send ("Fight This Opponent")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2)
    Sleep(2000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)
    endfunc

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

    ; ------------------------------------------ Unterfunktionen --------------------------

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

    ;Wenn Life zu niedrig gechecked von E -> dann "Run Away"
    Func T()
    MouseClick("left", 1012, 129, 2)
    Send ("^f")
    Sleep($MidSleep)
    Send ("Run Away")
    Sleep($MidSleep)
    MouseClick("left", 15, 704, 2)
    Sleep(1000)
    Send ("^G")
    Sleep($ShortSleep)
    Send ("{ENTER}")
    Sleep($ShortSleep)
    call("R")
    EndFunc

    ;U-Funktion von A -> Checken ob das eigene Life zu niedrig ist
    func E()
    MouseClick("left", 1012, 129, 2)
    Local $A,$C
    Local $x,$y
    $y= 192
    $x =44
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $C Then
    call("T")
    endif
    EndFunc

    While 1
    Sleep(50)
    WEnd

    [/autoit]

    Bei der Func "L" kommt ich aber doch nicht drum rum die Funktion B wieder aufzurufen - ich hab das mehrmals ohne versucht, aber dann macht er einfach mit "Fight another Level" im Clipboard weiter, anstatt nochmal "B" von Anfang an abzuspielen - macht das was das hier "B" aufgerufen wird?

    bzw kommt meine Fehlermeldung vom Anfang dann nach dem 38x mal das er diese Schleife fährt?

    Vermeiden könnt ichs vieleicht durch eine andere Methode:

    Kann man bzw ist es möglich, einen Pixel bzw eine Koordinate alle paar sec nach der Farbe zu checken - und wenns in meinem Beispiel von Weiß auf Rot wechsel (hier geht ein "Lebensbalken" nach oben) - das er dann wieder mit Funktion B weitermacht?
    Momentan nämlich hab ich das so versucht zu lösen: Er bewegt die Maus auf den Punkt - checkt ob Rot oder Weiß - bei Weiß fängt er wieder bei Funktion "B" an und kommt dann wieder dahin das er es abcheckt.

    Soweit sogut :)

    Vielen Dank aweil

    Lg Marle

  • Ich sehe nicht wo du die Funktion L startest.
    Ok in Zeile 29, aber sonst?
    Vielleicht wird ja auch die Funktion aufgerufen, nur du merkst es vll. nicht.
    Mach mal eine MsgBox in die Funktion ;) und probier es aus.

  • Zitat

    Original von Wesloth
    Ich sehe nicht wo du die Funktion L startest.
    Ok in Zeile 29, aber sonst?
    Vielleicht wird ja auch die Funktion aufgerufen, nur du merkst es vll. nicht.
    Mach mal eine MsgBox in die Funktion ;) und probier es aus.

    jo hab vor die Funktion "B" ne MSgbox gehängt , die kommt auch immer fein - außer bei der Funktion "L" da greift er anschließend nicht auf "B" zurück^^

  • Yo Servus zusammen nochma :(

    leider hab ich immernoch dieses Problem - nach ca 5 Stunden kam wieder diese Meldung :

    http://usera.imagecave.com/Marle22/error2.JPG

    Spoiler anzeigen
    [autoit]


    $S = IniRead("settings.ini", "settings", "S", "NotFound")

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

    HotKeySet($S, "S")

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

    Func S()

    While 1
    sleep(50)
    MouseClick("left", 1012, 129, 2)
    sleep(50)
    MouseClick("left", 1012, 129, 2)
    sleep(50)
    MouseClick("left", 269, 162, 2)
    sleep(50)
    MouseClickDrag("left", 269, 162, 600, 500)
    sleep(50)
    Send("^c")
    $text=ClipGet()
    If StringInStr(ClipGet(), "Take") Then
    W()
    Else
    Sleep(50)
    endif
    If StringInStr(ClipGet(), "You have vanquished your foe.") Then
    L()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Attack w/") Then
    E()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Fight Another Level") Then
    F()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Enter Combat Arena") Then
    C()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Choose Your Opponent Level") Then
    O()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "You have died.") Then
    U()
    Else
    Sleep(50)
    EndIf
    WEnd
    endfunc

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

    func W()
    MouseClick("left", 1012, 129, 2)
    sleep(50)
    MouseClick("left", 1012, 129, 2)
    sleep(50)
    MouseClick("left", 269, 162, 2)
    MouseClickDrag("left", 269, 162, 600, 500)
    Sleep(250)
    Send("^c")
    $text=ClipGet()
    If StringInStr(ClipGet(), "Magical") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Rare") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Mystical") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Angelic") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Mythical") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Arcane") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Legendary") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Godly") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Epic") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Relic") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Artifact") Then
    P()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "Unique") Then
    P()
    Else
    call("L")
    EndIf

    endfunc

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

    func P()
    Send ("^f")
    Sleep(200)
    Send ("Take")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(1000)
    call ("S")
    EndFunc

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

    Func L()
    Local $x,$y
    Local $A,$C
    $y= 191
    $x =250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseClick("left", 1012, 129, 2)
    sleep(1000)
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $A Then
    call("F")
    Endif
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $C Then
    call ("LL")
    Endif
    EndFunc

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

    Func LL()
    Local $x,$y
    Local $A,$C
    $y= 191
    $x =250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseClick("left", 1012, 129, 2)
    sleep(1000)
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $A Then
    call("F")
    Endif
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $C Then
    call ("L")
    Endif
    EndFunc

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

    func F()
    Send ("^f")
    Sleep(200)
    Send ("Fight Another Level")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(1000)
    call ("A")
    EndFunc

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

    func E()
    MouseClick("left", 1012, 129, 2)
    Local $A,$C
    Local $x,$y
    $y= 192
    $x =44
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $A Then
    call("A")
    endif
    If PixelGetColor($x, $y) = $C Then
    call ("TT")
    endif

    EndFunc

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

    Func A()
    Send ("^f")
    Sleep(200)
    Send ("Attack w/")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(500)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(150)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(150)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(150)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(150)
    call("S")
    EndFunc

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

    Func TT()
    MouseClick("left", 1012, 129, 2)
    sleep(50)
    MouseClick("left", 1012, 129, 2)
    sleep(50)
    MouseClick("left", 269, 162, 2)
    MouseClickDrag("left", 269, 162, 600, 500)
    Sleep(250)
    Send("^c")
    $text=ClipGet()
    If StringInStr(ClipGet(), "Run Away") Then
    T()
    Else
    Sleep(50)
    EndIf
    If StringInStr(ClipGet(), "You have died.") Then
    P()
    Else
    Call("U")
    EndIf
    endfunc

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

    Func T()
    MouseClick("left", 1012, 129, 2)
    Send ("^f")
    Sleep(200)
    Send ("Run Away")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(1000)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(100)
    call("R")
    EndFunc

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

    Func R()
    Local $A,$C
    $y= 191
    $x =250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseClick("left", 1012, 129, 2)
    sleep(3000)
    MouseClick("left", 1012, 129, 2)
    IF PixelGetColor($x,$y) = $A then
    Call ("S")
    endif
    IF PixelGetColor($x,$y) = $C then
    Call ("RR")
    endif
    EndFunc

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

    Func RR()
    Local $A,$C
    $y= 191
    $x =250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseClick("left", 1012, 129, 2)
    sleep(3000)
    MouseClick("left", 1012, 129, 2)
    IF PixelGetColor($x,$y) = $A then
    Call ("S")
    endif
    IF PixelGetColor($x,$y) = $C then
    Call ("R")
    endif
    EndFunc

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

    func U()
    MouseClick("left", 1012, 129, 2)
    Send ("^f")
    Sleep(200)
    Send ("Back to Main Menu")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(1000)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(100)
    call("R")
    EndFunc

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

    func C()
    Send ("^f")
    Sleep(200)
    Send ("Enter Combat Arena")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(1000)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(100)
    call ("O")
    EndFunc

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

    Func O()
    Send ("^f")
    Sleep(200)
    Send ("Fight This Opponent")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(1000)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(100)
    endfunc

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

    While 1
    Sleep(50)
    WEnd

    [/autoit]

    was kann ich in dieser Funktion ändern das das nicht mehr kommt :( ?

    vielen dank für die Hilfe

    Lg Marle

    • Offizieller Beitrag

    Hallo,

    es wundert mich das die Meldung erst nach 5 Stunden kommt! Dein Programm ist ja eine einzige rekursive Endlosschleife!

    Beispiel: Du rufst mit dem Hotkey die Funktion S() auf, die Funktion S() ruft aufgrund des String "Take" die Funktion W(). Die Funktion W() ruft die Funktion P() auf. Am Ende von P() wird wieder die Funktion S() auf obwohl Funktion S() ja noch läuft, sie wurde gleich als erste aufgerufen und läuft in einer Endlosschleife, wurde also noch nicht beendet.

    Bei jedem Funktionsaufruf wird die Rücksprungadresse auf dem Stack (Stabelspeicher) abgelegt, irgendwann sind die Funktionen so oft aufgerufen das der Stack voll ist und besagter Fehler kommt. Nur weil aus einer Funktion eine ander Funktion aufgerufen wird, wird diese nicht beendet. Wenn eine Funktion aufgerufen wird wird diese abgearbeitet und kehrt dann dahin zurück wo sie aufgerufen wird. D.h. Du musst dafür sorgen das die Funktionen auch mal ihr Ende (EndFunc) erreichen damit der Stack auch wieder geleert wird.

  • Danke für die durchaus interessante Antwort Bernd :)

    edit: so alles umgebaut - funktioniert bisher einwandfrei :) !!

    Spoiler anzeigen
    [autoit]


    $S = IniRead("settings.ini", "settings", "S", "NotFound")

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

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

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

    Func S()

    While 1

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

    send("{HOME}")
    sleep(50)
    MouseClickDrag("left", 269, 162, 600, 500)
    sleep(50)
    Send("^c")
    $text=ClipGet()
    If StringInStr(ClipGet(), "Take") Then
    send("{HOME}")
    sleep(20)
    MouseClick("left", 269, 162, 2)
    MouseClickDrag("left", 269, 162, 600, 500)
    Sleep(200)
    Send("^c")
    $text=ClipGet()
    If StringInStr(ClipGet(), "Magical") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Rare") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Mystical") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Angelic") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Mythical") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Arcane") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Legendary") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Godly") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Epic") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Relic") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Artifact") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Unique") Then
    Send ("^f")
    Sleep(100)
    Send ("Take")
    Sleep(100)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    sleep(20)
    EndIf
    Else
    Sleep(20)
    endif
    If StringInStr(ClipGet(), "You have vanquished your foe.") Then
    Do
    Local $x,$y
    Local $A,$C
    $y= 191
    $x= 250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    send("{HOME}")
    sleep(500)
    MouseMove($x,$y)
    until PixelGetColor($x, $y) = $A
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Attack w/") Then
    send("{HOME}")
    Local $A,$C
    Local $x,$y
    $y= 192
    $x= 44
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    MouseMove($x,$y)
    If PixelGetColor($x, $y) = $A Then
    Send ("^f")
    Sleep(200)
    Send ("Attack w/")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(500)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(150)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(150)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(150)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(50)
    call("S")
    endif
    If PixelGetColor($x, $y) = $C Then
    send("{HOME}")
    sleep(20)
    MouseClick("left", 269, 162, 2)
    MouseClickDrag("left", 269, 162, 600, 500)
    Sleep(200)
    Send("^c")
    $text=ClipGet()
    If StringInStr(ClipGet(), "Run Away") Then
    send("{HOME}")
    Send ("^f")
    Sleep(200)
    Send ("Run Away")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(1000)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(50)
    Do
    Local $x,$y
    Local $A,$C
    $y= 191
    $x= 250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    send("{HOME}")
    sleep(500)
    MouseMove($x,$y)
    until PixelGetColor($x, $y) = $A
    If StringInStr(ClipGet(), "You have died.") Then
    send("{HOME}")
    Send ("^f")
    Sleep(200)
    Send ("Back to Main Menu")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(1000)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(50)
    Do
    Local $x,$y
    Local $A,$C
    $y= 191
    $x= 250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    send("{HOME}")
    sleep(500)
    MouseMove($x,$y)
    until PixelGetColor($x, $y) = $A
    endif
    Else
    sleep(20)
    EndIf
    endif
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Fight Another Level") Then
    Send ("^f")
    Sleep(100)
    Send ("Fight Another Level")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(200)
    Send ("^G")
    Sleep(200)
    Send ("{ENTER}")
    Sleep(500)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Enter Combat Arena") Then
    Send ("^f")
    Sleep(200)
    Send ("Enter Combat Arena")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(500)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(50)
    Send ("^f")
    Sleep(200)
    Send ("Fight This Opponent")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(500)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(50)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "Choose Your Opponent Level") Then
    Send ("^f")
    Sleep(200)
    Send ("Fight This Opponent")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(500)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(50)
    Else
    Sleep(20)
    EndIf
    If StringInStr(ClipGet(), "You have died.") Then
    send("{HOME}")
    Send ("^f")
    Sleep(200)
    Send ("Back to Main Menu")
    Sleep(200)
    MouseClick("left", 15, 704, 2)
    Sleep(1000)
    Send ("^G")
    Sleep(100)
    Send ("{ENTER}")
    Sleep(50)
    Do
    Local $x,$y
    Local $A,$C
    $y= 191
    $x= 250
    $A = "0xD48080" ;red
    $C = "0xFAFCFE" ;weiß
    send("{HOME}")
    sleep(500)
    MouseMove($x,$y)
    until PixelGetColor($x, $y) = $A
    Else
    Sleep(20)
    EndIf
    WEnd
    endfunc

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

    Func Terminate()
    Exit 0
    EndFunc

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

    While 1
    Sleep(50)
    WEnd

    [/autoit]

    vielen danke nochmal und kann zu ! :)

    bernd670: Spoiler-Tag korrigiert!

    2 Mal editiert, zuletzt von bernd670 (5. Dezember 2007 um 22:12)