AutoLogin zu Silkroad

  • Ich versuche ein Autologin für Silkroad zu erstellen, da zu Stoßzeiten die Server dort derartig überlastet sind dass man viele Anläufe braucht bis man auf den Server kommen kann.
    Das Problem dabei ist, dass sobald man nicht darauf kommt das Spiel geschlossen wird und man somit für jeden Versuch das komplette Spiel neustarten muss.

    Was muss das Script können?
    - Verzeichniss frei konfigurierbar
    - Server (Dropmenü mit 8 Einträgen) auswählbar
    - Characterslot (1-3) auswählbar
    - Name/Passwort beim Ausführen konfigurieren
    - Auf diversen Auflösungen funktionieren

    Verzeichnis sowie Name/PW könnte man über eine Inputbox erreichen nehme ich an.

    Server, Characterslot habe ich keine Ahnung wie genau man das erreicht.

    Für jede Auflößung müsste man ein extra Script erstelle vermute ich.


    Ein weiteres Problem stellt ein Bildschrim dar, auf welchem man zuerst "Start" drücken muss um Silkroad endgültig zu starten. Außerdem müsste das Script stoppen sobald man auf dem Server ist.

    Könntet ihr mir evtl. einige Tipps geben wie ich mein Ziel erreiche (vielleicht gibt es ja sogar eine Art "Template"?).

    Danke schon im Vorraus.

    • Offizieller Beitrag

    Hallo!

    Hast du schon mal was versucht?
    Schau dir mal Send an, um Tastureingaben zu simulieren, Run, um das Spiel zu starten, Win... um das Fenster zu erkennen, Variablen für den Pfad (oder FileSelectFolder), Auflösung unterscheiden über @DesktopWidth und dann If-Abzweigungen.

    peethebee

  • ist mein erstes projekt, kenne aber grundwissen aus basic.
    danke schonmal für deine tipps. werde ich mal alles abarbeiten.
    im moment bekomme ich silkroad zum starten, was ja schonmal ein kleiner erfolg ist :P

    //edit: hänge im moment mit dem fileselectfolder fest.

    ich möchte, dass man direkt den pfad zur .exe datei eintippen kann.
    so sieht das bei mir momentan aus:

    Zitat

    FileSelectFolder("Set path of Silkroad.exe", "")

    allerdings kann man damit nur per klick zum verzeichniss kommen, nicht zur .exe und es wäre mir auch lieber, man könnte das eintippen.
    ich hatte versucht mit den flags zu arbeiten, bekomme aber nur erros.

    Einmal editiert, zuletzt von !mP (18. Juni 2006 um 18:29)

    • Offizieller Beitrag

    Hallo,

    wie der Name schon sagt kann man mit FileSelectFolder nur Verzeichnisse auswählen. Was du benötigst ist FileOpenDialog.

  • ah dankeschön.

    mittlerweile bin ich soweit, dass silkroad gestartet wird. nun habe ich aber wieder ein kleines problem.
    in silkroad hat das loginmenü keinen titel, keine id und keinen text. ich bin mir unsicher wie man autoit dazu bringt, nun jeweils namen und passwort einzutippen.

    • Offizieller Beitrag

    Ich kenne Silkroad leider nicht, es wäre vllt. hilfreich wenn du mal einen Screenshot vom loginscreen und von au3info posten würdest.

  • Pre-Boot-Screen
    dies ist der prelogin screen, über den hinaus komme ich (sleep von 6000 war nötig, da der "startbtn" erst nach ca. 5sec erscheint (abhängig von der inet geschwindigkeit).
    also mehr oder minder unwichtig, wollts aber trotzdem kurz zeigen.


    und hier nummer zwei:
    ingame screen
    bevor man diesen erreicht muss nochmals ein klick gemacht werden.
    und hier habe ich das problem, dass ich nicht weiß wie ich autoit zum tippen bekomme.

    danke im vorraus

    • Offizieller Beitrag

    Ich gehe mal davon aus, das wenn das Loginfenster erscheint der Cursor im Feld ID steht.

    Dann müsste das funktionieren:

    Frage: Wird das Loginfenster im Inet-Browser geöffnet? Das würde erklären warum au3info keine ID für die Controlfelder auslesen kann.

  • nein. das loginfenster ist ingame.
    vermute aber deine lösung funktioniert. werde das gleich mal testen.

    wenn ich einer clickfunktion 20 stück angebe, wirkt sich das bei langsameren rechnern stark aus? weil, die ladezeiten vom pre-login bis ingame sind stark abhängig vom cpu und ram, daher würde es wenig sinn machen eine sleep zeit zu definieren.

    nochmal ein nachtrag:

    Dies ist der momentane Quellcode. Allerdings, beginnt Autoit nicht mit tippen obwohl der Coursor in der ID-Zeile blinkt.
    Die Sleepzeiten sind gerade auf meinen Pc abgestimmt, d.h. sie sind außreichend lang (fast zu lang :D).
    Ich werde gleich nochmal versuchen eine ID oder einen Namen für die ID/PW Zeile zu bekommen.

    Einmal editiert, zuletzt von !mP (18. Juni 2006 um 22:46)

    • Offizieller Beitrag

    20 Clicks sollten kein Problem sein! Du solltest nur mit Opt (s. Hilfe) den Wert von MouseClickDelay (Pause zwischen 2 Clicks in ms) so hoch setzen das die clicks nicht als doppelclick gewertet werden.

  • ok dankeschön. damit habe ich schonmal das problem mit den verschiedenen ladezeiten umgangen.

    nun müsste ich nur noch die logindaten zum eingeben bekommen und einen loop basteln dann könnte man das ganze als beta schon benutzen :)

    bleibt noch die frage wie ich das script zum stoppen bringe sobald man auf dem server gelandet ist, ohne eine taste drücken zu müssen. da einige leute für die, das programm gedacht ist, sich während den joinversuchen anderen dingen widmen wollen :D

    aber als allererstes will ich schonmal ein richtig dickes dankeschön an dich loswerden bernd! da scheint einiges an wissen hinter deinen tipps zu stecken.

    • Offizieller Beitrag

    gern geschehen! Wenn's Probleme gibt einfach wieder hier posten!

    Zitat

    bleibt noch die frage wie ich das script zum stoppen bringe sobald man auf dem server gelandet ist, ohne eine taste drücken zu müssen. da einige leute für die, das programm gedacht ist, sich während den joinversuchen anderen dingen widmen wollen

    Vllt erscheint ja eine Meldung wenn der Connect geklappt hat bzw. nicht geklappt hat. Abhängig von dieser Meldung kann man dann den Anmeldeversuch nochmal ausführen bzw. das Programm beenden.

  • Wenn der Connect nicht klappt, erhält man eine Meldung nach welcher sich das Spiel automatisch schließt.
    Klappt der Login kommt man in den Charakterauswahl-Bildschirm, auf welchem wiederum zwischen 3 Slots unterschieden werden muss (evtl. nochmal eine größere Hürde).
    Hat man nun einen Charakter ausgewählt erscheint ein Ladebildschirm und kurze Zeit später steht man im Spiel. Möglicherweiße kann man das Ende des Programms an den Ladebildschirm koppeln, was ich allerdings nicht glaube, da vermutlich jeder Ladebildschirm den selben Namen besitzt.

    • Offizieller Beitrag

    Wenn au3info was aus dem Fenster auslesen kann sollte auch das kein Problem sein!

  • Hallo ich hätte da auch mal eine Frage zu AutoLogin.
    für lycos geht wunderbar.

    Code
    run('rundll32.exe url.dll,FileProtocolHandler http://www.lycos.de')
    WinWait("Lycos - Meet you there:")
    sleep(1000)
    send("{TAB}")
    Send("Musterman");; Server-wählen
    send("{TAB}")
    send("123456");; ID-Eingabe
    send("{enter}")

    leider bekomme ich das irgentwie für web.de nicht hin.
    hat da wohl jemand eine Lösung ?

    • Offizieller Beitrag

    Bei Web.de kannst du folgenden Trick anwenden. Gehe einfach auf die Seite die aufgerufen wird wenn Name oder Passwort falsch eingegeben werden. Die Adresse ist https://freemail.web.de/msg/logonfailed.htm, dann steht der Cursor nämlich schon im Feld für die Nutzereingabe.

    Code
    run('rundll32.exe url.dll,FileProtocolHandler https://freemail.web.de/msg/logonfailed.htm')
    WinWait("FreeMail von WEB.DE")
    Send("Musterman");; Login-Name
    send("{TAB}")
    send("123456");; Passwort
    send("{enter}")
  • Ja wunderbar haut hin danke für die schnelle antwort.

    schönen tag noch.

    mfg. weedhead

  • Naja ich hab so was hier nochmal gefunden
    Funtzt zwar net aber könnt ihr euch mal angugen ich hab gar keine ahnung davon wen es aber einer schaft das wieder hin zu kreigen wär echt nett vor dem update ging der nämlich noch!

    [autoit]


    HotKeySet("{PAUSE}", "Pause")
    Global $LogIt
    Global $Paused
    Global $FreezeCheck1
    Global $FreezeCheck2
    Global $FreezeCheck3
    $Counter = 1
    $Disconnected = 0
    $Connected = 0
    $Date = @MDAY & "/" & @MON & " " & @HOUR & ":" & @MIN & ":" & @SEC & " > "
    $StartFrom = IniRead ("SRO_restart.ini", "Settings", "Start_From", "")
    $UseFreezeCheck = IniRead ("SRO_restart.ini", "Settings", "Silkroad_FreezeCheck", "")
    $SROPath = IniRead ("SRO_restart.ini", "Settings", "Silkroad_Path", "")
    $SROLExe = IniRead ("SRO_restart.ini", "Settings", "Silkroad_LExe", "")
    $SROExe = IniRead ("SRO_restart.ini", "Settings", "Silkroad_Exe", "")
    $SROLauncher = IniRead ("SRO_restart.ini", "Settings", "Silkroad_Launcher", "")
    $SROClient = IniRead ("SRO_restart.ini", "Settings", "Silkroad_Client", "")
    $Account = IniRead ("SRO_restart.ini", "Login", "Login_Account", "")
    $Password = IniRead ("SRO_restart.ini", "Login", "Login_Password", "")
    $CharPos = IniRead ("SRO_restart.ini", "Login", "Login_Character_Pos", "")
    $LDelay = IniRead ("SRO_restart.ini", "Delays", "Delay_Launcher", "")
    $CDelay = IniRead ("SRO_restart.ini", "Delays", "Delay_Client", "")
    $ADelay = IniRead ("SRO_restart.ini", "Delays", "Delay_Account", "")
    $PDelay = IniRead ("SRO_restart.ini", "Delays", "Delay_Password", "")
    $RDelay = IniRead ("SRO_restart.ini", "Delays", "Delay_Restart", "")
    $SDelay = IniRead ("SRO_restart.ini", "Delays", "Delay_Server", "")
    $GDelay = IniRead ("SRO_restart.ini", "Delays", "Delay_2InGame", "")

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

    ;===========================================================================
    ; Haupt
    ;===========================================================================
    FileDelete ("SRO_restart.log.txt")
    SetLog("")
    SetLog("========================================")
    SetLog("julmuri's srobot restart script launched.")
    SetLog("========================================")
    SetLog("")
    If $StartFrom = 1 Then
    While 1
    Do
    Disconnect()
    Until $Disconnected = 1
    Do
    Connect()
    Until $Connected = 1
    CharSelect()
    StartBot()
    Wend
    ElseIf $StartFrom = 2 Then
    While 1
    Do
    If $Counter = 1 Then
    Connect()
    ElseIf $Disconnected = 1 Then
    Connect()
    EndIf
    Until $Connected = 1
    CharSelect()
    StartBot()
    Do
    Disconnect()
    Until $Disconnected = 1
    Wend
    EndIf
    ;===========================================================================
    ; Funcs
    ;===========================================================================
    Func Disconnect()
    If PixelGetColor (403, 328) = 0x181818 AND PixelGetColor (592, 327) = 0x181818 Then
    $Disconnected = 1
    SetLog("Disconnected from the server.")
    Sleep (5000)
    MouseClick ("Left", 505, 420, 1, 0)
    Do
    Sleep ($RDelay)
    Until WinExists ($SROClient) = 0
    Else
    $Disconnected = 0
    EndIf
    If $UseFreezeCheck = 1 Then
    If $Counter = 1 Then
    $FreezeCheck1 = PixelChecksum (270, 140, 300, 170)
    EndIf
    If $Counter = 10 Then
    $FreezeCheck2 = PixelChecksum (270, 140, 300, 170)
    EndIf
    If $Counter = 50 Then
    $FreezeCheck3 = PixelChecksum (270, 140, 300, 170)
    EndIf
    If $FreezeCheck1 = $FreezeCheck2 = $FreezeCheck3 Then
    $Disconnected = 1
    $Counter = 1
    ProcessClose ($SROExe)
    SetLog("Silkroad seems to be frozen, restarting.")
    Do
    Sleep ($RDelay)
    Until WinExists ($SROClient) = 0
    EndIf
    If $FreezeCheck2 <> $FreezeCheck3 AND $Counter > 50 Then
    $Counter = 0
    EndIf
    EndIf
    $Counter = $Counter + 1
    EndFunc ; => Disconnect()

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

    Func Connect()
    $Disconnected = 0
    Run ($SROPath & "\" & $SROLExe)
    SetLog("Launching Silkroad online.")
    Do
    Sleep(1000)
    SetLog("Waiting Silkroad launcher.")
    If WinExists ("Silkroad Online", "OK") = 1 Then
    SetLog("Server is undergoing inspection.")
    ControlClick ( "Silkroad Online", "OK", 2)
    WinWait ($SROLauncher)
    ControlClick ($SROLauncher, "", 1002)
    SetLog("Sleeping server delay.")
    Sleep($SDelay * 60 * 60)
    SetLog("Server delay slept (" & $SDelay / 60 / 60 & " min.), reconnecting.")
    EndIf
    Until WinActive ($SROLauncher)
    SetLog("Silkroad launcher found.")
    SetLog("Sleeping launcher delay.")
    Sleep ($LDelay)
    SetLog("Launcher delay slept (" & $LDelay & " ms.)")
    ControlClick ($SROLauncher, "", 1000)
    SetLog("Waiting Silkroad client.")
    WinWait ($SROClient)
    SetLog("Silkroad client found.")
    SetLog("Sleeping client delay.")
    Sleep ($CDelay)
    SetLog("Client delay slept (" & $CDelay & " ms.)")
    MouseClick ("Left", 400, 300, 1, 0)
    Sleep (1000)
    MouseClick ("Left", 542, 435, 1, 0)
    Sleep (1000)
    SetLog("Sending account information.")
    Send ($Account)
    SetLog("Sleeping account delay.")
    Sleep ($ADelay)
    SetLog("Account delay slept (" & $ADelay & " ms.)")
    Send ("{TAB}")
    SetLog("Sending password information.")
    Send ($Password)
    SetLog("Sleeping password delay.")
    Sleep ($PDelay)
    SetLog("Password delay slept (" & $PDelay & " ms.)")
    MouseClick ("Left", 460, 560, 1, 0)
    If PixelGetCOlor (626, 334) = 0 Then
    SetLog("Trying to log in.")
    Do
    If PixelGetCOlor (626, 334) = 0 Then
    Sleep (5000)
    Send ("{Enter}")
    EndIf
    Until PixelGetCOlor (626, 334) <> 0
    Sleep (2000)
    Send ("{Enter}")
    Sleep ($RDelay)
    If WinExists ($SROClient) = 1 Then
    SetLog("Connected to the server.")
    $Connected = 1
    Else
    SetLog("Disconnected from the server, restarting.")
    $Connected = 0
    EndIf
    EndIf
    EndFunc ; => Connect()

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

    Func CharSelect()
    $Connected = 0
    SetLog("Choosing character.")
    Select
    Case $CharPos = 1
    MouseClick ("Left", 330, 373, 1, 0)
    SetLog("Char 1 selected.")
    Sleep (5000)
    MouseClick ("Left", 763, 704, 1, 0)

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

    Case $CharPos = 2
    MouseClick ("Left", 523, 381, 1, 0)
    SetLog("Char 2 selected.")
    Sleep (5000)
    MouseClick ("Left", 763, 704, 1, 0)

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

    Case $CharPos = 3
    MouseClick ("Left", 712, 372, 1, 0)
    SetLog("Char 3 selected.")
    Sleep (5000)
    MouseClick ("Left", 763, 704, 1, 0)
    EndSelect
    SetLog("Waiting to get ingame.")
    SetLog("Sleeping ingame delay")
    Sleep ($GDelay)
    SetLog("Ingame delay slept (" & $GDelay & " ms.)")
    EndFunc ; => CharSelect()

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

    Func StartBot()
    Sleep(5000)
    SetLog("Restarting bot.")
    Send("{INSERT}")
    SetLog("Bot restarted.")
    SetLog("========================================")
    SetLog("========================================")
    SetLog("")
    EndFunc ; => StartBot()

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

    Func SetLog($LogIt)
    $Log = FileOpen("SRO_restart.log.txt", 1)
    FileWrite ($Log, $Date & $LogIt & @CRLF)
    FileClose ($Log)
    EndFunc ; => SetLog($LogIt)

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

    Func Pause()
    $Paused = NOT $Paused
    While $Paused
    Sleep (100)
    ToolTip('"Restart script paused"',0,0)
    WEnd
    ToolTip("")
    EndFunc

    [/autoit]
  • das kriegt man nicht mehr hin das es geht, der gameguard (oder auch "hackshield" blockt das... dafür müsstest den umgehen, das ist wiederrum total aufwändig, verboten und gefährlich