JeuxOnLineForumsPlusConnectés : 393 (sites) | 762 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Gestion des quetes RSS
   
Répondre
Partager Outils Rechercher
Avatar de Prince Nexus
Prince Nexus
Roi
 
Avatar de Prince Nexus
 

Gestion des quetes

Salut a vous,

Voila, une question pour ceux qui ont deja fait des gros modules (ou qui sont en train d'en monter un) et qui ont trouve un moyen systematique et peu couteux en nombre de script (l'idee etant d'avoir dans la liste des scripts de l'editeur une vision claire de ce qui a ete fait et de ce qui reste a faire).

La question donc, comment gerer tous les scripts (ou une large majorite) concernant les quetes afin qu'ils soient le moins nombreux possibles. En effet, je me vois mal creer un nouveau script pour chaque "Condition d'execution" d'un dialogue implique dans la realisation d'une quete bidon du style aller chercher un item pour une personne.

Merci par avance de vos reponses, je crois en effet qu'elles pourront en aider par la suite plus d'un qui n'ont aucune envie d'avoir une liste de 3.000 scripts de 2 lignes chacun.

Prince Nexus.
Lien direct vers le message - Vieux
Avatar de Rhyghar
Rhyghar
Dauphine
 
Avatar de Rhyghar
 
Et Ben.... Ca va parraitre bourrin mais je me rappelle d'un post sur le forum officiel de bioware qui voulait utiliser la base de donnée (nwnx ou la bdd officielle de la version 1.30 du client) pour gerer ces quetes.
Apparement, ils voulaient faire un ensemble de scripts qui prendrait le tag de l'initiateur de la quete, aller chercher son dialoge, entrées du journal, et recompenses dans la BDD ainsi que le tag de l'objet à recuperer ou du type a tuer. A partir de là on pourrait imaginer une serie de quetes génériques (a la maniere du plot wizard).

Il n'y a jamais eut de suites alors je pense que le projet est tombé a l'eau...
__________________
..::Heavenlynet le net paradisiaque ::..
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Roi
 
Avatar de Prince Nexus
 
Oui, ca a l'air d'etre une bonne idee, quoique comme tu le dis, un peu bourrine, neanmoims tout a fait faisable. Je me vois bien creer dans un include pas mal d'entier qui seront les recompenses en XP et en Or pour des quetes classiques (le tout parametrable a partir d'un ou deux includes, c'est le leitmotiv chez moi, le tout parametrable... Ca evite pas mal de prise de tete dans un remaniement futur.) et puis des fonctions generiques renvoyant des booleens. Ca demande bcp de rigueur dans la creation meme des dialogues ensuite, mais bon, c'est aussi bcp plus clair. Y a plus qu'a mettre ca sur papier.

Neanmoins, si d'autres ont des idees lumineuses, qu'ils n'hesitent pas.

Prince Nexus.

P.S. : Une remarque sur le vault, ne pensez pas que tous leurs scripts fonctionnent, loin de la ! Je me suis par exemple deja retrouve avec un gros code qui etait tres joli a regarder... mais qui ne compilait pas ! (des fois c'est des fautes betes du genre ClearAllAction(TRUE) mais souvent c'est tout le truc qui est a revoir). Alors pensez a toujours regarder si le script compile...
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Roi
 
Avatar de Prince Nexus
 
Bon, je me decide, je m'y attele...

Dans l'idee, il ya 4 cas qui se distinguent (pour les mondes persistants) : la quete se fait en solo et une seule fois, elle se fait en solo et plusieurs fois (a chaque redemarrage du module), elle se fait en groupe et une seule fois ou en groupe et plusieurs fois.

Ensuite, il y a les schemas d'intrigue : je n'en vois que de deux types. Soit quelqu'un (ou quelque chose) veut un truc et quand il l'a, il est content. Soit il veut plusieurs exemplaires de ce truc jusqu'a un nombre nMax (nMax peut etre infini).

Si vous avez dans la tete d'autres schemas d'intrigues classiques, faites m'en part ici.

Prince Nexus.
Lien direct vers le message - Vieux
Avatar de Ormus
Ormus
Roi
 
Avatar de Ormus
 
Tiens ça me rappelle un monde persistant (ça doit être Avlis, qui est également à l'origine du NWNX), ou ils avaient carrément scripté un générateur de quêtes aléatoires ... enfin je suppose que ça se limite à des quêtes mineures mais quand même...
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Roi
 
Avatar de Prince Nexus
 
Ouep, c'est faisable ce truc avec des tokens. Mais bon, je laisse ca a quelqu'un d'autre, c'est carrement un casse-tete chinois...

Sinon, sur leur site, ils ne le donnent pas le script capable de faire ce que je demande, a moins que j'ai mal cherche ?

Prince Nexus.
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Heum... mouaip ben là je peux pô trop aider

L'éditeur de journal m'est pour ainsi dire quasi inconnu sans parler de l'assistant d'intrigue

Visiblement le plus génant est le nombre de scripts nécessaires aux conditions d'éxecution.

Pour chaque phrase d'accueil que le PNJ dit, il faut obligatoirement un script chacun car le principale problème vient du fait qu'une phrase ne réagit qu'à TRUE.


La meilleur solution est de créer plusieurs scripts réutilisables pour toutes les conversations.

Phrase "0" => Script "QuestCond0", la quête n'est pô encore démarré
Phrase "1" => Script "QuestCond1"
Phrase "2" => Script "QuestCond2"
Phrase "3" => Script "QuestCond3"
Phrase "4" => Script "QuestCond4"
etc.

Chacun de ces scripts sont identiques à par qu'ils ne mettent TRUE en présence d'une seule valeur et selon la quete.
Selon le TAG du PNJ, on va savoir quelle quête est en cour et à quelle étape ce qui permet à l'ensemble des conditions d'enclencher telle ou telle partie du dialogue.

Code PHP:
int StartingConditional()
{
    
object oPC GetPCSpeaker();
    
object oNPC GetLastSpeaker();


// le tag du pnj permet de connaitre la quete dans laquelle il est implique
    
string sQuest GetTagoNPC);

// on recupere une variable precisant a quelle etape de la quete le PJ se trouve
    
int nQuest GetLocalIntoPCsQuest);

// ici on envoie TRUE si le personnage est a la 1ere etape de la quete.
    
if(nQuest == 1)
        return 
TRUE;

    return 
FALSE;

Ainsi on a non pô x conditions par quête:
5 conditions x 10 quêtes = 50

Mais seulement 5 pour toutes les quêtes:
5 conditions + 10 = 15
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Roi
 
Avatar de Prince Nexus
 
Ouep Skanzo, c'est tout a fait ca dans le principe. Seulement, je veux aller plus loin et mettre les Action Taken (recompenses, journal, etc.) et utiliser des fonctions du type :

QuestAward(int Gold, int XP, object object1, object object2,...,) tout ca avec les options persistantes que j'ai ennonce ci dessus.

J'ai donc calcule, pour un schema d'intrigue classique tel que celui du dessus, il y a 5 scripts (3 sc et 2 at) + 1 include (classic_quest_inc). Morale, ca nous fait pour 2000 quetes..... 6 SCRIPTS !!!! Miraculeux non ???

Pour le second schema d'intrigue, ca nous fait 6 scripts (3 sc et 3 at) + 1 include (le meme). Le tout en 6 quoi... Effarant !

Eh eh, voila qui devrait en interesser plus d'un non ?
Quand aux quetes randomisables, c'est faisable aussi. Bon je posterai les scripts a la rentree, passke la je peux pas.

Prince Nexus.

P.S. : la limite, c'est quand meme qu'il s'agit de quetes trop classiques...
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
On peut faire la même chose avec d'autres scripts type réutilisables.

N'a pas l'item = Script "QuestNoItem"
A l'item = Script "QuestItem"

Ces deux scripts vont vérifier si le PJ a récupéré l'item. L'item ayant lui aussi un tag approprié. Avec ça on va pouvoir aiguiller la conversation vers un "retourne-y, il me faut cet objet à tout pris" ou une récompense

Ou encore le script: "QuestOneMoreStep" pour faire avancer la quête d'une étape lorsque le PJ a remplit une partie du contrat


On met le script "QuestOneMoreStep":
- dans le OnDeath d'une créature pour un assassinat
- dans le OnAcquireItem s'il faut récupérer un item particulier
- dans la conversation d'un PNJ secondaire pour la recherche d'une informations vitales.


Ce sera certainement plus compliqué et il faudra à coup sûr préparer quelques fonctions dans une librairie mais dans l'ensemble on aura un nombre de script très réduit, les dialogues gérant quasiment l'ensemble des quêtes


Edit: et voilà ce qui arrive quand on part vadrouiller sans valider le post :bouffon:
Lien direct vers le message - Vieux
Avatar de Damonya
Damonya
Dauphin
 
Avatar de Damonya
 
Tiens tout ça me parait vraiment une bonne idée. moi c'est avec les variables que je voudrais simplifier. Par exemple les conditions d'executions dans les dialogues.

Code PHP:
int StartingConditional()
{

    
// Inspecter variables locales
    
if(!(GetLocalInt(GetPCSpeaker(), "Tag variable") == 1))
        return 
FALSE;

    return 
TRUE;

Mettre un script different dans chaque branche de dialogue pour chaque rang de variable, ça fait beaucoup de petits scripts encombrant.
Je me pose donc une question, après avoir lut ce topic.
Est ce que mettre toutes les conditions de variables dans le même script (même tag de variable, mais de rang 1 plus 2 plus 3 etc....) c'est posssible, sans que ça mette le bordel ?
si on respecte l'ordre des branches de dialogue, si le Pj à la variable 1, hop branche 1, si le Pj à la variable 2, hop branche 2 etc.... et tout ça avec un seul script.
Théoriquement c'est faisable ? mais dans la pratique ?
*se demande si avec sa question, on va pas le prendre pour un taré*
Lien direct vers le message - Vieux
Avatar de Rhyghar
Rhyghar
Dauphine
 
Avatar de Rhyghar
 
je me disais ca aussi (faire un script pour toutes les conditions) mais je doit dire que je ne m'y connais pas en dialogues et je ne suis pas sûre que l'on puisse recupérer comme ca une branche de dialogue
__________________
..::Heavenlynet le net paradisiaque ::..
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Heeuuu, qu'est-ce qu'il a de plus ton script??
C'est exactement le même!

Et puis ces scripts ne sont pô du tout encombrant. Pour moi, quelque chose d'encombrant est un truc très peu utile et qui prend de la place pour pô grand chose hors là ces scripts sont utilisés pour toutes les quêtes! Et on diminue le nombre de script de nombre de conditions x nombre de quête.
C'est super utile, trois scripts c'est pô grand chose, et c'est hyper malin!

Et puis comment veux-tu avec un seul script choisir la branche de la conversation sachant que la condition ne sais renvoyé que TRUE or FALSE?
Comment veux-tu que le script sache à quelle branche il a affaire? il est impossible pour lui de savoir si il est à la 2ème ou 3ème branche et donc de renvoyer TRUE si besoin est.


Mais il y a quand même une petite astuce qui pourrait marcher malgré tout.
Incrémenter une variable locale à la fin de chaque condition.

Code PHP:
int StartingConditional()
{

    
object oPC GetPCSpeaker();
    
object oNPC GetLastSpeaker();
    
int nQuest GetLocalIntoPCGetTagoNPC));
    
int i GetLocalIntoNPC"Branche");

    
SetLocalIntoNPC"Branche"i++);
    
DelayCommand2.0fDeleteLocalIntoNPC"Branche"));

    if(
== nQuest)
        return 
TRUE;

    return 
FALSE;

Lien direct vers le message - Vieux
Avatar de Rhyghar
Rhyghar
Dauphine
 
Avatar de Rhyghar
 
maintenant que j'y pense, une solution serait de ne pas faire de script conditionnel (Qui, comme tu viens de le dire skanzo, ne renvoie que TRUE ou FALSE) mais plutot un script dans OnConversation qui fait un ActionStartConversation() avec la bonne branche de conversation (en gros mettre les branches de dialogues dans des dialogues a part)

Maintenant c'est vrai que c'est uniquement pour le plaisir de n'avoir qu'un seul script qui gere toutes les quetes. Ca doit surement etre l'enfer a gerer (et sa fait considerablement augmenter le nombre de fichiers dialogue).
__________________
..::Heavenlynet le net paradisiaque ::..
Lien direct vers le message - Vieux
Avatar de Damonya
Damonya
Dauphin
 
Avatar de Damonya
 
Citation:
Heeuuu, qu'est-ce qu'il a de plus ton script??
C'est exactement le même!
Oui en effet
C'etait juste pour montrer de quoi je parlais, rien de plus. . J'aurais put dire c'est vrais juste le mot condition de variable dans un dialogue, mais j'aime bien me compliquer la vie

Citation:
Et puis comment veux-tu avec un seul script choisir la branche de la conversation sachant que la condition ne sais renvoyé que TRUE or FALSE?
Comment veux-tu que le script sache à quelle branche il a affaire? il est impossible pour lui de savoir si il est à la 2ème ou 3ème branche et donc de renvoyer TRUE si besoin est.
Bah oui je savais bien que ma question était co**e

Citation:
Mais il y a quand même une petite astuce qui pourrait marcher malgré tout.
Incrémenter une variable locale à la fin de chaque condition.
Euh.... y'a moyen d'expliquer ou de commenter un peu ce script, qui m'a l'air assez pratique.

Citation:
Maintenant c'est vrai que c'est uniquement pour le plaisir de n'avoir qu'un seul script qui gere toutes les quetes. Ca doit surement etre l'enfer a gerer (et sa fait considerablement augmenter le nombre de fichiers dialogue).
C'est vrais que si on se complique la vie ailleurs, ça vaut pas vraiment le coup . Disons que j'ai rien dis.
*s'en va discrètement *
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Dans la pratique je suis pô certain que ça fonctionne parfaitement.

Le truc est que la variable compte le nombre d'execution du script et par la même compte aussi le nombre de branche, ainsi on peut connaitre à quelle branche on a affaire.

Pour chaque branche de la conversation, le script sera executé.
Dans un dialogue de 3 branches, le script sera executé 3 fois.

À la première exécution et donc à la première branche, la variable "Branche" n'existe pô et indique donc 0.
À la deuxième, la variable sera 1.
À la troisième, 2.

On peut facilement en faire une fonction GetBranchConversation() ou un autre bidule du genre

Pour effacer la variable, j'ai mis un delaycommand sans vraiment y reflechir mais je pense que ça ne posera pô de problème si on met le DeleteLocalInt dans la condition TRUE. Enfin je crois me rappeler que le PNJ affiche toujours la première phrase "possible" (cad quand la condition est TRUE) même si les conditions suivantes sont elle aussi vraies.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Gestion des quetes
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 09h12.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite