Ergebnis 1 bis 10 von 10

Thema: 3 kleinere Probleme

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #9
    Da solche Fragen öfters kommen, hab ich auch noch ein Script von einer früheren Anfrage parat:
    Code:
    #===============================================================
    # ** Game_Save (Modul)
    #---------------------------------------------------------------
    # Speichert Spieldaten ab und lädt diese wieder.
    #===============================================================
    module Game_Save
      FILENAME = "./save" #Dateiname für Spielstand
      FILE_EXTENSION = ".rxdata"
      #Modul kann in Klassen als mixin eingefügt werden um verschiedene
      #Save-Klassen (Autosave, Schnellspeichern, ...) zu definieren
      module_function()
      #---------------------------------------------------------------
      # * save :: (filename :: String || Numeric)
      #   Wird aufgerufen um Spielstand in Datei filename zu speichern
      #---------------------------------------------------------------
      def save(filename=FILENAME+FILE_EXTENSION)
        filename = make_filename(filename) if filename.kind_of?(Numeric)
        before_save()
        File.open(filename, "wb")  {|output|
          saved_objects.each {|obj|
            Marshal.dump(obj, output)
          }
        }
        after_save()
      end
      #---------------------------------------------------------------
      # * load :: (filename :: String || Numeric)
      #   Wird aufgerufen um Spielstand in Datei filename zu laden
      #---------------------------------------------------------------
      def load(filename=FILENAME)
        filename = make_filename(filename) if filename.kind_of?(Numeric)
        before_load()
        obj=[]
        File.open(filename, "rb")  {|input|
          until input.eof? do
            obj << Marshal.load(input)
          end
        }
        loaded_objects(*obj)
        after_load()
      end
      #---------------------------------------------------------------
      # * saved_objects :: () -> Array
      #   Enthält eine Liste aller abzuspeichernden Objekte
      #   Alle Elemente müssen per Marshal#dump speicherbar sein
      #   um Liste zu erweitern aliase die Methode und erweitere den Array
      #---------------------------------------------------------------
      def saved_objects()
        [
          $game_party.actors.collect {|a| [a.character_name, a.character_hue]},
          $game_system,
          $game_switches,
          $game_variables,
          $game_self_switches,
          $game_screen,
          $game_actors,
          $game_party,
          $game_troop,
          $game_map,
          $game_player
        ]
      end
      #---------------------------------------------------------------
      # * loaded_objects :: (args :: Array)
      #   Enthält eine Zuweisung der geladenen Objekte zu Variablen
      #   Kann per aliasing erweitert werden
      #---------------------------------------------------------------
      def loaded_objects(*args)
        chars, $game_system, $game_switches, $game_variables,
        $game_self_switches, $game_screen, $game_actors, $game_party, $game_troop,
        $game_map, $game_player = *args
      end
      #---------------------------------------------------------------
      # * before_save, before_load
      #   Wird aufgerufen, bevor Spielstand gespeichert/geladen wird
      #---------------------------------------------------------------
      def before_save
        $game_system.magic_number = $data_system.magic_number
        $game_system.save_count += 1
      end
      def before_load
        #do nothing
      end
      #---------------------------------------------------------------
      # * after_save, after_load
      #   Wird aufgerufen, nachdem Spielstand gespeichert/geladen wird
      #---------------------------------------------------------------
      def after_save
        #do nothing
      end
      def after_load
        #Wenn Map geändert wurde, lade Map neu
        if $game_system.magic_number != $data_system.magic_number then
          $game_map.setup($game_map.map_id)
          $game_player.center($game_player.x, $game_player.y)
        end
        #Aktualisiere Spieldaten und starte die Map-Szene
        $game_party.refresh()
        $game_map.update
        $scene = Scene_Map.new()  
      end
      #---------------------------------------------------------------
      # * make_filename :: (n :: Numeric) -> String
      #   erzeugt einen standardmäßigen Dateinamen mit einer Nummer
      #---------------------------------------------------------------
      def make_filename(n)
        FILENAME + filename.to_s + FILE_EXTENSION
      end
    end
    #===============================================================
    # ** Game_Start (Modul)
    #---------------------------------------------------------------
    # Initialisiert Spieldaten
    #===============================================================
    module Game_Start
      # Alle Methoden dürfen auch als Singletonmethoden ausgeführt werden
      module_function()
     #--------------------------------------------------------------------------
     # * Öffne alle Dateien aus der Database und speichere ihren Inhalt
     #--------------------------------------------------------------------------
     def load_database
       $data_actors        = load_data("Data/Actors.rxdata")
       $data_classes       = load_data("Data/Classes.rxdata")
       $data_skills        = load_data("Data/Skills.rxdata")
       $data_items         = load_data("Data/Items.rxdata")
       $data_weapons       = load_data("Data/Weapons.rxdata")
       $data_armors        = load_data("Data/Armors.rxdata")
       $data_enemies       = load_data("Data/Enemies.rxdata")
       $data_troops        = load_data("Data/Troops.rxdata")
       $data_states        = load_data("Data/States.rxdata")
       $data_animations    = load_data("Data/Animations.rxdata")
       $data_tilesets      = load_data("Data/Tilesets.rxdata")
       $data_common_events = load_data("Data/CommonEvents.rxdata")
       $data_system        = load_data("Data/System.rxdata")
     end
     #--------------------------------------------------------------------------
     # * Initialisiere die Elemente des Spiels
     #--------------------------------------------------------------------------
     def initialize_global_variables
       Graphics.frame_count = 0 #Resete Spielzeit
       # Erstelle die globalen Variablen
       $game_temp          = Game_Temp.new
       $game_system        = Game_System.new
       $game_switches      = Game_Switches.new
       $game_variables     = Game_Variables.new
       $game_self_switches = Game_SelfSwitches.new
       $game_screen        = Game_Screen.new
       $game_actors        = Game_Actors.new
       $game_party         = Game_Party.new
       $game_troop         = Game_Troop.new
       $game_map           = Game_Map.new
       $game_player        = Game_Player.new
     end
     #--------------------------------------------------------------------------
     # * Initialisiere die Heldentruppe und starte das Spiel
     #--------------------------------------------------------------------------
     def start_game
       # Initialisiere die Heldentruppe
       $game_party.setup_starting_members
       # Starte die Anfangsmap
       $game_map.setup($data_system.start_map_id)
       $game_player.moveto($data_system.start_x, $data_system.start_y)
       # Starte Spiel
       $game_player.refresh
       $game_map.autoplay
       $game_map.update
       $scene = Scene_Map.new
     end
     #--------------------------------------------------------------------------
     # * Wenn per Testkampf gestartet wird, starte Kampf
     #--------------------------------------------------------------------------
     def start_battle
       #Initialisiere Heldentruppe des Testkampfes
       $game_party.setup_battle_test_members
       # Einstellungen des Testkampfes
       $game_temp.battle_troop_id = $data_system.test_troop_id
       $game_temp.battle_can_escape = true
       $game_map.battleback_name = $data_system.battleback_name
       # Musik abspielen
       $game_system.se_play($data_system.battle_start_se)
       $game_system.bgm_play($game_system.battle_bgm)
       # Starte Kampf
       $scene = Scene_Battle.new
     end
    
     def start
       self.load_database
       self.initialize_global_variables
       if $BTEST then self.start_battle else self.start_game end
     end
    end
    #===============================================================
    # ** Scene_Title (Klasse)
    #---------------------------------------------------------------
    # Überspringt Titel und lädt sofort Spielstand
    #===============================================================
    class << Scene_Title
      include Game_Start
      def new()
        start #Gib aktuelle Szene (Map) zurück
      end
    end
    Einfach in Scripteditor einfügen. Startmenü wird automatisch übersprungen. Mit dem "Script..." Befehl stehen dir zusätzlich diese Möglichkeiten zur Verfügung:
    Code:
    Game_Save.save(1) #=> speichert Spielstand auf Slot 1
    Game_Save.load(1) #=> Lädt Spielstand auf diesen Slot wieder
    Womit du nicht mehr auf das Speicher/Lade-Menü angewiesen bist, falls du das ebenfalls neu machen möchtest.

    Geändert von -KD- (18.06.2008 um 21:31 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •