26-06-2007, 01:11 AM
Il ne faut pas oublier qu'un PNJ peut être associé à plusieurs quêtes à la fois, ou qu'une quête peut avoir plusieurs PNJ associés.
Quand j'avais développé ça pour Dei, j'avais défini 2 tables pour les quêtes :
Une simple table de statut : (id_perso int, id_quete int, statut int)
La table des dialogues : (id_pnj, id_quete, statut_requis, condition, message)
La table de progression : (id_pnj, id_quete, statut_depart, id_reponse, statut_arrivee)
Où condition et message sont des tableaux sérialisés (il y aurait eu moyen de faire ça avec d'autres tables, mais ça devenait lourdingue).
Condition contient une liste de tableau de la forme [type_condition, valeur_condition] comme par exemple ['objet', 'hache'].
Message contient est un tableau [texte, reponses] ou réponses est la liste des réponses possibles pour le personnage joueur.
Chaque réponse fait passer à un autre statut.
La table de progression permet de dire «si le personnage répond ceci alors qu'il avait un statut X pour cette quête, alors son statut passe à Y».
L'utilisation d'une table de progression pour les dialogues, jouer avec le statut, la gestion des conditions, et la différentiation des réponses, tout ça permet de gérer à peu près toutes les situations.
En pratique j'avais encore ajouté à la table de progression une colonne "action_supplementaire" qui décrivait des effets particuliers. Par exemple «ajouter un objet à l'inventaire», «donner X pièces d'or», etc... Il s'agissait également d'un tableau sérialisé en l'occurrence.
Je gérais tous les pnj comme ça, car quand tu regardes le système il te permet de créer un marchand, un joueur de black jack, un tavernier, etc... La seule différence c'est que pour ces personnages la quête n'apparaîtra pas dans le «journal des quêtes» du personnage.
Quand j'avais développé ça pour Dei, j'avais défini 2 tables pour les quêtes :
Une simple table de statut : (id_perso int, id_quete int, statut int)
La table des dialogues : (id_pnj, id_quete, statut_requis, condition, message)
La table de progression : (id_pnj, id_quete, statut_depart, id_reponse, statut_arrivee)
Où condition et message sont des tableaux sérialisés (il y aurait eu moyen de faire ça avec d'autres tables, mais ça devenait lourdingue).
Condition contient une liste de tableau de la forme [type_condition, valeur_condition] comme par exemple ['objet', 'hache'].
Message contient est un tableau [texte, reponses] ou réponses est la liste des réponses possibles pour le personnage joueur.
Chaque réponse fait passer à un autre statut.
La table de progression permet de dire «si le personnage répond ceci alors qu'il avait un statut X pour cette quête, alors son statut passe à Y».
L'utilisation d'une table de progression pour les dialogues, jouer avec le statut, la gestion des conditions, et la différentiation des réponses, tout ça permet de gérer à peu près toutes les situations.
En pratique j'avais encore ajouté à la table de progression une colonne "action_supplementaire" qui décrivait des effets particuliers. Par exemple «ajouter un objet à l'inventaire», «donner X pièces d'or», etc... Il s'agissait également d'un tableau sérialisé en l'occurrence.
Je gérais tous les pnj comme ça, car quand tu regardes le système il te permet de créer un marchand, un joueur de black jack, un tavernier, etc... La seule différence c'est que pour ces personnages la quête n'apparaîtra pas dans le «journal des quêtes» du personnage.
Ressources [PHP][MySQL][prototype.js]