HomeDownloadsForumGalerieLinks

 

ForenübersichtMUL-ForumUO-Patcher

UO-Patcher

Mitglied-266015.01.2014, 21:08 Uhr
Hallo zusammen,
Ich entwickel einen Patcher und bin soweit die Funktionen davon zu erweitern. Ich würde gerne von aktiven Spielern und Stafflern erfahren, was sie sich von einem Patcher wünschen würden. Welche Funktionen hätte ein Patcher euren Vorstellungen nach? Was sind allgemeine Erfahrungen mit Patchern? Wo muss die Bedienung dringend einfach sein? Gibt es Sachen die man unbedingt benötigt? Was ist eurer Meinung nach eher Nebensache?
Ich fasse hier mal die Vorschläge zusammen

Allgemeines
- Es gibt grundsätzlich mehrere Ansätze Patches zu entwickeln. Der allgemein kompatibelste Weg scheint der Binär-Vergleich zu sein (BSD-Patcher (http://www.daemonology.net/bsdiff/)) .
- Ziel ist es, den Download, also den Patch als solches, möglichst klein zu bekommen. Wir suchen also den Effektivsten Weg zur Bereitstellung 'geänderter' Inhalte.
- Eine Gängige Methode (oder eine erprobte von UO-Mittelerede) einen Grundzustand herzustellen ist zunächst alle geänderten, Shardeigenen Dateien zu übertragen.
- Zu Beginn, vor dem ersten Patch, muss entweder sichergestellt werden, dass jeder die selbe Grundlage hat (gleiche UO-Version) oder das Programm muss in der Lage sein verschiedene Versionen zu erkennen und auf den selben Stand zu bringen.
- Neben dem Patcher (grundsätzlich?) auch das eigene Herunterladen erlauben. (Stichwort eigenes Verändern der UO-Version)
- Auswahl einer Festplatte möglich, dann aber eigenes Verzeichnis anlegen. Stichwort: Windows - Rechte - Kompatibilität

"Muss Haben"
- Inkrementelle Patches (wahrscheinlich grade wichtig für Map/Statics/Art), die werden sich am häufigsten Ändern und sind recht groß) + Entsprechendes Programm zum erzeugen der Patches
- Möglichkeit Server-IP, bzw. Domain des Patchers ändern: Allgemein gesprochen also die Konfigurationsdaten des Patchers mit dem Patcher selbst ändern können.
- Anpassen des Patchers im Aussehen
- Sehen des Patch-Fortschrittes (Downloadgeschwindigkeit, eta, aktuelle Aktion Download/Entpacken/Installieren)
- Neue Dateien sollten angelegt werden.
- Dateien sollen gelöscht werden können.
- Dateien müssen vor dem Patchen geprüft werden (Hat die Datei den aktuellen Stand, so dass ich sie patchen sollte?) Stichwort CRC32-Checksumme oder MD5
- Dateien müssen nach dem Patchen geprüft werden (Ist das Endergebnis richtig?) Stichwort CRC32-Checksumme oder MD5

"Wäre Schön"
- Dynamischer Newsbereich, am besten html basiert, im Patcher selbst integriert.
- Bei Fehlern: Log-Datei zum besseren Debuggen und möglichst eigener Fehlerkorrektur
- Den Download zwischenspeichern (Spieler löschen gerne mal die UO-Installation und holen sich ne Woche später alles neu)
- Die Downloads sollten im Benutzerbereich gespeichert werden und vom Patcher, wenn er gelöscht wird, bei Neuinstallation wieder gefunden werden kann.
- Falls ein Download bereits vorhanden ist, wird diese Datei auch verwendet und auf das neue Herunterladen verzichtet.

"Könnte haben"
- Mehrere Shards vorkonfigurieren (beliebig viele Shards einstellen) mit denen man sich verbinden kann.
- Der Patcher besitzt von jeder Datei einzelne Versionen und Patches, so dass er in der Lage ist aus jeder Grundlage die benötigte Datei wieder her zu stellen (ggf. kaputte Datei ersetzen).




Ich wäre dankbar für jede Meinung - als Schreiber solcher Dinge ist man oft Betriebsblind um mal moderat zu bleiben,
mfg

T
Mitglied-132815.01.2014, 22:32 Uhr
Ui, genial :) Find ich Klasse, dass du das machst! Hab schon lange einen aktuellen Patcher vermisst (ok, ich hab auch schon ne Weile nicht mehr nach einem gesucht, aber drüber gelesen hab ich halt auch noch nichts).

Also was ich als Staffler für einen Patcher sehr wichtig finde ist, dass er inkrementelle Patches erstellen kann. Er sollte auch die Dateien neu indexieren und alte Einträge rauswerfen, so dass kein unnötiger Ballast entsteht auf den Clients.
Ganz wichtig: Die Möglichkeit die Server-IP bzw. Domain und den Port über den Patcher ändern zu können.
Customizing in Form von evtl. eigenen Farben und eigenem Logo wäre natürlich auch super :)

Was ich noch toll fände wäre ein dynamischer Newsbereich der aufgerufen wird während der Patch läuft. Am besten noch HTML basiert ... wobei ich persönlich es genial fände, wenn die Anzeige nicht unbedingt über den IE läuft sondern irgendwie einen in den Patcher integrierten HTML-Viewer, damit das Ganze auch unter Linux mit Wine funktioniert.

Als Spieler wäre es für mich natürlich toll, wenn ich über einen einzigen Patcher auf mehrere Shards verbinden könnte, die diesen Patcher einsetzen. Ich selbst seh auch immer gern wie schnell der Download gerade läuft und wieviel von wievielen Dateien bereits runtergeladen wurden. Und natürlich welche Aktion der Patcher gerade ausführt (Also lädt er gerade runter, entpackt er gerade oder ist er sogar schon am installieren?
Bei Fehlern wäre eine einfach auf zu rufende Logdatei auch noch sehr praktisch (z.B. über einen Button direkt im Patcher selbst). Oder zumindest einen Link zu dem Pfad in dem die Datei liegt.

So, ich glaub das wars erstmal was mir auf die Schnelle einfällt. Wenn ich ne Nacht drüber schlaf kommen mir bestimmt noch weitere Ideen :)
Mitglied-56816.01.2014, 16:03 Uhr
Ich kann mich noch gut daran erinnern, als Erbe einen Patcher eingeführt hat. Das war sehr angenehm, um bei einer der immer mal wieder notwendigen UO-Neuinstallationen die ganzen Daten nicht händisch kopieren zu müssen. Zudem ist ein solches Tool ein gute Unterstützung, wenn die üblichen Daten aktualisiert werden müssen.

Pidray von "The Old World" (http://www.theow.de/?nav=server&page=staff) hat einen sehr gut funktionierenden Patcher erstellt. Vielleicht nimmst du mit ihm Kontakt auf und ihr könnt euch austauschen? Man muss das sprichwörtliche Rad nicht unbedingt immer neu erfinden.
Mitglied-266016.01.2014, 16:52 Uhr
Pidray von "The Old World" hat einen sehr gut funktionierenden Patcher erstellt. Vielleicht nimmst du mit ihm Kontakt auf und ihr könnt euch austauschen? Man muss das sprichwörtliche Rad nicht unbedingt immer neu erfinden.

- Danke für den Hinweis, hab ihn direkt mal angeschrieben.



Soweit bin ich bisher:
[externes Bild: http://forum.uo-illusien.de/gallery/image.php?album_id=1&image_id=188&display=popup]
Mitglied-229116.01.2014, 21:14 Uhr
Hallo,

ich bin nicht sicher, was du unter 'Patcher' verstehst, und was du haben willst, aber hier einige Kommentare:

Unser Problem war, dass EA den offiziellen Patcher eingestellt hatte. Außerdem hatte ich immer schon überlegt, Dateien so aktuell zu halten. Dabei gibt es allerdings ein technisches Problem: Binäre Dateien (im Gegensatz zu Textdateien) zu patchen ist eine unangenehme Problemstellung.
Ich habe dann 2 Dinge am Internet dazu gefunden:
Einen Patcher, der auf einer alten experimentellen BSD-Patcher Version aufbaut (Grundlage eine Studienarbeit), und den Patcher, den es zu dem NSIS-Paket (Open Source Installer) dazu gibt.
Beide Patcher sind geeignet, binäre Dateien zu patchen. Generell gibt es ein Problem mit großen Dateien, das Erstellen der Patches (das muss man ja auch mal machen) braucht sehr viel Speicher, dies ist bei Variante 1 besonders zu merken.
Ich habe dann mal mit Variante 1 begonnen, und diese in C++ implementiert. Am Ende steht nun ein kleines kompaktes (zeilenorientiertes) Programm, das binäre Patches, die außerdem stark komprimiert sind, einlesen und damit patchen kann. Und ein weiteres Programm, das solche Patches erzeugt, wenn man ganze Verzeichnisse nebeneinander vergleicht.

Damit kann man nun ein UO-Verzeichnis mit dem letzten Stand der Dateien (.exe, .mul, usw.) erstellen und mit einem alten Stand, den zB alle Spieler haben, dann vergleichen. Eine Patchdatei ist das Resultat, wenn man diese mit dem Patcher bei einem Spieler laufen lässt, werden alle Dateien entsprechend angepasst.

Natürlich braucht man dann noch eine Oberfläche, und einen Mechanismus, der die letzten Patchdateien von einem Server holt, und außerdem auch beim Starten des Spiels feststellt, ob der Spieler die letzte Version hat: Dieses Programm wurde von Pidray bei uns geschrieben, und ist auf den Shard Oldword angepasst.

Es geht also um 3-4 Funktionen:
Installation des Spiels für Neuspieler
Check des Spiels auf den letzten Stand
Patchen des Spiels, wenn nötig (Neuinstallation, Update des Standes)
Allgemeine Oberfläche zum Start von UO, mit bequemen Dingen wie etwa Eingabe des Account-Namens usw.

Horus
Mitglied-266016.01.2014, 22:53 Uhr
Hallo Horus,
Vielen Dank für die Rückmeldung.

UO-Spezifisch könnte man anstelle der binären Variante ja auch hingehen und die Index-Dateien recht klug patchen, indem man die Einträge vergleicht und "fehlende" Einträge in den Patch packt, der die dann wiederum ergänzt.

Die Routinen zum Überprüfen von Versionen, Herunterladen von hinterlegten Dateien und starten des Spiels habe ich fertig. Das klapt auch soweit (Natürlich schraube ich noch an den Feinheiten, wie das Aussehen einer Config oder die Mehrsprachigkeit, naja). Ich denke der Eingabe des Account-Namens und Passworts ist Parameterbasiert beim Aufrufen der client.exe? Oder wartet der Patcher so lange bis das Programm läuft und steuert die Felder dann an? (Die zweite Variante halte ich irgendwie für unwahrscheinlich).
Gäbs eine Möglichkeit an den Programmcode zu kommen? Ich würde die Routine dann verarbeiten - wenn ich darf. Wenn ihr dafür eine Gegenleistung wollt, sagt bescheid, wir können uns sicher einigen.
mfg
Mitglied-229117.01.2014, 10:13 Uhr
UO-Spezifisch könnte man anstelle der binären Variante ja auch hingehen und die Index-Dateien recht klug patchen, indem man die Einträge vergleicht und "fehlende" Einträge in den Patch packt, der die dann wiederum ergänzt.

Ich denke, das klappt zwar, aber dazu muss man genau wissen, was wo hingehört und es deckt nicht alle Differenzen ab. Auch sind File-Formate dabei entscheidend. Generell ist es am besten, wenn die Dateien nach dem Patchen garantiert so aussehen, wie beim Entwickler, der das Ganze ja auch getestet hat.

Mein Problem war ja auch, dass der Download des UO-Version ungepatcht war, also eine alte Version. Früher hat der uopatcher das mit Hilfe der entsprechenden Webseite aktualisiert, bevor wir unsere Änderungen eingebracht haben. Dies musste ja auch ersetzt werden. Daher habe ich einen binären Patcher entwickelt, wie etwa RTPatch, das die meisten Spiele verwenden, das aber kommerziell und sehr teuer ist.

Ich bin noch den Link schuldig: BSDIFF (http://www.daemonology.net/bsdiff/).

Hier findest Du die letzte Version (4.3) dieses Tools und auch das Paper des Entwicklers. Das Ganze ist in C geschrieben, und nutzt auch die bzip2-Bibliothek zur Kompression. Es ist nicht sehr schwer zu verstehen und man kann es recht gut implementieren. Bsdiff ist ein Paket aus einen Patch-Generator (bsdiff) und einem Patch-Programm (bspatch) das diese Patchdateien dann verarbeitet. Allerdings bearbeiten diese Programme nur jeweils eine Datei. Daher empfiehlt es sich, das selbst zu schreiben, so dass eben ganze Verzeichnisse von Dateien verglichen und gepatcht werden, und die Patchdatei selbst dann eine Kollektion aller Patches ist. Auch sollte ein Patcher Vorkehrungen haben, neue Dateien (die als in der alten Version nicht drin sind) anzulegen und Dateien, die gelöscht wurden auch beim Ziel zu Löschen. Wegen der Kompression wird es auch bei kleineren Dateien vorkommen, dass eine komprimierte Variante der gesamten neuen Datei kleiner ist als der Patch für die alte Datei, also nicht gepatcht sondern überschrieben wird. Ziel ist ja, zu einem möglichst kleinen Download zu kommen.

Übrigens spricht nichts dagegen, mit so einem Programm dann auch reine Textdateien zu patchen. Das Format einer Datei ist eigentlich völlig egal, und da alles komprimiert ist, ist es auch klein. Nur sollte man schauen, ob der erzeugte Patch nicht größer ist, als die komprimierte Datei selbst, das kommt nämlich manchmal vor.

Wichtig ist auch, dass der Patcher (bsdiff hat das nicht) einen Mechanismus hat, der die Dateien vor und nach dem Patchen prüft. Der Patcher erzeugt natürlich Unsinn oder hat Fehler, wenn man einen Patch auf eine falsche Datei anwendet. Daher muss man vor dem Patchen prüfen, ob die richtige alte Datei vorliegt, und nach dem Patchen, ob die richtige neue Datei erzeugt wurde. Dazu empfiehlt sich ein Check mit CRC32 oder MD5, die Prüfsummen sollte man entsprechend in der Patchdatei mitliefern.

Horus
Mitglied-266017.01.2014, 12:39 Uhr
Moin Horus,
Danke für die wiederholt ausführliche Antwort. Ich habe meine Sammlung oben entsprechend ergänzt.

Eine Frage habe ich noch zum grundsätzlichen Vorgehen:
Beim ersten Patch, also der aller erste - wie stellt ihr sicher, dass alle Spieler die selbe Grundlage haben? Es gibt ja immerhin zig verschiedene Downloadversionen von UO. Liefert ihr am Anfang grundsätzlich erst einmal alles mit? Karte, Art, Gump, etc.?
mfg
Mitglied-250617.01.2014, 13:12 Uhr
Hallo,

es gibt einen guten Patch, der damals von Varan Dar (Mittelerde) erstellt wurde.
Hier war das Prinzip, dass zum einen der Shard die UO Version vorgab und zum erste Patch, alle Files bereit gestellt wurden und ein komplettes austauschverfahren stattfand.
Der zweite Patch hat dann jeweils verglichen, was unterscheidet file1 von file2 und dies dann ergänzt.

Ich hab diesen Patcher noch vor wenigen Wochen selbst benutzt und war immer damit zufrieden, weil er alles konnte und hatte, was benötigt wurde.

Gruß
Lev
Mitglied-266017.01.2014, 14:01 Uhr
Hey Levanthis,

Erinnere ich mich richtig, dass dieser Patcher der Allgemeinheit zur Verfügung gestellt wurde? Hatte dieser Patcher nicht zwei Programme, einen Patchmaker und einen Patcher an sich? Der wurde nicht mehr weiterentwickelt oder? Oder ist gar keine Verbesserung dieses Patchers notwendig, weil er bereits alles kann, was man benötigt? Welche Dinge sind positiv an diesem Patcher und was der oberen Liste kann er - was kann er deiner Meinung nach nicht, braucht er aber auch nicht?
Mitglied-56817.01.2014, 15:56 Uhr
Ich meine mich daran zu erinnern, dass Varans Patcher allgemein zugänglich war und damals auch unter anderem von Erbe sowie Midgard benutzt wurde. Vielleicht können dir Sirius oder Anais als damalige Shardadministratoren hierzu Auskunft geben.
Mitglied-227617.01.2014, 16:43 Uhr
Der Patcher war doch eigentlich inordnung?

Was schöner wäre für die Zukunft und auf den Heutigen Stand wie es aber auch schon geschrieben wurde ;) ob man nicht gescheit html News mit einpflegen könnte und das Programm an sich schöner gestalten.
Mitglied-132817.01.2014, 18:47 Uhr
http://varan.uodev.de/ hier gibts den Patcher plus die Sourcen von Varan.

Der Patcher an sich war eigtl. nicht schlecht. Hat nur nicht immer 100% funktioniert. Ich müsst mich nochmal kurz damit beschäftigen um nochmal ins Gedächtnis zu rufen was mir hier gefehlt hat.
Unter anderem auf jeden Fall das was Siggi auch schon gesagt hat (HTML-News fehlten und er hatte eine sehr rudimentäre Oberfläche).

Edit: Was er zumindest auch nicht kann ist mehrere Shards verwalten.

Edit 2: Was mir noch beim lesen eingefallen ist was sehr schön wäre: eine kleine Accountverwaltung, dass man auswählen kann mit welchem Account man sich mit dem Shard verbinden will.
Mitglied-56817.01.2014, 19:34 Uhr
Ich fände es eine gelungene Form von shardübergreifender Zusammenarbeit, wenn Varans Patcher weiterentwickelt werden könnte und dabei die in diesem Thema eingebrachten Wünsche und Hinweise aus der UO-Community aufgenommen werden würden.

Wenn niemand etwas dagegen hat, werde ich Varans Patcher auch in unseren Downloads anbieten und natürlich auch jegliche Form von Weiter- oder Parallelentwicklung.
Mitglied-183417.01.2014, 20:30 Uhr
zu varans tool -> da existiert kein code zu, und wenn mich nicht alles täuscht ist es wie alles von ihm in delphi und niemand weiss wie gut leserlich der code ist ...

ich glaube am ende ist es einfacher man schreibts neu.
Mitglied-229117.01.2014, 21:32 Uhr
Mitglied-2660 hat geschrieben:Moin Horus,
Danke für die wiederholt ausführliche Antwort. Ich habe meine Sammlung oben entsprechend ergänzt.

Eine Frage habe ich noch zum grundsätzlichen Vorgehen:
Beim ersten Patch, also der aller erste - wie stellt ihr sicher, dass alle Spieler die selbe Grundlage haben? Es gibt ja immerhin zig verschiedene Downloadversionen von UO. Liefert ihr am Anfang grundsätzlich erst einmal alles mit? Karte, Art, Gump, etc.?
mfg

Wir haben (derzeit noch) einen Download-Link, den die Leute verwenden, und daher immer dieselbe Basis. Da ich nicht weiß, wie lange der noch klappen wird, planen wir natürlich irgendwann, eine 'volle Version' auszuliefern. Aber da ist noch etwas Arbeit nötig, da ein ca. 500 MB-Download ohne Login nicht geht...

Wir haben auch eine Methode, verschiedene Versionen zu erkennen. Man macht einfach einen CRC-Check über alle wichtigen Dateien, und schaut in Listen nach. Auf die Art kann man mehrere Versionen erkennen, und sollte dann natürlich auch passende Patches haben. Allerdings geistern eine Menge Versionen herum, und patchen ist nicht immer möglich. Nur als Beispiel: Die doch große map0.mul ist bei Version 5 auch für map1 (Britannia_alt) verwendet, mit mapdiffs. Ab Version 6.x ist die map1.mul vorhanden. Der Patch wäre ziemlich groß.

Für den Download wird auch unser Steuerprogramm ausgebaut, so dass es immer die korrekte Version liefert. Man muss dabei einiges bedenken: Spieler basteln schon mal an ihrer Installation herum, oder löschen die ganz, und holen dann eine Woche später das Ganze wieder ab.
Daher sollte das Tool soweit intelligent sein, dass es
a) Das Download irgendwo sichert, wenn genug Platz ist. Und zwar so, dass es einerseits im Benutzerbereich liegt, aber andererseits nicht offensichtlich ist. Dann kann man nämlich auch das Tool löschen, und wird es später neu installiert, dann findet es den Download wieder.
b) Falls ein Download vorhanden ist, installiert das Tool aus dem Download, und patcht, sonst wird neu abgeholt.
c) Auswahl der Festplatte möglich, aber sonst fixes Verzeichnis, da der client nicht nach 'Programme' oder 'Program Files' oder sonst ein Windows Standardverzeichnis installiert werden darf - UO schreibt auch in Version 6.x noch immer in sein Install-Verzeichnis und das ist ab Vista nicht mehr erlaubt. Also zB nach C:\Games\UO.
d) Individuelles Download von Dateien evtl. erlauben, da Spieler manchmal rumbasteln oder von anderen Shards Dateien einspielen, und das Patchen dann schief geht.

Die flexibelste Lösung wäre es, wenn man von allen Dateien einzeln Patches und Versionen liegen hat und die Software dann so intelligent ist, dass sie holt, was nötig ist, eventuell auch eine kaputte Datei ersetzen kann, usw. Das wäre das Ideale, denke ich...

Horus
Mitglied-266019.01.2014, 11:00 Uhr
Wir haben (derzeit noch) einen Download-Link, den die Leute verwenden, und daher immer dieselbe Basis. Da ich nicht weiß, wie lange der noch klappen wird, planen wir natürlich irgendwann, eine 'volle Version' auszuliefern. Aber da ist noch etwas Arbeit nötig, da ein ca. 500 MB-Download ohne Login nicht geht...

Also wäre eigentlich ein Patcher-Login, gekoppelt mit der Benutzer-Verwaltung zu überlegen (...und wünschenswert)?



Wir haben auch eine Methode, verschiedene Versionen zu erkennen. Man macht einfach einen CRC-Check über alle wichtigen Dateien, und schaut in Listen nach. Auf die Art kann man mehrere Versionen erkennen, und sollte dann natürlich auch passende Patches haben. Allerdings geistern eine Menge Versionen herum, und patchen ist nicht immer möglich. Nur als Beispiel: Die doch große map0.mul ist bei Version 5 auch für map1 (Britannia_alt) verwendet, mit mapdiffs. Ab Version 6.x ist die map1.mul vorhanden. Der Patch wäre ziemlich groß

Den Punkt habe ich aufgenommen. Die Routine dafür sollte ja recht simpel sein - das einmalige Bereitstellen der Dateien ist denke ich etwas mehr Aufwand. Woher habt ihr die verschiedenen Versionen gehabt um die Differenzen ausmachen und in die Liste eintragen zu können?



Für den Download wird auch unser Steuerprogramm ausgebaut, so dass es immer die korrekte Version liefert. Man muss dabei einiges bedenken: Spieler basteln schon mal an ihrer Installation herum, oder löschen die ganz, und holen dann eine Woche später das Ganze wieder ab.

Sehr guter Hinweis. Direkt mal aufgenommen.



Die flexibelste Lösung wäre es, wenn man von allen Dateien einzeln Patches und Versionen liegen hat und die Software dann so intelligent ist, dass sie holt, was nötig ist, eventuell auch eine kaputte Datei ersetzen kann, usw. Das wäre das Ideale, denke ich...

- Wenn ich so darüber nachdenke: Wäre ich nicht dann theoretisch wieder bei der Eintrag-basierenden Lösung? Der PatcheMaker geht, anhand der Index-Dateien, über die Einträge drüber und schreibt jeden Eintrag als einzelnen Patch raus. Der Patcher vergleicht auf dem Ziel jeden Eintrag und prüft ob er Übereinstimmt (per Quersummenprüfung). Falls nicht holt er den entsprechenden Eintrag als Patch und installiert ihn entsprechend. Dann wär ich allerdings wieder arg UO-spezifisch - vielleicht wärs gar nicht so dumm den Patcher zunächst mal allgemein zu schreiben, dass er jede Datei patchen kann - und dann eine UO-Spezifische 'optimierung' bei der man dem Patcher beibringt, das spezielle Dateien mit weniger Aufwand geändert werden können?


mfg
Mitglied-229125.01.2014, 00:10 Uhr
Also wäre eigentlich ein Patcher-Login, gekoppelt mit der Benutzer-Verwaltung zu überlegen (...und wünschenswert)?

Ich denke es mir so: An die Software kommt man über die Webseite, aber nur mit Login. Im Patcher (der ein lokales Hilfsprogramm bei Spieler ist) muss man dann auch sein Login eintragen, oder evtl. geht das auch im Hintergrund oder so. Jedenfalls sollte man beides nur mit Login machen können.

Den Punkt habe ich aufgenommen. Die Routine dafür sollte ja recht simpel sein - das einmalige Bereitstellen der Dateien ist denke ich etwas mehr Aufwand. Woher habt ihr die verschiedenen Versionen gehabt um die Differenzen ausmachen und in die Liste eintragen zu können?

Die hab ich halt aus eigenen Downloads erstellt. Ist zwar etwas langweilig, aber inzwischen hab ich Übung :D
Dann die Verzeichnisse nebeneinander ansehen, vergleichen und Patches erzeugen.

Hier nochmal ein kleine Konzept für einen 'echten' Patcher:
Das Patchfile wird mit einem selbst zu schreibenden Tool erstellt, aus 2 Verzeichnissen 'alt' und 'neu'.
Das Patchfile hat verschiedene Records definiert, die jeweils eine Anweisung für den Patcher und die Daten dazu darstellen. Folgende Record(Block)-Typen braucht man:
PAT - ein Block, der ein bestimmtes File <relativer Pfad> bearbeitet und patcht, und die Patchdaten dazu
DEL - ein Block ohne Daten, der ein bestimmtes File <relativer Pfad> löscht.
ADD - ein Block, der ein File <relativer Pfad> neu erstellt, die Daten (also das File) sind als Blockdaten enthalten
OVR - ein Block, der nicht patcht, sondern ein File <relativer Pfad> überschreibt, der Inhalt sind die Daten des Blocks

Alle Records enthalten auch CRC-Summen der alten und neuen Datei, damit kann man checken, ob man das richtige File (korrekte Version) patcht, und danach ob es geklappt hat. (Bei DEL braucht man nur eine CRC, bei ADD auch, usw.)

Damit kann man nun praktisch alles herstellen. Die Nutzdaten in den Blöcken sind immer komprimiert (bzip2-Lib). Das Tool-Programm sollte das intelligent erkennen, also Files, die in 'NEU' nicht mehr da sind, müssen gelöscht werden, sehr kleine Files, die komprimiert kleiner als der Patch sind, sollten statt dessen durch Überschreiben erstellt werden, und Files, die bei ALT gar nicht existieren, werden angelegt. Anlegen von neuen Verzeichnissen ist noch nicht unterstützt, könnte man aber mit ADD auch machen. Das heißt, es gibt für jede zu ändernde Datei mindestens einen solchen Block, je nach Bedarf. Dateien, für die keine Blöcke existieren, werden nicht angegriffen.

Diese Typen unterstützt mein Patcher derzeit. Man könnte noch einen weiteren Block COPY definieren, der ein bestimmtes File <relativer Pfad> zu einen neuen File <relativer Pfad> kopiert, und ggf, danach noch patcht. Damit könnte man zum Beispiel eine UO 5.x Installation auf eine 6.x Installation patchen, weil da eben die map1.mul Datei angelegt werden muss, und die ist doch recht groß. Wenn man sie lokal kopiert (sie ist ja sehr ähnlich) und dann anpasst, wäre das ideal. Aber das muss nicht sein.

Wenn ich so darüber nachdenke: Wäre ich nicht dann theoretisch wieder bei der Eintrag-basierenden Lösung? Der PatcheMaker geht, anhand der Index-Dateien, über die Einträge drüber und schreibt jeden Eintrag als einzelnen Patch raus. Der Patcher vergleicht auf dem Ziel jeden Eintrag und prüft ob er Übereinstimmt (per Quersummenprüfung). Falls nicht holt er den entsprechenden Eintrag als Patch und installiert ihn entsprechend. Dann wär ich allerdings wieder arg UO-spezifisch - vielleicht wärs gar nicht so dumm den Patcher zunächst mal allgemein zu schreiben, dass er jede Datei patchen kann - und dann eine UO-Spezifische 'optimierung' bei der man dem Patcher beibringt, das spezielle Dateien mit weniger Aufwand geändert werden können?

Siehe oben :)
Man kann beides machen, für die Erstinstallation ist der volle Patcher ideal, danach kann man es dateibezogen machen, was aber ein lokales Programm beim Benutzer tun muss.

Horus
Mitglied-266027.01.2014, 08:32 Uhr
Ich denke es mir so: An die Software kommt man über die Webseite, aber nur mit Login. Im Patcher (der ein lokales Hilfsprogramm bei Spieler ist) muss man dann auch sein Login eintragen, oder evtl. geht das auch im Hintergrund oder so. Jedenfalls sollte man beides nur mit Login machen können.

- Dazu habe ich, grade für vb.net, folgendes tut gefunden HttpWebRequest (http://www.vb-paradise.de/allgemeines/tipps-tricks-und-tutorials/internet-lan/25722-httpwebrequest-tutorial-fuer-anfaenger). Sieht vielversprechend aus und lässt sich deshalb sicher mit dem Forum verbinden. Als Webadresse würde ich natürlich eine eigene Seite scripten, die als Rückantwort die Patchanweisungen und links für die Dateien trägt.


PAT - ein Block, der ein bestimmtes File <relativer Pfad> bearbeitet und patcht, und die Patchdaten dazu
DEL - ein Block ohne Daten, der ein bestimmtes File <relativer Pfad> löscht.
ADD - ein Block, der ein File <relativer Pfad> neu erstellt, die Daten (also das File) sind als Blockdaten enthalten
OVR - ein Block, der nicht patcht, sondern ein File <relativer Pfad> überschreibt, der Inhalt sind die Daten des Blocks

- Ok, das ist einleuchtend. Ähnlich wie die Idee von GET und SET - Grundmethoden - in der Basis also alles was man benötigt auf Grundebene. OVR wäre in dem Fall die Kombination aus DEL und ADD, wenn ich das richtig überschaue - allerdings ist die Idee dahinter, wenn ich das richtig verstanden habe, dass jedem Record(Block) nur ein TYP zugeordnet werden kann. Das erscheint mir auch Sinnvoll.


Man könnte noch einen weiteren Block COPY definieren, der ein bestimmtes File <relativer Pfad> zu einen neuen File <relativer Pfad> kopiert, und ggf, danach noch patcht.
- Aufgenommen.

Vielen Dank, Horus, die ganzen Hinweise ersparen mir eine menge, menge Zeit. Wenn ich mich irgendwann revanchieren kann, gibts nen Radler ;)

mfg SN
Mitglied-56831.01.2014, 21:26 Uhr
Der Freeshard Arx-Obscura (http://www.arx-obscura.de/) verfügt über einen sehr gut funktionierenden Patcher, mit dem beim Erststart nicht mal UO vorhanden sein muss sondern automatisch installiert wird. Nimm doch mit dem dortigen Staff Kontakt auf, denn vielleicht können dir diese einige weitere Anregungen für dein Technikprojekt geben.
Mitglied-335303.02.2014, 20:30 Uhr
Ich habe leider von diesem Thema so gut wie gar keine Ahnung, und hoffe ich störe eure Diskussion nicht, aber es gibt doch verschiedene zusatz tools wie dieses Sinjection, Injection, Yoko Injection, Auto-Map, EasyUO etc.

Wäre doch nett wenn man beim starten des Updaters die optionale Option erhält gleichzeitig noch eins der Tools mit runterzuladen.
Mitglied-266010.02.2014, 17:12 Uhr
Ich habe leider von diesem Thema so gut wie gar keine Ahnung, und hoffe ich störe eure Diskussion nicht, aber es gibt doch verschiedene zusatz tools wie dieses Sinjection, Injection, Yoko Injection, Auto-Map, EasyUO etc.

Wäre doch nett wenn man beim starten des Updaters die optionale Option erhält gleichzeitig noch eins der Tools mit runterzuladen.

- Guter Gedanke. Statt dass man diese Sachen fest im Patcher verankert könnte man das ganze so gestalten, dass Shards die Möglichkeit haben optionale Downloads mit zu definieren, die beim Spieler wiederum als Links auftauchen. Ich nehme das auf jeden Fall mit auf.



Ich hab mich in letzter Zeit besonders auf die Routinen konzentriert, die für das Anmelden eines Benutzers wichtig sind. Dabei verfolge ich die Absicht dass der Patcher ein PHP script auf einem Server anspricht. An das PHP-Script wird Anmeldename und Passwort sowie ein Schlüsselwort gesendett, die Rückgabe des Scriptes sieht, je nach Schlüsselwort, eine Antwort (infotext / update-Liste / validierung [nur prüfen ob Benutzername / Passwort stimmt.]). Das Script kann man dann beliebig anpassen - jeder hat ja eine andere Benutzerverwaltung. Zur Zeit verfolge ich den Ansatz, das Updateverzeichnis mittels .htaccess zu schützen und den benötigten Benutzernamen und Passwort per oben genannten weg (schlüsselwort "htaccess") zurück zum client zu liefern, damit der wiederum die Dateien herunterladen kann. Weiß jemand was dagegen spricht?
Mitglied-335314.02.2014, 17:41 Uhr
Ich will dich ja nicht überfordern, kenne mich mit der Materie auch nicht sonderlich aus, aber ich spiele halt gerne mit Ideen herum.

Wenn du den Patcher an PHP/forum etc. bindest, wärst du dann auch nicht in der Lage so Art unsichtbare Cloud um das UO Fenster zu ziehen? Ich denke an ein Archivment/Erungenschaften-System, das wenn man im Spiel z.b. 100 Orks tötet, eine kleine Grafik aufplopt und diese Erungenschaft dann an mein Forum account gebunden und für andere (optional) sichtbar ist.
Mitglied-266018.02.2014, 18:08 Uhr
Hey,

Ich will dich ja nicht überfordern, kenne mich mit der Materie auch nicht sonderlich aus, aber ich spiele halt gerne mit Ideen herum.

Wenn du den Patcher an PHP/forum etc. bindest, wärst du dann auch nicht in der Lage so Art unsichtbare Cloud um das UO Fenster zu ziehen? Ich denke an ein Archivment/Erungenschaften-System, das wenn man im Spiel z.b. 100 Orks tötet, eine kleine Grafik aufplopt und diese Erungenschaft dann an mein Forum account gebunden und für andere (optional) sichtbar ist.

- Du sprichst von einem System das man bei Software wie "Steam" beobachten kann? Man erreicht im Spiel etwas und das Programm bekommt das über die PHP-Schnittstelle mit? So interaktiv habe ich das Projekt nicht geplant. Allerdings soll man ja nicht alles von vorne heraus ausschließen. Der Patcher enthält nämlich einen Webbrowser, der mit dem Content des entsprechenden Shards gefüllt wird. Bei dieser Anfrage (die der Client dem Server anschließend stellt) werde ich die Anmeldedaten (wenn denn vom Shard-Besitzer gewünscht) hinterlegen. Der Content könnte dann mit speziell für den Benutzer ausgelegten Content zurück geliefert werden. Da drin wäre dann natürlich ein anzeigen von Erfolgen möglich. Vielen Dank für die Idee.
Mitglied-307306.03.2014, 02:12 Uhr
Yo!
Der Arx-Patcher benutzt ein SVN, was es natürlich ultraangenehm macht Daten zu übertragen. Das einzige Ärgernis daran ist nur, dass man doppelt soviel Platz für den Client braucht wie sonst, da der SVN-Ordner recht aus dem Ruder läuft ^^ Dafür wird es wesentlich einfacher, Fehler Communityweit rückgängig zu machen oder zum Beispiel unabsichtlich überpatchte Grafiken zu retten, weil man besagte Versionshistorie hat.
Die einzigen groben Probleme mit denen wir hin und wieder zu kämpfen haben hängen mit dem Betriebssystem der Spieler zusammen - der allseits beliebte Windows-Schreibschutz schlägt da gern mal zu und macht es etwas umständlich da herum zu pfriemeln. Wenn du also siehst dass du dieses Problem irgendwie umgehen kannst, hast du nen Fanclub sicher ;)
UO World – Archiv-Neuauflage 2026 · Impressum · Datenschutz