La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 19/05/2024 00:48:02


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 24/04/2005 14:52:54 Sujet du message : Méli-mélo dans les variables d'un dialogue

Bonjour à tous,
J'ai un dialogue avec une multitude de phrases qui seront dites par mes pnj suivant l'état d'avançement du pj dans l'intrigue.
Plutôt que de longues phrases, voici un bref schéma du dialogue :

--> Phrase 1 // Phrases génériques
--> Phrase 2
...
--> Phrase X
--> Phrase 1 // Phrases liées au noeud 1 de l'intrigue
--> Phrase 2
...
--> Phrase X
--> Phrase 1 // Phrases liées au noeud 2 de l'intrigue
--> Phrase 2
...
--> Phrase X
--> Phrase 1 // Phrases liées au noeud 3 de l'intrigue
--> Phrase 2
...
--> Phrase X

...

J'ai donc assigné des variables Noeud1, Noeud2, etc...pour l'intrigue mais je commençe à m'emmêler les pinceaux dans tout ça !( je suis bien moins logique que la plupart d'entre vous Wink )
Sachant que le joueur est à l'état n (0<n<7) de l'intrigue, le pnj doit :
- dire une seule phrase pour le noeud en cours (en sachant que le nombre de phrase diffère suivant le noeud).
- dire une phrase générique si il n'a pas atteint de noeud de l'intrigue (postulat de départ) ou dire une phrase générique après avoir dit sa phrase liée au noeud en cours.
Comment puis-je organiser tout ça ? ( je ne vais compliquer les choses, mais certaines phrases ne seront prononcer également que sur certaines conditions : race, jour/nuit,etc..., mais ça je sais faire Wink )

J'espère avoir était clair et merci pour votre aide.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Eldorane
Héros
Inscrit le: 18 Oct 2003
Messages: 298
Localisation: Moselle
Répondre en citant
Posté le : 24/04/2005 16:53:11 Sujet du message :

j'avoue ne rien y comprendre ... Confused

si ça peut t'aider :
[http]
regarde le post de lylver Posté le : 16/04/2005 à 01:58:32
_________________

Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication !

_________________
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 24/04/2005 17:32:43 Sujet du message :

J'ai oublié de préciser une condition pour les phrases des pnj :

- chaque phrase lié au noeud en cours ne doit être prononcée qu'une et une seule fois au cours du jeu.

Merci quand même Eldorane Wink
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Laxam
Légende vivante
Inscrit le: 12 Avr 2004
Messages: 425
Localisation: Lyon
Répondre en citant
Posté le : 24/04/2005 17:50:29 Sujet du message :

Very Happy et bien il faut dans un premier temps bien nommer ta variable, qu'avec le nom tu arrives facilement à identifier le dialogue et la quête en question. Ensuite tu peux aussi te faire un papier récap qui te dit où tu en es. Perso j'ai mis comme valeur de la variable la meêm valeur que dans le livre de quête comme ça si je ne sais plus très bien, je vais voir dasn le livre de quête la description de l'état de la quête suivant la valeur de la variable, simple non ? Au fait, as-tu lu mes conseils sur mon site ? Very Happy

Pour revenir à ton problème plus précisément, un truc du genre :

Dialogue :

si variable = 0 => phrase "j'ai une mission pour vous"
..... étape 1.... action conséquente variable = 5
si variable = 10 => phrase "étape 1 terminée"
..... étape 2.... action conséquente variable = 15
si variable = 20 => phrase "étape 2 terminée"
..... étape 3.... action conséquente variable = 25
.
.
.
sans condition => phrase "vous n'avez pas encore fini ??!!!!

Quête :
à chaque franchissement d'étape, tu mets la variable à 10 puis 20 puis....

Résultat :
1ère rencontre => donne la quête
2ème rencontre => étape 1 faite => donne étape 2 à faire
étape 1 non faite => phrase de fin (on peut mettre une phrase spécifique pour chaque valeur en 5 => genre "finissez l'étape 1"...
3ème rencontre...

Voilà, j'espère que j'ai été clair et que j'ai répondu à la question.

Au moins je t'aurais donné un petit coup de main... désolé Confused
_________________
Mon site NWN nouvelle version et mon module Boisperdu en ligne ! Et maintenant un FORUM
La première version française de la doc du NPC Activities (version 2.0)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 24/04/2005 18:39:04 Sujet du message :

Salut Laxam !

Citation :
Au fait, as-tu lu mes conseils sur mon site ?
*siffle* bah oui Very Happy ! Mais il me faut plusieurs couches avant d'assimiler les choses Wink
Mais j'ai quand même pas compris Sad en fait si, mais à moitié. En fait le dialogue se compose uniquement de phrases simples, pour les génériques elles peuvent être redites (c'est français ça ?) donc c'est simple. Ce qui me gêne ce sont celles liées à l'état d'avançement du joueur dans l'intrigue, en fait il y trois tests à faire sur chaque phrase : ou se trouve le joueur par rapport à l'intrigue, as-t-il déjà dit cette phrase, cette phrase a-t-elle déjà était prononcée dans le module ? J'ai donc une question simple : dois-je créer une variable pour tester chaque phrase (celle liée à l'intrigue bien entendu) ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Laxam
Légende vivante
Inscrit le: 12 Avr 2004
Messages: 425
Localisation: Lyon
Répondre en citant
Posté le : 24/04/2005 19:56:10 Sujet du message :

Je ne suis pas sûr d'avoir tout compris.... Very Happy
Pour la variable d'avancement je pense que là c'est bon... pour savoir si la phrase a déjà été dites et bien comme j'ai mis ci-dessus, en incrémentant la variable de telle sorte qu'elle reste inférieure à l'étape suivante mais supérieure à l'étape précédente Confused la phrase ne se répetera pas... Tu réserves par exemple de 10 à 19 = première étape, 20 à 29 = deuxième étape et ainsi de suite.

Par contre je ne comprends pas très bien ce que tu entends par

Citation :
cette phrase a-t-elle déjà était prononcée dans le module ?
elle peut être prononcée ailleurs ?

Sinon au pire oui, tu peux créer 3 variable mais à mon avis on peut faire sans...

Mais je suis pas sûr de tout bien comprendre.....

PS : peut-être peux-tu mettre un exemple concrèt avec les phrase prononcées..
_________________
Mon site NWN nouvelle version et mon module Boisperdu en ligne ! Et maintenant un FORUM
La première version française de la doc du NPC Activities (version 2.0)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 24/04/2005 21:06:38 Sujet du message :

Je pensais avoir était clair, apparemment non Very Happy
Voici quelques extraits du dialogues :

--> Vous êtes nouveau ici ? // Phrase générique 1
--> Quel temps splendide n'est-ce pas ? // Phrase générique 2
--> Aujourd'hui les pirates ne prennent même plus la peine de se déguiser quand ils mouillent au port. // Phrase 1 liée au noeud 1 de l'intrigue
--> Dans la ville on trouve actuellement des navires de pirates et même des équipages orques ! // Phrase 2 liée au noeud 1 de l'intrigue
--> La "Vengeance Sanglante" ? Connait pas. // Phrase 1 liée au noeud 2 de l'intrigue
--> Si j'étais vous, j'éviterai de m'approcher de la "Vengeance Sanglante". // Phrase 2 liée au noeud 2 de l'intrigue
--> Seules les personnes les plus influentes de Freeport seront invités au bal. // Phrase 1 liée au noeud 3 de l'intrigue
--> Le grand bal du phare sera donné pour célébrer l'imminence de l'achèvement de la "Folie de Milton". // Phrase 2 liée au noeud 3 de l'intrigue
...
Ce dialogue est donc composé de phrases uniques, il est utilisé par plusieurs pnj.
Petit résumé de ce que je souhaite :
- le pnj dit une phrase aléatoirement parmis celle possible liée au noeud de l'intrigue en cours, elle doit être unique et ne pas avoir était dit pas un autre pnj (autrement dit chaque phrase lié au noeud en cours ne doit être prononcée qu'une et une seule fois au cours du jeu).
- dans tous les autres cas le pnj dit une phrase générique (qu'il est où pas rempli la première condition, car dans certains cas toutes les phrases du noeud en cours auront déjà étaient dites par les autres pnj).

Je suis clair là Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 25/04/2005 11:16:32 Sujet du message :

Je fais toujours quelques tests avec mes variables, mais c'est toujours infructueux Sad
Imaginons que le joueur soit au noeud 1 de l'intrigue et que 4 phrases sont possibles, j'ai mis dans la condition d'éxécution de chaque phrase ce script (en adaptant bien sur suivant le numéro de phrase Wink) :

NWScript :
int StartingConditional()
{
    if (GetLocalInt(GetModule(), "vIntrigueEtat") == 10) // Variable avancement intrigue
    {
        int roll=d100();
        if (roll>50) // 50% de chance de dire cette phrase
        {

            if((GetLocalInt(GetModule(), "vNumeroPhraseIntrigueEtat10") != 1) && (GetLocalInt(GetModule(), "vNombrePhraseIntrigueEtat10") < 4))
            {
                return TRUE;
            }
            return FALSE;
        }
        return FALSE;
    }
    return FALSE;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Et dans l'action conséquente :
NWScript :
void main()
{


int counter1 = GetLocalInt(GetModule(), "vNombrePhraseIntrigueEtat10");
SetLocalInt(GetModule(), "vNumeroPhraseIntrigueEtat10", 1);
SetLocalInt(GetModule(), "vNombrePhraseIntrigueEtat10",counter1 ++ );

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

Le problème c'est que les phrases sont répétées alors qu'elles ne doivent apparaître qu'une fois.
Au secours Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Laxam
Légende vivante
Inscrit le: 12 Avr 2004
Messages: 425
Localisation: Lyon
Répondre en citant
Posté le : 25/04/2005 17:56:11 Sujet du message :

Je pense avoir compris maintenant Very Happy
Premier point : Pour un même noeud de l'intrigue, rien ne sert de prendre l'une ou l'autre des phrases aléatoirement car de toute manière chacune d'elle ne sera prononcée qu'une seule fois Very Happy on met un aspect aléatoire lorsqu'on veut que le NPC dise une phrase au hasard mais la pas besion !
Voilà ce que je te propose

Cond exécution / Phrase / action conséquente
vQuete = 10 --> Aujourd'hui les pirates ne... --> vQuete = 11
vQuete = 11 --> Dans la ville on trouve ac...
vQuete = 20 --> La "Vengeance Sanglante" ... --> vQuete = 21
vQuete = 21 --> Si j'étais vous, j'éviter...
vQuete = 30 --> Seules les personnes les ... --> vQuete = 31
vQuete = 31 --> Le grand bal du phare ser...
aléatoir 50% --> Vous êtes nouveau ici ?
--> Quel temps splendide n'est-ce pas ?

J'ai bon là ?
ta variable vQuete passera à 10, 20 ou 30 suivant les action du PJ, entre 10 et 19 c'est le premier noeud de l'intrique, 20 et 29 le second...
_________________
Mon site NWN nouvelle version et mon module Boisperdu en ligne ! Et maintenant un FORUM
La première version française de la doc du NPC Activities (version 2.0)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 25/04/2005 18:20:11 Sujet du message :

Merci pour ces précisions, mais si je suis ta logique cela oblige les pnj à prononcer les phrases dans un ordre croissant( pour reprendre ton exemple de 10-19 pour le noeud 1 de l'intrigue), or je souhaite qu'elles soient dites aléatoirement et une seule fois et le pnj ne puisses dire qu'un indice par noeud d'intrigue. Une petite idée ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 25/04/2005 19:05:06 Sujet du message :

C'est bon c'est résolu, je me suis compliqué la vie pour rien Very Happy
Comme tu le dis Laxam, le jet aléatoire ne sert absolument à rien.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Laxam
Légende vivante
Inscrit le: 12 Avr 2004
Messages: 425
Localisation: Lyon
Répondre en citant
Posté le : 25/04/2005 19:17:59 Sujet du message :

Par contre fais gaffe, t avariable ne devra pas être stockée sur le NPC car si tu mets ce dialogues sur plusieurs NPC différents, et bien ce sera alors comme des variables différentes, tu peux la stocker sur le module (GetModule())
_________________
Mon site NWN nouvelle version et mon module Boisperdu en ligne ! Et maintenant un FORUM
La première version française de la doc du NPC Activities (version 2.0)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 25/04/2005 19:52:02 Sujet du message :

En fait voilà les scripts que j'utilise :
Condition d'éxécution
NWScript :
int StartingConditional()
{
    if (GetLocalInt(GetModule(), "vEtatIntrigue") == 10) // Variable avancement intrigue
    {
      if((GetLocalInt(GetModule(), "vNumeroPhraseIntrigueEtat10") == 1)&& (GetLocalInt(OBJECT_SELF, "vDejaDitPhraseIntrigueEtat10") != TRUE))
            {
                return TRUE;
            }
            return FALSE;
    }
    return FALSE;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

Action conséquente
NWScript :
void main()
{



SetLocalInt(GetModule(), "vNumeroPhraseIntrigueEtat10", 2);
SetLocalInt(OBJECT_SELF, "vDejaDitPhraseIntrigueEtat10", TRUE);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

C'est bon là ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Laxam
Légende vivante
Inscrit le: 12 Avr 2004
Messages: 425
Localisation: Lyon
Répondre en citant
Posté le : 26/04/2005 17:51:04 Sujet du message :

La deuxième variable, vDéjàDitPhraseIntrigueEtat10 ne sert à rien puisque une fois que la phrase a été dite, ta variable vNumeroPhraseIntrigueEtat10 passe à 2, donc de toute manière la condition d'exécution passera à FALSE même si tu ne mets pas ce test sur la variable suivante. En plus ta deuxième variable vDejaDitPhraseIntrigueEtat10 est stockée sur le OBJECT_SELF, c'est à dire le NPC, donc si c'est un autre NPC qui le dit, ça ne modifiera pas ta variable (un même nom de variable stocké sur deux objets différents est en fait deux variables distincts !)

En creusant un peu la chose on voit aussi que lorsque ton NPC va dire sa première phrase liée au nœud 10, la variable vDejaDitPhraseIntrigueEtat10 va passer à TRUE et tu vas vouloir dire la 2ème phrase et là dans ton test, la condition sur vDejaDitPhraseIntrigueEtat10 ne sera jamais vraie (car ta variable vaut TRUE), donc ton NPC ne dira jamais la deuxième phrase !

Je ne sais pas si je suis très clair...


Pour résumer, les scripts suivants sont à mon avis suffisants


Condition d'éxécution

NWScript :

NWScript :
int StartingConditional()
{
    if (GetLocalInt(GetModule(), "vEtatIntrigue") == 10) // Variable avancement intrigue
    {
      if(GetLocalInt(GetModule(), "vNumeroPhraseIntrigueEtat10") == 1)
            {
                return TRUE;
            }
            return FALSE;
    }
    return FALSE;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Action conséquente

NWScript :

NWScript :
void main()
{



SetLocalInt(GetModule(), "vNumeroPhraseIntrigueEtat10", 2);

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Il faudra bien penser au moment de l'avancement de ton intrigue de mettre à jour la variable vEtatIntrigue et vNumeroPhraseIntrigueEtatxx car par défaut cette dernière variable aura la valeur 0.

Dans ce cas, si tu mets le dialogue sur plusieurs NPC, la phrase en question ne sera dite qu'une seule fois (dans le jeu) et c'est ce que tu veux faire il me semble.

Sinon je pense aussi que tu aurais pu utiliser une seule variable comme je te l'avais dit (1er chiffre = nœud de l'intrigue, 2ème chiffre = numéro de phrase de l'intrigue à dire), mais ce que tu as fait marche.

En tout cas je suis fier que tu es utilisé ma codification pour tes variables !
_________________
Mon site NWN nouvelle version et mon module Boisperdu en ligne ! Et maintenant un FORUM
La première version française de la doc du NPC Activities (version 2.0)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 26/04/2005 21:52:21 Sujet du message :


Citation :
Je ne sais pas si je suis très clair...
Bien au contraire ! Tu ferais un très bon professeur Wink

Citation :
Sinon je pense aussi que tu aurais pu utiliser une seule variable comme je te l'avais dit
C'set exactement ce que je fais : économie d'une variable (et j'ai également penser à donner un nom au variable un peu plus parlant car "DéjàDitPhraseIntrigueEtat10" c'est un peu abracadabran Very Happy )

Citation :
En tout cas je suis fier que tu es utilisé ma codification pour tes variables !
Pour moi ca me semble très parlant, alors pourquoi je m'en priverai !
En tout cas merci pour toutes ces précisions, je vais pouvoir attaquer sérieusement la mise en place de l'intrigue de mon module.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 37.575ms