Game Patcher schreiben?

11/28/2012 23:31 Hans-Eggert#1
Guten Tag liebe Community :)

Und zwar würde ich gerne einen Game Patcher schreiben.

Wofür brauch in den Patcher?

Naja, ich bin gerade dabei, eine etwas "größeren" Mod für eine Mod von nem Spiel zu schreiben (DayZ) und da dort häufig Updates rauskommen werden, bräuchte ich nen Update/Patcher.

Und zwar möchte ich, dass das der Patcher die Versionen vergleicht (z.B über eine lokale "version.txt" und eine die auf dem Server liegt) und dann die aktuellste Version komplett runterlädt und nicht nur die Änderungen (wäre dann per .zip).
Das ganze soll dann per FTP laufen, oder falls irgendwie möglich per Domain (ich glaub man kann das dann auch per FTP als Domain machen, z.B "127.0.0.1:21").

Ich weiß, ist ein wenig umständlich geschrieben, aber ich bin müde und mein Kopf glüht, ergo -> hab nicht soviel Ahnung von AutoIt. Wäre also gut, wenn ich da ein wenig mehr Hilfe bekommen würde....

Später möchte ich dann noch einen Launcher schreiben, dass ist jetzt aber eine andere Sache.
11/28/2012 23:58 KDeluxe#2
Die Version der lokalen Version in einer .txt zu speichern ist unnötig, dafür kannst du
Code:
FileGetVersion(@AutoItExe)
verwenden. Das sollte allerdings nur dann verwendet werden, wenn das Script kompiliert ist.

Wenn du die Dateien auf einen FTP Server hochlädst kannst du sie über einen "normalen" HTTP Download starten. Das .zip Format ist nicht unbedingt die beste Lösung, da du dafür auf eine ZIP-UDF zurückgreifen müsstest. Eine einfache Lösung wäre es, wenn du eine "Patcher.exe" auf den Server hochlädst, der dann alle Dateien mit FileInstall() überschreibt.

11/29/2012 00:09 Hans-Eggert#3
Ja, soviel Ahnung hab ich nun nicht von AutoIt, aber wird mal wohl nicht rum kommen, wenn man was schreiben will :D

Wie verwendet man "FileGetVersion" den im Script, wie wird das dann ausgelesen? Steht das dann im Script, welche Version das wäre? :D

Und so wie du das in deinem Beispiel geschrieben hast, wäre das jetzt sozusagen nach meinen Vorstellungen?
11/29/2012 06:08 Futur94#4
So ?
Code:
$Version = "Version von diesem Programm z.b 1.0"
$NewVersionRead = Inetread (BinarytoString ("Die url zur Textdatei wo die Version drinnen steht"))
If $NewVersionRead > $Version then
InetGet("URL", @DesktopDir & "\Dein neues Programm.exe")
Endif
11/29/2012 07:17 Hans-Eggert#5
Ich denke so hab ich mir das vorgestellt, aber KDeluxe hat ja noch bessere Ideen gehabt.

Ich setz das erstmal so um. :)
Wie mach ich das jetzt, dass der User vorm download seinen Pfad aussuchen kann?
11/29/2012 13:52 KDeluxe#6
In meinem Spoiler steht doch ein Codebeispiel. In diesem verwende ich auch FileGetVersion().
Falls du gerade an deinem Script arbeiten solltest, irgendwie müssen die Updates ja zustande kommen, sollte dann natürlich auch kein Update herunter geladen werden, deshalb habe ich noch "@Compiled" verwendet. Wäre die Abfrage nicht dabei, würde das Script immer von der Version der AutoIt Installation ausgehen, aktuell also 3.3.8.1.
Allerdings habe ich nicht erwähnt, wie du der kompilierten .exe die Version zuweist. Installiere dazu noch [Only registered and activated users can see links. Click Here To Register...]. Im Kontextmenü (Rechtsklick auf .au3) findest du dann die Option "Compile with options". In der Oberfläche kannst du dann die Version eintragen.

Quote:
Originally Posted by Hans-Eggert View Post
Wie mach ich das jetzt, dass der User vorm download seinen Pfad aussuchen kann?
FileSelectFolder()
11/30/2012 21:52 isaias#7
man lässt das programm eine seite aufrufen blablabla.com/blablabla/version.txt und sieht dann welche version das hat.
Code:
If Not $Returnedvalue=Version Then
Shellexecute("blablabla.com/blablabla/update")