Dann Fehlern dir noch zwei UDF. Hab sie mal im Startpost angehängt.
Beiträge von chip
-
-
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 anzuzeigenUpdate 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) kompatiebelDer 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>
[/autoit] [autoit][/autoit] [autoit]
#include <_ArrayNaturalSort.au3>
#include <Array.au3>
#include <Crypt.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]
#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)
[/autoit] [autoit][/autoit] [autoit]
#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)")
[/autoit] [autoit][/autoit] [autoit]
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]
[/autoit] [autoit][/autoit] [autoit]
$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
[/autoit] [autoit][/autoit] [autoit]
$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
[/autoit] [autoit][/autoit] [autoit]
If FileExists($Settingsdir) = 0 Then
DirCreate($Settingsdir)
EndIfIf FileExists($Settingsdir & "\GameSettings.ini") Then
[/autoit] [autoit][/autoit] [autoit]
$verzeichniss = IniRead($Settingsdir & "\GameSettings.ini", "Install", "GamePath", "")
If $verzeichniss = "" Then$verzeichniss = FileSelectFolder("Runes of Magic Installationsverzeichnis wählen", "")
[/autoit] [autoit][/autoit] [autoit]
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", "")
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit
If Not FileExists($verzeichniss) Then Exit
IniWrite($Settingsdir & "\GameSettings.ini", "Install", "GamePath", $verzeichniss)
EndIfIf FileExists($verzeichniss & "\Client.exe.ini") Then
[/autoit] [autoit][/autoit] [autoit]
$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
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_ArrayDelete($patchsort, $Patchaktuellindex)
$Patchaktuellindex = $Patchaktuellindex - 1
WEndDirCreate(@ScriptDir & "\Patches")
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To UBound($patchsort) - 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$dateiname = StringTrimLeft($patchsort[$i][1], 1)
GUICtrlSetData($Dname, $i & "/" & UBound($patchsort) - 1 & ": " & $dateiname)Do
[/autoit] [autoit][/autoit] [autoit]
$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)
[/autoit] [autoit][/autoit] [autoit]
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)
[/autoit] [autoit][/autoit] [autoit]
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
NextIf $instart = 7 Then
[/autoit] [autoit][/autoit] [autoit]
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\")
EndIfFunc _Exit()
[/autoit]
Exit
EndFunc ;==>_ExitZum ausführen werden noch zwei UDF benötigt dir hier im Anhang sind.
-
Mh ne nicht wirklich weil ich einen mehrdimensionalen Array habe.
-
Prüfung machen auf leere Zeilen weil manchmal in der txt eine leere Zeile am Schluss ist und dann das Scirpt mit Fehler abbricht. Also nichts was direkt jetzt mit deinem Code zu tuen hat.
-
Hi,
ich möchte einen Array sortieren allerdings kommt bei _ArraySort statt:
*patch_2.0.1.1816.en_2.0.1.1817.en.exe
*patch_2.0.1.1817.en_2.0.1.1818.en.exe
*patch_2.0.1.1818.en_2.0.1.1819.en.exe
*patch_2.0.1.1819.en_2.0.1.1820.en.exe
*patch_2.0.1.1820.en_2.0.1.1821.en.exe
*patch_2.0.1.1821.en_2.0.2.1822.en.exe
*patch_2.0.2.1822.en_2.0.2.1823.en.exe
*patch_2.0.2.1823.en_2.0.2.1824.en.exe
*patch_2.0.2.1824.en_2.0.2.1825.en.exe
*patch_2.0.2.1825.en_2.0.4.1827.en.exe
*patch_2.0.4.1827.en_2.0.4.1828.en.exe
*patch_2.0.10.1850.en_2.0.10.1851.en.exe
*patch_2.0.10.1851.en_2.0.10.1852.en.exe
*patch_2.0.10.1852.en_2.0.10.1853.en.exe
*patch_2.0.10.1853.en_2.0.11.1862.en.exe
*patch_2.0.11.1862.en_2.0.11.1872.en.exe
*patch_2.0.11.1872.en_2.0.11.1879.en.exe
*patch_2.0.11.1879.en_2.1.0.1871.en.exekommt das hier raus
*patch_2.0.1.1816.en_2.0.1.1817.en.exe
*patch_2.0.1.1817.en_2.0.1.1818.en.exe
*patch_2.0.1.1818.en_2.0.1.1819.en.exe
*patch_2.0.1.1819.en_2.0.1.1820.en.exe
*patch_2.0.1.1820.en_2.0.1.1821.en.exe
*patch_2.0.1.1821.en_2.0.2.1822.en.exe
*patch_2.0.10.1850.en_2.0.10.1851.en.exe
*patch_2.0.10.1851.en_2.0.10.1852.en.exe
*patch_2.0.10.1852.en_2.0.10.1853.en.exe
*patch_2.0.10.1853.en_2.0.11.1862.en.exe
*patch_2.0.11.1862.en_2.0.11.1872.en.exe
*patch_2.0.11.1872.en_2.0.11.1879.en.exe
*patch_2.0.11.1879.en_2.1.0.1871.en.exe
*patch_2.0.2.1822.en_2.0.2.1823.en.exe
*patch_2.0.2.1823.en_2.0.2.1824.en.exe
*patch_2.0.2.1824.en_2.0.2.1825.en.exe
*patch_2.0.2.1825.en_2.0.4.1827.en.exe
*patch_2.0.4.1827.en_2.0.4.1828.en.exeWas ja auch klar ist weil ein Zeichen nach dem anderen Sortiert wird. Jemand eine Idee wie ich das ganze als sinnige Sortierung hin bekomme?
-
Mit kleiner Änderung gehts nun. Danke.
-
Hi,
ich habe folgende Textdatei:
Code
Alles anzeigenac700ca0cc8af7c1e05180e7ee278d3d *patch_2.0.1.1813.en_2.0.1.1814.en.exe ceb0c91daed44881f9a223f172ceda26 *patch_2.0.1.1814.en_2.0.1.1815.en.exe 5b69fa87774d317cc35327d328db10f6 *patch_2.0.1.1815.en_2.0.1.1816.en.exe 5fa065f5c1aa9c8f366dd7559a11c710 *patch_2.0.1.1816.en_2.0.1.1817.en.exe 0d3bcdf0c4c39d7026f0631395a7528c *patch_2.0.1.1817.en_2.0.1.1818.en.exe bf58cf906aea9c32517ac145b41598e5 *patch_2.0.1.1818.en_2.0.1.1819.en.exe d63f6bb76c991b19fe074e20b991689b *patch_2.0.1.1819.en_2.0.1.1820.en.exe a482716efb31992ad405363b72094e79 *patch_2.0.1.1820.en_2.0.1.1821.en.exe da625124d52fca0b1b68a52f1b5e5f50 *patch_2.0.1.1821.en_2.0.2.1822.en.exe 71cb611f86bd2ff0afaf645e73fd859c *patch_2.0.10.1850.en_2.0.10.1851.en.exe bf9638cff6647b88a0e3fb5804bcbc07 *patch_2.0.10.1851.en_2.0.10.1852.en.exe 03335e7c37518b426a7e78751fbf249e *patch_2.0.10.1852.en_2.0.10.1853.en.exe d8beec98b2eb684f326b70866cda5ae2 *patch_2.0.10.1853.en_2.0.11.1862.en.exe 139fab1070e8191c33dd7a1ca3a746cd *patch_2.0.11.1862.en_2.0.11.1872.en.exe 61be4e617b359ed12e6852f739e81e94 *patch_2.0.11.1872.en_2.0.11.1879.en.exe b08f8e3b9369e728488e5b6351ff8577 *patch_2.0.11.1879.en_2.1.0.1871.en.exe 3d58a9a08cdb08b106e2c2eb0655b564 *patch_2.0.2.1822.en_2.0.2.1823.en.exe f496d7ae5356d488a594aab99906052d *patch_2.0.2.1823.en_2.0.2.1824.en.exe ec58092298dd2c44fd6dc0e50f2968af *patch_2.0.2.1824.en_2.0.2.1825.en.exe 5f257ae4c58687c9e89955f7b5565bea *patch_2.0.2.1825.en_2.0.4.1827.en.exe 2f5559091c2edf460b4edf337cee649e *patch_2.0.4.1827.en_2.0.4.1828.en.exe 3311cd597144a3d39cedc7868d6c3369 *patch_2.0.4.1828.en_2.0.4.1829.en.exe 1cc1ba79544cefca9485b46e3d7fee7e *patch_2.0.4.1829.en_2.0.4.1830.en.exe a3b25e69c6559ba4975b578a12ddd104 *patch_2.0.4.1830.en_2.0.5.1831.en.exe a641d2ca115faa526ab7877161267eab *patch_2.0.5.1831.en_2.0.5.1832.en.exe 953347ecfe40db4c628621e6482ad93c *patch_2.0.5.1832.en_2.0.5.1833.en.exe 0fc4d5673573364aa9e15da9b4d4a8e6 *patch_2.0.5.1833.en_2.0.6.1834.en.exe 2ea224f053534ff75abdc35147ffab07 *patch_2.0.6.1834.en_2.0.6.1835.en.exeDiese lese ich mit _FileReadToArray in einen Array ein. Nun möchte ich aber nach dem Namen Sortierena also "*patch_2.0.4.1830.en_2.0.5.1831.en.exe", um das zu machen habe ich mir nun überlegt das ganze in eine 2-dimensionalen Array zu packen. In die erste Spalte den Hash "a3b25e69c6559ba4975b578a12ddd104" und in die zweite Spalte den Namen "*patch_2.0.4.1830.en_2.0.5.1831.en.exe" und dann nach der zweiten Spalte zu sortieren. Allerdings scheint _ArrayAdd nur bei eindimensionalen Arrays zu funktionieren. Gibt es eine alternative für mehrdimensionale Array?
-
Jab und die zahl jetzt noch weiß.

-
Redaktionsschluss ist der 25.02 :). Am 01.03 kommt dann die erste Augabe wenn alles planmäßig läuft.
@Jautois Cover 2 und Seite 1 finde ich persönlich am besten. Versuch doch mal bei Seite 1 das graue in schwarz zu machen wie das dann aussieht.
Würd ich super finden
Wäre vlt. cool eine ISO bzw. Archiv Datei dazu mit den Skripten...freu mich schon auf die erste Ausgabe
Denke ist sinnvoller zum Thread des Scriptes hier im Forum zu verweisen, da dort man direkt die neueste Version findet und auch evtl. Support bekommt wenn man braucht.
-
Hab gedacht das man auf das Deckplatt noch kurz Vorschau auf den Inhal macht.
-
Mir ist grade noch etwas weiteres aufgefallen. Wenn man _FFClick ausführt muss man danach auch wieder _FFConnect machen damit _FFXPath wieder geht.
Edit:
[autoit]
Habe das Problem nun für mich zumindestens voerst behoben. In der FF.au3 bei der Funktion _FFLoadWait nach:ConsoleWrite(" loaded in " & $iLoadingTime & "ms" & @CRLF)
[/autoit]
Sleep($_FF_CON_DELAY * 1.4)
$_FF_COM_TRACE = $bTraceDas einfügen:
[autoit]_FFConnect()
[/autoit]bewirkt nichts anderes als das nach einem _FFClick, _FFStart ect. bei der ja _FFLoadWait aufgerufen wird gleich wieder _FFConnect gemacht wird. Zwar nicht schön aber funktionsfähig.
-
Hi,
ich kann mit XPath mein gesuchtes Objekt nicht genau eingrenzen da es keine eindeutige ID besitzt.Ich bekomme also zwei Ergebniss von _FFXPath zurück. Wie kann ich nun den Wert des zweiten Ergebnisses bekommen. Scheint ja nicht als Array gespeichert zu werden.
-
Dazu sollte man noch sagen das wenn man vor _FFXPath nochmal _FFConnect ausführt, auch wenn vorher _FFStart war, es dann wieder funktioniert. Also sehr seltsam das ganze.
-
Gefällt mir sehr gut :). Nur was heißt das unter dem AutMag? Kann ich leider nicht lesen.
-
Würde mich jedenfalls bereit erklären dort erläuternd etwas beizusteuern, falls etwas von mir mal auftaucht.

Das war nun ein Fehler da ich gestern schon was von dir gefunden habe, das als Userscritp in die erste Ausgabe kommt :). Hast PN.
-
Oha dachte nicht das sich doch so viele zum Helfen bereit erklären :). An alle die Helfen wollen schreibt mir einfach mal per PN oder hier im Thread für welche Kategorie ihr für die erste Ausgabe was machen würdet. Da es wie gesagt ein Maganzin und KEIN Buch sein soll soll auch in jeder der Kategorien jeweils nur ein Artikel sein. Also eine UDF, eine Funktion/Funktionsset, ein Userscript und ein Praxisbeispiel. Halt dann bisschen ausführlicher beschrieben dann die einzelnen Sachen :).
-
Nein, warum?chip:
Dein HTML-Code enthält auch kein value-Attribut.
_FFSetValue und _FFGetValue sind nur für Inputs und Textareas interessant.In Deinem Fall ist es aber nur ein Text innerhalb von einem Span:
[autoit]$sNews = _FFXpath("//span[@id='newsnumber']")
[/autoit]Achso ok. Aber um nochmal auf _FFGetValue zurück zu kommen das erwartet die gleiche parameter wie _FFSetValue nur ohne übergebenen Wert?
-
Falsches Unterforrum
@Mods: mal bitte nach H&U verschieben
Sonst gehts dir aber noch gut oder? Ich frage nach der fehlenden Beschreibung der Funktion _FFGetValue in der Projektdoku und du spamst rum.
-
Hi,
welche Parameter erwarter FFGetValue genau? In der Doku ist der Punkt leider nicht beschrieben. Hab nun mal Versucht folgende Zeile auszulesen:
Hab dazu gemacht:
[autoit]$news = _FFGetValue("newsnumber","id")
[/autoit]Aber $news ist leer und @error steht auch auf 0
-
Hi ahe,
ja steck einige Arbeit drin.
Warum verwendest Du in der run.exe und der client.exe nicht die Umgebungsvariable bzw. das Makro @ProgramFilesDir?
Gleiches gilt für die Batch, dort könntest Du die Umgebungsvariable %ALLUSERSPROFILE% verwenden.Hätte ich machen können stimmt. Warum ich es nicht gemacht habe ist auch eine gute Frage. Nur die Antwort darauf kann ich dir nicht sagen, evtl nicht dran gedacht :).
Wie bestimmst Du die Reihenfolge der Installationen?
Hast Du Paketabhängigkeiten in den Paketen selbst realisiert oder über Regeln in der GUI?Abhängigkeiten gibt es in dieser Version noch nicht. Kommt erst in der folgenden Version. Dort kann man man in der Admingui Regeln definieren im Format "Wenn X dann y". Aber es gilt immer Gruppenpakete gehen vor Clientpaketen. Wenn also auf Gruppenebene ein Paket zugewiesen wurde, dann wird das auf allen Clients in der Gruppe installiert egal was bei diesen eingestellt ist. Wenn man nun bei einem Client einer Gruppe ein Paket zuweißt das nicht auf Gruppeneben zugewiesen wurde, dann installiert sich das nur bei dem Client und nicht bei der kompletten Gruppe.
Wie überprüfst Du, ob die Software auch tatsächlich installiert wurde? Inventarscan nach der Installation? Landen die Daten in der DB vom Server?
Auf dem Client ist paralles zur Server DB eine lokale DB in der hinterlegt ist welche Software installiert wurd. In diese DB wird nur ein Eintrag einer positiven Installation gemacht wenn das Installationsscript auch wirklich durchgelaufen ist.