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
#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)
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)
$Dstatus = GUICtrlCreateLabel("", 10, 60, 280, 20)
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
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
_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
_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"
EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If $instart = 7 Then
If FileExists($Settingsdir) = 0 Then
DirCreate($Settingsdir)
EndIf
If FileExists($Settingsdir & "\GameSettings.ini") Then
$verzeichniss = IniRead($Settingsdir & "\GameSettings.ini", "Install", "GamePath", "")
If $verzeichniss = "" Then
$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
$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
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
$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
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)
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)
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
$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
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
Func _Exit()
Exit
EndFunc ;==>_Exit
Zum ausführen werden noch zwei UDF benötigt dir hier im Anhang sind.