Online-Updates

Aus Spieleprogrammierer-Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Wofür Online-Updates?

Die meisten Spiele benötigen, um Spieler dauerhaft zu binden, regelmäßig Gameplay- und Content-Updates. Dabei müssen viele neue Dateien heruntergeladen werden, veraltete aktualisiert werden und nicht mehr benötigte gelöscht werden. Diese Aufgabe übernimmt meist der Patcher eines Spiels. In diesem Artikel wirst du lernen, wie man an so ein Projekt herangehen muss und welche Option man dann nehmen kann. Du kannst, wenn du keine Lust hast, etwas selber zu entwickeln, natürlich auch vorgefertigte Patcher und Patch-Server nutzen, die einiges natürlich auch ein wenig einschränken, für zum Beispiel eine Beta deines Spiels völlig ausreichend sind.

Lösungsansatz für einen Patcher

Wenn du dir einen Patcher selber schreiben willst, musst du dir erst im klaren sein, was du auf jeden Fall benötigst, was du nur vielleicht benötigst, oder was völlig optional ist. Als Grundlage muss ein Patcher nur das Herunterladen der neuesten Spielversion beherrschen. Falls das Ganze dann noch etwas effizienter sein soll, schränkt man den Patcher ein wenig ein, sodass er nur noch veraltete oder nicht vorhandene Dateien herunterlädt. Wenn man noch mehr benötigt, kann man natürlich auch noch ein Versionierungssystem entwickeln, was auch das Verteilen von Pre-Releases und Co. möglich macht. Achtung: Dies sind alles nur mögliche Lösungsansätze und keine Vorgaben.

Ansatz 1: Das Herunterladen der neuesten Spielversion

Hier nimmst du einfach einen HTTP- oder FTP-Server, lädts die neueste Version als Archivdatei (z.B. ZIP-Archiv) hoch und ersetzt bei Updates einfach diese Datei. Den Patcher lässt du dann einfach die Datei herunterladen und in den Spielordner extrahieren.

Ansatz 2: Veraltete und nicht vorhandene Dateien ersetzen

In diesem Fall kann man über die Lösung mithilfe einer Hashdatei gehen. Das bedeutet, du nimmst das Wurzelverzeichnis und generierst zu jedem Datei-Inhalt einen Hash (z.B. mithilfe einer MD5-Digest). Diesem ordnest du dann einen Dateipfad zu und speicherst die Zuordnungsliste in einer Textdatei zusammen mit dem Wurzelverzeichnis auf dem Server. Nun schreibst du einen Patcher der auch so eine Hash-Zuordnung generiert, die Hashdatei vom Server herunterlädt, ausliest und miteinander vergleicht. Falls bestimmte Dateipfade fehlen, wird der Pfad zu eines Download-Liste hinzugefügt, falls die Hashes eines Schlüssels ungleich sind, wird der Pfad auch auf die Download-Liste gelegt. Danach werden alle Dateien in der Download-Liste vom Server heruntergeladen um im Spielverzeichnis gespeichert und überschrieben, falls die Datei bereits vorhanden war.

Ansatz 3: Versionierungssystem

Dies funktioniert ähnlich wie Ansatz 2, nur ein wenig komplizierter. Hier muss der Patcher zuerst eine Datei herunterladen, die die verschiedenen Versionen und deren Verzeichnisse beinhaltet (in der auch die aktuellste Version eindeutig markiert sein muss). In jedem Versionsverzeichnis liegt dann eine Hash-Datei mit der schon bekannten Hash-Zuordnung, ab diesem Punkt funktioniert dann alles wie in Ansatz 2.

Vorgefertigte Patch-Systeme

Ein vorgefertigtes Patch-System ist, das von mir entwickelte, BotA Patch System, was Open-Source ist und von jedem auf GitHub (Patcher) GitHub (Server) eingesehen werden kann. Es realisiert den Lösungsansatz 2 mittels eines HTTP-Servers und eines Patch-Clienten. Wenn du mehr darüber erfahren willst, kannst du dir ja mal den Quellcode anschauen, das System weiterentwickeln und mir ein wenig Feedback geben!

Ich hoffe, dass ich euch allen mit der Erstellung eines eigenen Patchers weiterhelfen konnte!

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge