[Jeu - RPG] système de quêtes

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

[Jeu - RPG] système de quêtes

Message par blendman »

salut

J'ai intégré un système de quête simple dans mon jeu.
Le principe :
- je crée la structure du pnj
- je crée la structure de la quete
- j'ajoute une map global pour les quete

Code : Tout sélectionner

Structure st_pnj
  position.point
  id.w
EndStructure

Structure st_quete
  id.w
  titre$
  description$
  recompense$
  etape.b
EndStructure

Global NewMap quete.st_quete()

AddMapElement(quete(),"1")
With quete("1")
  \id = 1
  \titre$ ="A La recherche des gluts perdus"
  \description$ = "Ramener 10 morceaux de glut" 
  \recompense$ = "Xp : +100 / Argent : 15 ark"
  \etape = 1
EndWith

With quete("1")
  Debug \titre$
  Debug \description$
  Debug \recompense$
EndWith
Les étapes :
- cliquer sur un pnj (N°Y) : ça ouvre un dialogue qui propose une quête.
- si on clique sur OK, ça ajoute la quête dans notre livre de quete (la quête a un numéro type ID), et l'étape de la quête passe à 1
- en général, la quête basique ressemble à : "trouver X objets et les ramener au pnj N°Y"
- si on n'a pas les X objets et qu'on reclique, on passe à l'étape = 2, et on une phrase genre "ben alors, tu me les ramènes ces X objets ?", et ensuite, on reste sur cette étape =2 si on n'a toujours pas les X objets.
- si on a les X objets, on reclique sur le pnj N°Y : on vérifie qu'on a au moins X objets (si étape de la quête >=1).
- si oui, on enlève les X objets de notre inventaire, on passe la quête à étape = 3 (fin de quête), dialogue : "super, voici ta récompense".
- on ajoute la récompense (argent, xp) au jour
- on passe la quête à l'étape 4 (fin de quête). Le dialogue est du genre : "encore merci pour les objets !".

Bon, ça c'est simple.
C'est une quête basique.

Mais si je souhaite concevoir des quête avec multi-niveaux, sur plusieurs pnjs, d'après vous, quelle serait la méthode la plus intéressante ?
- une variable global queteprincipale.a que j'incrémente en fonction des étapes de chaque pnj par exemple ?
et avant de balancer un dialogue ou une nouvelle étape, je vérifie à combien cette variable est ?

Cela vous semble une bonne idée ou y'a-t-il une meilleure méthode ? :)

Merci.
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: [Jeu - RPG] système de quêtes

Message par case »

des listes a la place des variables du coup chaque etape peut avoir une description propre une recompense prore etc...


pas le temps de develloper en retard au taf...


bye ,)
ImageImage
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: [Jeu - RPG] système de quêtes

Message par case »

je pensais a ce genre de choses
je n'ai mis dans ma structure que le titre a toi de mettre tout ce dont tu as besoin ;)

Code : Tout sélectionner

Structure quete
   etape.i
   List titre.s()         
EndStructure
Global NewMap quest.quete()
AddMapElement(quest(),"1")
With quest("1")
   AddElement(\titre())
   \titre()="retrouver mitsy : regarder pres du puit"
   AddElement(\titre())
   \titre()="retrouver mitsy : regarder dans le vieux moulin"
EndWith
Debug "etape =0"
With quest("1")
   SelectElement(\titre(),\etape)
   Debug \titre()
EndWith
With quest("1")
   \etape=1
EndWith
Debug "etape =1"
With quest("1")
   SelectElement(\titre(),\etape)
   Debug \titre()
EndWith
ImageImage
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: [Jeu - RPG] système de quêtes

Message par case »

plus facile d'utilisation ...
la structure "etapes" contiens tout les elements necessaires
la structure "quete" contiens l'étape actuelle de la quete et une liste avec la structure 'info'

des qu'une étape de la quete est terminée la variable 'etape' est incrémentée
et lorsque le programme vas chercher les informations sur la quête il prendra l'élément correspondant dans la liste info()

Code : Tout sélectionner

Structure area ; structure pour les coordonées a visiter lors de la quete
   x.d         ; coordone x
   y.d         ; coordone y
   rayon.i     ; zone d'activation autour de la coordone
   description.s ; description de la zone en texte dans la quete
   done.b        ; zone visitée si a 1
EndStructure
Structure cibles ; mobs a tuer lors d'une quete
   id.i          ; id du mob 
   nb.i          ; nombre a tuer
   done.b        ; contrat terminé si a 1
EndStructure
Structure ramassage ; objets a recuperer
   id.i             ; id de l'objet
   nb.i             ; nombre a recuperer
   done.b           ; contrat terminé si a 1   
EndStructure
Structure etapes
   titre.s     
   description.s   
   List gather.ramassage()
   List kill.cibles()
   List Go_to.area()
   giveback.i        ;ID du npc ou rendre la quete si 0 , la quete n'as pas besoin d'etre rendue pour se valider   
EndStructure
Structure quete
   etape.i
   List info.etapes()
EndStructure
Structure mob   
   nom.s
EndStructure

Global questid.i
Global NewMap quest.quete()
Global NewMap mobs.mob()

AddMapElement(mobs(),"1")
AddMapElement(mobs(),"2")
AddMapElement(mobs(),"3")

With mobs("1")
   \nom="gobelin"
EndWith
With mobs("2")
   \nom="cuisinier gobelin"
EndWith
With mobs("3")
   \nom="shaman gobelin"
EndWith
;
Procedure add_quest()
   questid +1
   AddMapElement(quest(),Str(questid))  
   ProcedureReturn(questid)
EndProcedure
;
Procedure add_step(id,titre.s,description.s)
   With quest(Str(id))      
      AddElement(\info())
      \info()\titre=titre  
      \info()\description=description  
   EndWith
EndProcedure
Procedure add_area(id,x.d,y.d,rayon.i,desc.s)
   With quest(Str(id))      
      AddElement(\info()\Go_to())
      \info()\Go_to()\x=x
      \info()\Go_to()\y=y
      \info()\Go_to()\rayon=rayon
      \info()\Go_to()\description=desc      
   EndWith   
EndProcedure

Procedure add_target(id,mobid,nb)
   With quest(Str(id))      
      AddElement(\info()\kill())
      \info()\kill()\id=mobid
      \info()\kill()\nb=nb
   EndWith   
EndProcedure

Procedure add_ramassage(id,ressid,nb)
   With quest(Str(id))      
      AddElement(\info()\gather())
      \info()\gather()\id=ressid
      \info()\gather()\nb=nb
   EndWith   
EndProcedure
Procedure showstep(ID)
   With quest(Str(id))
   SelectElement(\info(),\etape)
   Debug \info()\titre   
   Debug \info()\description
   If ListSize(\info()\Go_to())>0
      ForEach \info()\Go_to()
         Debug "X:"+Str(\info()\Go_to()\x)+" Y:"+Str(\info()\Go_to()\y)+" R:"+Str(\info()\Go_to()\rayon)
         Debug \info()\Go_to()\description
      Next
   EndIf
   If ListSize(\info()\kill())>0
      ForEach \info()\kill()
         FindMapElement(mobs(),Str(\info()\kill()\id))
         Debug "tuer "+Str(\info()\kill()\nb)+" "+mobs()\nom
      Next
   EndIf
  
EndWith

EndProcedure

id=add_quest()
add_step(id,"retrouver mitsy: a la recherche d'indices","Mitsy, le chat de morglin a disparu, celui ci vous a demander d'aller voir plusieurs endroits ou celui ci a l'habitude d'aler")
add_area(id,10,10,5,"le vieux moulin")
add_area(id,20,10,5,"le puit")
add_step(id,"retrouver mitsy: vengeance","Pendant que vous cherchiez Mitsy Morglin a enquete de son coté, des gobelins on tué son chat et l'on manger, allez au camp gobelin pour venger la mort de son chat")
add_target(id,1,5)
add_target(id,2,2)
add_target(id,3,1)

Debug "etape 0"
showstep(1)
Debug "etape 1"
With quest("1")
   \etape=1
EndWith
showstep(1)

ImageImage
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [Jeu - RPG] système de quêtes

Message par blendman »

merci Case ;).

je vais regarder tout cela avec attention :)
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: [Jeu - RPG] système de quêtes

Message par G-Rom »

Salut BlendMan , c'est quand qu'on pourras testé une bêta de ton jeu ? :mrgreen:
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Jeu - RPG] système de quêtes

Message par Ar-S »

+1 :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [Jeu - RPG] système de quêtes

Message par blendman »

G-Rom a écrit :Salut BlendMan , c'est quand qu'on pourras testé une bêta de ton jeu ? :mrgreen:
actuellement, on a une alpha pour quelques testeurs :)
et avec Stombretrooper, on passe le jeu en mode online. Il s'occupe de tout ce qui a rapport avec le réseau (sever + réseau client) et je m'occupe du client (interface, menus, et actions du joueur + ajout du code online que stombretrooper a réalisé).

A mon avi,s pour une béta ce ne sera pas avant encore plusieurs semaines, car on n'est au tout début pour le mode multi-joueur, on est en train d'ajouter le déplacement des personnages.

On a déjà (en mode online):
- la connexion à son compte (login mot d eapss)
- le choix d'un de nos personnages ou la création d'un personnage (pas encore customisable) : choix du peuple, bonus de stat, choix de la caste...
- la validation et l'ajout de ce personnage à la BDD
- la sélection d'un de nos personnage et l'entrée dans le jeu (avec écran de chargement de barre de progression)
- l'apparition du joueur chez les autres joueurs
- le tchat

Sinon, niveau "offline", j'avais déjà réalisé quelques gameplays, mais on doit tout passer sur le server :
- combat avec magie (quelques sorts disponibles) + XP et changement de levels
- drop et inventaire
- début d'équipement
- début de quêtes et livre de quêtes
- livre de compétences
- menu option

Il nous reste encore beaucoup de choses à faire, mais le pure nous permet d'aller assez vite dans le développement, donc ça avance vraiment bien :).

Voiloutch
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Jeu - RPG] système de quêtes

Message par Ar-S »

De biens bonnes nouvelles :D
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre