Bon je pense que j'ai fait le tour du sujet concernant les sauvegardes.
Les deux autres topics sont... inutiles maintenant, ce script regroupe toute les fonctions.
Pour les explication, tout est dans l'entête.
- Code: Tout sélectionner
#====================================================================
# ■ Module Sauvegarde
#====================================================================
# Auteur : Darkleo
# Script : Utilitaire de sauvegarde
#====================================================================
# ==> Dans la commande "inserez un script" <==
# Sauvegarde : sauver(X)
# Chargement : charger(X)
# Sauvegarde automatique (invisible) : autosave ou autoload
# Copier une sauvegarde : copier(a,b)
# --> copie le slot a dans le slot b
# Supprimer une sauvegarde : supprimer(X)
# ==> Dans une condition "Si script :" <==
# Verifier une sauvegarde : testfile(X)
#
# "X" correspond au slot de sauvegarde voulu
# Utilisez 0 pour l'autosave
#
# Exemples :
# charger(2) --> charge le slot 2
# autosave --> fait une sauvegarde automatique
# copier(0,4) --> copier la sauvegarde automatique dans le slot 4
#====================================================================
module Sauvegarde
module_function
#--------------------------------------------------------------------------
# ● testfile(file)
#--------------------------------------------------------------------------
def testfile(file)
filename = (file == 0 ? "Autosave.rxdata" : "Save#{file}.rxdata")
FileTest.exist?(filename)
end
#--------------------------------------------------------------------------
# ● sauver(file)
#--------------------------------------------------------------------------
def sauver(file)
file = File.open("Save#{file}.rxdata", "wb")
write_save_data(file) ; file.close
end
#--------------------------------------------------------------------------
# ● charger(file)
#--------------------------------------------------------------------------
def charger(file)
return if not FileTest.exist?("Save#{file}.rxdata")
file = File.open("Save#{file}.rxdata", "rb")
read_save_data(file) ; file.close
$game_system.bgm_play($game_system.playing_bgm)
$game_system.bgs_play($game_system.playing_bgs)
$game_map.update
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# ● def autosave
#--------------------------------------------------------------------------
def autosave
file = File.open("Autosave.rxdata", "wb")
write_save_data(file) ; file.close
end
#--------------------------------------------------------------------------
# ● def autoload
#--------------------------------------------------------------------------
def autoload
return if not FileTest.exist?("Autosave.rxdata")
file = File.open("Autosave.rxdata", "rb")
read_save_data(file) ; file.close
$game_system.bgm_play($game_system.playing_bgm)
$game_system.bgs_play($game_system.playing_bgs)
$game_map.update
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# ● def copier(a,b)
#--------------------------------------------------------------------------
def copier(a,b)
return if a == b
filename = (a == 0 ? "Autosave.rxdata" : "Save#{a}.rxdata")
return if testfile(filename)
source = File.open(filename, "rb")
filename2 = (b == 0 ? "Autosave.rxdata" : "Save#{b}.rxdata")
destination = File.open(filename2, "wb")
destination.write(source.read)
source.close ; destination.close
end
#--------------------------------------------------------------------------
# ● def supprimer(file)
#--------------------------------------------------------------------------
def supprimer(file)
filename = (file == 0 ? "Autosave.rxdata" : "Save#{file}.rxdata")
File.delete(filename) if testfile(filename)
end
#--------------------------------------------------------------------------
# ● def write_save_data(file)
#--------------------------------------------------------------------------
def write_save_data(file)
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
characters.push([actor.character_name, actor.character_hue])
end
$game_system.save_count += 1
$game_system.magic_number = $data_system.magic_number
[characters, Graphics.frame_count, $game_system,
$game_switches, $game_variables, $game_self_switches,
$game_screen, $game_actors, $game_party, $game_troop,
$game_map, $game_player].each {|v| Marshal.dump(v, file)}
end
#--------------------------------------------------------------------------
# ● read_save_data(file)
#--------------------------------------------------------------------------
def read_save_data(file)
list = %Q(characters, Graphics.frame_count, $game_system,
$game_switches, $game_variables, $game_self_switches,
$game_screen, $game_actors, $game_party, $game_troop,
$game_map, $game_player) ; list.gsub!(/ /, "")
list.gsub!(/
/, "") ; list = list.split(',')
list.each {|n| eval "#{n} = Marshal.load(file)"}
if $game_system.magic_number != $data_system.magic_number
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
$game_party.refresh
end
end
class Interpreter
include Sauvegarde
end
Dernière précision, chez moi ça marche, mais si chez vous, ça ne marche pas, changez tout les "Save" en "Sauvegarde" ("Remplacer" (Ctrl+H) puis "tout remplacer")
PS: le bug qui pouvait survenir lors d'un chargement est corrigé ^^
Enjoy, and give me credits ^^
PS : merci Lordryk pour m'avoir optimisé un peu le code.
Ce script ne doit pas être partagé sans mon autorisation, demandez moi par MP.
_________________

Projets