Partagez
Aller en bas
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty [Résolu] Sauvegarde à la fermeture

le Dim 26 Aoû 2012 - 14:00
Bonjour!
Type de script: Script d'auto-save un peu spécifique.
Explication complete: J'aurais besoin d'un script qui sauvegarde automatiquement dès la fermeture de la partie/du jeu quelle que soit la manière dont celui-ci est fermé (ecran-titre, alt-f4, fin de tâche, etc...)
Spécificités: Expliquées plus haut
Schéma très clair: Non nécessaire.
Ressources supplémentaires: Aucune.
Exemples dans un jeu video: Jamais vu...
Scripts déjà possédés: En ce qui concerne la sauvegarde j'ai le Ace Save Engine de Yanfly
Merci d'avance !

(J'espère que c'est possible...)


Dernière édition par zido le Dim 26 Aoû 2012 - 22:22, édité 1 fois
cator. lol
cator. lol
Membre

Nombre de messages : 164
Age : 28
Localisation : Cherche pas, tu me trouveras jamais.
Distinction : Zoophile à ses heures perdues, au torse poilu et qui chante YMCA
Frère de poils!
[Mist' Wink]
Maître du plantage d'arbres à femme : pour la sauvegarde des arbres et des petits oiseaux, vive la nature. [Balb' Wink]
crefadet le violeur du bois [Balb' [Résolu] Sauvegarde à la fermeture 522164]
Date d'inscription : 02/02/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Dim 26 Aoû 2012 - 18:57
@zido a écrit:Explication complete: J'aurais besoin d'un script qui sauvegarde automatiquement dès la fermeture de la partie/du jeu quelle que soit la manière dont celui-ci est fermé (ecran-titre, alt-f4, fin de tâche, etc...)
Un peu exigeant, pas sûr que la lib RGSS3 offre ces possibilités.
En revanche via une fermeture standard, y implémenter une autosave peut être réalisable.
Mais quel en est l'intérêt réel, si je peux me permettre, en dehors de faire plaisir aux joueurs fainéants ?
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Dim 26 Aoû 2012 - 20:52
C'est pour éviter au joueur de tricher en rechargeant la partie dès qu'il a fait un choix qu'il regrette ou dès qu'il perd au combat.

Une fermeture standard? C'est la commande quitter du menu?
cator. lol
cator. lol
Membre

Nombre de messages : 164
Age : 28
Localisation : Cherche pas, tu me trouveras jamais.
Distinction : Zoophile à ses heures perdues, au torse poilu et qui chante YMCA
Frère de poils!
[Mist' Wink]
Maître du plantage d'arbres à femme : pour la sauvegarde des arbres et des petits oiseaux, vive la nature. [Balb' Wink]
crefadet le violeur du bois [Balb' [Résolu] Sauvegarde à la fermeture 522164]
Date d'inscription : 02/02/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Dim 26 Aoû 2012 - 21:01
Mets un autosave en event après les passages "risqués" Wink

Une fermeture standard? C'est la commande quitter du menu?
Oui.
tonyryu
tonyryu
Membre

Nombre de messages : 895
Age : 39
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Dim 26 Aoû 2012 - 21:16
La fenêtre du jeu n'est pas géré par l'interpreteur Ruby, mais part le moteur graphique codé en C, l'événement de fermeture de la fenêtre de jeu par la croix ou Alt-F4, ferme la fenêtre directement sans continuer l'interprétation du code ruby. Quant à la fermeture par le gestionnaire des taches, cela kill le programme net, donc même la partie en C n'est pas exécuté jusqu'au bout.

Pour résumer, ta demande n'est pas réalisable.

La meilleure solution est celle citée ci-dessus
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Dim 26 Aoû 2012 - 22:00
Bon d'accord merci. Smile
(Et merci pour les explications techniques de Tonyryu)
Mets un autosave en event après les passages "risqués"
Le problème c'est que si le joueur perd un combat, il peut appuyer F12 et recharger la partie avant le combat au lieu de perdre tout son argent et perdre un niveau (vous comprenez maintenant pourquoi j'avais besoin de ça? Twisted Evil )
cator. lol
cator. lol
Membre

Nombre de messages : 164
Age : 28
Localisation : Cherche pas, tu me trouveras jamais.
Distinction : Zoophile à ses heures perdues, au torse poilu et qui chante YMCA
Frère de poils!
[Mist' Wink]
Maître du plantage d'arbres à femme : pour la sauvegarde des arbres et des petits oiseaux, vive la nature. [Balb' Wink]
crefadet le violeur du bois [Balb' [Résolu] Sauvegarde à la fermeture 522164]
Date d'inscription : 02/02/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Dim 26 Aoû 2012 - 22:06
Oui enfin c'est quand même du peaufinage pour pas grand chose, c'est juste son problème à lui, pas besoin de t'enquiquiner pour ça XD
A ta place je ne m'en soucierais pas.
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Dim 26 Aoû 2012 - 22:19
Mouais... Je vais sûrement faire ça. Merci!
Balbereith
Balbereith
Staffeux retraité

Nombre de messages : 4129
Age : 26
Localisation : dans l'ombre...
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires [Résolu] Sauvegarde à la fermeture 522164 ) [Coco' Smile]
Date d'inscription : 13/05/2009

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Dim 26 Aoû 2012 - 23:53
Et si tu supprimais via un script la sauvegarde avant chaque début de combat Twisted Evil(autant faire sadique jusqu'à la fin) la sanction serait pire de quitter le jeu que de perdre le combat car si tu ferme, plus de partie et tu resauvegarde après la fin du combat. Après il faut sensibiliser le joueur XD pour qu'il ne dise : "OH P*t*i*, elle est où c'te sauvegarde !!!"
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 11:00
@Balbereith a écrit:Et si tu supprimais via un script la sauvegarde avant chaque début de combat Twisted Evil(autant faire sadique jusqu'à la fin) la sanction serait pire de quitter le jeu que de perdre le combat car si tu ferme, plus de partie et tu resauvegarde après la fin du combat. Après il faut sensibiliser le joueur XD pour qu'il ne dise : "OH P*t*i*, elle est où c'te sauvegarde !!!"
Très bonne idée Twisted Evil
Mais je sais pas comment on fait Laughing
cator. lol
cator. lol
Membre

Nombre de messages : 164
Age : 28
Localisation : Cherche pas, tu me trouveras jamais.
Distinction : Zoophile à ses heures perdues, au torse poilu et qui chante YMCA
Frère de poils!
[Mist' Wink]
Maître du plantage d'arbres à femme : pour la sauvegarde des arbres et des petits oiseaux, vive la nature. [Balb' Wink]
crefadet le violeur du bois [Balb' [Résolu] Sauvegarde à la fermeture 522164]
Date d'inscription : 02/02/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 11:37
Il y a normalement une commande d'événement "interdire l'accès aux sauvegardes". Du moins il me semble.
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 11:54
Non ce n'est pas vraiment ça que je cherchais mais plutôt supprimer le fichier rvdata2 de la sauvegarde.
tonyryu
tonyryu
Membre

Nombre de messages : 895
Age : 39
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 13:04
Pour supprimer le dernier fichier de sauvegarde utilisé, ajouter ce code dans une commande script :

DataManager.delete_save_file(DataManager.last_savefile_index)

J'ai pas testé, je suis en pleine reprise au boulot, et j'ai déjà de quoi bien m'occuper.

Et puis, attention c'est over bourin, si ya coupure de courant juste après le delete, c'est mort, ya pas moyen de récupérer le fichier supprimé.
avatar
Az'
Membre

Nombre de messages : 3318
Age : 74
Date d'inscription : 22/12/2007

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 17:09
Ce qu'il faudrait, c'est carrément renommer puis déplacer le fichier de sauvegarde via RGSS3.
Donc faire une méthode dans le DataManager, qui renomme le format de la dernière sauvegarde et la déplace dans un folder différent. Ca fait une sorte de backup, mais le joueur peut toujours trouver l'astuce du renommage.

La meilleure solution bête et méchante reste de créer puis lire la sauvegarde, de la redumper dans un fichier en la bugguant en ommettant par exemple Actors.rvdata2 (qu'on place dans un second fichier, pour la garder récupérable), et d'effacer l'originale. J'sais pas si j'me suis bien fait comprendre, si besoin j'étofferai avec exemple RGSS3 à l'appui, pas le temps là. Wink
cator. lol
cator. lol
Membre

Nombre de messages : 164
Age : 28
Localisation : Cherche pas, tu me trouveras jamais.
Distinction : Zoophile à ses heures perdues, au torse poilu et qui chante YMCA
Frère de poils!
[Mist' Wink]
Maître du plantage d'arbres à femme : pour la sauvegarde des arbres et des petits oiseaux, vive la nature. [Balb' Wink]
crefadet le violeur du bois [Balb' [Résolu] Sauvegarde à la fermeture 522164]
Date d'inscription : 02/02/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 19:19
Je plussoie l'idée de frère de poils, ou alors l'ouvrir et y insérer un caractère à la fin histoire de la planter et le supprimer ensuite.
avatar
Az'
Membre

Nombre de messages : 3318
Age : 74
Date d'inscription : 22/12/2007

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 20:09
Je partirai même dans l'idée de faire un backup de la sauvegarde précédente via RGSS3 qui se substitue à la nouvelle au début du combat. Ca peut être pratique. Non? Des avis, commentaires, idées supplémentaires?
Comme je l'ai dit, pour l'instant j'ai pas le temps, dans les semaines qui viennent j'peux, si quelqu'un veut tenter avant, qu'il se fasse plaisir. Wink
tonyryu
tonyryu
Membre

Nombre de messages : 895
Age : 39
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 20:17
je m'en occupe ce soir

Mist' : Pas de problème, merci Wink
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 20:32
Merci de vous en occuper mais je n'ai absolument rien compris des derniers posts Laughing
tonyryu
tonyryu
Membre

Nombre de messages : 895
Age : 39
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 21:32
J'ai une autre solution éventuellement, moins bourine mais assez interressante :

l'ajout d'une données dans la sauvegarde correspondant à une sorte de témoin de risque. En ajoutant 2 méthodes à DataManager, l'une modifiant la dernière sauvegarde utilisé afin de modifier le témoin de risque en le passant à 1, et une méthode faisant la même chose en métant le témoin à 0. Au chargement de la sauvegarde, si le témoin vaut 1, on peut sanctionner le joueur par une perte d'exp ou d'or.

Dit moi si ça te convient, histoire que je commence à réfléchir comment mettre en place la gesiton de malus au chargement de la sauvegarde.
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 22:05
C'est une très bonne idée mais dans ce cas, il faut que le malus soit supérieur au malus de gameover (0G et -1 niveau)... Ca pourrait peut-être être une perte de 2 niveaux et de tous les G voire éventuellement perte de l'équipement Rolling Eyes
avatar
Az'
Membre

Nombre de messages : 3318
Age : 74
Date d'inscription : 22/12/2007

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Lun 27 Aoû 2012 - 22:13
Perso', je trouve cette solution intéressante aussi, c'est une bonne idée.
Avec quelques constantes pour paramètrer les pertes pour l'adapter à plusieurs systèmes et au goût de chaque maker, rendre ça modulable, ça peut donner un truc assez bien. x)
tonyryu
tonyryu
Membre

Nombre de messages : 895
Age : 39
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Mar 28 Aoû 2012 - 0:01
Oki, je fais ça demain, avec la possibilité de paramétrer les pertes (équippement, tunes, exp, level), là, j'étais sur mes GUI de saisie, j'ai pas vu le temps passer.
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Mar 28 Aoû 2012 - 0:16
Ok merci!
tonyryu
tonyryu
Membre

Nombre de messages : 895
Age : 39
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Mar 28 Aoû 2012 - 22:32
C'est fini

Ajout d'une sanction avec une perte de 2000 exp :
Code:
DataManager.ajouter_sanction({:exp => 2000})

si la valeur -1 est utilisée, tout est perdu, exemple pour perdre tout l'argent :
Code:
DataManager.ajouter_sanction({:gold => -1})

Suppression de lla sanction :
Code:
DataManager.annuler_sanction

Sachant que lors d'une sauvegarde classique la sanction est automatiquement annulée

les différents type de sanction :
:exp
:gold
:level

Code:
#==============================================================================
# ■ Systeme de gestion de sanction lors d'une fermeture sans sauvegare
#------------------------------------------------------------------------------
#  Ce script a pour but de sanctionner le joueur quittant la partie sans avoir sauvegarder normalement
#
#  Version  Date          Auteur        Commentaires
#  0.01      28/08/2012    Tonyryu      Première release
#
# Attention : Ce script est ma propriété en tant que création et il est donc
# soumis au droit de la propriété intellectuelle.
# En aucun cas, il ne doit être copié ou publié vers un autre forum sans en
# avoir reçu mon accord au préalable.
#
#==============================================================================


#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
#  Ajout de d'une nouvelle propriété permettant de stocker la sanction
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================

class Game_System
  attr_accessor :sanctions
 
  #--------------------------------------------------------------------------
  # * Constructeur (surcharge)
  #--------------------------------------------------------------------------
  alias sanction_initialize initialize
  def initialize
    sanction_initialize
    @sanctions = {}
  end
end


#==============================================================================
# ■ DataManager
#------------------------------------------------------------------------------
#  Ajout de méthodes permettant d'ajouter ou retirer une sanction à la sauvegarde
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================
module DataManager

  #--------------------------------------------------------------------------
  # ● modifier_sauvegarde
  #--------------------------------------------------------------------------
  def self.modifier_sauvegarde(pSanctions = {})
    if $game_system.save_count > 0
      header = {}
      contents = {}
      File.open(make_filename(last_savefile_index), "rb") do |file|
        header = Marshal.load(file)
        contents = Marshal.load(file)
      end
     
      contents[:system].sanctions = pSanctions
     
      File.open(make_filename(last_savefile_index), "wb") do |file|
        Marshal.dump(header, file)
        Marshal.dump(contents, file)
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # ● ajouter_sanction
  #--------------------------------------------------------------------------
  def self.ajouter_sanction(pSanctions)
    modifier_sauvegarde(pSanctions)
  end
 
  #--------------------------------------------------------------------------
  # ● annuler_sanction
  #--------------------------------------------------------------------------
  def self.annuler_sanction
    modifier_sauvegarde
  end
 
end

#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
#  Modification de la sortie de Scene_Load lors de la réussite du chargement de la sauvegarde
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================
class Scene_Load
  #--------------------------------------------------------------------------
  # * on_load_success (Surcharge)
  #--------------------------------------------------------------------------
  alias sanction_load_success on_load_success
  def on_load_success
    sanction_load_success
    if $game_system.sanctions.size > 0
      SceneManager.goto(Scene_Sanction)
    end
  end 
end

#==============================================================================
# ■ Sanction_Window
#------------------------------------------------------------------------------
#  Fenêtre d'affichage de la sanction
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================
class Sanction_Window < Window_Base
 
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, (Graphics.height / 2) - 150, Graphics.width, 300)
    refresh
  end
 
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    texte = "Vous avez quitté le jeu lors d'une section à risque\n"+
            "Voici la liste des pertes que vous subissez :\n\n"
           
    $game_system.sanctions.each do |key,value|
      case key
      when :exp
        if value == -1
          texte +=  "Expérience" + " => " + "Tout" + "\n"
        else
          texte +=  "Expérience" + " => " + value.to_s + "\n"
        end
       
      when :gold
        if value == -1
          texte +=  Vocab::currency_unit + " => " + "Tout" + "\n"
        else
          texte += Vocab::currency_unit + " => " + value.to_s + "\n"
        end
       
      when :level
        if value == -1
          texte +=  Vocab::level + " => " + "Tous" + "\n"
        else
          texte += Vocab::level + " => " + value.to_s + "\n"
        end

      end
    end
           
    tabLigne = texte.split("\n")
    idxLigne = -1
    tabLigne.each do |ligne|
      idxLigne += 1
      contents.draw_text(0,32 * idxLigne,contents.width, 30, ligne,1)
    end
   
  end
end


#==============================================================================
# ■ Scene_Sanction
#------------------------------------------------------------------------------
#  Modification de la sortie de Scene_Load lors de la réussite du chargement de la sauvegarde
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================
class Scene_Sanction < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  def start
    super
    SceneManager.clear
    @sanction_window = Sanction_Window.new
  end
 
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    goto_map if Input.trigger?(:C)
  end
 
  #--------------------------------------------------------------------------
  # * Input [OK]
  #--------------------------------------------------------------------------
  def goto_map
   
    $game_system.sanctions.each do |key,value|
      case key
      when :exp
        $game_party.members.each do |actor|
          if value == -1
            value = actor.exp
          end
          actor.change_exp(actor.exp - value, false)
        end
       
      when :gold
        if value == -1
          value = $game_party.gold
        end
        $game_party.lose_gold(value)
       
      when :level
        $game_party.members.each do |actor|
          if value == -1
            value = actor.level + 1
          end
          actor.change_level([1,actor.level-value].max, false)
        end

      end
    end
   
    $game_system.sanctions.clear
    SceneManager.goto(Scene_Map)
  end
end


Edit Gummy : Du grand Tonyryu, encore mieux qu'à l'époque. +5pts de participation.
zido
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

le Mar 28 Aoû 2012 - 23:19
Merci beaucoup! [Résolu] Sauvegarde à la fermeture 171548
Alors si j'ai bien compris je dois définir la sanction avant le déclenchement du combat et l'annuler après?
Contenu sponsorisé

[Résolu] Sauvegarde à la fermeture Empty Re: [Résolu] Sauvegarde à la fermeture

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