Runes of Magic Patcher

  • Hi,

    da es nicht nur mir so ging das nach dem Kauf der Box-Version das patchen per Launcher fast unmöglich war das entweder immer wieder die Frage nach dem Extract-Pfad kahm (durch Sticky dann gelöst) oder schlicht ein MD5 fehler kahm der ganze Launcher abgestürtzt ist habe ich nun einen eigenen geschrieben.

    Das einzige was sonst noch benötigt wird ist die md5_patches.txt aus diesem Thread: https://forum.runesofmagic.com/showpost.php?p=2979511&postcount=2

    Funktion des Patchers:

    - Auswahl zwischen nur download oder auch gleich Installation
    - Läd bereits vorhandene Patchdateien im Patchordner nicht neu herrunter außer wenn dieser der Hashprüfung nicht standhalten.
    - Prüft Dateien nach dem Download auf Hashfehler und läd die im Bedarfsfall noch einmal neu herrunter (nicht wie der Launcher der schlicht abbricht)
    - Prüft ob die GameSettings.ini existiert und auch der Pfad dort gesetzt ist. Erstellte diese bei Bedarf selbstständig.
    - Erkennt selbstständig die aktuelle Installierte Version von RoM und läd nur noch benötigte Patches herrunter (Wenn RoM nicht installiert ist kann man angeben ab welcher Version die Patches geladen werden sollen)
    - Anzeige wieviel Patches noch zu laden sind
    - Anzeige wieviel Byte der Patch hat und wieviel schon herruntergeladen ist
    - Unterstützt Viste (x86/x64) und Win 7 (x86/x64)

    Update (13.02.2010):

    - klassiches Design
    - Progessbar mit Prozentanzeige eingefügt
    - Größeneinheiten auf MB geändert
    - Bugfix Größe geändert um Patchnamen ganz anzuzeigen

    Update 2 (13.02.2010):

    -Jetzte ist nur noch die Progress in dem Old-Style ( Sprenger120)
    - Skript lässt sich jetze beim MD5 Textdokument wählen abbrechen ( Sprenger120)
    - Bugfix: Wenn Client auf aktuellem Stand war, wurden alle Patches von Beginn an herruntergeladen. Nun kommt eine Meldung und das Tool beendet sich.

    Update 3 (13.02.2010):

    - Skript lässt sich jetzt bei allen Dialogen beenden ( Sprenger120)
    - Jetzt Win XP (x64/x86) kompatiebel

    Der Patcher erstellt im selben Verzeichniss einen Ordner "Patches" in dem alle Patches gespeichert sind. Wenn man nun die Patches auch noch auf einem anderen Rechner installieren möchte, einfach den Ordner "Patches" und den Patcher auf diesen Rechner kopierne und den Patcher starten. Es wird erkannst das die Patches bereits vorhanden sind und direkt installiert.

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <_ArrayNaturalSort.au3>
    #include <Array.au3>
    #include <Crypt.au3>
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### F
    $Form1 = GUICreate("RoM Patcher", 300, 80, -1, -1)
    GUISetOnEvent(-3, "_Exit")
    $Dname = GUICtrlCreateLabel("", 10, 10, 280, 20)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0)
    $Dprogress = GUICtrlCreateProgress(10, 35, 280, 20)
    GUICtrlSetColor(-1, 0x22FF22)
    GUICtrlSetBkColor(-1, 0xEEEEEE)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7)
    $Dprozent = GUICtrlCreateLabel('0%', 138, 39, 50, 14, $SS_CENTER)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $Dstatus = GUICtrlCreateLabel("", 10, 60, 280, 20)

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

    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

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

    Dim $MD5

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

    $instart = MsgBox(36, "RoM Patcher", "Patches nur herrunterladen? OHNE Installation?")

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

    $MD5File = FileOpenDialog("MD5 Datei wählen", @DesktopDir, "Textdateien (*.txt)")
    If @error Then Exit
    If Not FileExists($MD5File) Then Exit

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

    _FileReadToArray($MD5File, $MD5)

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

    Dim $patchsort[UBound($MD5)][2]

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

    For $i = 1 To $MD5[0]
    $tmp = StringSplit($MD5[$i], " ")
    If UBound($tmp) = 3 Then
    $patchsort[$i][0] = $tmp[1]
    $patchsort[$i][1] = $tmp[2]
    EndIf
    Next

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

    _ArrayNaturalSort($patchsort, 0, 0, 0, 1)

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

    If @OSVersion = "WIN_XP" Then
    $Settingsdir = @UserProfileDir & "\Eigene Dateien\Runes of Magic"
    Else
    $Settingsdir = @UserProfileDir & "\Documents\Runes of Magic"

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

    EndIf

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

    If $instart = 7 Then
    If FileExists($Settingsdir) = 0 Then
    DirCreate($Settingsdir)
    EndIf

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

    If FileExists($Settingsdir & "\GameSettings.ini") Then
    $verzeichniss = IniRead($Settingsdir & "\GameSettings.ini", "Install", "GamePath", "")
    If $verzeichniss = "" Then

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

    $verzeichniss = FileSelectFolder("Runes of Magic Installationsverzeichnis wählen", "")
    If @error Then Exit
    If Not FileExists($verzeichniss) Then Exit
    IniWrite($Settingsdir & "\GameSettings.ini", "Install", "GamePath", $verzeichniss)
    EndIf
    Else

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

    $verzeichniss = FileSelectFolder("Runes of Magic Installationsverzeichnis wählen", "")
    If @error Then Exit
    If Not FileExists($verzeichniss) Then Exit
    IniWrite($Settingsdir & "\GameSettings.ini", "Install", "GamePath", $verzeichniss)
    EndIf

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

    If FileExists($verzeichniss & "\Client.exe.ini") Then
    $Major = IniRead($verzeichniss & "\Client.exe.ini", "Version", "Major", "")
    $Minor = IniRead($verzeichniss & "\Client.exe.ini", "Version", "Minor", "")
    $BuildNum = IniRead($verzeichniss & "\Client.exe.ini", "Version", "BuildNum", "")
    $Extend = IniRead($verzeichniss & "\Client.exe.ini", "Version", "Extend", "")
    $Patchaktuell = $Major & "." & $Minor & "." & $BuildNum & "." & $Extend
    Else
    $Patchaktuell = InputBox("Aktuelle Version", "Was ist die aktuelle Version deines Clients?" & @CRLF & @CRLF & "z.B. 2.0.0.1796")
    EndIf
    Else
    $Patchaktuell = InputBox("Ab welcher Version", "Ab welche Version sollen die Patches herruntergeladen werden?" & @CRLF & @CRLF & "z.B. 2.0.0.1796")
    EndIf

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

    $Patchaktuellindex = _ArraySearch($patchsort, "*patch_" & $Patchaktuell, 0, 0, 0, 1, 1, 1) - 1

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

    While $Patchaktuellindex > 0
    _ArrayDelete($patchsort, $Patchaktuellindex)
    $Patchaktuellindex = $Patchaktuellindex - 1
    WEnd

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

    DirCreate(@ScriptDir & "\Patches")

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

    For $i = 1 To UBound($patchsort) - 1
    $dateiname = StringTrimLeft($patchsort[$i][1], 1)
    GUICtrlSetData($Dname, $i & "/" & UBound($patchsort) - 1 & ": " & $dateiname)

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

    Do
    $z = 0
    If FileExists(@ScriptDir & "\Patches\" & $dateiname) Then
    GUISetState(@SW_SHOW)
    GUICtrlSetData($Dstatus, "Patch gefunden")
    Else
    $Download = InetGet("http://frogster.vo.llnwd.net/o9/patch/en/" & $dateiname, @ScriptDir & "\Patches\" & $dateiname, 1, 1)

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

    GUISetState(@SW_SHOW)
    Do
    $proprozent = Round((InetGetInfo($Download, 1) / 100), 2)
    $prozentaktuell = Round((InetGetInfo($Download, 0) / $proprozent), 2)
    $prozentaktuell = StringFormat("%.2f", $prozentaktuell)
    GUICtrlSetData($Dprogress, $prozentaktuell)
    GUICtrlSetData($Dprozent, $prozentaktuell & "%")
    $MB = Round(((InetGetInfo($Download, 1) / 1024) / 1024), 1)
    $MBdown = Round(((InetGetInfo($Download, 0) / 1024) / 1024), 1)
    GUICtrlSetData($Dstatus, $MBdown & " MB" & " / " & $MB & " MB")
    Sleep(250)
    Until InetGetInfo($Download, 2)
    EndIf

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

    $Dhash = StringTrimLeft(_Crypt_HashFile(@ScriptDir & "\Patches\" & $dateiname, $CALG_MD5), 2)
    If $Dhash <> $patchsort[$i][0] Then
    FileDelete(@ScriptDir & "\Patches\" & $dateiname)
    $z = 1
    Else
    If $instart = 7 Then
    GUICtrlSetData($Dstatus, "Installiere Patch...")
    Run(@ScriptDir & "\Patches\" & $dateiname)
    WinWait("RomUpdate")
    WinWaitClose("RomUpdate")
    EndIf
    EndIf
    Until $z = 0
    Next

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

    If $instart = 7 Then
    MsgBox(64, "RoM Patcher", "Patches wurden herruntergeladen und installiert.")
    Else
    MsgBox(64, "RoM Patcher", "Patches wurden herruntergeladen.")
    Run("C:\WINDOWS\explorer.exe /root, " & @ScriptDir & "\Patches\")
    EndIf

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    Zum ausführen werden noch zwei UDF benötigt dir hier im Anhang sind.

  • Rückmeldung:

    Bei mir kommt folgender Fehler:

    Spoiler anzeigen
    [autoit]


    ERROR: _ArrayNaturalSort(): undefined function.
    _ArrayNaturalSort($patchsort, 0, 0, 0, 1)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    test.au3 - 1 error(s), 0 warning(s)

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Dann Fehlern dir noch zwei UDF. Hab sie mal im Startpost angehängt.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag

    Schick schick. Erspart mir viel Arbeit nach der Neuinstallation meines Rechners.
    Vor allem, da man die schon geladenen Updates einfach mit ins Patches Verzeichnis legt und die werden erkannt. Da hat mal wirklich jemand mitgedacht, was das an geht.

    Allerdings hab ich da noch nen Bug und das Patchlog sieht, na sagen wir mal, etwas komisch aus.

    Spoiler anzeigen
  • Ah ok da muss das Fenster bisschen größer gemacht werden.

    Das Patchlog ist normal, die letzten drei Patches erzeugen diesen Patchlog, nicht das Tool. Warum das so ist konnte mir aber auch keiner von Frogstar sagen *lach*.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Update:

    - klassiches Design
    - Progessbar mit Prozentanzeige eingefügt
    - Größeneinheiten auf MB geändert
    - Bugfix Größe geändert um Patchnamen ganz anzuzeigen

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hab es mal noch ein bisschen umgebaut

    -Jetzte ist nur noch die Progress in dem Old-Style
    -Skript lässt sich jetze beim MD5 Textdokument wählen abbrechen


    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <_ArrayNaturalSort.au3>
    #include <Array.au3>
    #include <Crypt.au3>
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>

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

    #Region ### START Koda GUI section ### F
    $Form1 = GUICreate("RoM Patcher", 300, 80, -1, -1)
    $Dname = GUICtrlCreateLabel("", 10, 10, 280, 20)

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

    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0)
    $Dprogress = GUICtrlCreateProgress(10, 35, 280, 20)
    GUICtrlSetColor(-1, 0x22FF22)
    GUICtrlSetBkColor(-1, 0xEEEEEE)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7)
    $Dprozent = GUICtrlCreateLabel('0%', 138, 39, 50, 14, $SS_CENTER)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $Dstatus = GUICtrlCreateLabel("", 10, 60, 280, 20)

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

    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

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

    Dim $MD5

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

    $instart = MsgBox(36, "RoM Patcher", "Patches nur herrunterladen? OHNE Installation?")

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

    $MD5File = FileOpenDialog("MD5 Datei wählen", @DesktopDir, "Textdateien (*.txt)")
    If @error Then Exit
    if Not FileExists($MD5File) Then Exit

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

    _FileReadToArray($MD5File, $MD5)

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

    Dim $patchsort[UBound($MD5)][2]

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

    For $i = 1 To $MD5[0]
    $tmp = StringSplit($MD5[$i], " ")
    If UBound($tmp) = 3 Then
    $patchsort[$i][0] = $tmp[1]
    $patchsort[$i][1] = $tmp[2]
    EndIf
    Next

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

    _ArrayNaturalSort($patchsort, 0, 0, 0, 1)

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

    If $instart = 7 Then
    If FileExists(@UserProfileDir & "\Documents\Runes of Magic") = 0 Then
    DirCreate(@UserProfileDir & "\Documents\Runes of Magic")
    EndIf

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

    If FileExists(@UserProfileDir & "\Documents\Runes of Magic\GameSettings.ini") Then
    $verzeichniss = IniRead(@UserProfileDir & "\Documents\Runes of Magic\GameSettings.ini", "Install", "GamePath", "")
    If $verzeichniss = "" Then
    Do
    $verzeichniss = FileSelectFolder("Runes of Magic Installationsverzeichnis wählen", "")
    Until @error = 0
    IniWrite(@UserProfileDir & "\Documents\Runes of Magic\GameSettings.ini", "Install", "GamePath", $verzeichniss)
    EndIf
    Else
    Do
    $verzeichniss = FileSelectFolder("Runes of Magic Installationsverzeichnis wählen", "")
    Until @error = 0
    IniWrite(@UserProfileDir & "\Documents\Runes of Magic\GameSettings.ini", "Install", "GamePath", $verzeichniss)
    EndIf

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

    If FileExists($verzeichniss & "\Client.exe.ini") Then
    $Major = IniRead($verzeichniss & "\Client.exe.ini", "Version", "Major", "")
    $Minor = IniRead($verzeichniss & "\Client.exe.ini", "Version", "Minor", "")
    $BuildNum = IniRead($verzeichniss & "\Client.exe.ini", "Version", "BuildNum", "")
    $Extend = IniRead($verzeichniss & "\Client.exe.ini", "Version", "Extend", "")
    $Patchaktuell = $Major & "." & $Minor & "." & $BuildNum & "." & $Extend
    Else
    $Patchaktuell = InputBox("Aktuelle Version", "Was ist die aktuelle Version deines Clients?" & @CRLF & @CRLF & "z.B. 2.0.0.1796")
    EndIf
    Else
    $Patchaktuell = InputBox("Ab welcher Version", "Ab welche Version sollen die Patches herruntergeladen werden?" & @CRLF & @CRLF & "z.B. 2.0.0.1796")
    EndIf

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

    $Patchaktuellindex = _ArraySearch($patchsort, "*patch_" & $Patchaktuell, 0, 0, 0, 1, 1, 1) - 1

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

    While $Patchaktuellindex > 0
    _ArrayDelete($patchsort, $Patchaktuellindex)
    $Patchaktuellindex = $Patchaktuellindex - 1
    WEnd

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

    DirCreate(@ScriptDir & "\Patches")

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

    For $i = 1 To UBound($patchsort) - 1
    $dateiname = StringTrimLeft($patchsort[$i][1], 1)
    GUICtrlSetData($Dname, $i & "/" & UBound($patchsort) - 1 & ": " & $dateiname)

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

    Do
    $z = 0
    If FileExists(@ScriptDir & "\Patches\" & $dateiname) Then
    GUISetState(@SW_SHOW)
    GUICtrlSetData($Dstatus, "Patch gefunden")
    Else
    $Download = InetGet("http://frogster.vo.llnwd.net/o9/patch/en/" & $dateiname, @ScriptDir & "\Patches\" & $dateiname, 1, 1)

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

    GUISetState(@SW_SHOW)
    Do
    If GUIGetMsg() = $GUI_EVENT_CLOSE Then
    Exit
    EndIf

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

    $proprozent = Round((InetGetInfo($Download, 1) / 100), 2)
    $prozentaktuell = Round((InetGetInfo($Download, 0) / $proprozent), 2)
    $prozentaktuell = StringFormat("%.2f", $prozentaktuell)
    GUICtrlSetData($Dprogress, $prozentaktuell)
    GUICtrlSetData($Dprozent, $prozentaktuell & "%")
    $MB = Round(((InetGetInfo($Download, 1) / 1024) / 1024), 1)
    $MBdown = Round(((InetGetInfo($Download, 0) / 1024) / 1024), 1)
    GUICtrlSetData($Dstatus, $MBdown & " MB" & " / " & $MB & " MB")
    Sleep(250)
    Until InetGetInfo($Download, 2)
    EndIf

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

    $Dhash = StringTrimLeft(_Crypt_HashFile(@ScriptDir & "\Patches\" & $dateiname, $CALG_MD5), 2)
    If $Dhash <> $patchsort[$i][0] Then
    FileDelete(@ScriptDir & "\Patches\" & $dateiname)
    $z = 1
    Else
    If $instart = 7 Then
    GUICtrlSetData($Dstatus, "Installiere Patch...")
    Run(@ScriptDir & "\Patches\" & $dateiname)
    WinWait("RomUpdate")
    WinWaitClose("RomUpdate")
    EndIf
    EndIf
    Until $z = 0
    Next

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

    If $instart = 7 Then
    MsgBox(64, "RoM Patcher", "Patches wurden herruntergeladen und installiert.")
    Else
    MsgBox(64, "RoM Patcher", "Patches wurden herruntergeladen.")
    Run("C:\WINDOWS\explorer.exe /root, " & @ScriptDir & "\Patches\")
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Sprenger120 gute Idee :)

    Update:

    - Bugfix: Wenn Client auf aktuellem stand war wurden alle Patches von Beginn an herruntergeladen. Nun kommt eine Meldung und das Tool beendet sich.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Habe noch mal ein paar Sachen in Script geändert

    -Läuft jetze im Onevent
    -Skript lässt sich jetze bei allen Dialogen beenden

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <_ArrayNaturalSort.au3>
    #include <Array.au3>
    #include <Crypt.au3>
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode",1)
    #Region ### START Koda GUI section ### F
    $Form1 = GUICreate("RoM Patcher", 300, 80, -1, -1)
    GUISetOnEvent(-3,"_Exit")
    $Dname = GUICtrlCreateLabel("", 10, 10, 280, 20)

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

    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0)
    $Dprogress = GUICtrlCreateProgress(10, 35, 280, 20)
    GUICtrlSetColor(-1, 0x22FF22)
    GUICtrlSetBkColor(-1, 0xEEEEEE)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7)
    $Dprozent = GUICtrlCreateLabel('0%', 138, 39, 50, 14, $SS_CENTER)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $Dstatus = GUICtrlCreateLabel("", 10, 60, 280, 20)

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

    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

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

    Dim $MD5

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

    $instart = MsgBox(36, "RoM Patcher", "Patches nur herrunterladen? OHNE Installation?")

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

    $MD5File = FileOpenDialog("MD5 Datei wählen", @DesktopDir, "Textdateien (*.txt)")
    If @error Then Exit
    if Not FileExists($MD5File) Then Exit

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

    _FileReadToArray($MD5File, $MD5)

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

    Dim $patchsort[UBound($MD5)][2]

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

    For $i = 1 To $MD5[0]
    $tmp = StringSplit($MD5[$i], " ")
    If UBound($tmp) = 3 Then
    $patchsort[$i][0] = $tmp[1]
    $patchsort[$i][1] = $tmp[2]
    EndIf
    Next

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

    _ArrayNaturalSort($patchsort, 0, 0, 0, 1)

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

    If $instart = 7 Then
    If FileExists(@UserProfileDir & "\Documents\Runes of Magic") = 0 Then
    DirCreate(@UserProfileDir & "\Documents\Runes of Magic")
    EndIf

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

    If FileExists(@UserProfileDir & "\Documents\Runes of Magic\GameSettings.ini") Then
    $verzeichniss = IniRead(@UserProfileDir & "\Documents\Runes of Magic\GameSettings.ini", "Install", "GamePath", "")
    If $verzeichniss = "" Then

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

    $verzeichniss = FileSelectFolder("Runes of Magic Installationsverzeichnis wählen", "")
    If @error Then Exit
    If Not FileExists($verzeichniss) Then Exit
    IniWrite(@UserProfileDir & "\Documents\Runes of Magic\GameSettings.ini", "Install", "GamePath", $verzeichniss)
    EndIf
    Else

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

    $verzeichniss = FileSelectFolder("Runes of Magic Installationsverzeichnis wählen", "")
    If @error Then Exit
    If Not FileExists($verzeichniss) Then Exit
    IniWrite(@UserProfileDir & "\Documents\Runes of Magic\GameSettings.ini", "Install", "GamePath", $verzeichniss)
    EndIf

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

    If FileExists($verzeichniss & "\Client.exe.ini") Then
    $Major = IniRead($verzeichniss & "\Client.exe.ini", "Version", "Major", "")
    $Minor = IniRead($verzeichniss & "\Client.exe.ini", "Version", "Minor", "")
    $BuildNum = IniRead($verzeichniss & "\Client.exe.ini", "Version", "BuildNum", "")
    $Extend = IniRead($verzeichniss & "\Client.exe.ini", "Version", "Extend", "")
    $Patchaktuell = $Major & "." & $Minor & "." & $BuildNum & "." & $Extend
    Else
    $Patchaktuell = InputBox("Aktuelle Version", "Was ist die aktuelle Version deines Clients?" & @CRLF & @CRLF & "z.B. 2.0.0.1796")
    EndIf
    Else
    $Patchaktuell = InputBox("Ab welcher Version", "Ab welche Version sollen die Patches herruntergeladen werden?" & @CRLF & @CRLF & "z.B. 2.0.0.1796")
    EndIf

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

    $Patchaktuellindex = _ArraySearch($patchsort, "*patch_" & $Patchaktuell, 0, 0, 0, 1, 1, 1) - 1

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

    While $Patchaktuellindex > 0
    _ArrayDelete($patchsort, $Patchaktuellindex)
    $Patchaktuellindex = $Patchaktuellindex - 1
    WEnd

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

    DirCreate(@ScriptDir & "\Patches")

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

    For $i = 1 To UBound($patchsort) - 1
    $dateiname = StringTrimLeft($patchsort[$i][1], 1)
    GUICtrlSetData($Dname, $i & "/" & UBound($patchsort) - 1 & ": " & $dateiname)

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

    Do
    $z = 0
    If FileExists(@ScriptDir & "\Patches\" & $dateiname) Then
    GUISetState(@SW_SHOW)
    GUICtrlSetData($Dstatus, "Patch gefunden")
    Else
    $Download = InetGet("http://frogster.vo.llnwd.net/o9/patch/en/" & $dateiname, @ScriptDir & "\Patches\" & $dateiname, 1, 1)

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

    GUISetState(@SW_SHOW)
    Do
    $proprozent = Round((InetGetInfo($Download, 1) / 100), 2)
    $prozentaktuell = Round((InetGetInfo($Download, 0) / $proprozent), 2)
    $prozentaktuell = StringFormat("%.2f", $prozentaktuell)
    GUICtrlSetData($Dprogress, $prozentaktuell)
    GUICtrlSetData($Dprozent, $prozentaktuell & "%")
    $MB = Round(((InetGetInfo($Download, 1) / 1024) / 1024), 1)
    $MBdown = Round(((InetGetInfo($Download, 0) / 1024) / 1024), 1)
    GUICtrlSetData($Dstatus, $MBdown & " MB" & " / " & $MB & " MB")
    Sleep(250)
    Until InetGetInfo($Download, 2)
    EndIf

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

    $Dhash = StringTrimLeft(_Crypt_HashFile(@ScriptDir & "\Patches\" & $dateiname, $CALG_MD5), 2)
    If $Dhash <> $patchsort[$i][0] Then
    FileDelete(@ScriptDir & "\Patches\" & $dateiname)
    $z = 1
    Else
    If $instart = 7 Then
    GUICtrlSetData($Dstatus, "Installiere Patch...")
    Run(@ScriptDir & "\Patches\" & $dateiname)
    WinWait("RomUpdate")
    WinWaitClose("RomUpdate")
    EndIf
    EndIf
    Until $z = 0
    Next

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

    If $instart = 7 Then
    MsgBox(64, "RoM Patcher", "Patches wurden herruntergeladen und installiert.")
    Else
    MsgBox(64, "RoM Patcher", "Patches wurden herruntergeladen.")
    Run("C:\WINDOWS\explorer.exe /root, " & @ScriptDir & "\Patches\")
    EndIf

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

    Func _Exit()
    Exit
    EndFunc

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