26-06-2007, 07:07 PM
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:
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à
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à