Fehlermeldung beim Verwenden von Autoit

  • Hey Leute, verwende autoit v. 3.2.10.0. Habe sie normal installiert.
    Wenn ich es nun verwende kommt folgende Fehlermeldung

    [Blockierte Grafik: http://img266.imageshack.us/my.php?image=errorxz6.jpg%5D%5Bimg%5Dhttp://img266.imageshack.us/img266/3496/errorxz6.th.jpg]

    dazu hier mein script :

    funktioniert halt nicht -.-
    wäre sehr dankbar für etwas hilfe :)

    gruß

    4 Mal editiert, zuletzt von narf12 (13. März 2008 um 17:58)

  • Zeile 1 fehlt ein ;, denke das war unabsichtlich vom kopieren ;). Ich glaube, der Fehler liegt an der IF abfrage. Du hast 2x Endif, obwohl du eigentlich nur einmal Endif benötigst. Der erste If benötigt kein Endif, da er nicht mehr als 1 Zeile hat, da hast du die vereinfachte Version genommen. Sorry, exitloop ist schon ok :D

    So, jetzt hab ich genug editiert :D

  • hab ehrlich gesagt nicht so viel ahnung von autoit ^^, also was muss ich jetzt genau löschen bzw es mal versuchen?

  • Spoiler anzeigen
    [autoit]

    ;Script for Dac Farren , starts from Shenk area , stops near Dac , double check for confirming Dac is present
    ; Scripted by Tiger

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

    AutoItSetOption("ColorMode", 1)
    AutoItSetOption("MouseCoordMode", 0)
    AutoItSetOption("PixelCoordMode", 0)

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

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

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

    Const $GenSleep = 450
    Const $Blue = 16759444
    Const $LGreen = 9240485
    Dim $Confirm = 0
    Global $Col

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

    Func CheckBlock($BColor)
    $Block = PixelSearch(0,35,790,550,$BColor,0,1)
    If IsArray($Block) Then
    If (PixelGetColor($Block[0] + 10,$Block[1]) = $BColor) And (PixelGetColor($Block[0] + 20,$Block[1]) = $BColor) Then
    $Confirm = 1
    EndIf
    EndIf
    EndFunc

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

    $GlobalT = TimerInit()
    Sleep(200)
    Right()

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

    Func Right()
    $Confirm = 0
    Do
    MouseMove(799,300,0)
    Sleep($GenSleep)
    MouseClick("Right")
    CheckBlock($Blue)
    Until ($Confirm = 1) Or (TimerDiff($GlobalT) > 40000)
    ToDac()
    EndFunc

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

    Func ToDac()
    $Confirm = 0
    do
    MouseMove(799,466,0)
    Sleep($GenSleep)
    MouseClick("Right")
    Sleep($GenSleep)
    $Col = PixelSearch(3,340,790,550,$LGreen,0,1)
    If IsArray($Col) Then return
    If PixelGetColor($Col[0] + 25,$Col[1] - 215) = $Blue Then
    exitloop
    EndIf
    Until TimerDiff($GlobalT) > 20000
    Position()
    EndFunc

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

    Func Position()
    MouseMove($Col[0] - 100,$Col[1] + 100,0)
    Sleep($GenSleep + 100)
    MouseClick("Right")
    EndFunc

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

    Func KillScript()
    Exit(1)
    EndFunc

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

    Exit(1)

    [/autoit]

    Versuchs mal so.

  • Hallo,

    in der If Abfrage vor der Fehlermeldung war ein Fehler, der ist jetzt weg. Siehe hier:

    Spoiler anzeigen
    [autoit]

    ;Script for Dac Farren , starts from Shenk area , stops near Dac , double check for confirming Dac is present
    ; Scripted by Tiger

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

    AutoItSetOption("ColorMode", 1)
    AutoItSetOption("MouseCoordMode", 0)
    AutoItSetOption("PixelCoordMode", 0)

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

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

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

    Const $GenSleep = 450
    Const $Blue = 16759444
    Const $LGreen = 9240485
    Dim $Confirm = 0
    Global $Col

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

    Func CheckBlock($BColor)
    $Block = PixelSearch(0, 35, 790, 550, $BColor, 0, 1)
    If IsArray($Block) Then
    If (PixelGetColor($Block[0] + 10, $Block[1]) = $BColor) And (PixelGetColor($Block[0] + 20, $Block[1]) = $BColor) Then
    $Confirm = 1
    EndIf
    EndIf
    EndFunc ;==>CheckBlock

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

    $GlobalT = TimerInit()
    Sleep(200)
    Right()

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

    Func Right()
    $Confirm = 0
    Do
    MouseMove(799, 300, 0)
    Sleep($GenSleep)
    MouseClick("Right")
    CheckBlock($Blue)
    Until ($Confirm = 1) Or (TimerDiff($GlobalT) > 40000)
    ToDac()
    EndFunc ;==>Right

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

    Func ToDac()
    $Confirm = 0
    Do
    MouseMove(799, 466, 0)
    Sleep($GenSleep)
    MouseClick("Right")
    Sleep($GenSleep)
    $Col = PixelSearch(3, 340, 790, 550, $LGreen, 0, 1)
    If IsArray($Col) Then
    If PixelGetColor($Col[0] + 25, $Col[1] - 215) = $Blue Then ExitLoop
    EndIf
    Until TimerDiff($GlobalT) > 20000
    Position()
    EndFunc ;==>ToDac

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

    Func Position()
    MouseMove($Col[0] - 100, $Col[1] + 100, 0)
    Sleep($GenSleep + 100)
    MouseClick("Right")
    EndFunc ;==>Position

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

    Func KillScript()
    Exit (1)
    EndFunc ;==>KillScript

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

    Exit (1)

    [/autoit]

    Damit ist der Fehler behoben. Das Problem trat auf, weil die If Anweisung falsch geschachtelt war. Wenn $Col kein Array war, hast Du den Array Index benutzt, ansonsten den Return ausgeführt.
    Allerdings kann ich ohne Kenntnis des eigentlichen Programms nicht wirklich sagen ob es jetzt für Deinen Zweck funktioniert. Bots sind halt immer so eine Sache, da muß man sich schon etwas besser mit Programmieren auskennen.

    Gruß,

    TrueMu

  • wenn ich richtig sehe, ist dein "$Col" nicht definiert. DEfinieren und dann klappts denk ich.

    gruß

  • ich hab mir dein script jetzt nicht so genau angeschaut, aber die Fehlermeldung sagt, dass dein $Col nicht definiert ist:

    [autoit]


    Const $GenSleep = 450
    Const $Blue = 16759444
    Const $LGreen = 9240485
    Dim $Confirm = 0
    Global $Col

    [/autoit]

    Hier siehst du auch, dass alle anderen varibln mit einer zahl definiert sind. Ich weiß ja nicht für was dein $col steht^^ aber auf jeden fall musst du $col definieren, da sonst autoit nicht weiß was es damit machen soll;)

    gruß

  • [autoit]

    $Col = PixelSearch(3, 340, 790, 550, $LGreen, 0, 1)

    [/autoit]

    Hier wird ja $Col definiert, der Error kommt meistens wie schon gesagt wenn $Col nicht definiert ist. Das liegt wohl daran, das einfach hier irgendwas schief geht. Aber bei mir läuft das Programm eigentlich.

  • Hallo narf,

    der Fehler kommt daher, das die Funktion ToDac() in ein Timeout läuft. In ToDac wird darauf gewartet, dass eine bestimmte Stelle auf dem Bildschirm den Farbwert $LGreen annimmt. Wenn das passiert ist, wird an einer anderen Stelle nachgeschaut, ob diese Stelle $Blue ist. Insgesamt versucht die Funktion das bis zu 20 Sekunden nach dem Start des Timers $GlobalT.
    Wenn nun die Zeit abgelaufen ist, und $LGreen, bzw. $Blue nicht gefunden wurden, ist $Col nicht als Array definiert, sondern nur als normale Zahlenvariable.
    Dein Problem ist also nicht $Col, sondern das das Script nciht die richtigen Farben findet.
    Mögliche Ursachen:
    Das Script wurde für einen anderen PC geschrieben, durch Änderung der Gammawerte in der Grafikeinstellung der GraKa sind die Farbwerte leicht abweichend.
    Du benutzt die falsche Bildschirmauflösung
    Das Script ist schlicht und einfach veraltet und für die aktuelle Version des Spiels nicht mehr geeignet
    Die Timings sind zu knapp bemessen

    Das sind jetzt mal ein paar Dinge die Du überprüfen solltest, denn die eigentlich Funktion der Routinen ist ok. Zwar echt mieses Errorhandling, aber das ist ja bei Bots meist so.

    Gruß,

    TrueMu

  • ich nehme stark an, dass es am zu knappen timing liegt. denn der bot sollte ungefähr 15 meter weiter unten am ziel ankommen, und da passen dann auch die farben!
    wie kann ich also das timing verändern so dass es passt?

  • Lies Dir mal die Hilfe zu TimerInit und TimerDiff durch. Dann findest Du das bestimmt selber raus und lernst was dabei.

    Und mit dem AutoIT WindowInfo Tool kannst Du die Farbwerte an den gesuchten Positionen überprüfen.

    Gruß,

    TrueMu

  • nochmal was -.-
    hab gesucht aber das tutorial nicht gefunden ^^
    bin aber lernwillig könnte mir also evtl. jemand unter die arme greifen und mir die adresse schreiben ? ^^