JeuWeb - Crée ton jeu par navigateur
PNJ, dialogues, et quêtes - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : PNJ, dialogues, et quêtes (/showthread.php?tid=1350)

Pages : 1 2


PNJ, dialogues, et quêtes - Byleth - 25-06-2007

Voilà, mon problème n'est pas pour l'instant le codage mais plutôt de savoir quel est le meilleur système.

Je m'explique donc : il y aura des PNJ un peu partout sur la carte, et pour leur parler, il faudra se trouver sur une case adjacente. Une fois qu'on choisit de leur parler (non défini encore), un pop-up s'ouvrira et affichera le texte du PNJ. Jusque là tout va bien.

Maintenant, je vais inclure les quêtes : selon les étapes de la quête, les textes ne seront biensur pas les mêmes et un PNJ aura alors dans les cas les plus simple 3 étapes à gèrer (proposition, attente, remerciements). Tout cela est très classique mais je cherche la meilleure solution pour stocker tout ça.

Chaque joueur aura une table de quête avec pour caque quête (numérotée) entré l'étape. Du coup, lorsqu'il parlera à un PNJ, il devrait s'afficher le texte de l'étape. Quel est donc le mieux? une page php par PNJ avec des petits switch, un texte enregistré dans une base de données ou encore des fichiers textes (là je vois pas trop l'intérêt mais on sait jamais)..

Si vous avez testé des dialogues avec des PNJ, je veux bien de vos témoignage :respect:


RE: PNJ, dialogues, et quêtes - taurri - 26-06-2007

Je n'est jamais tester mais je pense que la meilleur solution est d'enregistré les textes dans la bdd ...

Car au fur et a mesure que ton jeu se develloppe tu va rajouter des quetes surement non ? et des pnj ? donc plus ton jeu serra riche en terme de contenu, plus la mise a jour etc... se ferra compliquer non ?

Biensur cela depend du nombre de pnj et du nombre de quettes aussi Smile


RE: PNJ, dialogues, et quêtes - Byleth - 26-06-2007

C'est ce à quoi je pensais au début, mais peut on enregistrer du php dans la BDD?

Car si ce n'est pas le cas, j'aurais de gros soucis lorsqu'il faudra par exemple passer à l'étape suivante ou donner une récompense...


RE: PNJ, dialogues, et quêtes - taurri - 26-06-2007

pourquoi faire du php dans la bdd ?

Je vois pas ou est le probleme, si au moment de parler a un PNJ tu verifie ou en est la quette et que tu affiche se qu'il faut en le sortant de la bdd ...


RE: PNJ, dialogues, et quêtes - naholyr - 26-06-2007

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.


RE: PNJ, dialogues, et quêtes - Kassak - 26-06-2007

Ou sinon tu as la methode bourin Smile

Moi j'ai une table PNJ, ou je les insert sur la map (nom, posx, posy)

Ensuite une table quete, avec comme champ : pseudo_joueur, PNJ1, PNJ2, PNJ3 etc...

LEs PNJ1 PNJ2 sont remplacé par les noms des PNJ.
Dans ces champs il y a un chiffre, qui represente l'étape, et qui me permet de tout faire, si PNJ = 0 on affiche XXXX mais si PNJ = 2 on affiche blabla..

Ensuite les dialogues de mes pnjs sont ecrit a la suite sur une page pnj.php.

Ma page pnj.php se compose ainsi :

if $donnees['pnj'] == 0
Salut ca va?va me chercher du bois!

ensuite une fois que l'on a ramassé le bois, j'update ma BDd afin que le champ pnj ai comme valeur 1

puis

if $donnees['pnj'] == 1
C'est bien tu m'a ramassé du bois!


Ce n'est surement pas le meilleur des systemes, mais c'est pas du tout galerer pour ecrire une longue quete, et tout ce fait sur le page pnj.php...


RE: PNJ, dialogues, et quêtes - nemesis_elite - 26-06-2007

Je suis très intéressé également par vos réponse sur le sujet des quêtes .
Alors j'attends avec impatiente d'autre réponses ....

Smile


RE: PNJ, dialogues, et quêtes - Zamentur - 26-06-2007

A mon tour de repondre...
Tout d'abord j'ai jamais fait de systeme de quete de ce style
Cependant çà me parait pas fort complexe!

Voici comment je m'y serais pris:
d'abord en ce qui concerne le stockage des textes, 2 choix soit:
- dans ma table de bdd `texte` composé ainsi id_texte,fr,en ...
- dans mon fichier de langue: c'est en fait une page php (fr.php) qui est inclue celle ci contient un array id_texte => texte . Ces pages sont modifiable directement dans la console d'administration. Note: un if peut permetre d'eviter le chargement de texte inutile et donc allégé la memoire ram du serveur

Ce choix doit selon moi etre effectué si tu envisages que des joueurs (et non des MJ) puisse ecrire des quetes, auquel cas la bdd est mieux , sinon le fichier texte sera mieux puisque plus rapide.

Bon ensuite,
concernant la quete et le joueur si la suite de la quete ne depend pas des etape parcourue auparavant
dans la table bdd du joueur je mettrait id_quete, id_etape
Sinon id_quete, chemin

La description de la quete:
ici je concidere que pour une quete est associé des PNJ (donc pour la meme quete les joueurs aurront à faire au meme pnj)

Donc la encore çà depend si les joueurs peuvent ecrire des quete je part du principe que non, du coup je le met en dur dans PHP, puisque les texte sont en dur. Note: une table bdd quete peut etre definie pour faire correspondre un pnj à une quete id_quete, id_pnj, et eventuelement des parametre d'"humeur" et autre si les pnj ne reagissent pas tous de la meme façon pour une meme etape

Donc du coté de php le but c'est de decrire la quete
On peut conciderer qu'une quete c'est un graphe qui part d'un point et qui peut aboutir à plusieur point. Entre temps il ya des point intermediaire relié entre eux d'une certaine façon.

Chaque point se constitue donc
- un id_etape
- eventuelement une preaction par exemple le nom d'une fonction
- par une phrase
- plusieurs reponse/action qui pointe chacune vers un autre point(un autre id_etape ou systeme plus complexe qui pointe vers different id_etape, selon le meme calcul savant (mais avec des parametre different)(les actions sont donc possible durant le passage d'une etape à une autre)
(si on le souhaite on peut donc definir un objet point)

Cas particuliers les points finaux, ne sont constitué d'aucune reponse/action...

Bon donc une fois que cette objet point est creer il ne reste plus qu'à decrire avec cet objet le graphe de la quete qui peut elle aussi constituer un objet si désiré.

Un exemple:
Citation :id_etape=0;
pre_action=don_or(10,id_pnj,id_perso);
id_phrase= 1520;/*cf le stockage des id de texte '"Bonjour je suis Machin, rapportes moi un arc, je te donnerais la plume d\'alegria, pour çà je te donne 10 piece d\'or"'*/
reponses: array (
array(1521/*id_texte*/, 1/*id_etape*/, 'don_or(10,id_perso,id_pnj)'/*action*/), /* '"Non merci"' */
array(19/*id_texte*/, 2/*id_etape*/, ''/*action*/), /* '"Merci!" et partir en courant */
array(1522/*id_texte*/, 3/*id_etape*/, ''/*action*/), /* '"D'accord je vais le chercher tout de suite!" */
)

id_etape=1;
pre_action='';
id_phrase= 1523;
reponses: array ( )


id_etape=2;
pre_action='';
id_phrase= 1524;/* 'oh là pas si vite' */
reponses: array (
1525, 1, 'don_or(10,id_perso,id_pnj)'),
1526, 4, 'attaquer(id_perso,id_pnj)')
)
[...]

Bon et çà me soule de decire la suite car je crois que tout le monde à compris, evidement c'est possible tout de meme de metre çà en base de donnée si çà arrange, surtout que dans un fichier php il ne faut pas charger tout les point mais seulement celui qui nous interresse

Enfin bon j'espere que vous avez compris, à noter que comme je l'ai dit tout à l'heure on peut mettre plusieurs point pour une seul reponse et determiner lequel selon l'action

Voilà voilà


RE: PNJ, dialogues, et quêtes - nemesis_elite - 02-07-2007

Petit up !

Zamentur, pas mal comme système Smile Je vais tester.
En attendant j'aimerai avoir d'autre methode Smile

Tchûu


RE: PNJ, dialogues, et quêtes - Zamentur - 02-07-2007

merci, en fait çà m'a donner envie d'intégrer un système similaire dans mon jeu... Je trouve çà marrant, et surtout çà me permettra de mettre en place l'aide interactive dont Algol va avoir besoin