Invité Invité
| Sujet: RGSS2 -> QuickSave Lun 13 Juin 2011, 16:21 | |
| Ce petit module est très facile à utiliser et plutot que fournir un système de save super perfectionné, je préfère donner des outils de conception (notamment via les évenements) très faciles et modulable: - Code:
-
#Module complémentaire pour la gestion des sauvegarde #Auteur: Nuki #Liste des méthodes utilisables #============================================================= # Quicksave::load(id) -> Charge une partie sur un slot (id) de 1 à 4 # Quicksave::save(id) -> Sauvegarde une partie sur un slot (id) de 1 à 4 # Quicksave::copy(to, into) -> Copie un slot(to) de 1 à 4 sur un autre slot (into) de 1 à 4 # Quicksave::erase(id) -> Supprime un slot (id) de 1 à 4 # Quicksave::exist?(id) -> retourne true ou false si un fichier existe ou pas selon son ID # Quicksave::extract(id) -> retourne un tableau de donnée minimaliste #============================================================= #Les méthodes peuvent être appelée à partir d'un Evenement module Quicksave MAX_SLOT = 4 #charge une partie a partir d'un block def self.load(id_save) id_save = 1 if id_save < 1 id_save = Quicksave::MAX_SLOT if id_save > Quicksave::MAX_SLOT file = Quicksave::make_filename(id_save) file = File.open(file, "rb") characters = Marshal.load(file) Graphics.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) if $game_system.version_id != $data_system.version_id $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end file.close $scene = Scene_Map.new RPG::BGM.fade(1500) Graphics.fadeout(60) Graphics.wait(40) last_bgm.play last_bgs.play end #sauvegarde une partie sur un block def self.save(id_save) id_save = 1 if id_save < 1 id_save = Quicksave::MAX_SLOT if id_save > Quicksave::MAX_SLOT file = Quicksave::make_filename(id_save) file = File.open(file, "wb") characters = [] for actor in $game_party.members characters.push([actor.character_name, actor.character_index]) end $game_system.save_count += 1 $game_system.version_id = $data_system.version_id last_bgm = RPG::BGM::last last_bgs = RPG::BGS::last Marshal.dump(characters, file) Marshal.dump(Graphics.frame_count, file) Marshal.dump(last_bgm, file) Marshal.dump(last_bgs, file) Marshal.dump($game_system, file) Marshal.dump($game_message, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_actors,file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) file.close end #Copie colle une slot sur une autre def self.copy(to, into) to = 1 if to < 1 to = Quicksave::MAX_SLOT if to > Quicksave::MAX_SLOT into = 1 if into < 1 into = Quicksave::MAX_SLOT if into > Quicksave::MAX_SLOT if to != into file = Quicksave::make_filename(to) file = File.open(file, "rb") characters = Marshal.load(file) Graphics.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) if game_system.version_id != $data_system.version_id game_map.setup(game_map.map_id) game_player.center(game_player.x, game_player.y) end file.close file = Quicksave::make_filename(into) file = File.open(file, "wb") characters = [] for actor in game_party.members characters.push([actor.character_name, actor.character_index]) end game_system.save_count += 1 game_system.version_id = $data_system.version_id last_bgm = RPG::BGM::last last_bgs = RPG::BGS::last Marshal.dump(characters, file) Marshal.dump(Graphics.frame_count, file) Marshal.dump(last_bgm, file) Marshal.dump(last_bgs, file) Marshal.dump(game_system, file) Marshal.dump(game_message, file) Marshal.dump(game_switches, file) Marshal.dump(game_variables, file) Marshal.dump(game_self_switches, file) Marshal.dump(game_actors,file) Marshal.dump(game_party, file) Marshal.dump(game_troop, file) Marshal.dump(game_map, file) Marshal.dump(game_player, file) file.close end end #Supprime/vide un slot sauvegarde def self.erase(id_save) id_save = 1 if id_save < 1 id_save = Quicksave::MAX_SLOT if id_save > Quicksave::MAX_SLOT file = Quicksave::make_filename(id_save) File.delete(file) end #Verifie si une sauvegarde existe def self.exist?(id_save) id_save = 1 if id_save < 1 id_save = Quicksave::MAX_SLOT if id_save > Quicksave::MAX_SLOT file_name = Quicksave::make_filename(id_save) return File.exist?(file_name) end #Extrait les données a afficher d'un slot #retourne un HASH def self.extract(id_save) id_save = 1 if id_save < 1 id_save = Quicksave::MAX_SLOT if id_save > Quicksave::MAX_SLOT file = Quicksave::make_filename(id_save) file = File.open(file, "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) if game_system.version_id != $data_system.version_id game_map.setup(game_map.map_id) game_player.center(game_player.x, game_player.y) end file.close valeur = Hash.new total_sec = frame_count/Graphics.frame_rate hour = total_sec / 60 / 60 min = total_sec / 60 % 60 sec = total_sec % 60 time_string = sprintf("%02d:%02d:%02d", hour, min, sec) valeur["temps"] = time_string valeur["lieu"] = game_party.place valeur["niveau"] = game_party.members[0].level valeur["pas"] = game_party.steps return valeur end #Crée le nom d'un fichier d'une sauvegarde # Cette méthode n'est pas à utiliser en dehors de son contexte, elle ne sers que le développement. def self.make_filename(id_save) return "Save#{id_save}.rvdata" end end Je me suis basé sur le système de base, évidemment, pour ne pas faire de réécriture inutile |
|