29-04-2009, 03:58 PM
Comme l'a dit Kéké, il faut qu'à la fin d'un combat, à la récupération d'un objet, ou n'importe quel autre événement (fabrication d'un objet, découverte d'un endroit, consommation d'un aliment, etc.), tu lances un moteur qui va vérifier si la personne travaille sur ces quêtes.
Bien sûr, la complexité de ce moteur dépendra directement de la complexité de ton système de quête. Si les quêtes sont toutes de type "Tuer une quantité Q de monstres M", alors c'est simple, tu auras une relation qui unira 1 ou plusieurs objectif a une quête. La table objectif sera alors une table qui contient 3 champs : quest_id (l'id de la quête à laquel cet objectif est attaché), quantity (nombre de monstres à abattre) et monster_id (l'id du type de monstre à tuer).
Il te faudra également une table qui met en relation un joueur, un objectif de quête et l'avancement de cet objectif.
Ainsi, à la mort d'un monstre, ton moteur n'aura qu'à vérifier si le personnage courant bosse sur une quête dont l'un des objectif consiste à abattre un monstre de ce type et incrémenter l'état d'avancement.
Exemple concret : un personnage nommé Corwin a une quête qui vise à tuer 1 "Eric" et 4 "Garde d'Eric". Corwin a déjà tué 2 "Garde d'Eric".
Un enregistrement de personnage (table characters):
Des enregistrements de monstres (table monsters)
Un enregistrement de quête (table quests):
Des enregistrements d'objectifs liés à cette une quête (table quest_objectives) :
Un enregistrement qui associe un joueur à une quête (table character_quest) :
Enfin, des enregistrements qui stockent la progression du joueur dans sa quête (table character_quest_objective)
Si tu comprends comment sont organisée les données, la suite est très simple. Il faut juste prendre le temps de comprendre.
Sephi-Chan
Bien sûr, la complexité de ce moteur dépendra directement de la complexité de ton système de quête. Si les quêtes sont toutes de type "Tuer une quantité Q de monstres M", alors c'est simple, tu auras une relation qui unira 1 ou plusieurs objectif a une quête. La table objectif sera alors une table qui contient 3 champs : quest_id (l'id de la quête à laquel cet objectif est attaché), quantity (nombre de monstres à abattre) et monster_id (l'id du type de monstre à tuer).
Il te faudra également une table qui met en relation un joueur, un objectif de quête et l'avancement de cet objectif.
Ainsi, à la mort d'un monstre, ton moteur n'aura qu'à vérifier si le personnage courant bosse sur une quête dont l'un des objectif consiste à abattre un monstre de ce type et incrémenter l'état d'avancement.
Exemple concret : un personnage nommé Corwin a une quête qui vise à tuer 1 "Eric" et 4 "Garde d'Eric". Corwin a déjà tué 2 "Garde d'Eric".
Un enregistrement de personnage (table characters):
Code :
Id : 47
Name : Corwin
Des enregistrements de monstres (table monsters)
Code :
Id : 8
Name : Eric
Code :
Id : 76
Name : Garde d'Eric
Un enregistrement de quête (table quests):
Code :
Id : 21
Name : Eric et ses hommes doivent mourir…
Des enregistrements d'objectifs liés à cette une quête (table quest_objectives) :
Code :
Id : 101
Quest_id : 21
Monster_id : 8
Quantity : 1
Code :
Id : 102
Quest_id : 21
Monster_id : 76
Quantity : 4
Un enregistrement qui associe un joueur à une quête (table character_quest) :
Code :
Character_id : 47
Quest_id : 21
Enfin, des enregistrements qui stockent la progression du joueur dans sa quête (table character_quest_objective)
Code :
Id : 12
Quest_objective_id : 101
State : 0
Code :
Id : 17
Quest_objective_id : 102
State : 2
Si tu comprends comment sont organisée les données, la suite est très simple. Il faut juste prendre le temps de comprendre.
Sephi-Chan