collapse collapse

 Community


 User Info




Willkommen Gast. Bitte einloggen oder registrieren.

 Partnerseiten

rpgvx.net

Das Forum ist offline

Autor Thema: Savescreen Deluxe V 0.95b  (Gelesen 1213 mal)

Offline Michael Funkel

  • Event-Jongleur
  • **
  • Beiträge: 52
  • Derzeit fleißig am scripten
Savescreen Deluxe V 0.95b
« am: Juni 25, 2010, 10:52:36 »
Save Deluxe



Was macht es?
Es verändert den Savescreen, indem es die Speicherstände in eine Liste setzt anstatt für jeden ein eigenes Fenster anzufertigen. Dies ermöglicht eine größere Menge an Spielständen, während zugleich die Informationen, die man über den ausgewählten Spielstand erhält, in einem zweiten Fenster weitaus mehr Informationen liefern.
Diese habe ich auf zwei Seiten verteilt (mit dem A-Button kann man umblättern), auf der ersten findet man Infos zur Gruppe sowie zum Spielfortschritt, auf der zweiten Infos über die Map.
Darüber hinaus erweitert es das Spiel um die Möglichkeit, dem Spieler %-Punkte auf den Spielverlauf zu geben. Diese können per einfachem Script-Befehl über Events vergeben werden (siehe Anleitung).

Screenshots
Spoiler for Hiden:



Das Script selbst:
Spoiler for Hiden:
#===============================================================================
#               _______      _____     __      __  ___________
#              /  ___  \    /  _  \   |  |    |  ||           |
#             /  /   \__\  /  / \  \  |  |    |  ||   ________|
#             \  \_____   /  /   \  \ |  |    |  ||  |___      
#              \_____  \ |  |_____|  ||  |    |  ||   ___|    
#             ___    \  \|   _____   | \  \  /  / |  |________
#             \  \___/  /|  |     |  |  \  \/  /  |           |
#              \_______/ |__|     |__|   \____/   |___________|
#
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Save Deluxe V 0.96
# Credits: An Michael Funkel
# Letztes Update: Freitag, 25.06.2010
# Level: Leicht
#
# Dieses Script ermöglicht eine bessere Nutzung der Speicherszene, indem sie die
# um einige praktische Neuerungen erweitert.
#
#===============================================================================
# Updates:
# ----------------------------------------------------------------------------
# o 22.06.2010 - Beginn des Scripts auf V 0.1
#   +: Einrichtung der Spielfortschritte und Prozentleiste
#   +: Einbindung der ersten Script-Befehle in den Interpreter
# o 23.06.2010 - Gestaltung der ersten Bestandteile, Update auf V 0.9b
#   +: Überarbeitung der Spielfortschritte und Prozentleiste
#   +: Kompatibilitätstests, Verwendung von MK3 Window_Help_Vary möglich
#   +: Neuer Interpreter-Befehl: lose_gamepart
#   +: Modul erweitert
#   +: Einrichtung der Speicherfenster
#   +: Bugfixing
# o 24.06.2010 - Überarbeitung der Darstellung, Update auf V 0.92
#   +: Goldfenster umgestaltet und mit neuen Funktionen versehen
#   +: Prozentleiste und Zeitangabe umpositioniert
#   +: Einbau der ALLOW_SANDL-Funktion
#   +: Möglichkeit zum Save-Folder anlegen eingebaut
#   +: Bugfixing
# o 25.06.2010 - Letzte Aktualisierungen vor Erst-Release, Update auf V 0.96
#   +: Erweiterung des Headers
#   +: Verbesserung der Mapname-Abfrage
#   +: Verbesserung der Prozentwert-Berechnung
#   +: Kompatibilitätsverbesserungen
#   +: Bugfixing
#===============================================================================
# Installation und Anleitung
#===============================================================================
#
# Platziere dieses Script irgendwo zwischen Material und Main.
# Nach Möglichkeit sollten alle Scripts, welche write_save_data oder read_save_data
# überschreiben in der Liste ÜBER Save Deluxe stehen, alle, die do_save oder do_load
# als alias modifizieren, UNTER Save Deluxe.
# Aufruf der Scene funktioniert weiterhin wie gewohnt, allerdings gibt es eine
# Vielzahl an Möglichkeiten, wie man sie stattdessen aufrufen kann:
# Schreibweise ist "$scene = Scene_File.new(sav?, tit?, ev?, call, return, param)"
# Dies alles schreibt man ohne die "", allerdings müssen innerhalb der Klammern
# ein paar "" gesetzt werden, wenn man es nutzt. Pflicht ist hierbei nur "sav?",
# alle anderen Felder kann man freilassen.
#   sav?: kann true, false oder nil sein; ist es true, wird der Screen zum Spei-
#         chern genutzt, in allen anderen Fällen zum Laden
#   tit?: wird die normale Title-Scene genutzt, so wird bei Abbrechen des Screens
#         automatisch die Title-Scene wieder aufgerufen, wenn tit? true ist
#    ev?: das selbe wie bei tut, nur mit Aufruf der Map-Scene
#   call: die in diesem Parameter gespeicherte Scene (mit "" schreiben und inkl.
#         .new und aller Parameter, z.B. "Scene_Menu.new(4)") wird bei Laden des
#         Spielstandes, welcher während dem aktuellen Vorgang erstellt wurde, auf-
#         gerufen. Wenn man wie im obigen Beispiel also speichert, wird bei Neu-
#         laden dieses Spielstandes das Menü mit Index auf Position 5 (beginnt
#         bei 0 zu zählen, also 4 + 1 = 5) geöffnet
# return: bestimmt die Scene, zu welcher zurückgekehrt wird, wenn man den Screen
#         wieder verlässt, hierbei gibt man einfach nur den Namen der aufzurufen-
#         den Class der Scene an
#  param: benötigt die Scene aus "return" Parameter, so können diese hier geschrie-
#         ben werden, dies muss ebenfalls in "" gesetzt werden und innerhalb der
#         "" muss alles in () stehen
# Spielverlaufspunkte:
# Um einem Spieler %-Werte zu geben, muss man lediglich per Script-Befehl in einem
# Event "gain_gamepart(step, val)" (ohne "") eingeben. "step" steht hierbei für
# den Spielschritt, den der Spieler erreicht hat, und "val" für den Promillwert
# (das Script arbeitet mit einer Nachkommastelle bei den Prozent). Jeden "step"
# kann man nur ein einziges mal pro Spielstand erreichen, sodass man nicht durch
# Wiederholen von immer demselben Event die Leiste auf 100 (oder mehr) erhöht.
# Mit "lose_gamepart(step, val)" (ohne "") mit selben Regeln zu den Parametern
# step und val wie bei gain_gamepart lässt sich eine Handlung aus der Liste der
# erreichten Handlungen wieder streichen.
# Die Prozentleiste wird mit dem Befehl "draw_game_percent(x, y, width, height, val)"
# (ohne "") gezeichnet und kann von jedem Window ausgeführt. x, y, width und height
# stehen hierbei für Position und Größe auf dem Screen, val für den Prozentwert.
# Gibt man für val keinen Wert ein, wird automatisch die in $game_system.game_percent
# gespeicherte Variable verwendet. Wichtig hierbei ist, dass diese bei der Dar-
# stellung der Zahl auf der Leiste durch 10 geteilt wird.
# Der Rest kann weiter unten über module MK3::SAVE konfiguriert werden, die je-
# weiligen Optionsmöglichkeiten werden größtenteils vor Ort erklärt.
#
# Steuerung im Spiel:
# Mit den Pfeiltasten kann man durch die Slots durchscrollen, mit L-/R-Button
# seitenweise springen. Der aktuell ausgewählte Slot wird auf dem Fenster rechts
# mit näheren Infos dargestellt.
# Mit dem B-Button kann man die Scene wieder schließen und kehrt zu der vorheri-
# gen Scene zurück (vorausgesetzt, die Einstellungen sind dementsprechend getrof-
# fen). Ist im Modul ALLOW_SANDL auf true gesetzt und das Speichern-/Laden-Fenster
# gerade aktiv, wird stattdessen dieses geschlossen.
# Mit dem C-Button kann man den aktuell ausgewählten Slot laden bzw. speichern,
# je nachdem, ob man gerade zum laden oder zum speichern geöffnet hat (ist von
# dem oben definierten "sav?"-Parameter abhängig). Ist ALLOW_SANDL auf true ge-
# setzt, wird stattdessen das Speichern-/Laden-Fenster geöffnet und man kann mit
# erneutem C-Button die gewählte Aktion ausführen (das S/L-Fenster wird nicht im
# Title-Screen aufgerufen)
# Mit dem A-Button schließlich kann man, während der Cursor auf einem belegten
# Spielstand ist, die Info-Seiten wechseln, dies sind zwei. Auf der ersten sieht
# man die aktive Party mit Name, Level, Lebens- und Magie-Balken, den Goldvorrat,
# eine Spielfortschrittsleiste und die aktuelle Spielzeit nach 3-stelliger Stun-
# denzahl sowie mit Minuten und Sekunden. Auf der zweiten stehen Name der aktu-
# ellen Map, zurückgelegte Strecke in Km und ein Ausschnitt der Map, was im Map-
# Namen in [] eckigen Klammern steht, wird aus dem Namen rausgefiltert.
#===============================================================================
#
# Kompatibilität
# - Alias: Game_Temp: intialize
# - Alias: Game_System: initialize
# - Alias: Scene_File: read_save_data, write_save_data
# - Attribut: Game_Temp: save_bitmap (accessor)
# - Attribut: Game_System: last_scene, game_percent, game_steps (accessor)
# - Erweitert: Window_Base: draw_game_percent
# - Erweitert: Scene_Title: make_filename
# - Hinzugefügt: Class: Window_Savelist
# - Hinzugefügt: Class: Window_Savefile
# - Hinzugefügt: glob. Attribut: $imported["MK3-Save"]
# - Hinzugefügt: glob. Attribut: $data_mapinfos
# - Include: Game_Interpreter: MK3::COMMANDS
# - Modul: MK3::SAVE, MK3::COMMANDS
# - Overwrite: Scene_Title: check_continue
# - Overwrite: Scene_File: initialize, start, create_savefile_windows, terminate
#                          return_scene, update, do_save, do_load
# - RPG: MapInfo: save_name
# - Getestet mit: MK3-PPP Custom Menu System V 1.11a
#
#===============================================================================
#
# Freigegeben für jede nicht-kommerzielle Verwendung, bei kommerzieller Verwen-
# dung möchte ich informiert werden.
# Kontakt: rpgvx.net, unter Nick Michael Funkel
# Dieses Script darf nicht auf anderen Websites angeboten werden.
#
#===============================================================================

module MK3
  module SAVE
    # Dieser Schalter bestimmt, ob man laden und speichern gleichzeitig kann.
    ALLOW_SANDL = true
    
    # Dieser Schalter bestimmt, ob die Scene nach Anlegen einer Speicherung wie-
    # der geschlossen wird.
    SCENE_RETURN = false
    
    # Dieser Wert bestimmt, wie viele Speicherslots man anlegen kann.
    SLOTS = 30
    
    # Diese Zahl bestimmt die Icon-ID von bereits belegten Slots.
    USED_ICON = 133
    
    # Diese Zahl bestimmt die Icon-ID von unbelegten Slots.
    UNUSED_ICON = 141
    
    # Dieser String legt das Unterverzeichnis fest, in welches die Daten gespei-
    # chert werden sollen. Gib "" ein wenn es direkt in den Spielordner gelegt
    # werden soll, ansonsten "Name-des-Verzeichnisses" + "/".
    SAVE_FOLDER = "Save/"
    
    # Dieser String bestimmt den Namen der Speicherdateien.
    SAVE_NAME = "Save"
    
    # Dieser String bestimmt den Namen benutzter Speicherslots in der Liste.
    SLOT_NAME = "Slot"
    
    # Dieser String bestimmt den Namen unbenutzter Speicherslots in der Liste.
    SLOT_NAME_UNUSED = "empty"
    
    # Dieser String bestimmt die Scene, zu welcher zurückgekehrt werden soll,
    # wenn bei Aufruf des Screens keine andere festgelegt wird.
    SCENE_RET = "Scene_Menu"
    
    # Dieser String legt die Parameter fest, welche bei Verlassen des Screens
    # an die nachfolgende Scene übergeben werden sollen.
    SCENE_RET_PARAM = "(4)"
    
    # Dieser Text steht im Hilfe-Fenster, wenn man speichern möchte.
    HELP_SAVE = "Wähle den Slot, um deinen Spielstand zu speichern."
    
    # Dieser Text steht im Hilfe-Fenster, wenn man laden möchte.
    HELP_LOAD = "Wähle den Spielstand, den du laden möchtest."
    
    # Dieser Text steht im Hilfe-Fenster, wenn ALLOW_SANDL = true.
    HELP_SANDL = "Lade oder speichere einen Spielstand."
    
    # Diese Zahl bestimmt die Nachkommastellen beim Goldwert, sodass man zum Bei-
    # spiel Euro angeben kann (dafür dann GOLD_DIV = 2 eingeben und "Euro" in der
    # Database unter Terms für "G" eintragen.
    GOLD_DIV = 2
    
    # Dieser String wird hinter den Goldbetrag geschrieben.
    GOLD = "€"
    
    # Diese Zahl bestimmt die Farb-ID des Window-Skins, in welcher Lv., Gold,
    # Spielfortschritt und all die andern Werte geschrieben werden sollen.
    SIGN_COLOR = 4
    
    # Dieser Schalter bestimmt, ob im Speicherstand eine Prozentleiste dargestellt
    # werden soll.
    SHOW_PER = true
    
    # Diese Zahl legt die anfängliche Prozentzahl fest, beachte hierbei, dass die
    # Prozent eigentlich in Promille geschrieben werden, da das Script diese mit
    # Wert / 10 angibt.
    PERCENT_DEFAULT = 0
    
    # Diese Zahl bestimmt die erste Füllfarbe der Prozenleiste.
    PERCENT_COLOR_1 = 0
    
    # Diese Zahl bestimmt die zweite Füllfarbe der Prozentleiste.
    PERCENT_COLOR_2 = 8
    
    # Dieser Schalter bestimmt, ob die Prozentleiste mit Zahlen überlegt wird.
    SHOW_PER_VALUE = true
  end # SAVE
  
#===============================================================================
# MK3 Phoenix Power Productions übernimmt keinerlei Haftung für sämtliche Schä-
# den, die an Material oder Personen entstehen, wenn die Zeilen unterhalb dieses
# Kommentars verändert werden.
#===============================================================================

  module COMMANDS
    def gain_percent(val)
      $game_system.game_percent += [val, (1000 - $game_system.game_percent)].min
    end
    
    def lose_percent(val)
      $game_system.game_percent -= [val, $game_system.game_percent].min
    end
    
    def gain_gamepart(step, val)
      if !$game_system.game_steps.include?(step)
        $game_system.game_steps.push(step)
        gain_percent(val)
      end
    end
    
    def lose_gamepart(step, val)
      if $game_system.game_steps.include?(step)
        $game_system.game_steps.delete(step)
        lose_percent(val)
      end
    end
  end # COMMANDS
end

#===============================================================================
#
# * Dies ermöglicht das Auslesen eines Mapnamens, ohne dass dabei Einträge in
#   [] berücksichtigt würden.
#
#===============================================================================

if $data_mapinfos == nil
  $data_mapinfos = load_data("Data/MapInfos.rvdata")
end

class RPG::MapInfo
  def save_name
    return @name.gsub(/\[.*\]/) { ""}
  end
end # RPG::MapInfo

$imported = {} if $imported == nil
$imported["MK3-Save"] = true

#===============================================================================
#
# * Dies richtet ein Hintergrundbild für die Speicherdatei ein.
#
#===============================================================================

class Game_Temp
  attr_accessor :save_bitmap # Speichert den aktuellen Screen beim Speichern
  
  alias mk_save_initialize initialize
  
  def initialize
    mk_save_initialize
    @save_bitmap = Bitmap.new(1, 1)
  end
end # Game_Temp

#===============================================================================
#
# * Dies erweitert Game_System um die Prozent-Variable.
#
#===============================================================================

class Game_System
  attr_accessor :last_scene   # Speichert die letzte Scene vor Speicher-Screen
  attr_accessor :game_percent # Speichert den Spielfortschritt in Promille
  attr_accessor :game_steps   # Merkt sich, welche Schritte im Spielverlauf
                              # bereits vollzogen wurden
  
  alias mk_save_initialize initialize
  
  def initialize
    mk_save_initialize
    @last_scene = ""
    @game_percent = MK3::SAVE::PERCENT_DEFAULT
    @game_steps = []
  end
end # Game_System

#===============================================================================
#
# * Dies baut die neuen Befehle in den Interpreter ein.
#
#===============================================================================

class Game_Interpreter
  include MK3::COMMANDS
end # Game_Interpreter

#===============================================================================
#
# * Dies erweitert Window_Base um die Möglichkeit, eine Spielfortschritts-Leiste
#   zu zeichnen.
#
#===============================================================================

class Window_Base < Window
  def draw_game_percent(x, y, width, height, per = $game_system.game_percent)
    gc1 = text_color(MK3::SAVE::PERCENT_COLOR_1)
    gc2 = text_color(MK3::SAVE::PERCENT_COLOR_2)
    fill = width * per / 1000
    self.contents.fill_rect(x, y + 8, width, height - 12, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + 8, fill, height - 12, gc1, gc2)
    return if !MK3::SAVE::SHOW_PER_VALUE
    self.contents.draw_text(x, y, width, height, (per / 10.0).to_s + "\%", 2)
  end
end # Window_Base

#===============================================================================
#
# * Dies erstellt die Liste der Speicherstände im Save-Screen Deluxe.
#
#===============================================================================

class Window_Savelist < Window_Selectable
  def initialize(index = 0)
    super(0, WLH + 32, 140, 384 - WLH)
    @index = index
    @item_max = MK3::SAVE::SLOTS
    refresh
  end
  
  def refresh
    create_contents
    for i in 0..MK3::SAVE::SLOTS do
      draw_slot(i)
    end
  end
  
  def draw_slot(i)
    icon_id = file_exist?(i) ? MK3::SAVE::USED_ICON : MK3::SAVE::UNUSED_ICON
    draw_icon(icon_id, 0, i * WLH, true)
    text = file_exist?(i) ? MK3::SAVE::SLOT_NAME + sprintf(" %02d", i + 1).to_s : MK3::SAVE::SLOT_NAME_UNUSED
    self.contents.draw_text(32, i * WLH, self.contents.width - 32, WLH, text)
  end
  
  def file_exist?(i)
    return FileTest.exist?(make_filename(i))
  end
  
  def update
    super
  end
  
  def filename?
    return make_filename(@index)
  end
  
  def make_filename(index)
    return MK3::SAVE::SAVE_FOLDER + MK3::SAVE::SAVE_NAME + "#{index + 1}.rvdata"
  end  
end # Window_Savefile

#===============================================================================
#
# * Dies erstellt das Info-Fenster zum ausgewählten Speicherstand.
#
#===============================================================================

class Window_Savefile < Window_Base
  attr_accessor :viewport # Erstellt den Map-Screen
  
  def initialize(index = 0)
    super(140, WLH + 32, 404, 384 - WLH)
    @index = index
    @page = 1
    update_screen(@index) if file_exist?(@index)
  end
  
  def file_exist?(i)
    return FileTest.exist?(make_filename(i))
  end

  def make_filename(index)
    return MK3::SAVE::SAVE_FOLDER + MK3::SAVE::SAVE_NAME + "#{index + 1}.rvdata"
  end  

  def update(index)
    super()
    self.contents.clear if !file_exist?(@index)
    if Input.trigger?(Input::A)
      return if !file_exist?(@index)
      @page = @page == 1 ? 2 : 1
      draw_infos(@page)
    end
    return if @index == index
    update_screen(index)
    @index = index
  end
  
  def update_screen(index)
    if file_exist?(index)
      file = File.open(make_filename(index), "rb")
      @characters         = Marshal.load(file)
      @frame_count        = Marshal.load(file)
      last_bgm           = Marshal.load(file)
      last_bgs           = Marshal.load(file)
      @game_system        = Marshal.load(file)
      game_message       = Marshal.load(file)
      game_switches      = Marshal.load(file)
      game_variables     = Marshal.load(file)
      game_self_switches = Marshal.load(file)
      @game_actors        = Marshal.load(file)
      @game_party         = Marshal.load(file)
      game_troop         = Marshal.load(file)
      @game_map           = Marshal.load(file)
      @game_player        = Marshal.load(file)
      draw_infos(@page)
    else
      @viewport.dispose if @viewport != nil
    end
  end
  
  def draw_infos(page)
    self.contents.clear
    self.contents.draw_text(0, self.contents.height - WLH, 200, WLH, "Aktuelle Seite: " + page.to_s + " von 2")
    self.contents.draw_text(200, self.contents.height - WLH, 172, WLH, "Nächste Seite: A", 2)
    case page
    when 1
      @viewport.dispose if @viewport != nil
      for i in 0..@characters.size do
        actor = $game_actors[i + 1]
        draw_actor_face(actor, i * 93, WLH, 92)
        draw_actor_name(actor, i * 93, 0)
        self.contents.font.color = text_color(MK3::SAVE::SIGN_COLOR)
        self.contents.draw_text(40 + i * 93, WLH + 78, 53, WLH, "Lv.")
        self.contents.font.color = normal_color
        self.contents.draw_text(65 + i * 93, WLH + 78, 28, WLH, actor.level, 2)
        draw_actor_hp_gauge(actor, i * 93, 118, 92)
        draw_actor_hp(actor, i * 93, 118, 92)
        draw_actor_mp_gauge(actor, i * 93, 118 + WLH, 92)
        draw_actor_mp(actor, i * 93, 118 + WLH, 92)
      end
      self.contents.font.color = text_color(MK3::SAVE::SIGN_COLOR)
      self.contents.draw_text(0, 166, 100, WLH, "Fortschritt:") if MK3::SAVE::SHOW_PER
      self.contents.draw_text(0, 190, 100, WLH, "Spielzeit:")
      self.contents.draw_text(0, 214, 100, WLH, Vocab.gold + ":")
      self.contents.font.color = normal_color
      draw_game_percent(108, 166, 112, WLH, @game_system.game_percent) if MK3::SAVE::SHOW_PER
      zeit = game_time
      self.contents.draw_text(100, 190, 120, WLH, zeit, 2)
      self.contents.draw_text(100, 214, 120, WLH, get_gold_value + " " + MK3::SAVE::GOLD, 2)
      draw_reserve if $imported["MK3-Party"]
    when 2
      self.contents.font.color = text_color(MK3::SAVE::SIGN_COLOR)
      self.contents.draw_text(0, 0, 90, WLH, "Location:")
      self.contents.draw_text(210, 0, 90, WLH, "Zur. Strecke:")
      self.contents.font.color = normal_color
      text = get_map_name
      self.contents.draw_text(90, 0, 120, WLH, text)
      text2 = (@game_party.steps / 1000.0).to_s + " Km"
      self.contents.draw_text(300, 0, 72, WLH, text2, 2)
      create_tilemap(@game_map.data, @game_map.display_x, @game_map.display_y)
    end
  end
  
  def draw_reserve
  end

  def get_map_name
    return $data_mapinfos[@game_map.map_id].save_name
  end
  
  def game_time
    time = @frame_count / Graphics.frame_rate
    hour = time / 3600
    min = time / 60 % 60
    sec = time % 60
    return sprintf("%03d:%02d:%02d h", hour, min, sec)
  end
  
  def get_gold_value
    gold = @game_party.gold / (10.0 ** MK3::SAVE::GOLD_DIV)
    return sprintf("%.2f", gold)
  end
  
  def create_tilemap(map_data, ox, oy)
    @viewport.dispose if @viewport != nil
    @viewport = Viewport.new(self.x + 2 + 16, self.y + 32 + 16, 348, 256)
    @viewport.z = self.z
    @tilemap = Tilemap.new(@viewport)
    @tilemap.bitmaps[0] = Cache.system("TileA1")
    @tilemap.bitmaps[1] = Cache.system("TileA2")
    @tilemap.bitmaps[2] = Cache.system("TileA3")
    @tilemap.bitmaps[3] = Cache.system("TileA4")
    @tilemap.bitmaps[4] = Cache.system("TileA5")
    @tilemap.bitmaps[5] = Cache.system("TileB")
    @tilemap.bitmaps[6] = Cache.system("TileC")
    @tilemap.bitmaps[7] = Cache.system("TileD")
    @tilemap.bitmaps[8] = Cache.system("TileE")
    @tilemap.map_data = map_data
    @tilemap.ox = ox / 8 + 99
    @tilemap.oy = oy / 8 + 90
  end  
end # Window_Savefile

unless $imported["MK3-Title"]
  
#===============================================================================
#
# * Dies erlaubt Scene_Title, Spielstände aus einem Spielstand-Verzeichnis ausle-
#   sen zu können.
#
#===============================================================================

class Scene_Title < Scene_Base
  def check_continue
    @continue_enabled = (Dir.glob(make_filename).size > 0)
  end

  def make_filename
    return MK3::SAVE::SAVE_FOLDER + MK3::SAVE::SAVE_NAME + '*.rvdata'
  end  
end # Scene_Title

end # unless

#===============================================================================
#
# * Dies überschreibt die ursprüngliche Speicher-Scene.
#
#===============================================================================

class Scene_File < Scene_Base
  alias mk_save_read_save_data read_save_data
  alias mk_save_write_save_data write_save_data
  
  def initialize(saving, t = nil, e = nil, call_scene = "Scene_Map.new", scene_return = MK3::SAVE::SCENE_RET, param =

MK3::SAVE::SCENE_RET_PARAM)
    if MK3::SAVE::SAVE_FOLDER != ""
      Dir.mkdir(MK3::SAVE::SAVE_FOLDER) if !FileTest.directory?(MK3::SAVE::SAVE_FOLDER)
    end
    @saving = saving
    @title = t
    @event = e
    if MK3::SAVE::ALLOW_SANDL and !@title
      @command_window = Window_Command.new(140, ["Speichern", "Laden", "Zurück"])
      @command_window.x = 202
      @command_window.y = 156
      @command_window.visible = false
      @command_window.active = false
      @command_window.z = 1000
    end
    $game_system.last_scene = call_scene
    @scene_return = scene_return + ".new" + param
  end
  
  def start
    create_menu_background
    @help_window = $imported["MK3-Help"] ? Window_Help_Vary.new : Window_Help.new
    text = @saving == true ? MK3::SAVE::HELP_SAVE : MK3::SAVE::HELP_LOAD
    text = MK3::SAVE::HELP_SANDL if !@title and MK3::SAVE::ALLOW_SANDL
    @help_window.set_text(text)
    create_savefile_windows
  end
  
  def create_savefile_windows
    index = $game_temp.last_file_index > 0 ? $game_temp.last_file_index : 0
    @savelist_window = Window_Savelist.new(index)
    @savefile_window = Window_Savefile.new
  end
  
  def terminate
    @help_window.dispose
    @savelist_window.dispose
    @savefile_window.viewport.dispose if @savefile_window.viewport != nil
    @savefile_window.dispose
    @command_window.dispose if MK3::SAVE::ALLOW_SANDL and @command_window != nil
  end
  
  def update
    if Input.trigger?(Input::B)
      if !MK3::SAVE::ALLOW_SANDL or (MK3::SAVE::ALLOW_SANDL and !@command_window.active)
        Sound.play_cancel
        return_scene
      elsif MK3::SAVE::ALLOW_SANDL and @command_window.active
        @command_window.active = false
        @command_window.visible = false
        @savelist_window.active = true
      end
    end
    @savelist_window.update
    @savefile_window.update(@savelist_window.index)
    if Input.trigger?(Input::C)
      if !MK3::SAVE::ALLOW_SANDL or @title
        if @saving
          do_save
        else
          if @savelist_window.file_exist?(@savelist_window.index)
            do_load
          else
            Sound.play_buzzer
            return
          end
        end
        $game_temp.last_file_index = @savelist_window.index
      elsif !@title
        if @command_window.active
          case @command_window.index
          when 0
            do_save
            @command_window.active = false
            @command_window.visible = false
            @savelist_window.active = true
          when 1
            if @savelist_window.file_exist?(@savelist_window.index)
              do_load
            else
              Sound.play_buzzer
            end
          when 2
            @command_window.active = false
            @command_window.visible = false
            @savelist_window.active = true
          end
        else
          @savelist_window.active = false
          @command_window.active = true
          @command_window.visible = true
          frei = @savelist_window.file_exist?(@savelist_window.index) ? true : false
          @command_window.draw_item(1, frei)
        end
      end
    end
    return if @title
    @command_window.update if MK3::SAVE::ALLOW_SANDL and @command_window.active
  end
  
  def do_save
    Sound.play_save
    file = File.open(@savelist_window.filename?, "wb")
    write_save_data(file)
    file.close
    return_scene if MK3::SAVE::SCENE_RETURN
    @savelist_window.refresh
    @savefile_window.update_screen(@savelist_window.index)
  end
  
  def do_load
    Sound.play_load
    file = File.open(@savelist_window.filename?, "rb")
    read_save_data(file)
    file.close
    $scene = $game_system.last_scene != "" ? eval($game_system.last_scene) : Scene_Map.new
    RPG::BGM.fade(1500)
    Graphics.fadeout(60)
    Graphics.wait(40)
    @last_bgm.play
    @last_bgs.play
  end
  
  def read_save_data(file)
    mk_save_read_save_data(file)
  end
  
  def write_save_data(file)
    mk_save_write_save_data(file)
  end
  
  def return_scene
    if @title
      $scene = Scene_Title.new
    elsif @event
      $scene = Scene_Map.new
    else
      $scene = eval(@scene_return)
    end
  end
end # Scene_File
#===============================End of Script==================================#

Anleitung:
Zur Verwendung einfach zwischen Material und Main einfügen. Sollte ein Script Methoden des Speicherscreens überschreiben, könnte dies zu Kompatibilitätsproblemen führen, der Rest müsste eigentlich problemlos funktionieren. Scripts, welche den Title-Screen verändern, sollten in der Liste über meinem Script stehen. Wenn weitere Kompatibilitätsprobleme auftauchen, mir melden (mit verwendeten Scripts und Art des Problems). Sollte das Problem an meinem Script liegen, so werde ich dieses updaten und hier veröffentlichen, sonst werde ich per PM bei selten verwendeten Scripts, hier im Thread bei häufiger verwendeten Scripts, erklären, wie man das andere Scripts entsprechend abändern kann (die meisten Anfragen, die ich zu Kompatibilitätsproblemen meiner Scripts zu anderen bekam, waren aufgrund Fehler der anderen Scripts entstanden).
Die Anleitung im Header ist eigentlich bereits recht umfassend gestaltet, aber hier ein paar Anmerkungen...
Aufrufen kann man das Script einfach mit dem Befehl "$scene = Scene_File.new(saving)" (ohne ""). Die restlichen Parameter (allesamt im Header erklärt) sind freiwillig, nutzt man ALLOW_SANDL (Teil der Konfigurationsmöglichkeiten, die direkt nach dem Header folgen), ist saving zwar auch unnötig, aber gibt man weder true, false, noch nil an, so gibt es eine Fehlermeldung.
Der Aufruf per Title-Screen, Event und Menü erfolgt weiterhin wie gewohnt, allerdings kann man die Sache mit dem Menü auch umgestalten (findet sich im Konfigurationspart).
Steuerung im Spiel ist relativ leicht verständlich und wird auch im Header ausführlich erklärt, sollte noch was wichtiges unklar sein, mir melden, dann wird's umgeschrieben.
Mit dem Befehl gain_gamepart(step, val), step steht für die begangene Handlung, val für den dafür erhaltenen Prozentwert (in Promille angeben, zur Darstellung wird die Zahl durch 10 geteilt wegen Komma-Darstellung), kann man in einem Event so die Spielfortschrittsleiste füllen. Ein step kann nur einmalig vergeben werden, wenn man ihn jedoch aus der Liste löscht (geht mit dem Befehl lose_gamepart(step, val)), kann er erneut erhalten werden.

Nutzungsbedingungen:
Freigegeben für jede Nutzung in einem nicht-kommerziellen Produkt, bei einem kommerziellen will ich benachrichtigt werden.
Für die Nutzung des Scripts will ich einen Credits-Eintrag.

Letzte Anmerkungen:
Auf der ersten Info-Seite ist noch ein wenig Platz, wer weiß, wie ich diese füllen kann, bitte melden, damit das Script schnellstmöglich Version 1.0 erreicht. ^^
Außerdem bin ich jederzeit für neue Optionen, Verbesserungen und ähnliches zu haben.

Edit:
Leichte Änderung am Spielverlaufswert. Update auf Version 0.96
« Letzte Änderung: Juni 25, 2010, 11:37:10 von Michael Funkel »
Und nie vergessen - Wir haben nur eine Welt...
Wenn sie zerbricht haben wir zwei.

Ruby sollte sich als Standard-Sprache etablieren!

Bitte bewahrt uns vorm Verhungern!

Re: Savescreen Deluxe V 0.95b

Offline Boogatie Roll

  • VX-Meister
  • ****
  • Beiträge: 676
  • Java[Spiele] Programmierer
    • BRolls Game Website
Re: Savescreen Deluxe V 0.95b
« Antwort #1 am: Juni 25, 2010, 12:09:18 »
Das sieht doch mal super aus!
So findet man bestimmt auch bei 100 Spielständen den richtigen wieder.^^
Werd ich bestimmt mal benutzen.

 


 Bild des Monats

rooftop party

Views: 3614
By: papilion

 Umfrage

  • Wer soll das BdM gewinnen?
  • Dot Kandidat 1
  • 3 (25%)
  • Dot Kandidat 2
  • 1 (8%)
  • Dot Kandidat 3
  • 2 (16%)
  • Dot Kandidat 4
  • 0 (0%)
  • Dot Kandidat 5
  • 6 (50%)
  • Stimmen insgesamt: 12
  • View Topic

 Schnellsuche





SimplePortal 2.3.3 © 2008-2010, SimplePortal