Sujet n°9349
Posté par Zopo le 9 Mar - 13:20 (2011)
Titre : [Résolu] Bug dans Scene_Title
Bonjour,
Après avoir fait une animation de centre pokémon de Motenkein j'ai ce bug :

Message :
invalid value for Integer: "07769"

Spoiler du rapport Log :
---------- Erreur de script : Scene_Title ----------
----- Type
ArgumentError

----- Message
invalid value for Integer: "07769"

----- Position dans Scene_Title
Ligne 372

----- Backtrace
Script : Scene_Title | Ligne : 372 | Méthode : in `sprintf'
Script : Scene_Title | Ligne : 372 | Méthode : in `refresh_all'
Script : Scene_Title | Ligne : 342 | Méthode : in `each'
Script : Scene_Title | Ligne : 342 | Méthode : in `refresh_all'
Script : Scene_Title | Ligne : 271 | Méthode : in `main'
Script : Main | Ligne : 53


PS : J'avais sauvegarder en dehors du centre pokémon

Posté par Nuri Yuri le 9 Mar - 13:58 (2011)
Quand tu commence un nombre par 0 et que tu ne met pas de x ou b le programme compte en base 8 donc les chiffres 8 et 9 ne sont pas possibles et le ruby sort une erreur.

Peux tu préciser ton SK car j'ai pas de sprintf dans les deux starter kit que j'ai sur mon ordi dans Scene_Title.

Posté par Zopo le 9 Mar - 14:20 (2011)
 Voici la ligne dans son contexte


 
Code:

        @save_game_window_list[i].contents.draw_text(9, 42, 252, 48, "NOM:")
        @save_game_window_list[i].contents.draw_text(9, 42, 252, 48, name, 2)
        @save_game_window_list[i].contents.draw_text(285, 42, 252, 48, "ID:")
        @save_game_window_list[i].contents.draw_text(285, 42, 252, 48, sprintf("%05d",id) , 2)
        @save_game_window_list[i].contents.draw_text(9, 81, 252, 48, "POKéDEX:")
        @save_game_window_list[i].contents.draw_text(9, 81, 252, 48, captured, 2)
        @save_game_window_list[i].contents.draw_text(285, 81, 252, 48, "DUREE:")
        @save_game_window_list[i].contents.draw_text(285, 81, 252, 48, time, 2) 


 
La ligne isoler :
@save_game_window_list.contents.draw_text(285, 42, 252, 48, sprintf("%05d",id) , 2)


C'est PSPgraph' DP

Posté par Nuri Yuri le 9 Mar - 15:54 (2011)
Ça s'explique.
Celui qui a coder ça n'a pas prévue l'éventualité d'un 0 baladeur ...
Remplace
Code:
@save_game_window_list.contents.draw_text(285, 42, 252, 48, sprintf("%05d",id) , 2)

par
Code:
@save_game_window_list.contents.draw_text(285, 42, 252, 48, sprintf("%05s",id).gsub(" ","0") , 2)

Je pense même que
Code:
@save_game_window_list.contents.draw_text(285, 42, 252, 48, id , 2)
pourrait suffire vue que y'a déjà les 0 dans l'id.

Posté par Zopo le 9 Mar - 16:39 (2011)
Aucun des 2 ne marche voici le nouveau bug :


 Message :
- ARGS - []
undefined method `contents' for [#<Window_Base:0x12cba88>]:Array

Log
Code:

---------- Erreur de script : Scene_Title ----------
----- Type
NoMethodError

----- Message
- ARGS - []
undefined method `contents' for [#<Window_Base:0x12cba88>]:Array

----- Position dans Scene_Title
Ligne 372

----- Backtrace
Script : Scene_Title | Ligne : 372 | Méthode : in `refresh_all'
Script : Scene_Title | Ligne : 342 | Méthode : in `each'
Script : Scene_Title | Ligne : 342 | Méthode : in `refresh_all'
Script : Scene_Title | Ligne : 271 | Méthode : in `main'
Script : Main | Ligne : 53 


Posté par Nuri Yuri le 9 Mar - 17:15 (2011)
J'ai bêtement copier le code qui tu as mis, désolé ...
Remplace : @save_game_window_list.contents.draw_text par @save_game_window_list[i].contents.draw_text

Posté par Zopo le 9 Mar - 17:42 (2011)
Toujours pas... Décidément

Message :
- ARGS - []
undefined method `contents' for [#<Window_Base:0x12cbc20>]:Array

Log
 
Code:
---------- Erreur de script : Scene_Title ----------
----- Type
NoMethodError

----- Message
- ARGS - []
undefined method `contents' for [#<Window_Base:0x12cbc20>]:Array

----- Position dans Scene_Title
Ligne 372

----- Backtrace
Script : Scene_Title | Ligne : 372 | Méthode : in `refresh_all'
Script : Scene_Title | Ligne : 342 | Méthode : in `each'
Script : Scene_Title | Ligne : 342 | Méthode : in `refresh_all'
Script : Scene_Title | Ligne : 271 | Méthode : in `main'
Script : Main | Ligne : 53 
 

Posté par Nuri Yuri le 9 Mar - 18:16 (2011)
met ça à la place de la ligne 372.
Code:
@save_game_window_list[i].contents.draw_text(285, 42, 252, 48, sprintf("%05s",id).gsub(" ","0") , 2) 

Posté par Sphinx le 9 Mar - 18:25 (2011)
Yuri, pourquoi tu remplaces les espaces par un 0 alors qu'il n'y a aucun espace dans ce qui fait bugger le script ? ^^"


=> Le sprintf était là pour convertir le contenu de la variable id (dans PSP0.7 & 4G+ c'est un Integer, ce qui a obligé Krosk à ajouter ce sprintf Clin d'œil foireux).

Pour vérifier que c'est bien aussi un nombre dans PSP DS, tu peux ajouter
Code:
print id.inspect

et nous dire ce que ca t'affichera avant la ligne qui bugge ? Imbécile heureux

Posté par Nuri Yuri le 9 Mar - 18:54 (2011)
Sphinx a écrit:
Yuri, pourquoi tu remplaces les espaces par un 0 alors qu'il n'y a aucun espace dans ce qui fait bugger le script ? ^^"


=> Le sprintf était là pour convertir le contenu de la variable id (dans PSP0.7 & 4G+ c'est un Integer, ce qui a obligé Krosk à ajouter ce sprintf Clin d'œil foireux).

Pour vérifier que c'est bien aussi un nombre dans PSP DS, tu peux ajouter
Code:
print id.inspect

et nous dire ce que ca t'affichera avant la ligne qui bugge ? Imbécile heureux



Pourquoi je fais ça ?
Le zero est la cause du problème ... mais normalement il y a besoins d’aucun sprintf vu que Player.id convertis directement l'id en string.
L'erreur donné :
invalid value for Integer: "07769"
Ça veux dire qu'on a affaire a une chaîne sinon il y aurais eu compile error ou autre chose regarde :
Ruby a écrit:
Cmd: p sprintf("%05d","07769") #erreur de conversion

Err: (eval):1:in `sprintf': invalid value for Integer: "07769"

Cmd: p sprintf("%05d",07769) #erreur de compilation

Err: (eval):1: compile error
(eval):1: syntax error, unexpected tINTEGER, expecting ')'
p sprintf("%05d",07769) #erreur de compilation
^

Cmd: p sprintf("%05s","07769") #code correcte mais remplace les trous par des es
paces
"07769"

Cmd: p sprintf("%05s","7769") #la preuve
" 7769"

Cmd: p sprintf("%05s","7769").gsub(" ","0") #d'où le remplacement
"07769"


Le "print id.inspect" ou "p id" va lui afficher "07769".
Normalement si il met @save_game_window_list[i].contents.draw_text(285, 42, 252, 48, sprintf("%05s",id).gsub(" ","0") , 2) à la ligne qui bug il devrai pas y avoir de problèmes.
Et les sprintf().gsub() n'est la qu'a titre préventif on sait jamais.

Posté par Zopo le 9 Mar - 20:53 (2011)
Cette fois c'est la bonne :^^:
Merci beaucoup

Posté par Sphinx le 9 Mar - 21:02 (2011)
Quoi qu'il en soit, ton gsub est inversé Clin d'œil foireux " " est remplacé par 0, alors que c'est justement le 0 le soucis

Le print id.inspect va renvoyer soit
Citation:
7769

soit
Citation:
"07769"

Le but est de savoir lequel Imbécile heureux Dans le premier cas, id est un int, et le sprintf %05d est utile et indispensable. Dans le second cas, c'est une chaine de caractères et donc il suffit de remplacer tout le sprintf (gsub compris) par un simple affichage de la valeur de cette variable.

PS : en effet, Player.id retourne bien une chaine de caractères ^^ Donc en théorie le sprintf est de trop, mais Krosk l'a rajouté dans un correctif parce que pour certains, ca plantait malgré tout ^^

Posté par Nuri Yuri le 9 Mar - 21:24 (2011)
Non Non ... Mon gsub est dans le bon sens :B
Le 0 est le problème mais j'ai utilise String dans Sprintf et non Double (%s a lieu de %d) et ça se comporte pas pareil (c'est montrer en parti dans la citation) ... enfin bref, dans la version que Zopo a de PSP id contient une chaine, à partir de PSP 0.7 id est un entier (id = data[0].to_i ) c'est qui rend le sprintf utile, le code que j'ai donné est juste à titre préventif.
C'est pour éviter des bizarreries.

Edit : Si il aurais du être dans l'autre sens ça aurais été sprintf("%05d",id.gsub("0","")) mais la tout les Zéros saute XD

Posté par Sphinx le 9 Mar - 21:32 (2011)
Yuri-岼 a écrit:
Edit : Si il aurais du être dans l'autre sens ça aurais été sprintf("%05d",id.gsub("0","")) mais la tout les Zéros saute XD

en effet, et un .sub au lieu d'un .gsub aurait été plus approprié :p

Yuri-岼 a écrit:
Le 0 est le problème mais j'ai utilise String dans Sprintf et non Double (%s a lieu de %d) et ça se comporte pas pareil (c'est montrer en parti dans la citation) ... enfin bref, dans la version que Zopo a de PSP id contient une chaine, à partir de PSP 0.7 id est un entier (id = data[0].to_i ) c'est qui rend le sprintf utile, le code que j'ai donné est juste à titre préventif.
C'est pour éviter des bizarreries.

^^ Je ne comprends pas pourquoi cette double conversion, et encore moins pourquoi elle n'est pas présente dans PSP DS qui est - si ma mémoire est bonne - basé sur cette version Imbécile heureux

Posté par Nuri Yuri le 9 Mar - 21:47 (2011)
Il a dit qu'il utilisait PSP Graph DP Coupable
Zopo a écrit:
C'est PSPgraph' DP

Posté par Sphinx le 10 Mar - 17:50 (2011)
Pardon :p Mais ca ne change presque rien : PSP Graph DP n'est pas basé sur 0.7 aussi ?

Posté par Nuri Yuri le 10 Mar - 18:36 (2011)
Je pensais que c'était sur PSP 0.5 Coupable
Ou alors c'est une version de PSP 0.7 sans correctifs sinon cette erreur ne serais jamais arrivé vu que l'id sur la version que j'ai est convertis en entier plutot que de rester en string.