JeuWeb - Crée ton jeu par navigateur
Système de 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 : Système de quêtes (/showthread.php?tid=3935)



Système de quêtes - Kwest - 29-04-2009

Salut, je code un petit rpg-web et j'aimerai bien intégrer un système de quête. Tout d'abord, je dois vous dire que je ne code que en PHP/MYSQL... (j'ai essayé d'apprendre le javascript mais ça ma saoulé...).
Sinon, le truc qui me fais vraiment bloquer c'est comment le système de combat sait que je fais une quête? Par exemple si un joueur doit tuer 10 gobelins et 12 loups comment le script va savoir qu'il faut compter que ça?
Merci d'avance Smile.


RE: Système de quêtes - keke - 29-04-2009

Si à la fin de ton combat, ta fonction de combat renvoie un petit tableau contenant les victimes par joueur ... tu n'as pas qu'à comparer ce tableau à la liste des quêtes en cours, que tu auras pris soin de récupérer au préalable.

Si des victimes font parti du lot, alors tu te fends d'une requête SQL pour modifier ta base de donnée avec les bonnes informations.

Kéké qui n'a pas trop cerné le problème en fait.


RE: Système de quêtes - Sephi-Chan - 29-04-2009

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):
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. Wink


Sephi-Chan


RE: Système de quêtes - Kwest - 29-04-2009

Ok, merci pour vos réponses, je vais essayer de faire ça dès que j'ai le temps Smile.