Zénith RPG version 1.1

Soaglor, terre de conflits
miniature
de harusame17.

Super Arshes Bros.
miniature
de Tackman.

SPZelda: Déclarations
miniature
de Dark8744.

Tutoriaux événements

Sauvegarde temporaire


  • Script de Pipo.
  • Aucune démo n'est disponible pour ce script.

"Vous êtes au plein coeur d'un donjon de trois cents étages, et vous n'avez pas sauvegardé depuis une heure. Alors que vous estimez la position de la prochaine sauvegarde 150 pièces, quatre énigmes et un boss plus loin, horreur, un imprévu vous force à arrêter de jouer!"

Ce script a pour but de permettre au joueur de faire face à cette éventualité qui a poussé plus d'un au bord du suicide... Il crée une nouvelle option, "sauvegarde temporaire", disponible en tout lieu dans le menu quitter.

Cette option, en plus de fermer le jeu, rajoute une seconde "couche" de données dans le fichier de sauvegarde. Cette couche pourra alors être chargée au prochain démarrage du jeu, puis radicalement supprimée du fichier de sauvegarde. Si jamais le joueur venait à faire Game Over ensuite, il pourra toujours recommencer sa partie depuis sa dernière sauvegarde classique, mais il ne pourra en aucun cas se servir de la sauvegarde temporaire, qui ne peut être chargée qu'une fois.

Screens:



[spoiler]#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Sauvegarde temporaire.
# Par Pipo
#
# Ce script permet d'ajouter une fonction de sauvegarde temporaire à votre jeu.
# Cette option permet au joueur souhaitant faire une pause, via le menu quitter,
# de sauvegarder sa partie en dehors d'un point de sauvegarde, ce qui aura pour
# effet de fermer le jeu. Cependant, ce fichier ne peut être chargé qu'une fois: s'il perd
# après un chargement de fichier temporaire, il devra reprendre la partie depuis sa précédente
# "vraie" sauvegarde car le fichier temporaire n'existera plus.
#
# Remarque: aucun fichier temporaire n'est vraiment créé, le fichier de sauvegarde est
# simplement modifié. Le joueur ne peut donc pas copier le fichier temporaire pour le réutiliser
# à volonté.
#
# Vous pouvez également forcer une sauvegarde temporaire via la commande "insérer un script":
#write_temp_save_data
#
# Le jeu ne se fermera pas. Pour le fermer, rajoutez à la suite:
# $scene = nil
#
# Pour charger un fichier temporaire, vous pouvez utiliser la commande:
# read_temp_save_data
#
# (Le fichier sera alors automatiquement supprimé)
#
#Ce script nécessite simplement qu'un interrupteur ne soit pas utilisé.
#Vous pouvez choisir le n° de cet interrupteur ici:
$id_temoin_temp_save = 500
#
#Bon making!
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


#++++++++++++++++++++++++++++++++++++++++++++++++++
#Définition de la sauvegarde temporaire
def write_temp_save_data
# Ouverture du fichier de sauvegarde
filename = "Save#{$game_temp.last_file_index + 1}.rxdata"
file = File.open(filename, "rb")
$characters_normal_save = Marshal.load(file)
$frame_count_normal_save = Marshal.load(file)
$game_system_normal_save = Marshal.load(file)
$game_switches_normal_save = Marshal.load(file)
$game_variables_normal_save = Marshal.load(file)
$game_self_switches_normal_save = Marshal.load(file)
$game_screen_normal_save = Marshal.load(file)
$game_actors_normal_save = Marshal.load(file)
$game_party_normal_save = Marshal.load(file)
$game_troop_normal_save = Marshal.load(file)
$game_map_normal_save = Marshal.load(file)
$game_player_normal_save = Marshal.load(file)
file.close # Fermeture du fichier

# Procédure de sauvegarde classique
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
characters.push([actor.character_name, actor.character_hue])
end
$game_switches[$id_temoin_temp_save] = true #Activation du témoin de fichier temporaire
file = File.open(filename, "wb")
Marshal.dump(characters, file)
Marshal.dump(Graphics.frame_count, file)
Marshal.dump($game_system, file)
Marshal.dump($game_switches, file)
Marshal.dump($game_variables, file)
Marshal.dump($game_self_switches, file)
Marshal.dump($game_screen, 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)
# Puis enregistrement de l'ancienne sauvegarde mémorisée en seconde couche.
Marshal.dump($characters_normal_save, file)
Marshal.dump($frame_count_normal_save, file)
Marshal.dump($game_system_normal_save, file)
Marshal.dump($game_switches_normal_save, file)
Marshal.dump($game_variables_normal_save, file)
Marshal.dump($game_self_switches_normal_save, file)
Marshal.dump($game_screen_normal_save, file)
Marshal.dump($game_actors_normal_save, file)
Marshal.dump($game_party_normal_save, file)
Marshal.dump($game_troop_normal_save, file)
Marshal.dump($game_map_normal_save, file)
Marshal.dump($game_player_normal_save, file)
file.close # Fermeture du fichier
end #fin de définition
#++++++++++++++++++++++++++++++++++++++++++++++++++
#Définition de la lecture du fichier temporaire
def read_temp_save_data
#Procédure de chargement normal.
filename = "Save#{$game_temp.last_file_index + 1}.rxdata"
file = File.open(filename, "rb")
characters = Marshal.load(file)
Graphics.frame_count = Marshal.load(file)
$game_system = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_self_switches = Marshal.load(file)
$game_screen = 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)
# Lecture de l'ancienne sauvegarde "normale", en seconde couche.
$characters_normal_save = Marshal.load(file)
$frame_count_normal_save = Marshal.load(file)
$game_system_normal_save = Marshal.load(file)
$game_switches_normal_save = Marshal.load(file)
$game_variables_normal_save = Marshal.load(file)
$game_self_switches_normal_save = Marshal.load(file)
$game_screen_normal_save = Marshal.load(file)
$game_actors_normal_save = Marshal.load(file)
$game_party_normal_save = Marshal.load(file)
$game_troop_normal_save = Marshal.load(file)
$game_map_normal_save = Marshal.load(file)
$game_player_normal_save = Marshal.load(file)
file.close

#Procédure normale: vérification d'une mise à jour du jeu grâce au nombre magique.
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

$game_switches[$id_temoin_temp_save] = false #Désactivation du témoin de fichier temporaire.

#Réécriture de la sauvegarde normale en première couche.
#Le témoin de chargement (désactivé) est lui aussi enregistré.
file = File.open(filename, "wb")
Marshal.dump($characters_normal_save, file)
Marshal.dump($frame_count_normal_save, file)
Marshal.dump($game_system_normal_save, file)
Marshal.dump($game_switches_normal_save, file)
Marshal.dump($game_variables_normal_save, file)
Marshal.dump($game_self_switches_normal_save, file)
Marshal.dump($game_screen_normal_save, file)
Marshal.dump($game_actors_normal_save, file)
Marshal.dump($game_party_normal_save, file)
Marshal.dump($game_troop_normal_save, file)
Marshal.dump($game_map_normal_save, file)
Marshal.dump($game_player_normal_save, file)
file.close
end #fin de définition
#++++++++++++++++++++++++++++++++++++++++++++++++++
#Redéfinition de la fenêtre de chargement.
class Window_SaveFile < Window_Base
def refresh
self.contents.clear
name = "Slot #{@file_index + 1}"
self.contents.font.color = normal_color
name = "File #{@file_index + 1}"
self.contents.draw_text(4, 0, 600, 32, name)
@name_width = contents.text_size(name).width

if @file_exist
for i in 0...@characters.size
bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
cw = bitmap.rect.width / 4
ch = bitmap.rect.height / 4
src_rect = Rect.new(0, 0, cw, ch)
x = 300 - @characters.size * 32 + i * 64 - cw / 2
self.contents.blt(x, 68 - ch, bitmap, src_rect)
end
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, 8, 600, 32, time_string, 2)
self.contents.font.color = normal_color
time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
self.contents.draw_text(4, 40, 600, 32, time_string, 2)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
if @game_switches[$id_temoin_temp_save] == true #Si le témoin de chargement est activé
self.contents.font.color = Color.new(50,220,50) #Couleur verte
self.contents.draw_text(150, 0, 600, 32, "***FICHIER TEMPORAIRE***") #Signalement
end
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
end
end
end #Fin de classe
#++++++++++++++++++++++++++++++++++++++++++++++++++
class Scene_Load < Scene_File
def read_save_data(file) #redéfinition du chargement.

characters = Marshal.load(file)
Graphics.frame_count = Marshal.load(file)
$game_system = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_self_switches = Marshal.load(file)
$game_screen = 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)

#Après que la partie aie été chargée, on vérifie si le témoin de chargeùent est activé.
if $game_switches[$id_temoin_temp_save] == true
read_temp_save_data #On exécute la procédure de sauvegarde temporaire.
return #On stoppe la méthode de chargement classique.
end

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 Scene_End #Redéfinition du menu Quitter.

def main
s1 = "Écran-Titre"
s2 = "Sauvegarde temporaire" #Rajout d'une commande.
s3 = "Quitter"
s4 = "Annuler"
@command_window = Window_Command.new(250, [s1, s2, s3, s4]) #Rajout d'une commande.
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 240 - @command_window.height / 2
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@command_window.dispose
if $scene.is_a?(Scene_Title)
Graphics.transition
Graphics.freeze
end
end #fin de def main

def update
@command_window.update
# B ??????????
if Input.trigger?(Input::B)
# ????? SE ???
$game_system.se_play($data_system.cancel_se)
# ???????????
$scene = Scene_Menu.new(5)
return
end
# C ??????????
if Input.trigger?(Input::C)
# ???????????????????
case @command_window.index
when 0
command_to_title
when 1 #quand la deuxième commande est choisie.
write_temp_save_data #Sauvegarde temporaire
command_shutdown #Fermeture du jeu.
when 2
command_shutdown
when 3
command_cancel
end
return
end
end #fin de définition de l'update
end #Fin de classe
#++++++++++++++++++++++++++++++++++++++++++++++++++
[/spoiler]

Concours d'ambiance

Début du concours :
20 Septembre 2007
Fin du concours :
N/A

BattleZone Games Creations
Final Destiny
Island Maker
Légende
Manga Power
Oniromancie
Relite
RPG Making
RPG Sky
RPGMaker FR
RPGSky
RTP Power
Saleth Empire
Terra RPGXP
Terre RPG
World of DBZ