Partagez
Aller en bas
avatar
Sphinx
Membre

Nombre de messages : 58
Distinction : aucune
Date d'inscription : 08/03/2016

Résolu [Résolu] SRD_CharacterCreatorEx erreur "folders is not defined"

le Mer 30 Aoû 2017 - 2:01
Sur RMMV, je me suis lancé dans un projet que j'envisage à terme d'exporter sur Android. Dans RMMV, je lance mon jeu, tout va bien. Je tente un premier export, sous forme de site web pour Windows, et c'est là que ca commence à bugger.

Parmi les scripts que j'utilise j'ai choisi de prendre le Character Creator Ex. Evidemment j'ai veillé à ce que toutes les ressources que j'utilise (en l'occurrence le dossier du générateur) aient bien été exportées. Et dès que je lance le fichier index.html, voilà le résultat :

(j'ai redéclaré les fonctions gérant les erreurs pour afficher la trace de l'erreur sous le message, parce que je n'avais rien dans la console)

Le script que j'utilise est disponible ici : http://sumrndm.site/character-creator-ex/

Et la fonction qui bugge est celle ci :
Code:
_.preloadCharacterPieces = function() {
 const folders = this.getFolderList(); // <<<<<<<<<<<<<<<< C'est ici que la variable folders est censée être définie
 _._ccex_loads = 0;
 _._ccex_files = -1;
 let tempFiles = 0;
 const increaseLoads = function() {
 _._ccex_loads++;
 }
 for(let i = 0; i < folders.length; i++) { // <<<<<<<<<<<<<<< C'est là que le script plante, folders n'est pas défini
 const files = this.getFileList(folders[i] + '/');
 for(let j = 0; j < files.length; j++) {
 this.loadImageWPath(this.path + folders[i] + '/walk/', files[j]).addLoadListener(increaseLoads.bind(this));
 this.loadImageWPath(this.path + folders[i] + '/dead/', files[j]).addLoadListener(increaseLoads.bind(this));
 this.loadImageWPath(this.path + folders[i] + '/face/', files[j]).addLoadListener(increaseLoads.bind(this));
 this.loadImageWPath(this.path + folders[i] + '/sv/', files[j]).addLoadListener(increaseLoads.bind(this));
 tempFiles += 4;
 }
 }
 _._ccex_files = tempFiles;
 this.loadImage('CustomCharacter');
 this.loadImage('CustomFace');
 this.loadImage('Background');
 this.loadImage('Walk-Background');
 this.loadImage('Dead-Background');
 this.loadImage('SV-Background');
 this.loadImage('Face-Background');
};

Merci par avance à tous ceux qui pourront m'aider Smile

PS : j'ai essayé de chercher si d'autres avaient eu la même erreur sur le site de SumRndmDde, mais mon anglais étant ce qu'il est, j'ai cherché les occurrences du mot folders sans rien trouver Sad


Dernière édition par Sphinx le Mer 30 Aoû 2017 - 19:30, édité 1 fois
avatar
Ashala
Membre

Nombre de messages : 531
Age : 26
Localisation : L'Antre-Deux-Mondes.
Distinction : "A une araignée au plafond" [Nowa]
Date d'inscription : 09/06/2016

Résolu Re: [Résolu] SRD_CharacterCreatorEx erreur "folders is not defined"

le Mer 30 Aoû 2017 - 9:25
Le premier truc que j'essaierai, c'est de voir si en format .exe ça donne la même erreur, vérifier que le dossier a bien le même nom, au même emplacement... Le plugin a l'air de galérer à lister les fichiers durant la boucle.

Après je file au boulot dans peu de temps alors je regarderai plus tard. Je n'ai pas l'impression que les autres sur le site avaient la même erreur, les lignes de code étaient différentes :/

EDIT : La documentation du plugin m'efforce de penser qu'il faudrait que tu revérifie l'agencement des dossiers, même si tu dis l'avoir fais, juste "au cas où".
On dirait que les dossiers /walk/ /dead/ /face/ /sv/ n'ont pas été exporté d'après le message.
avatar
Sphinx
Membre

Nombre de messages : 58
Distinction : aucune
Date d'inscription : 08/03/2016

Résolu Re: [Résolu] SRD_CharacterCreatorEx erreur "folders is not defined"

le Mer 30 Aoû 2017 - 18:39
Au départ, j'ai pensé à ca aussi (et effectivement, comme j'avais coché l'option "Exclure les ressources inutilisées", j'ai été obligé de les copier/coller dans le dossier de mon export)

Tous les sous dossiers du dossier img\SumRndmDde\character-creator-ex\ ont bien 4 sous dossiers, à savoir dead\, face\, sv\ et walk\ Neutral

J'ai lancé comme tu m'y invitais le Game.exe du dossier exporté, il se lance bien (sans erreur). J'ai relancé ensuite le index.html, là il plante comme cette nuit... Mais je crois qu'avec tes explications j'ai enfin compris pourquoi ce bug : j'ai fait un export windows, donc, et le Game.exe est à la racine du dossier exporté, tandis qu'index.html est dans le dossier www\. Je viens de voir que l'export vers les navigateurs était une autre option, donc j'essaie et je reviens ici pour dire si ca a marché

Edit 1:
A première vue, l'export web me donne la même arborescence que l'export windows (sauf que je n'ai évidemment pas ni l'exécutable windows ni les dll). J'ai bien sûr réexporté les images du générateur de personnages (ainsi qu'un autre dossier d'images qui ne s'exporte pas non plus tout seul)
Suspense...

...

... Même erreur... T_T Mais le problème est peut être celui sur lequel tu as mis le doigt : le dossier courant n'est pas le même selon si on lance Game.exe (là on est à la racine du dossier exporté) ou si on lance index.html (là on est dans un sous dossier www\)
avatar
Ashala
Membre

Nombre de messages : 531
Age : 26
Localisation : L'Antre-Deux-Mondes.
Distinction : "A une araignée au plafond" [Nowa]
Date d'inscription : 09/06/2016

Résolu Re: [Résolu] SRD_CharacterCreatorEx erreur "folders is not defined"

le Mer 30 Aoû 2017 - 18:49
Marf, à partir de là il va peut être falloir regarder dans le plugin et voir si tu peux modifier le path pour la version html ><

Bon courage en tout cas :/
avatar
Sphinx
Membre

Nombre de messages : 58
Distinction : aucune
Date d'inscription : 08/03/2016

Résolu Re: [Résolu] SRD_CharacterCreatorEx erreur "folders is not defined"

le Mer 30 Aoû 2017 - 19:30
J'ai trouvé *o* (ca m'aura pris du temps, mais j'ai trouvé, je le jure !)

En fait ca tient au comportement du script. Si il est lancé depuis NodeJs (autrement dit depuis Game.exe ou depuis RMMV directement), alors il parcourt le dossier img\SunRndmDde\character-creator-ex\ à la recherche des différents morceaux pour les précharger (comme ca, à l'appel du script, pas de latence inutile). Jusque là, aucun problème. J'ajouterai qu'il enregistre les différentes informations sur l'arborescence dans un fichier json nommé cc-info.sumrndmdde et contenu dans le dossier data\. Pourquoi ? J'y viens.

Si il n'est pas chargé depuis NodeJs, et c'est le cas si le jeu est exporté pour être joué sur un navigateur, ou encore sur android, le script ne recherche plus les arborescences en local. C'est là qu'intervient notre petit json cc-info.sumrndmdde. En effet, il suffit de le lire pour avoir toutes les informations utiles au script.

Bon, jusque là, tout marche bien.

Dans les deux cas de figure, le script charge la liste des répertoires dans une variable nommée _.fileInfoStuff (qui n'est rien d'autre qu'un objet json qui va contenir entre autre chose, la liste des dossiers, plus tard accessible avec la clé folder)

Là encore, rien d'anormal, le script fait ce dont il a besoin pour fonctionner plus tard.

Si le jeu est lancé depuis Game.exe ou encore RMMV, alors c'est cette fonction qui est appelée :
Code:
_.saveFileInfoStuff = function() {
 const folds = this.getFolderListNodeJs();
 this.fileInfoStuff.folders = folds;
 for(let i = 0; i < folds.length; i++) {
 const fold = folds[i] + '/';
 this.fileInfoStuff[fold] = this.getFileListNodeJs(fold);
 }
 const data = LZString.compressToBase64(JSON.stringify(this.fileInfoStuff));
 const fs = require('fs');
 const dirPath = this.getFilePathData();
 const filePath = dirPath + 'cc-info.sumrndmdde';
 fs.writeFileSync(filePath, data);
};
Cette fonction fait tout ce qu'on attend d'elle, et comme le montre cette ligne :
Code:
this.fileInfoStuff.folders = folds;
elle charge la liste des dossiers locaux dans la variable this.fileInfoStuff.folders, celle là même qui sera réutilisée plus tard.

Et maintenant, si le jeu n'est pas lancé en local (ou en tout cas pas depuis Game.exe ou RMMV) ? Je vous l'ai dit Smile le script va chercher sa configuration dans le fichier json mentionné plus haut. C'est cette fonction qui fait ce boulot :
Code:
_.loadSaveInfoFile = function() {
 var xhr = new XMLHttpRequest();
 var url = 'data/cc-info.sumrndmdde';
 xhr.open('GET', url);
 xhr.onload = function() {
 if (xhr.status < 400) {
 this.fileInfoStuff = JSON.parse(LZString.decompressFromBase64(xhr.responseText));
 }
 };
 xhr.onerror = function() {};
 xhr.send();
};
On peut la résumer ainsi : c'est une requête ajax vers le fichier json de configuration du script, stocké dans data\ (et bien sur exporté par RMMV, j'ai vérifié). Et comme tout à l'heure, la ligne ci-dessous lit la réponse de la requête ajax, la décompresse (la configuration est compressée en base 64) et enfin l'interprète comme un objet JSON, qui est chargé dans la variable this.fileInfoStuff, qui contient entre autre une clé folders qui liste les dossiers des images :
Code:
this.fileInfoStuff = JSON.parse(LZString.decompressFromBase64(xhr.responseText));

Alors pourquoi ca bugge ? Il m'aura fallu faire des alert et des console.log à différents endroits du script pour comprendre tout ceci. Dans le corps de la fonction, rien ne vous choque ?

Code:
xhr.onload = function() {
 if (xhr.status < 400) {
 this.fileInfoStuff = JSON.parse(LZString.decompressFromBase64(xhr.responseText));
 }
 };
Et maintenant ? Non toujours pas ?

Aller je vous donne un indice Wink Regardez ce que me retourne un console.log(this) placé à l'intérieur de la condition du code précédent :
Code:
19:26:41,391 XMLHttpRequest { fileInfoStuff: Object, onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "file:///D:/Users/Sphinx/Mes%20jeux%…", status: 200, statusText: "OK", responseType: "" } 1 SRD_CharacterCreatorEX.js:554:13

Vous avez compris cette fois ? ^_^ this est la requête ajax et non le script. Pour corriger cette erreur, il ne faut pas faire
Code:
this.fileInfoStuff = JSON.parse(LZString.decompressFromBase64(xhr.responseText));
mais
Code:
_.fileInfoStuff = JSON.parse(LZString.decompressFromBase64(xhr.responseText));
Smile Et cette fois, c'est bien dans l'objet qui gère le script qu'est chargée la configuration Wink Et non dans la requête Ajax ^_^
avatar
Ashala
Membre

Nombre de messages : 531
Age : 26
Localisation : L'Antre-Deux-Mondes.
Distinction : "A une araignée au plafond" [Nowa]
Date d'inscription : 09/06/2016

Résolu Re: [Résolu] SRD_CharacterCreatorEx erreur "folders is not defined"

le Mer 30 Aoû 2017 - 19:38
Félicitations et merci de nous détailler la solution !
Contenu sponsorisé

Résolu Re: [Résolu] SRD_CharacterCreatorEx erreur "folders is not defined"

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum