RPG-Maker Quartier

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!
Aktuelle Zeit: Di Mär 03, 2020 0:42

Alle Zeiten sind UTC + 1 Stunde



Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht

 Betreff des Beitrags: Update-Maker
BeitragVerfasst: Mi Jan 05, 2011 19:28 
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 VX und 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.

mfg TWS


Nach oben
  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde


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.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de