Extend Database
{Script RGSS3 pour Ace}
Offre la possibilité de créer sa propre base de données pour RPG Maker VX Ace. (Binding envisageable avec l'Event Extender).
- Nuki, 19/03/2013 à 01h12.


Extend Database - Nuki

Extend Database


{Script RGSS3 pour Ace}


Bon, personnellement, je trouve que la base de données de RPGMaker est un peu ennuyante car on ne peut pas l'étendre. Donc je suis obligé de rester dans le bien contraignant système de base, et pour avoir des choses plus cools (et plus spécifiques) je suis obligé d'abuser du champ commentaire/note de la base de données (et pourquoi pas compléter avec le script Typed Entities, qui n'est pas adapté à ce genre de choses... JE TROUVE !)
Donc j'ai plagié Avygeil qui avait déjà été plagié par Grim en recodant une base de données de RM.

icone Principe !



L'idée repose sur le même concept que celui utilisé par Grim dans son "Expressive Database", sauf que c'est un peu mieux (et intelligemment) codé. Donc on va d'abord, dans un script vierge au-dessus du main, créer des tables. Pour cela il suffit de faire :

Code (Ruby):
  1. class Epees < Database::Table
  2. # Ici on définira les champs de notre table
  3. end


Pour mettre des champs, qui caractérisent notre table il faut indiquer son type et son nom.
Les types que le script admet sont :

-:string - Correspond à une chaîne de caractères
-:integer - Correspond à un entier
-:float - Correspond à un nombre à virgule
-:boolean - Correspond à true ou false (un interrupteur)
-:polymorphic - Correspond à n'importe quel type de données RM


Voici un exemple avec des épées et des Pokémon :

Code (Ruby):
  1. class Epees < Database::Table
  2. integer :id
  3. string :name
  4. string :description
  5. float :cost
  6. integer :power
  7. end
  8.  
  9. class Pokemons < Database::Table
  10. integer :id
  11. string :name
  12. string :description
  13. string :type
  14. integer :power
  15. end


L'objectif est de décrire toutes les caractéristiques de nos tables. Bien sûr, ces exemples sont assez "naïfs" et non finis.

icone Remplir notre base de données



Il existe deux manières de "remplir" notre base de données.
La première est la plus économique, il s'agit, après nos définitions de champs, d'utiliser la commande "insert" et lui passer des arguments. Si les arguments ne sont pas du bon type le script essaiera de les convertir sinon il mettra une valeur par défaut en référence au type. Voici un exemple de remplissage :

Code (Ruby):
  1. class Epees < Database::Table
  2. # Design de la table
  3. integer :id
  4. string :name
  5. string :description
  6. float :cost
  7. integer :power
  8. # Remplissage
  9. insert 0, "Excalibur", "Une épée rare", 150.50, 120
  10. insert 1, "Durendal", "Une épée très rare", 200.20, 200
  11. insert 2, "Dard", "Epée de Bilbon puis de Frodon", 30.0, 50
  12. end
  13.  
  14. class Pokemons < Database::Table
  15. # Design de la table
  16. integer :id
  17. string :name
  18. string :description
  19. string :type
  20. integer :power
  21. # Remplissage
  22. insert 0, "Pikachu", "Atroce souris verte", "Foudre", 10
  23. insert 1, "Pichu", "Le même qu'au-dessus", "Foudre", 5
  24. insert 2, "Doraemon", "truc", "Feu", 100
  25. insert 3, "Sangoku", "Pokémon légendaire", "Rare", 1000
  26. end


Sinon il est possible d'instancier des objets de cette manière :

Code (Ruby):
  1. Pokemons.new(id: 4, name: "Mew", description: "Singe bleu", type: "Herbe", power: 999)
  2. Pokemons.new(id: 5, name: "Magicalichigo", description: "Ressemble a un Evoli", type: "Psy", power: 1)


Personnellement, je préfère cette manière qui me permet de séparer mon "design" de mon remplissage. Mais il est possible de mélanger les manières.

icone Accéder à une table



Il suffit de faire : Database.tables[:Nom_de_la_Table] ou Database.Nom_de_la_Table.
Par exemple : Database.Pokemons ou Database.tables[:Pokemons].
Ensuite Database.Pokemons[0] retournera le premier enregistrement (Pikachu), mais comme les champs sont rangés dans un tableau, il est possible d'utiliser toutes les méthodes relatives aux tableaux. Cependant cette partie s'adresse aux scripteurs, un peu comme tout ce script en fait Smiley

icone Traiter la base de données de RPGMaker



Comme ce script est moderne et cool, il permet aussi de manipuler la base de données de RPG Maker avec les mêmes primitives.
Par exemple, pour accéder à la table des acteurs de la base de données, il faudra faire : Database.VXACE_Actors, qui retourne le tableau de tous les acteurs de la base de données.
Les tables accessibles :

-VXACE_Actors
-VXACE_Classes
-VXACE_Skills
-VXACE_Items
-VXACE_Weapons
-VXACE_Armors
-VXACE_Enemies
-VXACE_States
-VXACE_Animations
-VXACE_Tilesets
-VXACE_CommonEvents
-VXACE_MapInfos


Cet ajout permet de manipuler les données de la base de données de manière transparente avec le script.

icone Binding avec l'Event Extender



Si l'Event Extender est déjà installé, il faut placer ce script en-dessous, pour que cette base de données écrase celle de l'Event Extender.
Le Design/Remplissage fonctionne pareil qu'expliqué plus haut.
Pour les accès à la base de données, ça fonctionne comme au-dessus ou comme documenté dans l'Event Extender. (Par exemple T[:Pokemons] ou T[:VXACE_Actors]).
Merci à Hiino pour sa relecture !

icone Code


Spoiler (cliquer pour afficher)
[code=ruby][/code]


icone Lien permanent



Si je mets le script à jour, ce sera généralement sur cette page : Lien vers la page GitHub

Index

Tags

Annonces
Bilou Concept
BilouCorp
Découvertes
Event Extender
Jeux
RPG Maker
Script
Tutoriel

Auteurs

2cri
Grim
Hiino
Joke
Nuki
PypeBros
Raho
S4suk3

Suivez nous
Rss

Poster un commentaire



Commentaires

Masakazu
Bonjour,

J'ai ce script avec l'event Extender mais je n'arrive pas accéder aux tables, comment faire, j'ai fais un événement, appeler un script, noter les lignes
" Database.tables[:Pokemons]
Database.Pokemons[0] "
Et quand je vais en jeux, impossible d'accéder a quoi que ce soit.. Posté le : 25/08/2015 à 01h54
Raho
Marrant mais ce script est vraiment pratique !
Surtout si on ne veut pas s'embêter à gérer des structures complexes partout dans son code ;)
Merci jeune scarabée :) Posté le : 06/04/2013 à 14h23