Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Faire parler les NPC entre eux

Par irec le 29/11/2002 à 21:52:29 (#2675564)

Comment faire parler des PNJ entre eux ? avec eventuellement intervention d'un PJ qui debouche sur un nouveau dialogue

Par eMRaistlin le 30/11/2002 à 0:33:04 (#2676482)

tout simplement, dans le wizard de dialogue, tu as une case a remplir TAG.

Il s'agit du tag du parleur. Tu fais donc des repliques de dialogue entre Tag1 et Tag2, tout simplement ^^

Par coolstar le 30/11/2002 à 9:18:26 (#2677654)

Tag locuteur du veux dire ? :D ^^



EDIT
------------------
Je viens de jeter un oeil pour le ca où... et j'ai eu la confirmation que par le biais de l'Editeur de dialogues le Joueur est obligé de cliquer chaque fois que c'est son tour pour les écouter... donc le Dial n'est pas Dynamique ! ce qui me fait dire qu'il vaut mieux préconiser le Dial par Script si l'on veut une Conversation Dynamique (sans le joueur!)... ;)
------------------

Par irec le 30/11/2002 à 10:28:25 (#2677826)

et comment faire pour que ce soit dynamique ? :)

Par Cassin le 30/11/2002 à 12:00:03 (#2678358)

Ben tu as deux solutions : soit tu fais un dialogue "normal" entre les PNJ en changeant le tag à chaque fois, et entre chaque réplique tu laisses la phrase du joueur vide (ce qui affiche un "Continue") ; soit tu le fais dans un script en mettant une suite de ActionSpeakString, avec des DelayCommand ou des ActionWait entre chaque.

Perso je serais plus pour le dialogue classique, au moins ça attire l'attention du joueur (évidemment s'il veut vraiment pas lire, il peut toujours sortir). Parce qu'avec les ActionSpeakString, les phrases s'affichent au-dessus des PNJ, mais le joueur peut très bien passer à coté sans faire attention...

Par coolstar le 30/11/2002 à 13:11:28 (#2678958)

C'est qu'est-ce que je voulais dire... :D

Par coolstar le 30/11/2002 à 22:41:12 (#2682143)

Re...


Je suis plutôt pour la conversation dynamique entre les NPCs (ça fait plus vivant et moins Bouquin/LDVEH*)... mais j'adhère tout de même à la remarque judicieuse de Cassin quant au risque de louper ainsi une conversation... ;)

Bon.... suite à nos commentaires réciproques, j'ai de fait envisagé une alternative et j'ai finalement opté pour une solution qui m'apparaît tout à fait satisfaisante... et en plus ça marche! aussi je me suis-je proposé de vous la présenter... :D



Donc, la scène sera abordée par le biais d'un Trigger qui déclenchera un Dial, ou plutôt un genre de Monologue, de sorte que le Joueur ne puisse louper l'événement... Déclencheur générique : OnEnter : conversation_surprise

/* conversation_surprise.nss */
// Le Joueur surprend une conversation entre deux individus suspects.
void main()
{
object oPc = GetEnteringObject();
object oObjectToConverseWith = oPc;
string sDialogResRef = "conversation_surprise";

// Déclenchement du Dialogue à choix multiples "conversation_surprise".
ActionStartConversation(oObjectToConverseWith, sDialogResRef);
}
S'en suit donc le Déclenchement du Dialogue "conversation_surprise" qui laissera ainsi au Joueur le choix de suivre ou non leur conversation (dynamique ou interactive) :

GetEnteringObject. (Vous surprenez une conversation discrète entre deux individus suspects...)
1. (Vous les ignorez.) Fin de conversation
2. (Vous écoutez la conversation.) Action conséquente : conversation_interactive
/* conversation_interactive.nss */
// Le Joueur décide de se joindre à la conversation.
void main()
{
object oPc = GetObjectByTag ("npc_bavard_roi"); // Celui qui porte le Dial déclenché par défaut en OnConversation.
object oObjectToConverseWith = oPc;
string sDialogResRef = "conversation_interactive";

// Déclenchement du Dialogue interactif "conversation_interactive".
ActionStartConversation(oObjectToConverseWith, sDialogResRef);
}
3. (Vous écoutez la conversation.) Action conséquente : conversation_dynamique
/* conversation_dynamique.nss */
// Le Joueur décide d'écouter discrètement les deux individus suspects...
void main()
{
object oNpc1 = GetObjectByTag("individu_suspect1");
object oNpc2 = GetObjectByTag("individu_suspect2");

ClearAllActions();

// Mise en route des "Répliques" des deux individus suspects.
DelayCommand(3.0, AssignCommand(oNpc1, ActionSpeakString ("Salut !")));
DelayCommand(6.0, AssignCommand(oNpc2, ActionSpeakString ("Ca va ?")));
DelayCommand(9.0, AssignCommand(oNpc1, ActionSpeakString ("Ouai merci ! Et toi ?")));
DelayCommand(12.0, AssignCommand(oNpc2, ActionSpeakString ("Bof ! Plutôt moyen aujourd'hui.")));
DelayCommand(15.0, AssignCommand(oNpc1, ActionSpeakString ("Ha, demain ça ira mieux ! T'as ce qu'il me faut ?")));
DelayCommand(18.0, AssignCommand(oNpc2, ActionSpeakString ("Ouai, j'ai bien lavé tes chaussettes. Mais chut !")));
}
^^


Voilà, voilà... Et l'on peut même envisager aussi de rajouter des tests d'Ecoute et/ou de Discrétion
pour rendre le truc un peu plus corsé et un peu plus stimulant... :ange:



---------------
*LDVEH : Livre Dont Vous Etes le Héros...
---------------

JOL Archives 1.0.1
@ JOL / JeuxOnLine