Zeile auslesen und Func starten?

  • Hallo Leute,
    ich würde gerne in diesem Loop aus der Logdatei einen weiteren Begriff auslesen, der wiederum bei postivem Ergebnis ebenfalls die Func StartProcess() aufruft (nur bei $inside = 0). Mit 0 und 1 soll das Script entweder StartProcess() oder ReBG() aufrufen, was auch wunderbar klappt. Nur bin ich bisher daran gescheitert eine weitere Abfrage einzurichten, die komplett unabhängig davon StartProcess() startet. Recht schwer zu erklären, aber vielleicht wird es verständlicher, wenn ich unter dem ersten Code ein Beispiel poste. :)

    Code 1:

    [autoit]

    $file = FileOpen("Logdatei.log", 0)
    Dim $inside = 0
    ClearLog()

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

    ; Überprüfen, ob die Datei geöffnet wurde

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

    If $file = -1 Then
    MsgBox(0, "Error", "Logdatei.log kann nicht geöffnet werden.")
    Exit
    EndIf

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

    ; Überprüfen, ob der Prozess StartProcess() oder ReBG() gestartet wurde

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

    While 1
    $line = FileReadLine($file)
    $text = StringMid($line, 10,17)
    If $text = "auszulesender Text" Then

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

    If $inside = 0 Then
    ClearLog()
    StartProcess()
    $inside = 1

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

    Else
    ClearLog()
    StopProcess()
    $inside = 0
    Sleep(Random(37000,41000))
    ReBG()

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

    Endif
    If @error = -1 Then ExitLoop
    EndIf
    WEnd

    [/autoit]

    Hier mein Versuch, der nicht wirklich funktioniert. :(

    Code 2:

    [autoit]

    $file = FileOpen("Logdatei.log", 0)
    Dim $inside = 0
    ClearLog()

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

    ; Überprüfen, ob die Datei geöffnet wurde

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

    If $file = -1 Then
    MsgBox(0, "Error", "Logdatei.log kann nicht geöffnet werden.")
    Exit
    EndIf

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

    ; Überprüfen, ob der Prozess StartProcess() oder ReBG() gestartet wurde

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

    While 1
    $line = FileReadLine($file)
    $text = StringMid($line, 10,17)
    If $text = "auszulesender Text Nummer 1" Then

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

    If $inside = 0 Then
    ClearLog()
    StartProcess()
    $inside = 1

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

    Else
    ClearLog()
    StopProcess()
    $inside = 0
    Sleep(Random(37000,41000))
    ReBG()

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

    Endif
    If @error = -1 Then ExitLoop

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

    $line2 = FileReadLine($file)
    $text2 = StringMid($line2, 10,17)
    If $text2 = "auszulesender Text Nummer 2" Then

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

    ClearLog()
    StartProcess()

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

    EndIf
    WEnd

    [/autoit]

    Ich habe jetzt nicht alle Func aufgelistet, da sie für den Abschnitt eigentlich nicht von Bedeutung sind. Vielen Dank schon einmal für eure Hilfe!

    Gruß zairon

    Edit: Hat evtl. jemand schon den Fehler gefunden? Wahrscheinlich gehe ich das Problem gänzlich falsch an. Ich würde das ganze gerne noch heute Abend lösen, damit ich es über Nacht testen kann. :)

    Einmal editiert, zuletzt von zairon (12. Oktober 2006 um 21:39)

    • Offizieller Beitrag

    Hi,

    versuch es doch mal etwa so:

    [autoit]

    #include <file.au3>
    Global $suche1 = ""
    Global $suche2 = ""
    ;ClearLog ()

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

    ; Überprüfen, ob der Prozess StartProcess() oder ReBG() gestartet wurde

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

    ;While 1 ; nur wenn es dauernd geprüft werden soll
    Dim $aRecords
    If Not _FileReadToArray("Logdatei.log", $aRecords) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $aRecords[0]
    If StringInStr($aRecords[$x], $suche1) <> 0 Then
    ;Das machen
    Else
    ;Dies machen
    EndIf
    If StringInStr($aRecords[$x], $suche2) <> 0 Then
    ;Das machen
    Else
    ;Dies machen
    EndIf
    Next
    ;WEnd

    [/autoit]

    So long,

    Mega

  • Uff, das sieht ja schon um einiges komplizierter aus. Kannst du die Änderungen evtl. kurz erläutern? Blicke da noch nicht ganz durch. :)

    Ich probiere damit schon einmal ein bisschen rum und auf jeden Fall vielen Dank für den neuen Lösungsansatz!

    Gruß zairon

    • Offizieller Beitrag

    Hi,

    komplizierter ? Sollte eigentlicher einfacher sein. :tier:

    OKay hier mit etwas Erklärung:

    Spoiler anzeigen
    [autoit]

    #include <file.au3> ; muss für _FileReadToArray eingebunden werden
    Global $suche1 = "" ; Suchtext1 der im Log steht
    Global $suche2 = "" ; Suchtext1 der im Log steht
    ;ClearLog ()

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

    ; Überprüfen, ob der Prozess StartProcess() oder ReBG() gestartet wurde

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

    ;While 1 ; nur wenn es dauernd geprüft werden soll

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

    ; Einlesen der Datei Zeile für Zeile in das Array $aRecords
    Dim $aRecords
    If Not _FileReadToArray("Logdatei.log", $aRecords) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    ; Hier das Überprüfen
    For $x = 1 To $aRecords[0] ; Das Array durchgehen in [0] ist die Gesamtzeilenzahl gespeichert (siehe _FileReadToArray)
    If StringInStr($aRecords[$x], $suche1) <> 0 Then ; Wenn der Text suche1 gefunden, dann
    ;Das machen
    Else
    ;Dies machen
    EndIf
    If StringInStr($aRecords[$x], $suche2) <> 0 Then ; Wenn der Text suche2 gefunden, dann
    ;Das machen
    Else
    ;Dies machen
    EndIf
    Next
    ;WEnd

    [/autoit]

    So long,

    Mega

  • Soweit hoffentlich alles klar. Leider kommt bei mir aber die Fehlermeldung "cannot parse #include". Also diese #include Anweisung erschließt sich mir noch nicht so ganz.

    Edit: Bin dahinter gestiegen. Das sind also schon vordefinierte Scriptdateien. Beschäftige mich noch nicht allzu lange mit AutoIt, aber man kommt langsam dahinter. :)

    3 Mal editiert, zuletzt von zairon (12. Oktober 2006 um 22:33)

  • Soweit so gut. Leider hat sich durch das Abändern ein neuer Fehler aufgetan in der ClearLog() Funktion.

    Daher hier der gesamte Quellcode, damit das Fehlerprüfen vielleicht etwas leichter fällt. :)

    [autoit]

    #include <file.au3>
    Global $search1 = "ReadProcessMemory"
    Global $search2 = "Died while gliding"
    ClearLog ()

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

    ; Check if bot has joined/left BG and start Gliding

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

    While 1
    Dim $aRecords
    If Not _FileReadToArray("Glider.log", $aRecords) Then
    MsgBox(4096, "Error", " Error reading Glider.log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $aRecords[0]
    If StringInStr($aRecords[$x], $suche1) <> 0 Then
    ClearLog()
    StartBotting()
    ;BG HAS BEEN JOINED! START BOTTING
    Else
    ClearLog()
    StopBotting()
    Sleep(Random(37000,41000))
    ReBG()
    ;BOT HAS LEFT THE BG!
    EndIf
    If StringInStr($aRecords[$x], $suche2) <> 0 Then
    ClearLog()
    StartBotting()
    EndIf
    Next
    WEnd

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

    ; Clears Glider.log by deleting it and creating a new empty one

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

    Func ClearLog()
    FileClose($file)
    FileDelete("Glider.log")
    $file = FileOpen("Glider.log", 2)
    FileClose($file)
    $file = FileOpen("Glider.log", 0)
    EndFunc

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

    ; Waits 36-40 seconds (while entering BG) and then starts WoW Glider by using keyboard shortcut (Double-CTRL + G)

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

    Func StartBotting()
    Sleep(Random(36000,40000))
    Send("{LCTRL}")
    Sleep(Random(500,700))
    Send("{LCTRL}")
    Sleep(Random(800,900))
    Send("g")
    EndFunc

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

    ; Stops WoW Glider by using keyboard shortcut (ESC)

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

    Func StopBotting()
    Sleep(Random(225,250))
    Send("{ESC}")
    Sleep(Random(200,215))
    Send("{ESC}")
    EndFunc

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

    ; Rejoin BG

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

    Func ReBG()
    Sleep(Random(200,300))
    Send("{a down}")
    Sleep(Random(200,210))
    Send("{a up}")
    Sleep(Random(225,325))
    Send("{s down}")
    Sleep(Random(4500, 5600))
    Send("{s up}")
    Sleep(1000)
    ; Join BG Button
    MouseClick("left", 200, 560)
    Send("{w down}")
    Sleep(Random(2600, 3200))
    Send("{w up}")
    Sleep(Random(235,335))
    ; Attach Glider
    MouseClick("left", 1130, 930)
    EndFunc

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

    FileClose($file)

    [/autoit]

    Edit: Also wenn ich nach dem #include <file.aue3> folgendes einsetzte, dann funktioniert das Script bis Zeile 23.

    $file = FileOpen("Glider.log", 0)

    Danach kommt folgender Fehler:

    If StringInStr($aRecords[$x], $suche1) <> 0 Then
    If StringInStr($aRecords[$x], ^ ERROR

    Error: Variable used without beding declared.

    Einmal editiert, zuletzt von zairon (12. Oktober 2006 um 22:56)

    • Offizieller Beitrag

    Hi,

    vielleicht wäre es einfacher, wenn du von Anfang an, einfach dein Skript postest und sagst, was du erreichen willst und wo Probleme liegen. ;)

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    Global $search1 = "ReadProcessMemory"
    Global $search2 = "Died while gliding"
    Global $logPath = @ScriptDir & "\Glider.log"
    ClearLog()

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

    ; Check if bot has joined/left BG and start Gliding

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

    While 1
    Dim $aRecords
    If Not _FileReadToArray($logPath, $aRecords) Then
    MsgBox(4096, "Error", " Error reading Glider.log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $aRecords[0]
    If StringInStr($aRecords[$x], $search1) <> 0 Then
    ClearLog()
    StartBotting()
    ;BG HAS BEEN JOINED! START BOTTING
    Else
    ClearLog()
    StopBotting()
    Sleep(Random(37000, 41000))
    ReBG()
    ;BOT HAS LEFT THE BG!
    EndIf
    If StringInStr($aRecords[$x], $search2) <> 0 Then
    ClearLog()
    StartBotting()
    EndIf
    Next
    WEnd

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

    ; Clears Glider.log by deleting it and creating a new empty one

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

    Func ClearLog()
    If FileExists($logPath) Then FileDelete($logPath)
    If Not _FileCreate($logPath) Then
    MsgBox(4096, "Error", " Error Creating/Resetting log. error:" & @error)
    EndIf
    EndFunc ;==>ClearLog

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

    ; Waits 36-40 seconds (while entering BG) and then starts WoW Glider by using keyboard shortcut (Double-CTRL + G)

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

    Func StartBotting()
    Sleep(Random(36000, 40000))
    Send("{LCTRL}")
    Sleep(Random(500, 700))
    Send("{LCTRL}")
    Sleep(Random(800, 900))
    Send("g")
    EndFunc ;==>StartBotting

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

    ; Stops WoW Glider by using keyboard shortcut (ESC)

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

    Func StopBotting()
    Sleep(Random(225, 250))
    Send("{ESC}")
    Sleep(Random(200, 215))
    Send("{ESC}")
    EndFunc ;==>StopBotting

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

    ; Rejoin BG

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

    Func ReBG()
    Sleep(Random(200, 300))
    Send("{a down}")
    Sleep(Random(200, 210))
    Send("{a up}")
    Sleep(Random(225, 325))
    Send("{s down}")
    Sleep(Random(4500, 5600))
    Send("{s up}")
    Sleep(1000)
    ; Join BG Button
    MouseClick("left", 200, 560)
    Send("{w down}")
    Sleep(Random(2600, 3200))
    Send("{w up}")
    Sleep(Random(235, 335))
    ; Attach Glider
    MouseClick("left", 1130, 930)
    EndFunc ;==>ReBG

    [/autoit]

    So long,

    Mega

  • Da hast du wohl recht. War mir etwas unsicher, ob mir geholfen wird, wenn ich das komplette Script poste. :)

    Edit: Nächstes Problem. Irgendwie wird nur die Funktion ReBG() ausgeführt, obwohl nichts in der Glider.log steht. StartBotting() wird durch das Script keine Beachtung geschenkt. :(

    Einmal editiert, zuletzt von zairon (12. Oktober 2006 um 23:05)

  • Wie meinst du das? Problem ist, dass ich nun nicht mehr wirklich durch das Script steige. Das Script erkennt irgendwie nicht mehr auf welcher "Seite" es sich befindet.

    Nachdem das BG (Schlachtfeld) betreten wurde, wird in die Glider.log von einem anderen Programm die "Fehlermeldung" ReadProcessMemory in die Datei geschrieben. Dadurch sollte das AutoIt Script wissen, dass StartBotting() aufgerufen werden soll. Das gleiche gilt für "Died while gliding". Wenn das BG verlassen wird, soll ReBG() ausgeführt und "Died while gliding" nicht mehr überprüft werden.

    Hoffentlich haben wir nicht aneinander vorbeigeschrieben. :)

    Edit: Ich kann noch hinzufügen, dass in der Glider.log wirklich kein Wort steht und ReBG() trotzdem ausgeführt wird. Obwohl es eigentlich erst ausgeführt werden dürfte, wenn das Script das zweite mal "ReadProcessMemory" in der Glider.log finden sollte.

    Einmal editiert, zuletzt von zairon (12. Oktober 2006 um 23:44)

  • Okay, ich versuche es. :)

    Start:

    1. Leere Glider.log
    2. "ReadProcessMemory" wird ca. nach 2 Minuten durch ein anderes Programm in die Glider.log geschrieben
    3. Script soll dies auslesen (Begriff steht an 10ter Stelle, daher lieber

    If StringInStr($aRecords[$x], $search1, 10, 17) <> 0 Then

    oder?)
    4. Script führt daraufhin StartBotting() aus und leert die Glider.log durch ClearLog()
    5. Durch Zufälle wird "Died while Gliding" in die leere Glider.log geschrieben und dadurch wieder StartBotting() ausgeführt
    6. Nach einiger Zeit (variabel) wird wieder "ReadProcessMemory" in die leere Glider.log geschrieben
    7. Nun soll aber nicht StartBotting() ausgeführt werden, sondern der ReBG() Part
    8. Nun fängt das Script wieder bei Punkt 1 an und überprüft die Glider.log

    Hoffentlich ist das Ablauf damit klar geworden (wenn du das überhaupt so wissen wolltest). :)

    • Offizieller Beitrag

    Hi,

    neuer Versuch:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #cs
    Okay, ich versuche es. smile

    Start:

    1. Leere Glider.log
    2. "ReadProcessMemory" wird ca. nach 2 Minuten durch ein anderes Programm in die Glider.log geschrieben
    3. Script soll dies auslesen (Begriff steht an 10ter Stelle, daher lieber
    4. Script führt daraufhin StartBotting() aus und leert die Glider.log durch ClearLog()
    5. Durch Zufälle wird "Died while Gliding" in die leere Glider.log geschrieben und dadurch wieder StartBotting() ausgeführt
    6. Nach einiger Zeit (variabel) wird wieder "ReadProcessMemory" in die leere Glider.log geschrieben
    7. Nun soll aber nicht StartBotting() ausgeführt werden, sondern der ReBG() Part
    8. Nun fängt das Script wieder bei Punkt 1 an und überprüft die Glider.log
    Hoffentlich ist das Ablauf damit klar geworden (wenn du das überhaupt so wissen wolltest). smile
    #ce

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

    Global $search1 = "ReadProcessMemory"
    Global $search2 = "Died while gliding"
    Global $logPath = @ScriptDir & "\Glider.log"
    Global $count = 0
    ClearLog()

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

    ; Check if bot has joined/left BG and start Gliding

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

    While 1
    Dim $aRecords
    If Not _FileReadToArray($logPath, $aRecords) Then
    MsgBox(4096, "Error", " Error reading Glider.log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $aRecords[0]
    If StringInStr($aRecords[$x], $search1) <> 0 Then
    $count += 1
    If $count = 1 Then
    ClearLog()
    StartBotting()
    ElseIf $count = 2 Then
    $count = 0
    ReBG()
    EndIf
    EndIf
    If StringInStr($aRecords[$x], $search2) <> 0 Then
    ClearLog()
    StartBotting()
    EndIf
    ;BG HAS BEEN JOINED! START BOTTING
    Next
    WEnd

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

    ; Clears Glider.log by deleting it and creating a new empty one

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

    Func ClearLog()
    If FileExists($logPath) Then FileDelete($logPath)
    If Not _FileCreate($logPath) Then
    MsgBox(4096, "Error", " Error Creating/Resetting log. error:" & @error)
    EndIf
    EndFunc ;==>ClearLog

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

    ; Waits 36-40 seconds (while entering BG) and then starts WoW Glider by using keyboard shortcut (Double-CTRL + G)

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

    Func StartBotting()
    Sleep(Random(36000, 40000))
    Send("{LCTRL}")
    Sleep(Random(500, 700))
    Send("{LCTRL}")
    Sleep(Random(800, 900))
    Send("g")
    EndFunc ;==>StartBotting

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

    ; Stops WoW Glider by using keyboard shortcut (ESC)

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

    Func StopBotting()
    Sleep(Random(225, 250))
    Send("{ESC}")
    Sleep(Random(200, 215))
    Send("{ESC}")
    EndFunc ;==>StopBotting

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

    ; Rejoin BG

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

    Func ReBG()
    Sleep(Random(200, 300))
    Send("{a down}")
    Sleep(Random(200, 210))
    Send("{a up}")
    Sleep(Random(225, 325))
    Send("{s down}")
    Sleep(Random(4500, 5600))
    Send("{s up}")
    Sleep(1000)
    ; Join BG Button
    MouseClick("left", 200, 560)
    Send("{w down}")
    Sleep(Random(2600, 3200))
    Send("{w up}")
    Sleep(Random(235, 335))
    ; Attach Glider
    MouseClick("left", 1130, 930)
    EndFunc ;==>ReBG

    [/autoit]

    So long,

    Mega

  • Und dieser Versuch funktioniert einfach perfekt! Vielen Dank noch einmal hier im Forum (du hast ja nebenbei im ICQ noch wunderbaren Support geliefert ^^) für deine kompetente Hilfe. Ich hätte nicht gedacht, dass mir jemand so schnell helfen könnte. :)


    Also nochmal ein großes DANKE! :klatschen:

    Gruß zairon

    • Offizieller Beitrag

    Hi,

    kein Problem. So ist dieses Forum halt. Hätte ich es nicht gemacht, dann hätte es halt jemand anderes vollbracht.

    Viel Spaß beim Cheaten. :rofl_devil:

    So long,

    Mega

    P.S.: Für das "geschl..." müßte Pee mich eigentlich zum Forumsschleimer ernennen. :kiss:

    peethebee: Hiermit ernenne ich th.meger zum Forenschleimer No. 1 :keks:

  • Ich bin es noch einmal. :rolleyes: In das Script muss leider noch eine Kleinigkeit eingebaut werden, was mir leider erst mit intensiverem Testen aufgefallen ist. Selbstständig habe ich es bisher nicht hinbekommen.

    Und zwar:

    1. Chat.log soll neben der Glider.log ebenfalls überprüft werden
    2. Nämlich nach der Textzeile "is near victory"
    3. Danach soll der Bot gestoppt werden, daher wohl StopBotting()
    4. Am besten wäre, wenn ab diesem Punkt die Abfrage nach "Died while gliding" abgeschaltet wird

    Scheint nicht viel zu sein, aber ich habe mich bisher darin verrannt zwei Dateien nebeneinander überprüfen zu lassen. Vielleicht kann mir wieder so schnell geholfen werden. :)

    Gruß zairon

    Edit:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>

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

    Global $search1 = "ReadProcessMemory"
    Global $search2 = "Died while gliding"
    Global $search3 = "Unexpected sudden movement"
    Global $search4 = "Missing base list pointer"
    Global $logPath = @ScriptDir & "\Glider.log"
    Global $count = 0
    ClearLog()

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

    ; Check if bot has joined/left BG and start Gliding

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

    While 1
    Dim $aRecords
    If Not _FileReadToArray($logPath, $aRecords) Then
    MsgBox(4096, "Error", " Error reading Glider.log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $aRecords[0]
    If StringInStr($aRecords[$x], $search1) <> 0 Then
    $count += 1
    If $count = 1 Then
    ClearLog()
    StartBotting()
    ;BG HAS BEEN JOINED! START BOTTING
    ElseIf $count = 2 Then
    $count = 0
    ClearLog()
    StopBotting()
    Sleep(Random(37000, 41000))
    ReBG()
    ;BOT HAS LEFT THE BG!
    EndIf
    EndIf
    If StringInStr($aRecords[$x], $search2) <> 0 Then
    ClearLog()
    StartBotting()
    ; Dead Check
    EndIf
    If StringInStr($aRecords[$x], $search3) <> 0 Then
    ClearLog()
    Sleep(Random(200, 210))
    StopBotting()
    Sleep(Random(235, 335))
    StartBotting()
    ; Teleport Bug
    EndIf
    If StringInStr($aRecords[$x], $search4) <> 0 Then
    $count += 1
    If $count = 1 Then
    ClearLog()
    StartBotting()
    ;BG HAS BEEN JOINED! START BOTTING
    ElseIf $count = 2 Then
    $count = 0
    ClearLog()
    StopBotting()
    Sleep(Random(37000, 41000))
    ReBG()
    ;BOT HAS LEFT THE BG!
    EndIf
    EndIf
    Next
    ; Anti-AFK
    Sleep(Random(28000,31000))
    WinActivate("World of Warcraft", "")
    Sleep(Random(225, 250))
    Send("{SPACE}")
    WEnd

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

    ; Clears Glider.log by deleting it and creating a new empty one

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

    Func ClearLog()
    If FileExists($logPath) Then FileDelete($logPath)
    If Not _FileCreate($logPath) Then
    MsgBox(4096, "Error", " Error Creating/Resetting Glider.log. error:" & @error)
    EndIf
    EndFunc ;==>ClearLog

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

    ; Waits 36-40 seconds (while entering BG) and then starts WoW Glider by using keyboard shortcut (Double-CTRL + G)

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

    Func StartBotting()
    Sleep(Random(36000, 40000))
    Send("{LCTRL}")
    Sleep(Random(500, 700))
    Send("{LCTRL}")
    Sleep(Random(800, 900))
    Send("g")
    EndFunc ;==>StartBotting

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

    ; Stops WoW Glider by using keyboard shortcut (ESC)

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

    Func StopBotting()
    Sleep(Random(225, 250))
    Send("{ESC}")
    Sleep(Random(200, 215))
    Send("{ESC}")
    EndFunc ;==>StopBotting

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

    ; Rejoin BG

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

    Func ReBG()
    Sleep(Random(200, 300))
    Send("{a down}")
    Sleep(Random(200, 210))
    Send("{a up}")
    Sleep(Random(225, 325))
    Send("{s down}")
    Sleep(Random(5400, 5500))
    Send("{s up}")
    Sleep(1000)
    ; Join BG Button
    MouseClick("left", 200, 560)
    Send("{w down}")
    Sleep(Random(3000, 3100))
    Send("{w up}")
    Sleep(Random(235, 335))
    ; Attach Glider
    MouseClick("left", 1130, 930)
    EndFunc ;==>ReBG

    [/autoit]

    Man sollte vielleicht noch hinzufügen, dass die "Died while gliding" Abfrage nur bis zu dem Zeitpunkt abgeschaltet werden soll, bis wieder "ReadProcessMemory" oder "Missing base list pointer" aus der Glider.log ausgelesen wird.

    2 Mal editiert, zuletzt von zairon (13. Oktober 2006 um 21:34)

    • Offizieller Beitrag

    HI,

    versuch mal das:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>

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

    Global $search1 = "ReadProcessMemory"
    Global $search2 = "Died while gliding"
    Global $search3 = "Unexpected sudden movement"
    Global $search4 = "Missing base list pointer"
    Global $search5 = "Is near victory"
    Global $GliderLog = @ScriptDir & "\Glider.log"
    Global $ChatLog = @ScriptDir & "\Chat.log"
    Global $count = 0, $abfrageAn = True
    ClearLog ()

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

    ; Check if bot has joined/left BG and start Gliding

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

    While 1
    Dim $aRecords
    If Not _FileReadToArray($GliderLog, $aRecords) Then
    MsgBox(4096, "Error", " Error reading Glider.log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $aRecords[0]
    If StringInStr($aRecords[$x], $search1) <> 0 Then
    $abfrageAn = True
    $count += 1
    If $count = 1 Then
    ClearLog ()
    StartBotting ()
    ;BG HAS BEEN JOINED! START BOTTING
    ElseIf $count = 2 Then
    $count = 0
    ClearLog ()
    StopBotting ()
    Sleep(Random(37000, 41000))
    ReBG ()
    ;BOT HAS LEFT THE BG!
    EndIf
    EndIf
    If StringInStr($aRecords[$x], $search2) <> 0 And $abfrageAn Then
    ClearLog ()
    StartBotting ()
    ; Dead Check
    EndIf
    If StringInStr($aRecords[$x], $search3) <> 0 Then
    ClearLog ()
    Sleep(Random(200, 210))
    StopBotting ()
    Sleep(Random(235, 335))
    StartBotting ()
    ; Teleport Bug
    EndIf
    If StringInStr($aRecords[$x], $search4) <> 0 Then
    $abfrageAn = True
    $count += 1
    If $count = 1 Then
    ClearLog ()
    StartBotting ()
    ;BG HAS BEEN JOINED! START BOTTING
    ElseIf $count = 2 Then
    $count = 0
    ClearLog ()
    StopBotting ()
    Sleep(Random(37000, 41000))
    ReBG ()
    ;BOT HAS LEFT THE BG!
    EndIf
    EndIf
    Next
    Dim $chatLog_A
    If Not _FileReadToArray($ChatLog, $chatLog_A) Then
    MsgBox(4096, "Error", " Error reading Chat.log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $chatLog_A[0]
    If StringInStr($chatLog_A[$x], $search5) <> 0 Then
    StopBotting()
    $abfrageAn = False
    EndIf
    Next

    ; Anti-AFK
    Sleep(Random(28000, 31000))
    WinActivate("World of Warcraft", "")
    Sleep(Random(225, 250))
    Send("{SPACE}")
    WEnd

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

    ; Clears Glider.log by deleting it and creating a new empty one

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

    Func ClearLog ()
    If FileExists($GliderLog) Then FileDelete($GliderLog)
    If Not _FileCreate($GliderLog) Then
    MsgBox(4096, "Error", " Error Creating/Resetting Glider.log. error:" & @error)
    EndIf
    EndFunc ;==>ClearLog

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

    ; Waits 36-40 seconds (while entering BG) and then starts WoW Glider by using keyboard shortcut (Double-CTRL + G)

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

    Func StartBotting ()
    Sleep(Random(36000, 40000))
    Send("{LCTRL}")
    Sleep(Random(500, 700))
    Send("{LCTRL}")
    Sleep(Random(800, 900))
    Send("g")
    EndFunc ;==>StartBotting

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

    ; Stops WoW Glider by using keyboard shortcut (ESC)

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

    Func StopBotting ()
    Sleep(Random(225, 250))
    Send("{ESC}")
    Sleep(Random(200, 215))
    Send("{ESC}")
    EndFunc ;==>StopBotting

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

    ; Rejoin BG

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

    Func ReBG ()
    Sleep(Random(200, 300))
    Send("{a down}")
    Sleep(Random(200, 210))
    Send("{a up}")
    Sleep(Random(225, 325))
    Send("{s down}")
    Sleep(Random(5400, 5500))
    Send("{s up}")
    Sleep(1000)
    ; Join BG Button
    MouseClick("left", 200, 560)
    Send("{w down}")
    Sleep(Random(3000, 3100))
    Send("{w up}")
    Sleep(Random(235, 335))
    ; Attach Glider
    MouseClick("left", 1130, 930)
    EndFunc ;==>ReBG

    [/autoit]

    So long,

    Mega

  • Das Script funktioniert wirklich super. Natürlich lässt es sich immer weiter verbesseren und daher habe ich noch zwei weitere Abfragen eingebaut. Bei $search6 = "Closest waypoint is too far away" Abfrage habe ich jedoch meine Bedenken, dass die Variabeln auch wieder richtig gesetzt werden, wenn dieser Abschnitt erfolgreich ausgeführt wurde. Die Abfrage musste ich miteinbauen, da es ab und zu vorkommen kann, dass nach der zweiten "ReadProcessMemory" Abfrage trotzdem "Died while gliding" ausgeführt wird (indem kurz nach dem Ableben das BG geschlossen wird). Dadurch positioniert sich der Avatar anders und es muss ReBGBug() ausgeführt werden. Es ist ein seltener Fehler, daher fällt das Testen schwer. Daher meine Frage, ob bei $search6 die Variabeln wieder richtig gesetzt werden.

    Spoiler anzeigen
    [autoit]

    #include <file.au3>

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

    Global $search1 = "ReadProcessMemory"
    Global $search2 = "Died while gliding"
    Global $search3 = "Unexpected sudden movement"
    Global $search4 = "Resurrect before beginning glide"
    Global $search5 = "Missing base list pointer"
    Global $search6 = "Closest waypoint is too far away"
    Global $search7 = "is near victory"
    Global $GliderLog = @ScriptDir & "\Glider.log"
    Global $ChatLog = @ScriptDir & "\Chat.log"
    Global $count = 0, $abfrageAn = True
    ClearLog ()
    Sleep(Random(205, 215))
    ClearChatLog ()

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

    ; Überprüfen, ob der Bot das BG betreten oder verlassen hat und Glider starten

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

    While 1
    Dim $aRecords
    If Not _FileReadToArray($GliderLog, $aRecords) Then
    MsgBox(4096, "Error", " Error reading Glider.log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $aRecords[0]
    If StringInStr($aRecords[$x], $search1) <> 0 Then
    $abfrageAn = True
    $count += 1
    If $count = 1 Then
    ClearLog ()
    StartBotting ()
    ; BG WURDE BETRETEN! BOT STARTEN
    ElseIf $count = 2 Then
    $count = 0
    ClearLog ()
    StopBotting ()
    Sleep(Random(31000, 33000))
    ReBG ()
    ; BOT HAT DAS BG VERLASSEN!
    EndIf
    EndIf
    If StringInStr($aRecords[$x], $search2) <> 0 And $abfrageAn Then
    ClearLog ()
    StartBotting ()
    ; Überprüfen, ob der Avatar gestorben ist
    EndIf
    If StringInStr($aRecords[$x], $search3) <> 0 And $abfrageAn Then
    ClearLog ()
    Sleep(Random(200, 210))
    StopBotting ()
    Sleep(Random(235, 335))
    StartBotting ()
    ; Teleport Bug
    EndIf
    If StringInStr($aRecords[$x], $search4) <> 0 And $abfrageAn Then
    ClearLog ()
    StartBotting ()
    ; Wiederbeleben bevor der Bot gestartet wird
    EndIf
    If StringInStr($aRecords[$x], $search5) <> 0 Then
    $abfrageAn = True
    $count += 1
    If $count = 1 Then
    ClearLog ()
    StartBotting ()
    ; BG WURDE BETRETEN! BOT STARTEN
    ElseIf $count = 2 Then
    $count = 0
    ClearLog ()
    StopBotting ()
    Sleep(Random(31000, 33000))
    ReBG ()
    ; BOT HAT DAS BG VERLASSEN!
    EndIf
    EndIf
    If StringInStr($aRecords[$x], $search6) <> 0 Then
    $abfrageAn = True
    $count = 0
    ClearLog ()
    ReBGBug ()
    ; Rejoin BG Bug
    EndIf
    Next
    Dim $chatLog_A
    If Not _FileReadToArray($ChatLog, $chatLog_A) Then
    MsgBox(4096, "Error", " Error reading Chat.log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $chatLog_A[0]
    If StringInStr($chatLog_A[$x], $search7) <> 0 Then
    ClearChatLog ()
    Sleep(Random(205, 215))
    $abfrageAn = False
    EndIf
    Next
    ; Anti-AFK
    Sleep(Random(28000,29000))
    WinActivate("World of Warcraft", "")
    Sleep(Random(225, 250))
    MouseClick("left", 520, 450)
    WEnd

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

    ; Glider.log leeren, indem die Datei gelöscht und und eine neue erstellt wird

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

    Func ClearLog ()
    If FileExists($GliderLog) Then FileDelete($GliderLog)
    If Not _FileCreate($GliderLog) Then
    MsgBox(4096, "Error", " Error Creating/Resetting Glider.log. error:" & @error)
    EndIf
    EndFunc ;==>ClearLog

    ; Chat.log leeren, indem die Datei gelöscht und und eine neue erstellt wird

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

    Func ClearChatLog ()
    If FileExists($ChatLog) Then FileDelete($ChatLog)
    If Not _FileCreate($ChatLog) Then
    MsgBox(4096, "Error", " Error Creating/Resetting Chat.log. error:" & @error)
    EndIf
    EndFunc ;==>ClearChatLog

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

    ; 30-32 Sekunden warten (während das BG betreten wird) und Glider mit dem Keyboard Shortcut (Double-CTRL + G) starten

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

    Func StartBotting ()
    Sleep(Random(30000, 32000))
    Send("{LCTRL}")
    Sleep(Random(500, 700))
    Send("{LCTRL}")
    Sleep(Random(800, 900))
    Send("g")
    EndFunc ;==>StartBotting

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

    ; WoW Glider mit dem Keyboard Shortcut (ESC) stoppen

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

    Func StopBotting ()
    Sleep(Random(225, 250))
    Send("{ESC}")
    Sleep(Random(200, 215))
    Send("{ESC}")
    EndFunc ;==>StopBotting

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

    ; BG wiederbetreten

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

    Func ReBG ()
    Sleep(Random(200, 300))
    Send("{a down}")
    Sleep(Random(200, 210))
    Send("{a up}")
    Sleep(Random(225, 325))
    Send("{s down}")
    Sleep(Random(5400, 5500))
    Send("{s up}")
    Sleep(1000)
    ; Join BG Button
    MouseClick("left", 200, 560)
    Send("{w down}")
    Sleep(Random(3000, 3100))
    Send("{w up}")
    Sleep(Random(235, 335))
    ; Attach Glider
    MouseClick("left", 1130, 930)
    EndFunc ;==>ReBG

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

    ; Rejoin BG Bug

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

    Func ReBGBug ()
    Sleep(Random(5200, 5300))
    Send("{d down}")
    Sleep(Random(200, 210))
    Send("{d up}")
    Sleep(Random(225, 325))
    Send("{w down}")
    Sleep(Random(3000, 3100))
    Send("{w up}")
    Sleep(1000)
    ; Join BG Button
    MouseClick("left", 200, 560)
    Send("{s down}")
    Sleep(Random(5400, 5500))
    Send("{s up}")
    EndFunc ;==>ReBGBug

    [/autoit]

    Vielen Dank nochmal für die schnelle Hilfe gestern, th.meger. Ich bin gestern jedoch eingepennt und konnte daher keine Rückmeldung mehr geben. :D Funktioniert aber alles bestens, wie oben schon kurz erwähnt.

    Gruß zairon