Ce script écrit par Biward permet de lire et récupérer des variables et interrupteurs depuis une autre sauvegarde dans RPG Maker XP.
Il rend possible l’échange de données entre plusieurs fichiers de sauvegarde, ce qui est impossible nativement dans RMXP.
Cas possibles d’utilisation :
- New Game+
- sauvegarde partagée
- progression globale entre parties
- déblocages persistants
- import de données depuis une ancienne run
Principe de fonctionnement
Le script :
- ouvre un fichier de sauvegarde externe
- charge temporairement ses données
- copie une variable ou un interrupteur précis
- les injecte dans la sauvegarde en cours
- restaure immédiatement l’état du jeu courant
Aucune donnée de la partie active n’est écrasée, hormis ce que tu choisis explicitement de copier.
Ce que le script peut faire
- Lire une variable précise depuis une autre sauvegarde
- Lire un interrupteur précis depuis une autre sauvegarde
- Copier la valeur vers une variable/interrupteur différent
- Vérifier si un fichier de sauvegarde existe
Le tout sans charger réellement la sauvegarde.
Commandes utilisables dans un événement
get_variable(id, « file », toid)
get_switche(id, « file », toid)
id: ID de la variable / interrupteur à lire dans l’autre sauvegardefile: nom du fichier de sauvegarde (ex :"Save01.rxdata")toid: ID de destination dans la partie actuelle
Utilisation dans un appel de script
Get.copy_variable(id, « file », toid)
Get.copy_switche(id, « file », toid)
Vérifier l’existence d’un fichier
Dans un événement :
file_exist?(« Save01.rxdata »)
Dans un script :
Get.file?(« Save01.rxdata »)
Script
################################################################################
############################# Get Variables & Switches #########################
################################################################################
# Auteur : Biward
# Date : 05/10/2013
# Utilité : permet de lire les variables/interrupteurs d'une autre sauvegarde
#
# Comment faire ?
# Dans un évènement :
# get_variable(id, "file", toid) et/ou get_switche(id, "file", toid)
#
# Dans un script :
# Get.copy_variable(id, "file", toid) et/ou Get.copy_switche(id, "file", toid)
#
#
# Avec : id = ID de la variable/interrupteur que l'on va chercher dans l'autre sauvegarde
# file = nom du fichier de sauvegarde
# toid = ID de la variable/interrupteur nouvelle/nouveau
#
#
# De plus, pour vérifier qu'un fichier existe (normalement pas nécessaire lors de la copie),
# il vous suffit de faire ceci dans un appel de script : file_exist?("name")
# ou de faire Get.file?("name") dans un script !
#
#####################################
########## Début du script ##########
#####################################
#
##### Interpreter
class Interpreter
def get_variable(id, file, toid) # Obtenir la variable
Get.copy_variable(id, file, toid) # On va copier la variable dans le module
end
def get_switche(id, file, toid) # Obtenir l'interrupteur
Get.copy_switche(id, file, toid) # On va copier l'interrupteur dans le module
end
def file_exist?(name) # Verifier l'existence du fichier
Get.file?(name) # Le module vérifie si le fichier existe
end
end
#
##### Get
module Get
#
extend self # Extend
#
def copy_variable(id, name, toid) # Copie de la variable
file(name)
$game_variables[toid] = $g_var[id] if $g_var
reset_other_variable
end
#
def copy_switche(id, name, toid) # Copie de l'interrupteur
file(name)
$game_switches[toid] = $g_swi[id] if $g_swi
reset_other_variable
end
#
def reset_other_variable # Remise à zéro des variables globales
$g_swi = nil
$g_var = nil
end
#
def file(filename) # Lecture du fichier
return unless FileTest.exist?(filename)
file = File.open(filename, "rb")
read_variables(file)
file.close
end
#
def read_variables(file) # Lecture des données
characters = Marshal.load(file)
bef_fra = Graphics.frame_count
Graphics.frame_count = Marshal.load(file)
bef_sys = $game_system
bef_swi = $game_switches
bef_var = $game_variables
$game_system = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$g_var = $game_variables
$g_swi = $game_switches
$game_system = bef_sys
$game_variables = bef_var
$game_switches = bef_swi
Graphics.frame_count = bef_fra
end
#
def file?(name)
return FileTest.exist?(name)
end
end
#####################################
########### Fin du script ###########
#####################################