[Résolu] Récupérer les infos sur les sauvegardes RMXP?

Démarré par supersonic_3, 29 Novembre 2009 à 15:39

0 Membres et 1 Invité sur ce sujet

29 Novembre 2009 à 15:39 Dernière édition: 28 Décembre 2009 à 13:20 par yoshi04
Salut!  :lol: mon jeu de zelda avance lentement mais sûrement! Je suis bloqué par contre, je veux faire mon menu de début de jeu perso(celui ou on peut charger une sauvegarde), aucun problème, j'ai un script pour sauter l'écran titre, donc je peux créer le mien! Mais je voudrais écrire dans le rectangle de ma sauvegarde perso les infos la concernant, comme dans tous les bons zelda! Je cherche un moyen de récupérer le temps jouer pour pouvoir l'écrire, est-ce possible?(en script ou autre) Merci d'avance!

EDIT: J'ai réussi  :P Mais par contre j'ai un autre problème(voir mon dernier message) Trop fastoche, pour calculer le temps écoulé depuis le début du jeu, pour ceux que ça intéresse:


Dans un event commun en processus parallel, placer un seul event, un "script" et entrez ceci:

@total_sec = Graphics.frame_count /
Graphics.frame_rate
   $game_variables[x] = @total_sec / 60 / 60     // x correspond au numéro de la variable choisi pour stocker les heures
   $game_variables[x2] = @total_sec / 60 % 60     // x2 correspond au numéro de la variable choisi pour stocker les minutes
   $game_variables[x3] = @total_sec % 60     // x3 correspond au numéro de la variable choisi pour stocker les secondes



Vous n'avez plus qu'à appeler la variable correspondante au bon moment exemple dans un message:





Je ne pense pas que ça soit faisable, par contre c'est peut-être possible de charger une sauvegarde sans lancer le jeu, ainsi tu n'aurais qu'à récupérer les variables...  ^_^
Tu peux poster le script main et scene_title s'il-te-plait ? ( J'ai pas RMXP :P ).

    







29 Novembre 2009 à 16:06 #2 Dernière édition: 29 Novembre 2009 à 21:49 par supersonic_3
Bon j'ai réussi pour ça, mais maintenant LA GRANDE QUESTION:

Comment je peux lire les variables des parties(par exemple une variable qui indique à quel temple on est rendu) sans les jouer? Je voudrais au début du jeu écrire à quel temple on est rendu, les items obtenus etc... mais sans charger la partie!




Bon, j'ai trouvé le bout de code(dans le script que j'utilise) qui charge les sauvegardes, mais je ne sais pas comment charger seulement les variables:

  #--------------------------------------------------------------------------
  # ● charger(file)
  #--------------------------------------------------------------------------
  def charger(file)
    return if not FileTest.exist?("Sauvegarde#{file}.rxdata")
    file = File.open("Sauvegarde#{file}.rxdata", "rb")
    read_save_data(file) ; file.close
    $game_system.bgm_play($game_system.playing_bgm)
    $game_system.bgs_play($game_system.playing_bgs)
    $game_map.update
    $scene = Scene_Map.new
  end

#--------------------------------------------------------------------------
  # ● read_save_data(file)
  #--------------------------------------------------------------------------
  def read_save_data(file)
    list = %Q(characters, Graphics.frame_count, $game_system,
    $game_switches, $game_variables, $game_self_switches,
    $game_screen, $game_actors, $game_party, $game_troop,
    $game_map, $game_player) ; list.gsub!(/ /, "")
    list.gsub!(/\n/, "") ; list = list.split(',')
    list.each {|n| eval "#{n} = Marshal.load(file)"}
    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 Interpreter
  include Sauvegarde
end



Mon expérience en C me permet de comprendre la fonction charger, mais l'autre, je ne suis vraiment pas sur, si vous pouviez m'aider...




Essaie à tout hasard d'enlever ça :

    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


D'après ce que j'ai compris cette partie du script charge la carte, le héros et rafraichi le tout ( essaie en n'enlevant que le "$game_party.refresh" si ça ne fonctionne pas aussi ).

    







Merci de ta réponse, mais ça ne fonctionne toujours pas, la partie et la carte se chargent quand même!  :(




Tu peux poster le script main s'teuplait ? :)
L'initialisation du jeu commence par celui-là si je ne me trompe pas...

    







Je n'ai pas mon projet sous la main en ce moment, mais quel est le rapport avec le main? Ce que je veux c'est pouvoir accéder à ces infos quand je veux. Je ne croit pas que le main est rapport puisque les sauvegardes sont charger seulement si on le demande, donc il n'y a pas de script de chargement dans le main, non?




Ah maintenant que tu le dis...
Je sais que man initialise le lancement de la partie, nouvelle ou chargée, c'pour ça...

Je ne sais pas vraiment si c'est possible de charger quelques variables d'un fichier de sauvegarde uniquement en fait :/.
Il faudrait sinon charger toutes les sauvegardes et récupérer avec par exemple une boucle les variables nécessaire sans lancer la partie automatiquement, mais là c'plus de mon niveau désolé :o.

    







D'accord, c'est pas grave  :) Mais je me dis que c'est forcément possible, puisque dans le système de chargement de rpg maker xp, quand on veut charger une partie, on peut voir le temps joué et les persos dans l'équipe, sans pour autant la chargée, je serais près à parier que ça se passe par là:

def initialize
    # テンポラリオブジェクトを再作成
    $game_temp = Game_Temp.new
    # タイムスタンプが最新のファイルを選択
    $game_temp.last_file_index = 0
    latest_time = Time.at(0)
    for i in 0..3
      filename = make_filename(i)
      if FileTest.exist?(filename)
        file = File.open(filename, "r")
        if file.mtime > latest_time
          latest_time = file.mtime
          $game_temp.last_file_index = i
        end
        file.close
      end
    end
    super("Charger quelle partie?")
  end




Apparemment c'est ici que la variable concernant le temps de jeu est récupéré, avec $variable = file.[donnée], en effet :).
Peut-être que ajouter $vie = file.game_variable[ID] où x est le numéro de ta variable de vie te permettrait de la récupérer ?

Après il faudrait utiliser cette variable via du RUBY ( à savoir $vie et pas game_variable[ID] tant que une partie n'est pas chargée ) mais bon c'est pas très dur ça, après reste à savoir si ça fonctionnera... en plus la variable utilisé pour stocker le temps de jeu à l'air d'être déclarée dans un autre script ( enfin le "game_temp" me laisse supposer qu'elle est définie comme temporaire ) tu devrais regarder histoire de voir si il faut déclarer ou non les variables que tu voudrais utiliser dedans aussi...

    







D'accord, merci mais euh... je sais que je suis un peu énervant mais ne connaissant rien en ruby, je ne sais pas du tout comment faire  :P




Moi non plus, mais cherche par exemple dans le script "Game_temp" si tu vois un truc du genre " $game_temp.last_file_index"...

M'enfin après je vois pas trop, à mon avis tu as trouvé le bout de code qui récupère effectivement le temps de jeu, mais je ne sais pas si on peux récupérer aussi simplement que par $var=file.game_variable[ID] :o.

    







D'accord, mais au pire, tu saurais pas comment récupérer n'importe quelle variable de la sauvegarde? Sinon j'irai demander sur un forums de script  :)
Posté le: 03 Décembre 2009 à 08:51
Ça y est  :D J'ai pensé à un système si simple que ça fait peur  :P Le principe est simple:

1.Je charger la sauvegarde normalement
2.J'attribue les variables du jeu à des variables en ruby ex:  $heures = $game_variables[30]
3.Je charge une autre sauvegarde qui elle ne servira qu'à initialiser le jeu(le menu du début donc)
4.J'attribue les variables en ruby à la variable de la nouvelle sauvegarde chargée ex: $game_variables[1] = $heures
5.Voilà, je détiens les données de ma sauvegarde sans que le joueur aie eu conscience que la sauvegarde aie été chargée tout simplement parce que l'opération se déroule si rapidement, qu'on voit seulement un écran noir!(1/4 de secondes environ donc aucune différence majeure)

Le principe réside dans le fait que les variables du jeux sont modifiées dépendement de la sauvegarde, mais pas celles en ruby qui sont les mêmes pour toutes les sauvegardes, elle ne sont donc pas altérées quand je charge l'autre sauvegarde! Je n'ai aucune connaissance en ruby! C'était si simple!