You should consider joining our Discord to ask for support.

We created a support channel using the new Discord Forum feature!

You can also visit our new website, it has a help section in English and French

0 like 0 dislike
389 views
in Crash by (390 points)
closed by

Yop !

J'ai un crash peut-être lié à la transition vers Studio. J'ai pour l'instant 1033 items dans Prisme. Ceux-ci sont tous dans Studio et ont leur JSON. Cependant, lorsque je tente de m'ajouter l'item 1019, le jeu plante avec l'erreur plus bas.

Pour les besoins du test, nous avons crée un script qui loop dans each_data_item et qui donne l'item en question.

Comme dit ci-dessus, le jeu plante à l'item 1019, alors que JSON n'a aucun souci et le script arrive bien à générer data_item(i).name et le symbol.

Pour une raison étrange, each_data_item retourne seulement 928 alors que, comme expliqué, j'ai 1033 items (pour les id après 928, mon script a une 2e loop qui fait le boulot sur i in 928..1033). Cela pourrait venir du fait qu'au moment de la transition sur Studio, les items "???" ont été retirés car j'ai 928 fichiers JSON dans mon dossier items de Studio. Peut-être cela est en lien avec le premier point ?

Côté maths : 1033 1019 = 14 et 928 - 913 (le jeu plante sur le 913e objet de la loop non "???" = 15 -- donc les planètes sont quasi alignées si on considère que l'objet 0 est "Aucun objet"

Merci pour le coup de main et Kamoulox :)

------------------------------------------------------------------------------

#910

Adding item number : 1016 which name is Titre de propriété(symbol : property_title)

#911

Adding item number : 1017 which name is Badge FPI(symbol : ip_badge)

#912

Adding item number : 1018 which name is Jeu de cartes(symbol : deck_of_cards)

#913

Adding item number : 1019 which name is Evivrator(symbol : evivrator)

The game crashed!

The error is stored in Error.log.

------------------------------------------------------------------------------

================================Erreur de script================================

Message :

undefined method `+' for nil:NilClass

Type : NoMethodError

Script : 01450 Systems/00103 Bag/00001 PFM/00300 Bag.rb (PSDK)

Ligne : 90

Date : 22/08/2022 19:49:41

Game Version : 278

Logiciel : Pokémon SDK 26.2

Script used by eval command : 

$trainer.give_all_items()

===================================Backtraces===================================

[29] : 01450 Systems/00103 Bag/00001 PFM/00300 Bag.rb (PSDK) | ligne 90 add_item

[28] : 09997 all_items.rb (user) | ligne 28 give_all_items

[27] : 09997 all_items.rb (user) | ligne 24 each

[26] : 09997 all_items.rb (user) | ligne 24 give_all_items

[25] : (eval) (RMXP) | ligne 4 eval_script

[24] : 00600 Script_RMXP/03000 Interpreter_7.rb (PSDK) | ligne 124 eval

[23] : 00600 Script_RMXP/03000 Interpreter_7.rb (PSDK) | ligne 124 eval_script

[22] : 00600 Script_RMXP/03000 Interpreter_7.rb (PSDK) | ligne 114 command_355

[21] : 00600 Script_RMXP/02500 Interpreter_2.rb (PSDK) | ligne 16 execute_command

[20] : 00600 Script_RMXP/02400 Interpreter_1.rb (PSDK) | ligne 132 update

[19] : 00600 Script_RMXP/02400 Interpreter_1.rb (PSDK) | ligne 100 loop

[18] : 00600 Script_RMXP/02400 Interpreter_1.rb (PSDK) | ligne 100 update

[17] : 01450 Systems/00003 Map Engine/00003 GamePlay/00200 Scene_Map.rb (PSDK) | ligne 171 auto_transfert_update

[16] : 01450 Systems/00003 Map Engine/00003 GamePlay/00200 Scene_Map.rb (PSDK) | ligne 168 loop

[15] : 01450 Systems/00003 Map Engine/00003 GamePlay/00200 Scene_Map.rb (PSDK) | ligne 168 auto_transfert_update

[14] : 01450 Systems/00003 Map Engine/00003 GamePlay/00200 Scene_Map.rb (PSDK) | ligne 21 update

[13] : 00700 Ajout_PSDK/00002 FPSBalancer.rb (PSDK) | ligne 44 times

[12] : 00700 Ajout_PSDK/00002 FPSBalancer.rb (PSDK) | ligne 44 run

[11] : 01450 Systems/00003 Map Engine/00003 GamePlay/00200 Scene_Map.rb (PSDK) | ligne 21 update

[10] : 01450 Systems/00000 General/00003 GamePlay__Base/00000 GamePlay__Base.rb (PSDK) | ligne 260 main_process

[9] : 01450 Systems/00000 General/00003 GamePlay__Base/00000 GamePlay__Base.rb (PSDK) | ligne 153 main

[8] : tools/GameLoader/Z_main.rb (PSDK) | ligne 17 <top (required)>

[7] : tools/GameLoader/3_load_extensions.rb (PSDK) | ligne 54 rgss_main

[6] : tools/GameLoader/50_load_game_uncompiled.rb (PSDK) | ligne 45 <top (required)>

[5] : ScriptLoad.rb (PSDK) | ligne 189 require

[4] : ScriptLoad.rb (PSDK) | ligne 189 load_tool

[3] : tools/GameLoader/Z_load_uncompiled.rb (PSDK) | ligne 14 <top (required)>

[2] : ScriptLoad.rb (PSDK) | ligne 189 require

[1] : ScriptLoad.rb (PSDK) | ligne 189 load_tool

[0] : Game.rb (RMXP) | ligne 11 <main>

===================================Fin du log===================================

closed with the note: Fixed

4 Answers

1 like 0 dislike
by (17.1k points)
selected by
 
Best answer
Normalement cette MR devrait fix pas mal de soucis en principe. :)

https://gitlab.com/pokemonsdk/pokemonsdk/-/merge_requests/793
1 like 0 dislike
by (28.0k points)

Les items qui n'ont pas de db_symbol n'ont pas été ajoutés à studio. Tout ceux qui étaient nommés ??? à part 1 seront donc pas importés.

N'essaie pas de faire des maths avec tes nombres d'item théoriques ou même avec des ids. D'ailleurs n'utilise pas les id. Tous les ajouts d'items devraient se faire avec des db_symbol. Le db_symbol doit correspondre au nom de fichier dans Data/Studio/items.

Si tu veux savoir si la commande each_data_item renvoie le bon nombre d'objet, ouvre le dossier Data/Studio/items et regarde combien il y a de fichier. Il doit y en avoir un de moins que each_data_item puis-ce qu'un item est rajouté pour gérer le cas __undef__ (qui est tj renvoyé par data_item(db_symbol) dans le cas où un item n'existe pas avec l'argument donné).

Sans la tête de ton script on peut pas savoir ce qui va pas mais tant que tu n'utilise pas les db_symbol, rien n'ira.

by (28.0k points)
Note: sur la ligne 90, tu dois avoir @items[db_symbol] qui renvoie un nombre si l'objet n'a encore pas été ajouté au sac. Si ça renvoie nil c'est que t'as fait de la merde qqpart:
- Mauvaise version sur la save d'import
- Modifié la valeur de force
- Data tout pourri sur la version d'où la save a été importée
0 like 0 dislike
by (14.8k points)
Yop !

Si tu as 928 fichiers JSON, tu ne peux pas avoir 1019 items lors du passage Studio > PSDK, oui. Il faut donc que tu corriges tes items côté rxdata en corrigeant les "???", il leur faut un db_symbol, et tu auras bien tes 1019 fichiers JSON à l'import.

Par contre, vérifie que tes JSON (par exemple l'objet d'ID 1019) est bon. Si tu fais un each_data_item et que tu moulines sur un tableau où il manque des ID tu as de grandes chances d'avoir des erreurs. Si ça se trouve une sécurité avec un next unless item suffit.
0 like 0 dislike
by (390 points)

Merci à vous deux !

C'est possible que ça soit en effet un souci avec la data des sauvegardes anciennes.

Je voulais mettre le script mais Q2A ce soir veut pas absolument pas d'image, je vais le coller ci-dessous:

each_data_item do |item|
                $bag.add_item(item.db_symbol,1) unless item.db_symbol == :__undef__
                puts $bag.has_item?(item.db_symbol)
            end

Concernant add_item ou has_item? les deux fonctions se basent effectivement sur une seule chose qui est bien @items[db_symbol]

Pour mon objet en particulier, @items nous donne :evivrator=>nil
J'ai aussi une autre partie ou c'est un item différent, avec un id inférieur, qui fait planter le jeu avec le même souci. Comme c'est un objet de quête, je suis allé vérifier et l'objet n'avait pas été trouvé donc je ne comprends pas pourquoi cet objet apparaît dans l'array @items, encore moins avec une quantité nulle.

Un moyen simple serait de virer tous les objets donc la quantité est nil de l'array au démarrage de la sauvegarde ? Surtout si les nil sont en principe des objets qui n'ont pas encore été obtenus une fois.

by (28.0k points)
Est-ce que tu as déjà des save en .26 ou alors c'est pour le moment que des save de .25?
...