Hier dreht sich alles um die RPG-Maker-Reihe von ASCII/Enterbrain. Der RPG-Maker ist ein Tool, mit dem du dir dein eigenes kleines Rollenspiel erstellen kannst. Du findest hier alles, was du dazu brauchst. Aber natürlich umfasst die Community noch mehr!
Version 1.1 Jeder, der ein größeres Spiel veröffentlicht hat wird es sicher kennen, Bugs die so manchen begeisterten RPG-Spieler schnell die Lust am Spiel rauben. Ein Update ist wegen der Archivdatei nicht einzeln möglich und erneut hunderte von MB runterladen, weil ein Event falsch läuft ist nicht jedermanns Sache.
Deshalb hab ich mir überlegt wie man dieses Problem möglichst bequem lösen kann und präsentiere nun meine Lösung: Sie Funktioniert für XP und VXund wenn ich noch ein paar modifikationen mach auch für die älteren Maker.
Beinhaltend: Ein Updater-Manager Ein FTP-Updater (Nur auf Anfrage) Ein Update-Skript
Der Update-Manager ist in C# geschrieben und benötigt .Net 2.0 Damit lassen sich 2 Projekt-Versionen vergleichen und alle geänderten Dateien ausfindig machen. Dazu am Besten auf "Projekt abgleichen" gehen und die alte und neue Version vergleichen lassen, indem eine beliebige Datei aus dem Projektordner gewählt wird. Anschließend auf "Erstellen" klicken und den Inhalt des erstellten "Update"-Ordners auf den Server packen. zusätzlich erlaubt es nachträgliche Änderungen im Skript. Wichtig ist, dass "Codieren" aktiviert sein muss, wenn das Spiel verschlüsselt wurde. Sounds lassen sich ebenfalls updaten und bei unverschlüsselten Spielen auch die Bilder. http://npshare.de/files/009066fd/RMUM.zip
Der FTP-Updater muss speziel modifiziert werden und gibt es nur auf Anfrage.
Das Skript gibts hier: (Nur bei verschlüsselten Spielen benötigt) !!! Wichtig !!! Es muss in der Main-Funktion Update.check aufgerufen werden um es zu starten. Außerdem müssen im Skript die load_data-Aufrufe durch Update.load ersetzt werden. Scene_Title (alle Einträge unter main (XP) bzw. load_database (VX)) Game_Map (1x im setup) Aus kompatiblitätsgründen hab ich es nicht implementiert. Edit: Nicht vergessen die Verschlüsslungssequenz "KEY = [1, 2, 3, 4, 5, 6, 7, 8]" mit dem Update zu synchronisieren, sonst können die Daten nicht gelesen werden.
Code:
#============================================================================== # ** Update #------------------------------------------------------------------------------ # Dieses Module führt eine Textdatei als Ruby-Code aus um nachträgliche # Skriptänderungen zu ermöglichen. #============================================================================== module Update #---------------------------------------------------------------------------- # - Hauptnummer: Gibt an, ob das Script zum Update kompatibel ist. # - Nebennummer: Gibt an, ob ein Update erforderlich ist. $version = 1.0 #---------------------------------------------------------------------------- # - Verschlüsslungssequenz KEY = [1, 2, 3, 4, 5, 6, 7, 8] # 12345678 @@updated = false #---------------------------------------------------------------------------- def self.check if read_file update if need_update end end #---------------------------------------------------------------------------- def self.read_file file_name = "Update.data" if FileTest.exist?(file_name) File.open(file_name, "r") do |file| @text = file.readlines #close end end end #---------------------------------------------------------------------------- def self.decryped_lines(text) code = Array.new(0, text.size) p = 0 # 1. zeile ist unverschlüsselt code[0] = text[0] for i in 0..text.size - 1 var = Array.new(0, text[i].size) # konvertiere alle Zeilen um for j in 0..text[i].size - 2 var[j] = ((text[i][j].to_i - KEY[p % KEY.size]) % 256) p += 1 end code[i] = var.pack("c*") end return code end #---------------------------------------------------------------------------- def self.need_update unless @text print("Error! Update vom Script gescheitert.") return false end @text[0][/V./] = "" if $version.to_i != @text[0].to_i # update nicht möglich print("Error! Update ist mit dieser Skriptversion nicht kompatibel.") return false end return $version < @text[0].to_f # update erforderlich end #---------------------------------------------------------------------------- def self.update begin code = decryped_lines(@text[1, @text.size - 1]) # führe das Update aus eval(code.join) # übernehme die Versionsnummer und setze updated auf true $version = @text.shift @@updated = true rescue print("Error! Update vom Script gescheitert.") end end #---------------------------------------------------------------------------- def self.load(file_name) new_file_name = file_name.clone new_file_name[0, 4] = "Update" if @@updated and FileTest.exist?(new_file_name) return Marshal.load(decryped_file(new_file_name)) else return load_data(file_name) end end #---------------------------------------------------------------------------- def self.decryped_file(file_name) data = nil File.open(file_name, "r") do |file| file.binmode data = file.read #close end # erstelle leeres Array var = Array.new(0, data.size) # konvertiere alle Bytes um for i in 0..data.size - 1 var[i] = ((data[i].to_i - KEY[i % KEY.size]) % 256) end return var.pack("c*") end end
Ein kleines Demoprojekt hab ich mal hier: http://npshare.de/files/dfadd714/Project12.zip Bitte zuerst einmal über die Game.exe und dann einmal über den Launcher starten. Sollte dieser nicht funktionieren, haste eben pech. Wenn du ne Lösung findest sag bescheid.
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.