Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / News: Quoi de neuf sur Oniromancie (...) / Sorties: Dread Mac Farlane - episode 6 / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

269 connectés actuellement

29365394 visiteurs
depuis l'ouverture

1001837 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Tashiroworld

RPG Maker - La Communauté

Leo-Games

Guelnika & E-magination

Tous nos partenaires

Devenir
partenaire



Editer le parseur de BDD avec un IDE

En complément du tutoriel d'astuces pour CMS (patch Maniacs) de Mack, vous apprendrez ici à éditer son extracteur de base de données afin d'y intégrer vos propres données.

Ecrit par Mack le 30/06/2022


❤ 2

Niveau : Avancé, voir très Avancé.
Ce tutoriel n'abordera PAS les bases du C# ( et plus précisément du .NET Framework ), ni même du XML (ou alors très peu).
Je pense cependant qu'avec un peu de logique et de jugeotte, en suivant ce tutoriel presque n'importe qui peut s'en sortir, tant qu'il s'y connait un minimum en programmation orientée objet (mais vraiment un minimum, tant qu'il comprend les boucles, les variables, et les objets, ça devrait aller).

Prérequis :
Ce tutoriel est prévu pour le patch Maniacs, et donc la version Steam de RPGMaker 2003, cependant, comme on se contente de sortir des fichiers textes, vous pouvez tout à fait vous en servir pour d'autres programmes.
Gardez en tête cependant que l'on ne peut exporter que la BDD de RPGMaker 2003.
Ce tutoriel fait suite à ce tutoriel pour aider à la création d'un CMS.
Vous pouvez trouver plus d'informations sur le patch Maniacs ici.

Je tiens a rappeler que ce programme utilise une base de EasyRPG qui permet de sortir la BDD de RM2k3 sous forme de fichier .XML


Introduction

Comme dit précédemment, ce tutoriel a pour but de compléter avec les informations que vous voulez extraire de la BDD mon programme Parser disponible ici.
Les sources sont disponibles dans le dossier "Sources".
Vous aurez besoin d'un IDE (Environnement de Développement Intégré), qui est le programme qui va permettre d'éditer le code de notre programme, ainsi que de l'exporter sous la forme d'un .exe.
Pour ma part j'utilise Microsoft Visual Studio 2019, si vous choisissez d'utiliser celui-ci, sachez qu'il vous suffit d'ouvrir le fichier Parser.sln dans le dossier "Sources" pour ouvrir les sources directement Microsoft Visual Studio 2019.
On peut aussi choisir d'utiliser Visual Studio Code, mais dans ce cas, ça risque d'être plus compliqué. J'expliquerai comment installer les deux, mais je recommande fortement Microsoft Visual Studio, malgré qu'un compte Microsoft soit obligatoire.

De plus, comme dit précédemment, j'ai choisi de passer par de la Programmation Orientée Objet.
C'est à dire que chaque "chapitre" de la BDD (objets, compétences, héros,...) ont (ou auront selon ce que vous faites) leurs propres "Classes". Chaque "Classe" peut être imaginée comme un tableau, la Classe est donc l'entête du tableau (ses colonnes), et chaque objet de la classe représente ses lignes.
Par exemple, la classe Skills est l'entête d'un tableau avec pour colonnes : id, cost, sp_percent, typeSk, et desc.
Et pour cette classe nous aurons des "Objets" qui seront les lignes d'un tableau !

:avert2 Si vous avez bien lu, je parle d'entête de tableau, et de ligne de tableau. A aucun moment je n'ai dit que ces 2 éléments formaient un tableau : en effet, pour l'instant la classe et l'objet ne sont pas reliés, on a donc d'un côté la forme du tableau (la classe), et de l'autre les lignes d'un tableau (les objets). Je montrerai plus tard comment créer un tableau à partir de ces deux éléments.

De base, les Classes Items et Skills sont déjà présentes, je vais vous montrer comment ajouter une information à une classe déjà existante (nous allons rajouter le "Scope" des Compétences, c'est-à-dire le type de cible qu'elles ont).
Et ensuite nous verrons comment créer une nouvelle classe, et y ajouter nos données (nous ferons la classe Actor, et nous sortir dans un fichier texte le nom des faceset de chaque héros, un par ligne).

Une dernière petite chose, le programme "extract.bat" va rajouter un fichier "RPG_RT.edb", c'est le fichier XML qui contient l'intégralité de la BDD de votre projet.
N'oubliez pas de le retirer si vous ne voulez pas qu'on connaisse à l'avance le contenu de votre jeu. :)
De plus, c'est un fichier .XML (malgré son nom), n'hésitez pas à l'ouvrir dans un éditeur de texte comme le Bloc Note de Windows, ou bien Notepad++ (Notepad++ c'est mieux quand même :F).

:avert2 Une fois le Parser.exe généré et placé dans le dossier "Text/", je tiens à rappeler de ne JAMAIS le lancer tout seul. Il faut TOUJOURS lancer le "extract.bat".


Installation de Microsoft Visual Studio

Voilà où télécharger Microsoft Visual Studio

Choisissez la version Community (version gratuite).

Une fois lancé, acceptez les conditions et tout le bordel, vous arriverez sur un écran vous laissant choisir des addons à installer.
Choisissez bien "Développement .Net Desktop" :
image

Une fois l'installation terminée, connectez vous avec un compte Microsoft, et voilà, c'est terminé !


Installation de Visual Studio Code

Comme dit plus haut, je déconseille d'utiliser ce logiciel-là.
Ce n'est pas la version que j'utilise, et malgré que j'aie réussi l'installation (et encore, je n'en suis pas parfaitement sûr), elle est plus chiante, et plus compliquée.
De plus l'intégralité du tutoriel a été écrit pour Microsoft Visual Studio, les écrans seront donc légèrement différents si vous utilisez cette version, de même que certaines manipulations.
(Comme la manipulation pour créer de nouvelles classes.)

Voilà où télécharger Visual Studio Code.
C'est le même logiciel que la partie précédente, mais sans l'obligation d'avoir un compte Microsoft.

Donc, une fois l'exécutable téléchargé, exécutez-le, et allez jusqu'au bout.
Une fois l'installation finie, exécutez Visual Studio Code, vous devriez arriver sur cet écran :
image
Cet écran, ou n'importe quel écran de page d'accueil.

Faites "Files/Open Folder" :
image

Et choisissez le dossier Parser dans le dossier CMS/Sources.
(Par exemple, j'ai placé le dossier télécharger dans D/Downloads/CMS.
Voila le chemin d'accès que je vais devoir ouvrir : D:\Downloads\CMS\Sources\Parser )

Un message vous demandant si vous voulez faire confiance aux auteurs du projets à ouvrir va apparaitre. Faites "Yes, I trust ..." pour ouvrir les sources de mon programme.
image

Donc vous allez arriver sur un écran comme ça :
image

Commencez par cliquer sur la flèche entourée en rouge, puis sur le bouton en vert.

Un message d'erreur vous indiquant que vous n'avez pas de quoi compiler le C# va apparaître :
image

image

Choisissez la version entourée en rouge, puis appuyez sur le bouton en vert, chez vous ça sera surement "Install" et non "Installing".

Il faut maintenant télécharger le Runtime de .Net : https://dotnet.microsoft.com/en-us/download/visual-studio-sdks

image
Choisissez selon votre PC. Mais y a de forte chance que vous deviez télécharger la x64

Une fois installé, retournez sur Visual Studio Code, et faites "create a launch.json file" :
image

Et choisissez la ligne entourée en vert.

:avert2 La partie suivante sera utile lorsque vous voudrez générer le .exe !
Vous pouvez donc la sauter pour l'instant, et y revenir plus tard.

Maintenant, c'est là où ça se gâte.
Sur deux installations de Visual Studio Code, la méthode pour générer le .exe n'a pas été la même pour moi.
Donc voilà deux "possibles solutions" :

- Premièrement, cliquez sur :
image

Un message d'erreur peut apparaitre, forcez le débugage (Debug Anyway) :
image

Un autre message d'erreur devrait apparaître :
image

Si vous avez de la chance, le .exe sera généré dans "CMS\Sources\Parser\bin\Debug".

Sinon, voici la deuxième solution :

- Commencer par faire Terminal/New Terminal :
image

image
En bas, tapez la commande :

Portion de code : Tout sélectionner

1
dotnet run



Dans la console, un message d'erreur va apparaître, MAIS le .exe sera correctement généré.


Cette partie est aussi utile pour plus tard, elle sert à créer une nouvelle classe.

image
Commencez par taper le code écrit en rouge :

Portion de code : Tout sélectionner

1
Actor e = new Actor(i)



Une petite icône devrait apparaître sur la gauche de la ligne, entourée en vert. Cliquez dessus, et sélectionnez "Générer le type... dans un nouveau fichier" entouré en bleu.

Et voilà, c'est (enfin) terminé.


Extraction de la cible des sorts

Bon, maintenant on va commencer à rentrer un peu plus dans le dur.
Comme déjà dit, notre premier but va être de faire que notre programme sorte un fichier
skills_scope.txt, où chaque ligne contiendra le type de cible (Single Enemy, All Enemies,...).

On va donc commencer par ouvrir le fichier Skill.cs :
image

On peut donc voir que ma classe "Skill" a plusieurs variable associées : id, cost, sp_percent, typeSk, desc, ainsi qu'une fonction de déclaration :

Portion de code : Tout sélectionner

1
public Skill(int i)


Toute nos classes devront avoir cette fonction, qui sera identique sauf son nom (public Item(int i) pour les objets par exemple).

Donc, nous ce qu'on veut c'est rajouter le "Scope" de nos sorts.
Pour savoir ce qu'on va lire dans la BDD, on va commencer par ouvrir le fichier RPG_RT.edb dans Notepad++.
En cherchant un peu, on va finir par tomber sur une "Rubrique" qui s'appelle "skills". Evidement, c'est là-dedans qu'on va devoir chercher.
En cherchant un peu plus, on voit :

Portion de code : Tout sélectionner

1
<scope>X</scope>


image
Au niveau de la flèche rouge.

On sait donc maintenant que nous aurons besoin de chercher le mot clef "scope" (Attention, je pense que la casse est importante !).

On retourne sur Visual Studio, et toujours dans Skill.cs, nous allons rajouter une variable de type int (entier), qui s'appelera "scope" :
image

Portion de code : Tout sélectionner

1
public int scope = 0;



Maintenant on ouvre Program.cs :
image
En rouge, c'est le fichier à ouvrir.

:avert2 La partie bleue, n'y touchez dans aucun cas, sauf si vous savez parfaitement ce que vous faites !
Pour information, c'est ici qu'on va lire notre fichier "RPG_RT.edb".

Tout à l'heure j'ai dit que pour l'instant, nos classes et nos objets ne formaient pas un tableau. Et bien ce sont les lignes en vert qui vont faire le lien entre les deux, et former nos tableaux.
Pour faire court, la ligne :

Portion de code : Tout sélectionner

1
ArrayList skills = new ArrayList();


Va créer un tableau à 1 dimension (Voyez ça comme un tableau Excel à 1 seule colonne, mais avec un nombre de lignes extensibles, on peut créer une nouvelles lignes dès que besoin !), contenant toute nos "lignes" correspondant à nos sorts.
Ici, on se contente donc de le créer, mais pour l'instant, il est vide.

Il va donc falloir le remplir, mais comment ?
Pour faire simple, la partie jaune correspond à l'onglet dans la BDD. Sur l'exemple, on voit que c'est "items". Ça aurait pu être "troops", ou "actors".

Comment trouver celui dont nous avons besoin ? Il faut regarder dans le fichier XML.
C'est globalement les mêmes que dans l'interface de RM, donc vous devriez pas avoir de mal à trouver celui que vous cherchez.

Dans notre cas, on veut l'onglet skills. Comme déjà on se contente de rajouter une information, il existe donc forcément une ligne identique à celle en jaune, mais avec écrit "skills" à la place de "items" :
image

Effectivement, on retrouve la ligne en jaune.

Comme avant les lignes bleues, évitez de trop y toucher, c'est la qu'on va lire chaque sous partie du fichier XML.

On peut voir en vert qu'il y un "sp_percent". Si vous vous souvenez bien, c'est une des informations que l'on a DEJA récupérées.
Pour en récupérer une nouvelle, il suffit de copier coller toute la partie en verte, puis d'y changer certaines parties :
image

En jaune j'ai donc remplacé par "scope", comme ça on lira l'entrée scope du fichier XML.
La flèche rouge permet de lire la valeur de cette entrée (c'est-à-dire ce qu'il y a entre les <scope>X</scope>, ici le X). Vous n'aurez que très peu à y toucher, seulement si vous voulez changer le type de donnée stockée (ici on stocke un entier, mais on pourrait vouloir stocker une chaîne de caractères).

En bleu, on peut voir que j'ai remplacé "e.cost" par "e.scope".
En gros, "e" fait référence à une entrée de notre tableau des Skills. A la ligne en cours si vous préférez.
(Cette histoire de ligne en cours sera détaillée pour la seconde partie.)

Voilà, avec ça, on se retrouve donc avec la liste (le tableau à 1 dimension si vous préférez) de tout nos objets de la classe Skill.

Portion de code : Tout sélectionner

1
2
3
4
5
if (no3.Name == "scope")
{
    int n = int.Parse(no3.InnerText);
    e.scope = n;
}



Maintenant on va juste chercher à les lire depuis la liste, puis les écrire dans un fichier .txt.
Pour cela, continuez à parcourir "Program.cs" jusqu'à trouver :
image

La partie jaune. Cette partie concerne l'écriture de tout les fichiers textes spécifiques aux Sorts.

Nous, on va se contenter de copier coller la partie verte et de la transformer en la partie bleu !

Donc on peut voir que les différences sont :
- Souligné en rouge on récupère la variable scope de notre objet de classe Skill.
- Souligné en orange le nom du fichier texte qui sera créé.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
text = "";
foreach (Skill s in skills)
{
    int n = s.scope;
    text += n + "\n";
}
File.WriteAllText("Text/skills_scope.txt", text, Encoding.UTF8);



Et voilà !
Il ne reste plus qu'à compiler notre programme et le placer dans le bon dossier !

Pour ça :
image
Il suffit d'aller dans Générer/Générer la solution, ou de faire CTRL + Maj + B

Et voilà notre programme compilé !
Il ne reste plus qu'à aller le chercher dans le dossier : "Sources/Parser/bin/Debug", et de le déplacer dans le dossier "Text".
Si vous relancer le programme extract.bat, le fichier skills_scope sera lui aussi généré, maintenant.


Extraire les données d'une nouvelle "classe"

Dans cette partie, je serai bien plus bref, je me contenterai de développer juste les parties que nous n'avons pas vu pour parvenir à nos fins.

Donc, là, qu'est-ce qu'on veut faire ? On veut simplement se retrouver avec un fichier texte actors_faceset.txt contenant sur chaque ligne : le nom du faceset de notre héros + son index.
Cette fois, nous allons donc mettre DEUX informations sur chaque ligne !

:avert2 Si vous utilisez Visual Studio Code (la version que je déconseille), remplacez les étapes suivantes (jusqu'au prochain :avert2) par la dernière étape dans la partie "Installation de Visual Studio Code".

Pour cela, nous allons commencer par créer une nouvelle classe, en faisant Projet/ Ajouter une classe, puis en double cliquant sur "Classe" :
image

Puis :
image

On veut arriver à ce résultat :
image

Pour commencer, on va renommer notre classe en "Actor".
C'est la partie soulignée en rouge, ainsi que la flèche rouge.

Ensuite, on va lui rajouter 3 variables :
- int id, qui sera son index
- String face_name, qui sera le nom du fichier texte
- int face_index, qui sera le numéro d'index dans le fichier (sa position, 0 pour l'image en haut à gauche, 1 pour celle juste à droite,...)
C'est la partie entourée en jaune.

:avert2 Si vous utilisez Visual Studio Code, reprenez ici.

Voilà le code complet :

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Parser
{
    class Actor
    {
        public int id;
 
        public String face_name;
        public int face_index;
 
        public Actor(int i)
        {
            id = i;
        }
    }
}



Maintenant que notre classe est créée, on va retourner dans Program.cs :

image

On va donc rajouter la ligne en rouge (on crée notre liste qui contiendra tous nos objets de classe Actor), et toute la grosse partie en vert.
C'est grossièrement un copier-coller du bloc "Items".

Les grosses différences sont :

- La partie bleue, on va créer un nouvel objet de type Actor, en remplissant son ID

- La partie jaune, c'est exactement la même chose que dans le chapitre précédent, juste la partie entourée en rose permet de stocker une chaîne de caractères.
(On change juste le int n en String n, et on retire le int.Parse)

- Et la petite partie en orange, qui permet de remplir la liste actors avec notre nouvelle entrée.

- En gris, le else n'est pas obligatoire. C'est mieux de le mettre, mais il n'est pas obligatoire.

Voila le code complet :

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
if (no2.Name == "Actor")
{
    if (no2.Attributes[0] != null)
    {
        int i = int.Parse(no2.Attributes[0].Value);
        Actor e = new Actor(i);
        foreach (XmlNode no3 in no2.ChildNodes)
        {
            if (no3.Name == "face_index")
            {
                int n = int.Parse(no3.InnerText);
                e.face_index = n;
            }
            if (no3.Name == "face_name")
            {
                String n = no3.InnerText;
                e.face_name = n;
            }
        }
        actors.Add(e);
    }
}




Bon, la moitié de fait !
Il ne nous reste plus qu'à créer et remplir le fichier actors_faceset.txt !
Pour ça, comme à la fin de la première partie, trouvez la partie en jaune sur ce Screen :
image

La partie verte est le code que l'on va rajouter.
En rose, faites bien attention à retirer le String, sinon vous aurez une erreur ! (Sinon, vous pouvez le mettre au dessus du bloc "Items".)
En bleu, c'est notre boucle principale, qui va permettre de parcourir la liste actors.
Les deux lignes en orange sont nos variables à récupérer. Cette fois nous en prenons 2, puisque nous voulons 2 informations sur la même ligne.
En rouge, c'est la concaténation (on "fusionne" nos 2 variables) de nos deux variables, avec le caractères / entre les deux.
Et en gris, c'est le nom de notre fichier.

Et voilà le code correspondant :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
/*
            *  Actors
            */
 
            String text = "";
            foreach (Actor s in actors)
            {
                String n = s.face_name;
                int i = s.face_index;
                text += n + "/" + i + "\n";
            }
            File.WriteAllText("Text/actors_faceset.txt", text, Encoding.UTF8);
 





Mot de la fin

Voilà, cette fois vous devriez être capable de modifier un petit peu mon programme, pour y ajouter vos données à extraire ! :sourire2

Encore une fois, n'hésitez pas à poster en dessous de ce sujet, ou par MP (l'avantage de le faire ici, c'est que ça permettra aux autres de pas avoir de nouveau la même incompréhension) si vous avez des problèmes. :)


Je tiens à dire un grand merci à Gari pour l'habituelle correction de mes tutoriels, et à Zam qui a pris le temps de tester avec moi ce tutoriel ! :)



Nemau - posté le 30/06/2022 à 20:39:07 (52207 messages postés) - honor -

❤ 0

The Inconstant Gardener

Là encore ça a l'air d'être du gros boulot ce tuto, respect. :lei

Quel RPG Maker choisir ?Ocarina of Time PCPolaris 03 • Le matérialisme c'est quand tu as du matériel.


Gari - posté le 03/07/2022 à 08:49:56 (5899 messages postés) - honor

❤ 1

Les images ont été uploadées sur le site. Mack, si tu veux modifier/rajouter une image, n'hésite pas à me contacter pour que je la mette sur le site.

Merci pour ce super tuto :)


Nemau - posté le 04/07/2022 à 00:13:04 (52207 messages postés) - honor -

❤ 0

The Inconstant Gardener

Du coup Mack, tu peux supprimer ces images de ta galerie.

Quel RPG Maker choisir ?Ocarina of Time PCPolaris 03 • Le matérialisme c'est quand tu as du matériel.

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