Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker


Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Jeux: Final Destiny / Jeux: puie z / Jeux: Citymaime - Chapitre 1 / Jeux: Mer, îles et fous / News: Du neuf dans le making / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

245 connectés actuellement

30741558 visiteurs
depuis l'ouverture

1931 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

New RPG Maker

RPG Maker VX

RPG Maker - La Communauté

ConsoleFun

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RMXP] Events et Script de sauvegarde


Musa - posté le 19/08/2013 à 02:37:09 (20 messages postés)

❤ 0

Domaine concerné: Script
Logiciel utilisé: RMXP
Bonjour à tous ! :sourire2

Pour mon projet sous RMXP, j'utilise actuellement un script de sauvegarde que vous pouvez retrouver ici : http://rpgmaker.net/scripts/49/
En fait, je réalise un Menu Custom en events et ce script me permet de charger et sauvegarder très simplement via une petite ligne de script appellée via mes events.

Je vous explique mon problème : mon menu possède 3 slots de sauvegarde. Lorsque le joueur ouvre l'écran de sauvegarde, il a un accès visuel à ses sauvegardes précédentes, ainsi pour chaque sauvegarde on peut voir le niveau, les HP, MP, l'argent, le temps de jeu et le nombre de fois que la partie à été sauvegardée.

Je voudrais donc pouvoir récupérer tous ces paramètres, enregistrés dans la sauvegarde par le script, via des variables utilisables en events afin de pouvoir les afficher. :D

Voici un extrait du script, concernant son utilisation en events :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
=begin
 
-----EVENT SAVE CONTROL-------
 
Scripts calls:
 
$game_system.map_quicksave : Save the game in the quicksave slot.
 
$game_system.map_autosave : Save the game in the autosave slot.
 
$game_system.load_slot(X) : Load the game in slot X.
 
$game_system.save_slot(X) : Save the game in slot X.
 
$game_system.erase_slot(X) : Erase the game in slot X.
 
$game_system.slot_exist(X) : It tells you if slot X exist. Have two uses_:
 
  1-The script returns true/false, you can use it in a conditional branch script option.
  2-Script also saves true/fase in the switch defined by Sw_file_exist.
 
$game_system.slot_info(X) : It save the slot information in the slots you defined.
  -Date
  -Time
  -Steps
  -Gold
  -Group actors ids
  -Group actors levels
 
$scene = Scene_Load.new(true): Call load menu in a map.
 
=end
 
module Wep
 
  Sw_file_exist = 2
 
  Vars_actors_ids = [1,2,3,4] # Group actors ids
  Vars_actors_levels = [5,6,7,8] # Group actors levels
  # Date: Year, Month, Day, Hour, Minute, Second
  Vars_date = [9,10,11,12,13,14]
  # Time: Hour, minute, second
  Vars_time = [15,16,17]
  Vars_money = 18 # Gold
  Vars_steps = 19 # Steps
 
end


J'ai essayé de MP l'auteur de script, mais celui-ci semble dater un peu et je n'ai pas eu de réponse pour le moment. Je viens donc vous demander de l'aide ! Le script est plutôt bien commenté, j'ai essayé plusieurs trucs mais sans résultats.


maxadona - posté le 19/08/2013 à 11:11:41 (146 messages postés)

❤ 0

Drawing my dreams on sheets of paper ...

Si je ne me trompe pas, chaque valeur est stockée dans une variable de 1 à 19.

Variables 1 à 4 pour les ID des persos, de 5 à 8 pour leur niveau, 9 à 14 pour afficher une date, 15 à 17 pour le temps de jeu, 18 pour l'argent et 19 pour le nombre de pas.

Il suffirait donc de récupérer les valeurs de chacune de ces variables et de les utiliser comme tu le désires.

Notre imagination ne serait-elle pas la folie de notre génie ? - Last Chance Projet (Site à mettre à jour) ... Présentation bientôt - Chaine Youtube


Musa - posté le 19/08/2013 à 13:14:38 (20 messages postés)

❤ 0

C'est effectivement ce que je me suis dit, j'ai donc essayé de faire un petit event pour voir si je pouvais récupérer ces variables selon le modèle suivant :

Portion de code : Tout sélectionner

1
2
3
4
@>Script: $game_system.slot_info(1)
@>Text: Level : \V[5]
  :   : Timer : \V[16] : \V[17]
  :   : Argent : \V[18]


Je pense que la première ligne permet de récupérer les infos du slot numéro 1 dans les variables.
Le reste permet juste d'afficher les dites variables.

Lors du test, le jeu plante dès la première ligne (l'appel du script) et me retourne l'erreur :

Portion de code : Tout sélectionner

1
2
Script 'Sauvegarde Rapide' line 1462: NoMethodError occurred.
undefinded method 'actors' for #<Game_System:0x2529468>


Le script "Sauvegarde Rapide" est bien entendu le dit script de sauvegarde. De plus, même si tout cela fonctionnait, j'aimerai également récupérer d'autres valeurs comme les HP, MP et le nombre de fois que la partie à été sauvegardée.


Cortez - posté le 19/08/2013 à 17:39:39 (524 messages postés)

❤ 0

Le message indique une méthode non définie "actors"
Le problème se trouve à la ligne 1462, mais il est possible que le
problème vienne d'ailleurs.

Il nous faut le script entier pour comprendre l'erreur.


Musa - posté le 20/08/2013 à 11:04:54 (20 messages postés)

❤ 0

J'en ai donné le lien dans mon premier post, le code étant particulièrement long, il n'est pas accepté dans une balise code sur le forum, ni dans une balise de spoil.
Voici le lien direct du code entier : http://rpgmaker.net/scripts/49/code/

Voici le bout de code impliqué et la ligne 1462 (ligne 25 ici) :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#--------------------------------------------------------------------------
  # * Slot info
  #--------------------------------------------------------------------------
  def slot_info(slot)
     if FileTest.exist?( Wep::Save_folder+ "\\"+ Wep::File_name + slot.to_s + Wep::Saves_extension)    
        file = File.open( Wep::Save_folder+ "\\"+ Wep::File_name + slot.to_s + Wep::Saves_extension, "r")
        timestamp = file.mtime
        characters = Marshal.load(file)
        guard_rap = Marshal.load(file)
        psj = Marshal.load(file)
        dinero = Marshal.load(file)
        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)
        total_sec = frame_count / Graphics.frame_rate
        file.close
        i=0
       
        # Actors levels and ids
        for actor in game_party.actors
          $game_variables[Wep::Vars_actors_ids[i]] = actor.id      
          $game_variables[Wep::Vars_actors_levels[i]] = actor.level    
          i+=1
        end
        # Date
        $game_variables[Wep::Vars_date[0]] = timestamp.year
        $game_variables[Wep::Vars_date[1]] = timestamp.month
        $game_variables[Wep::Vars_date[2]] = timestamp.day
        $game_variables[Wep::Vars_date[3]] = timestamp.hour
        $game_variables[Wep::Vars_date[4]] = timestamp.min
        $game_variables[Wep::Vars_date[5]] = timestamp.sec
        # Time
        hour = total_sec / 60 / 60
        min = total_sec / 60 % 60
        sec = total_sec % 60
        $game_variables[Wep::Vars_time[0]] = hour
        $game_variables[Wep::Vars_time[1]] = min
        $game_variables[Wep::Vars_time[2]] = sec
        # Gold and steps
        $game_variables[Wep::Vars_money] = game_party.gold
        $game_variables[Wep::Vars_steps] = game_party.steps
        return true
    end  
  end
end




EDIT :

Bon après moultes essais, j'ai tenté de rajouter des $ devant certaines variables :

Portion de code : Tout sélectionner

1
for actor in $game_party.actors

et

Portion de code : Tout sélectionner

1
2
$game_variables[Wep::Vars_money] = $game_party.gold
$game_variables[Wep::Vars_steps] = $game_party.steps



Je n'ai alors plus d'erreur, mais les variables qui s'affichent ne sont pas celles du slot recherché, mais les variables de la partie actuelle (la partie lancée pour faire le test, et non la sauvegarde).


J'ai fais pas mal de recherche, ne connaissant presque rien au ruby. L'erreur renvoyant au niveau du for, de ce que j'ai cru comprendre :

Portion de code : Tout sélectionner

1
actor

est une variable locale

Portion de code : Tout sélectionner

1
game_party

est un module chargé ici d'après le slot défini

Portion de code : Tout sélectionner

1
game_party.actors

(est un tableau ?) qui correspond aux id des différents personnages dans l'équipe

Portion de code : Tout sélectionner

1
$game_variables[Wep::Vars_actors_ids[i]] = 

permet d'enregistrer une donnée dans la variable définie plus haut

Portion de code : Tout sélectionner

1
actor.id

est une variable contenant l'id du personnage passé en revue dans le for


Si quelqu'un qui s'y connait pouvait m'aiguiller un peu, je patauge la !
Ne serait-ce que m'indiquer si je fais fausse route ou non !

Si les modifs ne sont pas possibles, ce que je voudrais c'est avoir quelque chose qui me permette :
- de sauvegarder sur 3 slots différents
- de charger sur 3 slots différents
- de pouvoir tester si une sauvegarde existe déjà sur un slot
- de pouvoir récupérer les infos d'une partie sauvegardée sans la charger


Dyeel - posté le 27/08/2013 à 12:44:43 (200 messages postés)

❤ 0

Hey.

Cette partie du script est un peu bizarre.
Je t'explique :
Quand tu sauvegardes un fichier, l'ordre de ce que tu sauvegardes est très important car il faudra charger toutes les données absolument dans le même ordre.
Or le script sauvegarde dans un sens et charge dans l'autre.
Ça veut dire que là où c'est écrit game_party, ben c'est tout sauf le game_party.

Donc dans la partie du script slot_infos que tu as mis au-dessus, essaie de :
-supprimer les lignes 8 à 11 (de characters à dinero = Marshal.load(file) )
Le premier Marshal.load(file) est donc le frame_count
-juste avant le frame_count, où tu as supprimé les lignes, écris :

Portion de code : Tout sélectionner

1
2
3
4
5
 
for i in 0..9
infos = Marshal.load(file)
end
 



Je pense que ça devrait marcher.
Sinon, poste le message d'erreur.

Il ne faut pas ajouter de $ car tu vas prendre les infos de ta partie actuelle, mais ça tu l'as déjà vu^^


Musa - posté le 27/08/2013 à 15:10:47 (20 messages postés)

❤ 0

Wow, très impressionnant ! En effet ça marche nikel, merci beaucoup !

En fait, je suis dessus depuis plusieurs jours, du coup j'ai réussi à contourner le problème avec ce tuto : http://www.rpg-maker.fr/tutoriels-268-ruby-ecrire-et-lire-un-fichier.html
J'ai pu écrire grâce à lui deux petites fonctions qui me permettent de sauver et charger les infos que je veux afficher pour chaque slot. Je les donne, ça pourra peut-être servir à quelqu'un d'autre un jour :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#----------------------------------------------------------------------------
#  ECRIRE INFOS DANS FICHIER SAVE
#  http://www.rpg-maker.fr/tutoriels-268-ruby-ecrire-et-lire-un-fichier.html
#----------------------------------------------------------------------------
 
def save_variables(slot)
        file = File.open("Saves\\Save"+slot.to_s+".data", "w+")
        fichier = file
 
        if slot.to_i == 1
    fichier.write("Level = "+$game_variables[101].to_s+" ;
Timer = "+$game_variables[104].to_s+" ;
Gold = "+$game_variables[105].to_s+" ;
HP = "+$game_variables[102].to_s+" ;
MP = "+$game_variables[103].to_s+" ;
SaveNumber = "+$game_variables[106].to_s+" ;
YTonic = "+$game_variables[124].to_s+" ;
YMagicKey = "+$game_variables[125].to_s+"")
        
        elsif slot.to_i == 2
                fichier.write("Level = "+$game_variables[107].to_s+" ;
Timer = "+$game_variables[110].to_s+" ;
Gold = "+$game_variables[111].to_s+" ;
HP = "+$game_variables[108].to_s+" ;
MP = "+$game_variables[109].to_s+" ;
SaveNumber = "+$game_variables[112].to_s+" ;
YTonic = "+$game_variables[124].to_s+" ;
YMagicKey = "+$game_variables[125].to_s+"")
        
        elsif slot.to_i == 3
                fichier.write("Level = "+$game_variables[113].to_s+" ;
Timer = "+$game_variables[116].to_s+" ;
Gold = "+$game_variables[117].to_s+" ;
HP = "+$game_variables[114].to_s+" ;
MP = "+$game_variables[115].to_s+" ;
SaveNumber = "+$game_variables[118].to_s+" ;
YTonic = "+$game_variables[124].to_s+" ;
YMagicKey = "+$game_variables[125].to_s+"")
        
        else
                fichier.write("Level = 0 ;
Timer = 0 ;
Gold = 0 ;
HP = 0 ;
MP = 0 ;
SaveNumber = 0 ;
YTonic = 0 ;
YMagicKey = 0")
        
        end
 
        file.close
end
 
#----------------------------------------------------------------------------
#  LIRE INFOS DANS FICHIER SAVE
#  http://www.rpg-maker.fr/tutoriels-268-ruby-ecrire-et-lire-un-fichier.html
#----------------------------------------------------------------------------
 
def read_variables(slot)
        file = File.open("Saves\\Save"+slot.to_s+".data", "r")
        fichier = file
        fichier = fichier.read
 
        fichier.gsub!(" ", "")
        fichier.gsub!("_", " ")
        fichier = fichier.split(";") 
 
        level = fichier[0]
        timer = fichier[1]
        gold = fichier[2]
        hp = fichier[3]
        mp = fichier[4]
        savenumber = fichier[5]
        ytonic = fichier[6]
        ymagickey = fichier[7]
 
        level = level.split("=")
        timer = timer.split("=")
        gold = gold.split("=")
        hp = hp.split("=")
        mp = mp.split("=")
        savenumber = savenumber.split("=")
        ytonic = ytonic.split("=")
        ymagickey = ymagickey.split("=")
  
  if slot.to_i == 1
    $game_variables[101] = level[1].to_i
    $game_variables[104] = timer[1].to_i
    $game_variables[105] = gold[1].to_i
    $game_variables[102] = hp[1].to_i
    $game_variables[103] = mp[1].to_i
    $game_variables[106] = savenumber[1].to_i
    #$game_variables[124] = ytonic[1].to_i
    #$game_variables[125] = ymagickey[1].to_i
    
        elsif slot.to_i == 2
    $game_variables[107] = level[1].to_i
    $game_variables[110] = timer[1].to_i
    $game_variables[111] = gold[1].to_i
    $game_variables[108] = hp[1].to_i
    $game_variables[109] = mp[1].to_i
    $game_variables[112] = savenumber[1].to_i
    #$game_variables[124] = ytonic[1].to_i
    #$game_variables[125] = ymagickey[1].to_i
    
        elsif slot.to_i == 3
    $game_variables[113] = level[1].to_i
    $game_variables[116] = timer[1].to_i
    $game_variables[117] = gold[1].to_i
    $game_variables[114] = hp[1].to_i
    $game_variables[115] = mp[1].to_i
    $game_variables[118] = savenumber[1].to_i
    #$game_variables[124] = ytonic[1].to_i
    #$game_variables[125] = ymagickey[1].to_i   
    
        else
    $game_variables[1] = level[1].to_i
    $game_variables[2] = timer[1].to_i
    $game_variables[3] = gold[1].to_i
    $game_variables[4] = hp[1].to_i
    $game_variables[5] = mp[1].to_i
    $game_variables[6] = savenumber[1].to_i
    #$game_variables[7] = ytonic[1].to_i
    #$game_variables[8] = ymagickey[1].to_i   
        
        end
 
        file.close
end


Bref, tout fonctionne bien, mais pour le coup j'ai maintenant deux fichiers de sauvegarde par slot (le fichier habituel et le fichier créé par mes fonctions). C'est un petit peu cracra tout de même. De plus, mes fichiers ne sont pas cryptés donc y a mieux !

Actuellement, le script "de base" permet de récupérer :
- Le Niveau
- L'or
- Le Timer

Serait-il possible de pouvoir récupérer :
- les HP (actuels)
- les MP (actuels)

Et aussi d'y enregistrer des variables X et Y afin par la suite de pouvoir les récupérer ?


Dyeel - posté le 27/08/2013 à 19:16:54 (200 messages postés)

❤ 0

Je te conseille de modifier le script que tu as déjà, plutôt que d'écrire dans un autre fichier. C'est moins sale ^^

Pour modifier une variable de ta partie actuelle. (Exemple, variable 3)
$game_variables[3] = 46
Tu peux la rendre égale aux mp ou hp actuels.
Pour le héros 1 :
$game_variables[3] = $game_actors[1].hp (ou .mp pour les mp.Tu as aussi .name, .level, .hp_max etc mais il faut bien être sûr de la syntaxe)
Si tu veux le faire pour les héros d'une partie déjà sauvegardée, enlève le $ du game_actors.
Pareil si tu veux récupérer la valeur d'une variable d'une partie sauvegardée.
Et tu écris tout ça après le file.close du script dont tu avais placé l'extrait.

J'espère avoir bien expliqué ^^


Musa - posté le 02/09/2013 à 16:23:15 (20 messages postés)

❤ 0

Ah super ! Oui tu as très bien expliqué !

J'essaye ça, dès que j'en ai l'occasion, merci !

Index du forum > Entraide > [RMXP] Events et Script de sauvegarde

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers