Videos streaming images jeux et buzz
Connexion






Perdu le mot de passe ?

Inscrivez-vous maintenant !
Menu Principal
Communauté




kigan
Programmer un livre de quettes
 0  #1
Je m'installe
Inscrit: 29/09/2007 16:00
Post(s): 236
Amis koreusiens, je m'en remet une fois de plus à votre savoir et pourquoi pas à vos compétences.

Cela fait quelques mois que j'ai entamé un projet de RPG par navigateur, (php/mysql/JavaScript/Ajax/ ... Jquery) .

Le principe est simplissime : le joueur se balade sur une grande carte un peu dans le style de 'hodes' pour les connaisseurs, il peu rencontrer des monstres et les combatres, utiliser des objets/sorts/compétences ... classique me direz vous ...

Mais je me trouve face à un problème de conception ...
J'essaie d'introduire la notion de quette, et là la tache est plutôt ardu !
C'est facile pour des quettes assez simples comme : 'tuer tant de monstres', ramasser tant de truc', mais si on veut complexifier les quettes je ne vois pas comment modéliser ça dans la base de données.

j'ai une table 'quettes' (qui contient la liste de TOUTES les quettes du jeu), ainsi que d'une table 'journal de quette' qui ressence les quettes activé pour chaque joueur (une association porteuse d'info car il me faut garder une trace de l'avancement de la quette pour chaque joueur).
Mon problème : comment modéliser les quettes et leur avancement dans la base ?

En effet l'avancement de la quette dépend entièrement de cette dernière.

exemple : une quette demande de flinguer 10 moutons tétraplégiques, en base je peut modéliser ça par un champ qui s'incrémente à chaque meurtre.

Mais pour une quette ou je dois parler à plusieurs PNJ dans un certain ordre ?

:bizarre:

Contribution le : 18/01/2011 11:51
Signaler

Tetoro
 0  #2
Je masterise !
Inscrit: 03/06/2005 22:32
Post(s): 2144
Et avec "quêtes" ça fonctionne mieux? 😉

Contribution le : 18/01/2011 12:14
Signaler

Kazam
 0  #3
J'aime glander ici
Inscrit: 30/01/2005 13:01
Post(s): 5089
stop porn.

Contribution le : 18/01/2011 12:23
Signaler

kigan
 0  #4
Je m'installe
Inscrit: 29/09/2007 16:00
Post(s): 236
Bouarf 😣
Saleté de langue française ... Y'a toujours des mots qui s'écrivent pas du tous comme prévus T.T

Contribution le : 18/01/2011 12:46
_________________
la politique francaise est comme une asiette de casoulet : une petite saucisse au milliieux avec plein de gros faillots autour !
Signaler

Neo--Polak
 0  #5
Je poste trop
Inscrit: 22/08/2004 22:53
Post(s): 13730
"du tout"

😃

ipfs QmWxqQeSjZS1cxkCkTh3kFcQiKcHuk5SM91Lqo7KdxkiP2

Contribution le : 18/01/2011 13:24
Signaler

-Flo-
 0  #6
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15182
Karma: 12550
Si j'ai bien compris ton problème, il te suffit d'un modèle de ce type :

Table joueur
- id_joueur
- pseudo
- etc.

Table quete
- id_quete
- nom_quete
- etc.

Table etape
- id_etape
- id_quete
- nom_etape
- objectif

Table avancement
- id_joueur
- id_etape
- param (nombre entier)

Une table "quete" dans laquelle tu enregistres toutes les quêtes.
Une table "etape" dans laquelle tu enregistre toutes les étapes nécessaires au succès d'une quête, ainsi que l'objectif à atteindre pour chaque étape pour considérer qu'elle est franchie.
Une table "avancement" dans laquelle tu indiques quelles étapes ont été remplies par le joueur.


Dans le cas d'une quête correspondant à parler à 3 personnes, tu auras donc en données enregistrées :

Table joueur :

- id_joueur : 1
- pseudo : "Flo"

Table quete :

- id_quete : 1
- nom_quete : "Parler à 3 filles"

Table etape:

- id_etape : 1
- id_quete : 1
- nom_etape : "Parler à Lucie"
- objectif : 1

- id_etape : 2
- id_quete : 1
- nom_etape : "Parler à Sophie"
- objectif : 1

- id_etape : 3
- id_quete : 1
- nom_etape : "Parler à ma tante"
- objectif : 1

Table avancement :

- id_joueur : 1
- id_etape : 1
- id_param : 1 (j'ai parlé à Lucie)

- id_joueur : 1
- id_etape : 2
- id_param : 0 (j'ai pas encore parlé à Sophie)

- id_joueur : 1
- id_etape : 3
- id_param : 1 (j'ai déjà parlé à ma tante)


Si on ajoute la quête des moutons ça donne :

Table joueur :

- id_joueur : 1
- pseudo : "Flo"

Table quete :

- id_quete : 1
- nom_quete : "Parler à 3 filles"

- id_quete : 2
- nom_quete : "Tuer 10 moutons"

Table etape:

- id_etape : 1
- id_quete : 1
- nom_etape : "Parler à Lucie"
- objectif : 1

- id_etape : 2
- id_quete : 1
- nom_etape : "Parler à Sophie"
- objectif : 1

- id_etape : 3
- id_quete : 1
- nom_etape : "Parler à ma tante"
- objectif : 1

- id_etape : 4
- id_quete : 2
- nom_etape : "Nombre de moutons tués"
- objectif : 10

Table avancement :

- id_joueur : 1
- id_etape : 1
- param : 1 (j'ai parlé à Lucie)

- id_joueur : 1
- id_etape : 2
- param : 0 (j'ai pas encore parlé à Sophie)

- id_joueur : 1
- id_etape : 3
- param : 1 (j'ai déjà parlé à ma tante)

- id_joueur : 1
- id_etape : 4
- param : 8 (j'ai tué 8 moutons jusqu'à présent)



[Edit] J'avais oublié de définir les objectifs pour chaque étape, pour pouvoir vérifier ensuite qu'elle est bien accomplie. Je viens de l'ajouter

Contribution le : 18/01/2011 16:41
Signaler

Neo--Polak
 0  #7
Je poste trop
Inscrit: 22/08/2004 22:53
Post(s): 13730
la mission a-t-elle ete accomplie? 😃

Contribution le : 18/01/2011 18:09
Signaler

-Flo-
 0  #8
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15182
Karma: 12550
En relisant la question je m'aperçois que je n'ai pas pris en compte le fait que certaines tâches devaient être effectuées dans un ordre précis au sein d'une quête.

Pour cela il suffit d'ajouter une ligne à la table "etape" :

Table etape
- id_etape
- id_quete
- id_parent
- nom_etape
- objectif

Cette ligne contiendra l'ID de l'étape à accomplir au préalable.

Par exemple si on doit parler dans l'ordre d'abord à sa tante, ensuite à Lucie, et enfin à Sophie, les enregistrements de cette table seront les suivants :

Table etape:

- id_etape : 1
- id_quete : 1
- id_parent : 3
- nom_etape : "Parler à Lucie"
- objectif : 1

- id_etape : 2
- id_quete : 1
- id_parent : 1
- nom_etape : "Parler à Sophie"
- objectif : 1

- id_etape : 3
- id_quete : 1
- id_parent : null
- nom_etape : "Parler à ma tante"
- objectif : 1

- id_etape : 4
- id_quete : 2
- id_parent : null
- nom_etape : "Nombre de moutons tués"
- objectif : 10

Contribution le : 18/01/2011 18:47
Signaler

kigan
 0  #9
Je m'installe
Inscrit: 29/09/2007 16:00
Post(s): 236
grand merci -FLO-, en effet ta solution a l'air pas mal.
Je m'en vais essayer de coder ça.

L'autre problème c'est de décrire dans la table quête les objectifs à accomplir, mais je pense avoir trouvé la solution ... je vais me servir du nom_etape pour passer dans un switch en php afin d'exécuter la fonction correspondant à la quette.

exemple pour l'étape : "rétamer 5 moutons"

// récupèrer les quettes actives du joueur

// test si l'action en cours correspond à l'étape d'une quête du joueur

// si c'est le cas :
switch ($nomEtape) {

case "rétamer 5 moutons" :
retamerMonstres('mouton', 5);
break;

...
}


et je lance ce switch à chaque fois qu'une action de quette a été effectué.

Je suis sur la bonne voie ?

[ANGRY] ON M'A POUCAVE MON VELO !!!!!! si je met la main sur le résidu de raclure de bidet à merde purulent qui a fait ça je lui démonte les dents unes à unes après lui avoir fait bouffer du verre pilé par les trou de nez è.é [/ANGRY]

Contribution le : 21/01/2011 12:22
Signaler

-Flo-
 0  #10
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15182
Karma: 12550
À vrai dire je ne saisis pas du tout l'utilité de ton switch.

Mais pour pouvoir t'aider davantage, il faudrait que tu expliques comment sont identifiées les actions effectuées par un joueur.

Contribution le : 21/01/2011 13:10
Signaler

kigan
 0  #11
Je m'installe
Inscrit: 29/09/2007 16:00
Post(s): 236
J'ai une table 'action' qui indique pour chaque joueur : l'action et la cible.

par exemple le joueur se fritte contre un monstre :

id_joueur | action | cible

1 'combat' 452

ca me permet de conserver l'action en cour du joueur lors du rafraichissement de la page (en attendant de blinder tous ça d'ajax ...)

hum ... je commence a m'enmeler les pinceaux avec ces histoires de quettes 😕

je vais replancher tous ça sur le papier, si ça intéresse quelqu'un, le projet est en php 5, ajax / js, BD mysql.

Toute aide bénévole est la bienvenue ^^

Contribution le : 21/01/2011 14:16
_________________
la politique francaise est comme une asiette de casoulet : une petite saucisse au milliieux avec plein de gros faillots autour !
Signaler

-Flo-
 0  #12
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15182
Karma: 12550
Dans ce cas là c'est très simple, il suffit de faire évoluer la table "etape" en tenant compte de ces actions :

Table etape
- id_etape
- id_quete
- id_parent
- nom_etape
- action
- cible

- objectif

Ainsi tu définis à l'intérieur de cette table quelle action est concernée, et auprès de quelle cible.

Ensuite à chaque action effectuée par un joueur, il suffit de requêter pour savoir si l'action effectuée correspond à un étape d'une quête, simplement en sélectionnant les étapes comprenant l'action et la cible concernée.

Par contre à mon avis ta table action n'est pas optimisée. Je suppose que tu as un nombre limité de types d'actions récurrents (ex : "combat", "dialogue", "trouver", etc...).

Par conséquent les renseigner "en dur" dans ta table action n'est pas optimal. Tu devrais créer une table type_action en enregistrant seulement une fois chaque type différent et en lui attribuant un ID.

Ensuite tu n'as plus qu'à inscrire cet ID dans tes tables "action" et "etape".

PS : du coup, le champ "nom_etape" n'a plus de raison d'être, étant donné qu'il peut être reconstitué automatiquement à partir des champs "action" et "cible".

Contribution le : 21/01/2011 15:24
Signaler

kigan
 0  #13
Je m'installe
Inscrit: 29/09/2007 16:00
Post(s): 236
Ouai, c'est déjà le cas, c'était pour simplifier l'exemple que je l'ai mis en dure dans la table.
Ca se précise grandement !

Je vais prendre mon temps pour pas faire de conneries, je poserais le liens de la bêta sur le forum pour les curieux.

Contribution le : 22/01/2011 13:30
_________________
la politique francaise est comme une asiette de casoulet : une petite saucisse au milliieux avec plein de gros faillots autour !
Signaler


 Haut   Précédent   Suivant






Si vous êtes l'auteur d'un élément de ce site, vous pouvez si vous le souhaitez, le modifier ou le supprimer
Merci de me contacter par mail. Déclaré à la CNIL N°1031721.