J'ai tenté de profiter du système de base de données interne pour construire un tout petit système de quêtes très simple. Voici un exemple simple :
Voici rapido son fonctionnement.
Premièrement, on décrit deux tables :
On sépare les quêtes en deux catégories. Leur description, qui elle sera statique et leurs états, qui eux seront dynamique.
Une fois votre jeu lancé, vous pouvez éditer la vue dans la base de données pour ajouter rapidement des quêtes dans le fichier excel généré (Database/Tables/Quest.csv):
Sur base de ces tables. On peut très faciler créer, sous forme d'événement commun, la liste des actions nécéssaires pour construire un système de quêtes efficace :
Le nom des événements devrait assez explicite par rapport à ce que fait ce dernier:
CommonEvent - Start Quest with L[:quest_id]
CommonEvent - Retreive Quest Data of L[:quest_id]
CommonEvent - Finish Quest with L[:quest_id]
CommonEvent - Quest L[:quest_id] on the road?
CommonEvent - Quest L[:quest_id] finished?
Lorsqu'une action provoque un effet, je vérifie bien que l'on peut le faire. (Par exemple qu'une quête est bien démarrée avant d'être finie). Et je me sers fortement des labels.
Donc il suffit de faire
pour exécuter une action.
Ce qui donne, par exemple, pour l'exemple suivant :
Event - EV001
Pour démarrer une quête (ici la n°1)
et :
Event - EV002
pour terminer la quête.
Bref, les bases de données permettent de construire des systèmes plutôt complexes, sans se prendre la tête. Pour ajouter des quêtes disponibles, il suffit de modifier le fichier Excel Quest.csv.
A venir: le journal de quête en événement !
Voici rapido son fonctionnement.
Premièrement, on décrit deux tables :
- Code:
# Define Quest System
# Static quest
class Quest < Static::Table
pk integer :key
string :name
string :desc
integer :gold
integer :exp
list :integer, :items
end
# Dynamic Quest
class Game_Quest < Dynamic::Table
pk integer :key
bool :state
end
On sépare les quêtes en deux catégories. Leur description, qui elle sera statique et leurs états, qui eux seront dynamique.
Une fois votre jeu lancé, vous pouvez éditer la vue dans la base de données pour ajouter rapidement des quêtes dans le fichier excel généré (Database/Tables/Quest.csv):
Sur base de ces tables. On peut très faciler créer, sous forme d'événement commun, la liste des actions nécéssaires pour construire un système de quêtes efficace :
Le nom des événements devrait assez explicite par rapport à ce que fait ce dernier:
CommonEvent - Start Quest with L[:quest_id]
| > Condition : Script : not Game_Quest[L[_id]] and Quest[L[_id]] |
| >| > Appeler Script : Game_Quest.insert(L[:quest_id], false) |
| >| > |
| > Fin - Condition |
| > |
| > Condition : Script : Quest[L[_id]] |
| >| > Appeler Script : L[:quest_name] = Quest[L[_id]].name |
| >| > Appeler Script : L[:quest_desc] = Quest[L[_id]].desc |
| >| > Appeler Script : L[:quest_gold] = Quest[L[_id]].gold |
| >| > Appeler Script : L[:quest_exp] = Quest[L[_id]].exp |
| >| > Appeler Script : L[:quest_items]= Quest[L[_id]].items |
| >| > |
| > Fin - Condition |
| > |
| > Condition : Script : Game_Quest[L[_id]] and not Game_Quest[L[_id]].state |
| >| > Appeler Script : Game_Quest[L[_id]].state = true |
| >| > Appeler Événement Commun : [Retreive Quest Data of L[_id]] |
| >| > Appeler Script : gain_gold(L[:quest_gold]) |
| >| > Opération : Variable [0001] = 1 |
| >| > Boucle |
| >| >| > Attendre : 1 Frames |
| >| >| > Condition : Script : V[1] == team_size |
| >| >| >| > Sortir de la Boucle |
| >| >| >| > |
| >| >| > Fin - Condition |
| >| >| > Appeler Script : actor_give_exp(V[1], L[:quest_exp]) |
| >| >| > Opération : Variable [0001] += 1 |
| >| >| > |
| >| > Fin - Boucle |
| >| > Message : Ø, Ø, Normal, Haut |
| >| > Message : La quête "\L[:quest_name]" |
| >| > Message : est terminée ! |
| >| > Message : \L[:quest_exp] exp gagnée ! |
| >| > Message : \L[:quest_gold]G gagnée ! |
| >| > Opération : Variable [0001] = 0 |
| >| > Boucle |
| >| >| > Attendre : 1 Frames |
| >| >| > Condition : Script : V[1] == length(L[:quest_items]) |
| >| >| >| > Sortir de la Boucle |
| >| >| >| > |
| >| >| > Fin - Condition |
| >| >| > Appeler Script : item = get(L[:quest_items], V[1]) |
| >| >| > Appeler Script : SV[1] = item_name(item) |
| >| >| > Appeler Script : give_item(item, 1) |
| >| >| > Message : Ø, Ø, Normal, Haut |
| >| >| > Message : \SV[1] gagné ! |
| >| >| > Opération : Variable [0001] += 1 |
| >| >| > |
| >| > Fin - Boucle |
| >| > |
| > Fin - Condition |
| > |
| > Appeler Script : q = Game_Quest[L[_id]] |
| > Appeler Script : L[:quest_on_the_road?] = (q.to_bool and !q.state) |
| > |
| > Appeler Script : q = Game_Quest[L[_id]] |
| > Appeler Script : L[:quest_finished?] = q.to_bool and q.state |
| > |
Donc il suffit de faire
- Code:
L[:quest_id] = id_désiré
appel de l'événement commun désiré
pour exécuter une action.
Ce qui donne, par exemple, pour l'exemple suivant :
Event - EV001
| > Appeler Script : L[:quest_id] = 1 |
| > Appeler Événement Commun : [Quest L[_id] finished?] |
| > Condition : Script : L[:quest_finished?] |
| >| > Message : Ø, Ø, Normal, Haut |
| >| > Message : Tu as déjà fini cette quête ! |
| >| > |
| > Sinon |
| >| > Message : Ø, Ø, Normal, Haut |
| >| > Message : Veux-tu démarrer la quête 1 ? |
| >| > Afficher Choix : Oui, Non |
| >| > Si [Oui] - Faire |
| >| >| > Message : Ø, Ø, Normal, Haut |
| >| >| > Message : Va parler au vieux monsieur ! |
| >| >| > Appeler Événement Commun : [Start Quest with L[_id]] |
| >| >| > |
| >| > Si [Non] - Faire |
| >| >| > |
| >| > Fin - Choix |
| >| > |
| > Fin - Condition |
| > |
et :
Event - EV002
| > Appeler Script : L[:quest_id] = 1 |
| > Appeler Événement Commun : [Quest L[_id] on the road?] |
| > Condition : Script : L[:quest_on_the_road?] |
| >| > Message : Ø, Ø, Normal, Haut |
| >| > Message : On termine la quête |
| >| > Appeler Événement Commun : [Finish Quest with L[_id]] |
| >| > |
| > Sinon |
| >| > Appeler Événement Commun : [Quest L[_id] finished?] |
| >| > Condition : Script : L[:quest_finished?] |
| >| >| > Message : Ø, Ø, Normal, Haut |
| >| >| > Message : la quête est déjà finie ! |
| >| >| > |
| >| > Sinon |
| >| >| > Message : Ø, Ø, Normal, Haut |
| >| >| > Message : La quête n'est pas encore démarrée ! |
| >| >| > |
| >| > Fin - Condition |
| >| > |
| > Fin - Condition |
| > |
Bref, les bases de données permettent de construire des systèmes plutôt complexes, sans se prendre la tête. Pour ajouter des quêtes disponibles, il suffit de modifier le fichier Excel Quest.csv.
A venir: le journal de quête en événement !