Partagez
Aller en bas
avatar
Ewaldar
Membre

Nombre de messages : 1387
Age : 24
Localisation : Suisse
Distinction : aucune
Date d'inscription : 29/12/2011
http://ewaldar.wixsite.com/les-ames-perdues

Sauvegarde automatique [résolu]

le Mar 17 Juil 2012 - 18:20
Bonjour à tous,

J'aimerais insérer un système de sauvegarde automatique comme il y a dans The Elder Scrolls V Skyrim, afin de, comme dans ledit jeu, pouvoir sauver et ne pas tout refaire mon intro et après pour d'autres applications (pour ceux le souhaitant).
J'ai donc fait quelques recherches et ai trouvé un script intéressant, qui permet via l'appui d'une touche de sauver. Seulement, il comporte des inconvéniants plutôt énervant, à savoir qu'à l'appui de la touche, un message demande si l'on veut sauver et de plus, le jeu est automatiquement quitté après...
Ma requête est donc la suivante : modifier le script de façon à ce qu'il ne demande pas de message et que le jeu ne soit pas quitté.

EDIT : Voici le script modifié qui permet de rester sur l'ecran titre, que l'on choisisse "Non" ou que l'on décline par la touche "Esc"

Spoiler:
#===============================================================================
# RGSS3: Quicksave v.1.1
#===============================================================================
# par Cryranos/Metatron
#===============================================================================
# Instructions : Coller en-dessous de Materials. Editez les Modules si souhaité.
#===============================================================================
# Le script permet au joueur de sauvegarder rapidement et de recharger cette
# sauvegarde jusqu'à qu'elle ait été supprimée (dès le retour à l'ecran titre).
#===============================================================================

module CryQuicksave
QSFile = "Save.qsav" # Nom de fichier de la sauvegarde.
MenuOp = false # Ajoute un index dans le menu principal
QSVNam = "Quicksave" # Non de l'index si MenuOp = true
# QSVMess : Message d'aide de la sauvegarde rapide Quickload help. Insert the second line
# QSVLoad : Message d'aide du chargement rapide.
# Pour aller à la ligne, utiliser : \n.
QSVMess = "Voulez-vous sauvegarder et quitter ?\n"
QSVLoad = "Charger la sauvegarde automatique ? Ne pas la charger ou appuyer sur Esc\nretournera à l'écran titre."
# Ceux préférant sauvegarder rapidement à l'appui d'une touche plutô que par
# le menu peuvent le faire avec UseKey = true.
UseKey = true # Si true, sauvegarde rapidement à l'appui d'une touche
QSVKey = Input::F5 # Touche utilisée pour la sauvegarde rapide
end

module DataManager
def self.quicksave_file_exists?
!Dir.glob(CryQuicksave::QSFile).empty?
end
def self.make_quicksave_filename
sprintf(CryQuicksave::QSFile)
end
def self.quicksave_game
self.quicksave_game_without_rescue
end
def self.quicksave_game_without_rescue
File.open(make_quicksave_filename, "wb") do |file|
$game_system.on_before_save
Marshal.dump(make_save_header, file)
Marshal.dump(make_save_contents, file)
end
end
def self.quickload_game
self.load_quicksave_without_rescue
self.dispose_quicksave
end
def self.load_quicksave_without_rescue
File.open(make_quicksave_filename, "rb") do |file|
Marshal.load(file)
extract_save_contents(Marshal.load(file))
reload_map_if_updated
end
end
def self.dispose_quicksave
File.delete(make_quicksave_filename) rescue nil
end
end

module SceneManager
def self.first_scene_class
if $BTEST
Scene_Battle
elsif DataManager.quicksave_file_exists?
Scene_QuickLoadTitle
else
Scene_Title
end
end
end

if CryQuicksave::UseKey
class Game_Player < Game_Character
alias quicksave_update update
def update
quicksave_update
if Input.trigger?(CryQuicksave::QSVKey)
SceneManager.call(Scene_Quicksave)
end
end
end
end

class Window_QuicksaveCommand < Window_Command
def initialize
super(0, 0)
update_placement
end
def window_width
return 160
end
def update_placement
self.x = (Graphics.width - width) / 2
self.y = (Graphics.height * 1.6 - height) / 2
end
def make_command_list
add_command("Oui", :confirm)
add_command("Non", :decline)
end
end

class Scene_Quicksave < Scene_MenuBase
def start
super
DataManager.quicksave_game
SceneManager.return
end
end

class Scene_QuickLoadTitle < Scene_Title
def start
super
SceneManager.clear
Graphics.freeze
create_background
create_foreground
create_command_window
play_title_music
create_help_window
end
def help_window_text
CryQuicksave::QSVLoad
end
def create_command_window
@command_window = Window_QuicksaveCommand.new
@command_window.set_handler(:confirm, method(:command_quickload))
@command_window.set_handler(:decline, method(:command_decline))
@command_window.set_handler(:cancel, method(:return_scene))
end
def create_help_window
@help_window = Window_Help.new(2)
@help_window.set_text(help_window_text)
end
def command_quickload
close_command_window
DataManager.quickload_game
Sound.play_load
fadeout_all
$game_system.on_after_load
SceneManager.goto(Scene_Map)
end
def command_decline
DataManager.dispose_quicksave
Scene_Title
SceneManager.call(Scene_Title)
end
def return_scene
DataManager.dispose_quicksave
Scene_Title
SceneManager.call(Scene_Title)
end
end

if CryQuicksave::MenuOp
class Window_MenuCommand
alias add_qsv_command add_save_command
def add_save_command
add_qsv_command
add_command(CryQuicksave::QSVNam, :qsav)
end
end

class Scene_Menu
alias add_qsv_to_commands create_command_window
def create_command_window
add_qsv_to_commands
@command_window.set_handler(:qsav, method(:command_quicksave))
end
def command_quicksave
SceneManager.call(Scene_Quicksave)
end
end
end


Dernière édition par XtremeViper le Mer 18 Juil 2012 - 14:25, édité 3 fois
avatar
Mist'
Staffeux retraité

Nombre de messages : 3298
Age : 25
Localisation : France // Auvergne // Cantal
Distinction : Ours Barbu é_è [/Shamu']
Artiste de talent [Yama']
Date d'inscription : 22/12/2007
http://www.rpgmakervx-fr.com

Re: Sauvegarde automatique [résolu]

le Mar 17 Juil 2012 - 19:43
J'ai pas Ace sous la main, cherche et remplace ça dans ton script :

Spoiler:
Code:
class Scene_Quicksave < Scene_MenuBase
def start
super
create_command_window
create_help_window
end
def help_window_text
CryQuicksave::QSVMess
end
def create_command_window
@command_window = Window_QuicksaveCommand.new
@command_window.set_handler(:confirm, method(:command_quicksave))
@command_window.set_handler(:decline, method(:command_decline))
@command_window.set_handler(:cancel, method(:return_scene))
end

def create_help_window
@help_window = Window_Help.new(2)
@help_window.set_text(help_window_text)
end
def command_quicksave
DataManager.quicksave_game
fadeout_all
SceneManager.exit
end
def command_decline
SceneManager.return
end
def return_scene
SceneManager.return
end
end

Par ça :

Spoiler:
Code:
class Scene_Quicksave < Scene_MenuBase
def start
super
DataManager.quicksave_game
SceneManager.return
end
end

C'est fait en coup de vent, comme une brute et c'est pas testé. J'aurais pu m'appliquer mais j'ai pas le temps.
Comme toujours c'est un script que j'aimerais améliorer, mais j'ai jamais le temps. Je repasserai pour voir si lors de ton test ça fonctionne, bonne continuation!

_________________
avatar
Ewaldar
Membre

Nombre de messages : 1387
Age : 24
Localisation : Suisse
Distinction : aucune
Date d'inscription : 29/12/2011
http://ewaldar.wixsite.com/les-ames-perdues

Re: Sauvegarde automatique [résolu]

le Mer 18 Juil 2012 - 0:07
Merci bien, cela fonctionne sans accroche ! J'ai même pu corriger moi-même un bug quand il nous demande si l'on veut charger la save, si on dit non, ça bug, et j'ai pu modifier pour qu'on atterrisse sur le menu de chargement
Mais le hic, c'est qu'une fois sur ce menu, si l'on appuie sur Esc, le jeu se quitte. Il faudrait donc pouvoir interdire cela au joueur, si tu as encore un peu de temps. J'édite le script, pour mettre le nouveau.
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Re: Sauvegarde automatique [résolu]

le Mer 18 Juil 2012 - 0:54
Pour enlever le bug qui fait que le jeu se ferme quand tu veux revenir en arrière change :

(Ligne 145)

SceneManager.goto(Scene_Load)

par

SceneManager.call(Scene_Load)

Pour le reste faudra attendre un vrai scripteur Smile
avatar
Ewaldar
Membre

Nombre de messages : 1387
Age : 24
Localisation : Suisse
Distinction : aucune
Date d'inscription : 29/12/2011
http://ewaldar.wixsite.com/les-ames-perdues

Re: Sauvegarde automatique [résolu]

le Mer 18 Juil 2012 - 14:10
C'était tout con en fait, mais j'ai simplement modifié SceneManager.call(Scene_Load) par SceneManager.call(Scene_Title) afin de rester sur l'écran titre en cas de refus. Et j'ai copié cette méthode de la commande refus sur celle de la commande décliné afin de rester également sur l'ecran titre en cas d'appui sur Esc !



Je mets en résolu

avatar
Mist'
Staffeux retraité

Nombre de messages : 3298
Age : 25
Localisation : France // Auvergne // Cantal
Distinction : Ours Barbu é_è [/Shamu']
Artiste de talent [Yama']
Date d'inscription : 22/12/2007
http://www.rpgmakervx-fr.com

Re: Sauvegarde automatique [résolu]

le Mer 18 Juil 2012 - 19:51
Parfait, je vois que vous avez pu vous débrouiller ensuite, bien joué! Wink

_________________
Contenu sponsorisé

Re: Sauvegarde automatique [résolu]

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum