[PSDK] Sauvegarde automatique à chaque heures

  • 3 Réponses
  • 209 Vues
*

Hors ligne KABU

[PSDK] Sauvegarde automatique à chaque heures
« le: 09 juillet 2018, 20:48:51 »
Salut tout le monde, je démarre ce sujet pour vous partagez un script qui a pour but de sauvegarder la partie du joueur automatiquement à chaque heures sans que le joueur n'est à s'en soucier, pour utiliser ce script, insérer le dans votre projet (au dessus de main), voici le code:
# Save the game on hour update if SWITCHE = true and $game_switches[10] = true
# @author Kkabu
module Kkabu
  module Save
    module_function
    # Value of save switche (Default to 101)
    # @return [Integer]
    SWITCHE = 101
    # Save function
    def save
    GamePlay::Save.save if $game_switches[SWITCHE]
    end
  end
end
# for use this on play
Scheduler.add_message(:on_hour_update,  Scene_Map, "Sauvegarde à chaques heures", 100, Kkabu::Save, :save)
Et activer le système de ton actif (l'interrupteur 10), puis choisissez votre interrupteur pour permettre à PSDK de save automatiquement, pour cela vous pouvez activer l'interrupteur 101 ou bien changer la valeur de la variable SWITCHE.
Voila, n'éssiter pas à m'envoyer des retours pour que je sache si ce script fonctionne ou pas chez vous (même si en théorie sa devrait fonctionner chez tout le monde)
Edit: Je modifie ce message pour vous présenter une version un peu plus élaborer:
# This script save automatically the party on hour update
# This script add option save auto in option menu in the game
# Author: Kkabu
# Add save auto var in PFM::Options
module PFM
  class Options
    attr_accessor :save_auto
    def initialize(starting_language)
      @music_volume = 100
      @sfx_volume = 100
      @audio_lib = :FmodEx
      @input_method = :Windows
      @personnal_inputs = [[],[],[],[]]
      @message_speed = 3
      @battle_mode = true
      @show_animation = true
      @pause_on_focus_loose = true 
      @language  = starting_language
      @save_auto = true
    end
    def set_save_auto(v)
      @save_auto = v
    end
  end
end
# Add save auto option in Gameplay::Options
module GamePlay
  class Options < Base
    add_option(:save_auto, :save_auto_descr, [true, false],
      [:save_auto_true, :save_auto_false],
      get_value: :save_auto_get,
      set_value: :save_auto_set
    )
    public
    def save_auto_get
      $options.save_auto
    end
    def save_auto_set(value)
      $options.set_save_auto(value)
    end
  end
end
# Add save auto text in Gameplay::Option_Element
# For add text, please open Ruby Host and Change lines 16..19
module GamePlay
  class Option_Element
    TextData.merge!({
      save_auto_descr: [42, 16],
      save_auto: [42, 17],
      save_auto_true: [42, 18],
      save_auto_false: [42, 19],
    })
  end
end
# Kkabu::Save save the game if save auto = true
module Kkabu
  module Save
    module_function
    def save
    GamePlay::Save.save if $options.save_auto
    end
  end
end
# for use this on play
Scheduler.add_message(:on_hour_update, Scene_Map, "Save on hour update", 100, Kkabu::Save, :save)
En gros cette version fais toujours la même chose que la première mais le plus c'est l'ajout de l'option dans le menu option in game, par contre pour l'utiliser il faut rajouter du texte dans l'onglet Text de Ruby Host, fichier 42, ligne 16 à 19, la ligne 16 correspond à la description de l'option, la 17 à son nom, la 18 à true (si elle est active) et la 19 à false (si elle est inactive).
EDIT 2:
Salut, j'ai rajouter la fonctionnalité que décrivait @Splifingald, donc pour changer le temps entre chaque sauvegardes, il suffit de changer la valeur de la variable MINUTES (qui ce situe à la ligne 61)
Voici le code:
# This script save automatically the party on hour update
# This script add option save auto in option menu in the game
# Author: Kkabu
# Add save auto var in PFM::Options
module PFM
  class Options
    attr_accessor :save_auto
    def initialize(starting_language)
      @music_volume = 100
      @sfx_volume = 100
      @audio_lib = :FmodEx
      @input_method = :Windows
      @personnal_inputs = [[],[],[],[]]
      @message_speed = 3
      @battle_mode = true
      @show_animation = true
      @pause_on_focus_loose = true
      @language  = starting_language
      @save_auto = true
    end
    def set_save_auto(v)
      @save_auto = v
    end
  end
end
# Add save auto option in Gameplay::Options
module GamePlay
  class Options < Base
    add_option(:save_auto, :save_auto_descr, [true, false],
      [:save_auto_true, :save_auto_false],
      get_value: :save_auto_get,
      set_value: :save_auto_set
    )
    public
    def save_auto_get
      $options.save_auto
    end
    def save_auto_set(value)
      $options.set_save_auto(value)
    end
  end
end
# Add save auto text in Gameplay::Option_Element
# For add text, please open Ruby Host and Change lines 16..19
module GamePlay
  class Option_Element
    TextData.merge!({
      save_auto_descr: [42, 16],
      save_auto: [42, 17],
      save_auto_true: [42, 18],
      save_auto_false: [42, 19],
    })
  end
end
# Kkabu::Save save the game if save auto = true
module Kkabu
  module Save
    module_function
    # Numbers of minutes in every save
    # @return [Integer]
    MINUTES = 2
    # Safety to avoid saving in every frames
    # @return [Boolean]
    @bool = false
    def save
      if $options.save_auto && MINUTES == 1 && @temp != $game_variables[11]
      GamePlay::Save.save
      else
        case $game_variables[11] % MINUTES
          when 0
            @bool = true
          when 1
            GamePlay::Save.save if $options.save_auto && @bool
            @bool = false
        end
      end
      @temp = $game_variables[11]
    end
  end
end
# for use this on play
Scheduler.add_message(:on_update, Scene_Map, "Save on hour update", 100, Kkabu::Save, :save)
« Modifié: 12 juillet 2018, 19:43:40 par KABU »
 
Utilisateurs ayant remercié ce post : Splifingald

*

Hors ligne Splifingald

[PSDK] Sauvegarde automatique à chaque heures
« Réponse #1 le: 09 juillet 2018, 21:57:25 »
Intéressant, mais une heure de jeu à sauvegarder j'ai peur que ça puisse parfois être long de sauvegarder donc faire freeze légèrement le jeu à ce moment là. Je vois que tu utilise ":on_hour_update", je ne connaissais pas du tout, penses tu qu'il existe un équivalent pour le faire tous les quarts d'heure / demie heures... par exemple ? Ou encore mieux le faire toutes les XX minutes en mettant XX dans une variable et en laissant la possibilité au joueur de changer lui même.

Aussi, même si la fonctionnalité est très intéressante, je pense qu'il vaut mieux laisser au joueur la possibilité d'activer ou désactiver cette option. Pour ça il suffira de permettre l'activation/désactivation du switch choisi. (Pour éviter ça : "Oups, je viens de tuer le seul Mewtwo du jeu, heureusement que j'ai pas save avant !" ... "A mince, ça vient de passer à 18h ça a save tout seul")

Merci en tout cas, je pense que ça peut être très utile !
 

*

Hors ligne KABU

[PSDK] Sauvegarde automatique à chaque heures
« Réponse #2 le: 09 juillet 2018, 22:19:22 »
En faite PSDK save la partie sans faire freeze le jeu, sa ne propose pas non plus au joueur de save, donc le joueur ne sera pas géné par sa, pour ce qu'il s'agit de ":on_hour_update" je ne trouve pas d'équivalent, après faut voir sa avec Yuri parce que c'est lui qui à créer le scheduler, après pour les combats de légendaire, tu peut désactiver l’interrupteur pour empêcher la sauvegarde automatique et une fois le joueur sortie de la grotte tu peut le réactiver. Tu peut aussi, au début du jeu proposer au joueur si il veut que le jeu sauvegarde automatiquement la partie ou non.
 

*

Hors ligne KABU

[PSDK] Sauvegarde automatique à chaque heures
« Réponse #3 le: 12 juillet 2018, 19:50:08 »
Petit up du sujet, @Splifingald tu va être content (je pense, j'espère aussi que les autres le seront de même ^^'), si vous avez des soucis nécessitez pas à prévenir ^^
 
Utilisateurs ayant remercié ce post : Splifingald