La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 15:15:40
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Athanor salamander Légende vivante Messages: 306 Localisation: Ecole du Script |
Voilà, j'aimerais créer un PNJ qui puisse, sans que le PJ n'entame de discussion avec lui, récupérer et stocker une phrase dite pas ce PJ. Un peu comme le scribe qui note les commentaires des PJs.
Déjà, je sais même pas comment marche le script du scribe mais en plus apparemment, il faut entammer une discussion. Moi je souhaite mettre le script sur un onperceived. Merci de me répondre _________________ Atha, Artisan Scripteur. meet the most beautiful woman in the world |
Revenir en haut | |
Taern Ecuyer Messages: 45 Localisation: 92 |
Le seul moyen de récupérer le texte prononcé par un joueur (comme par n'importe quelle autre créature), c'est l'évenement OnConversation des PNJs.
Cet évenement se déclenche dès que le PNJ entend des paroles, même dites dans le vide, et odnc pas forcément lorsqu'il y a dialogue à proprement parler. Ensuite, dans le script associé à cet évenement, tu peux tranquillement récupérer la phrase dite par le PJ |
Revenir en haut | |
lendraste Grand Maître Chanteur du Conseil Messages: 1403 Localisation: Quelque part ailleurs |
Tout d'abord, quand tu créés ton PNJ tu dois le préparer à recevoir les phrases en question. Mets ceci sur le OnSpawn
Code : void main() { SetListening(OBJECT_SELF, TRUE); SetListenPattern(OBJECT_SELF, "**", 2000); //Le choix de 2000 est purement arbitraire. } Ensuite, à chaque fois qu'une phrase sera prononcée dans le champ de perception du personnage, cela déclenchera le OnConversation. Pour capter les phrase et les stocker voici ce que je te propose en tenant compte du fait que tu ne souhaite enregistrer que les phrases d'un PJ. Code : void main() { int nMatch = GetListenPatternNumber(); if ((nMatch == 2000) && (GetIsPC(GetLastSpeaker())) { string sListen=GetMatchedSubstring(0); int nMaxStore=GetLocalInt(OBJECT_SELF, "MAXLISTEN"); nMaxStore++; SetLocalString(OBJECT_SELF, "LISTEN" + IntToString(nMaxStore), sListen); SetLocalInt(OBJECT_SELF, "MAXLISTEN", nMaxStore); } } Après je ne sais pas ce que tu comptes en faire, car si il enregistre tout ainsi, tu vas finir par faire péter la mémoire. Pour exploiter les phrases enregistrées du PNJ je te propose les fonctions suivantes : Code : int GetNPCCountRecordedListen(object oNPC) //renvoie le nombre de chaine enregistré par le NPC { if (GetIsObjectValid(oNPC)) { return GetLocalInt(oNPC, "MAXLISTEN"); //retourne 0 s'il n'a pas enregistré de chaine, même s'il n'est pas un NPC enregistreur. } else { return -1; //valeur si le NPC n'existe pas } } string GetNPCRecordedListen(object oNPC, int nNumber) //renvoie la nNumber phrase enregistrée par le NPC { if (GetIsObjectValid(oNPC)) { if ((nNumber>0) && (nNumber<=GetLocalInt(oNPC, "MAXLISTEN"))) { return (GetLocalString(oNPC, "LISTEN" + IntToString(nNumber)); } else { return ""; //retourne une chaine vide si l'indice est en dehors de la plage de chaine enregistrée, ou si le NPC n'a pas enregistré de phrase. } } else { return ""; //retourne une chaine vide si le NPC n'est pas valide } } void SetNPCEmpty(object oNPC) //vide la liste de phrase enregistrée par le NPC { if (GetIsObjectValid(oNPC)) { int nCount=GetLocalInt(oNPC, "MAXLISTEN"); while (nCount>0) { DeleteLocalString(oNPC, "LISTEN" + IntToString(nCount)); nCount--; } SetLocalInt(oNPC, "MAXLISTEN", 0); } } Si jamais tu peux préciser ta question par la suite, peut-être que je pourrais t'éclairer sur la manière de travailler avec ces fonctions là. En passant, je précise que je n'ai pas tester la syntaxe, donc j'espère qu'il n'y a pas d'erreur. J'ai pu malgré tout commettre des erreurs, mais j'ai utilisé ce genre de techniques plus d'une fois, donc ca doit le faire, comme on dit _________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | |
Wololo Légende vivante Messages: 385 |
hmm, va voir http://www.hellfire.firstream.net/phpBB2/viewtopic.php?t=3787
ok, c'est sur un autre forum et Baldurien va sans doute me taper sur les doigts (aie), mais en fait y a des explications et ca renvoit sur encore un autre forum (Lendraste tu n'es pas sensé être en vacances ?) |
Revenir en haut | |
Athanor salamander Légende vivante Messages: 306 Localisation: Ecole du Script |
Merci pour toutes ces infos.
Bon perso, en attendant, j'ai trouvé ça et apparemment ça marche bien : sur le onspawn : Code : void main() { SetListenPattern(OBJECT_SELF, "**", 300); SetListening(OBJECT_SELF, TRUE); } sur le onconversation : Code : void main() { int nMatch = GetListenPatternNumber(); object oPC = GetLastSpeaker(); string motdepasse = "j'élève les autruches"; object oReceptacleEclair; if (nMatch == -1 && GetCommandable(OBJECT_SELF)) { ClearAllActions(); BeginConversation(); } else if(nMatch == 300 && GetIsObjectValid(oPC) && GetIsPC(oPC)) { if (motdepasse == GetMatchedSubstring(0)) { AssignCommand(GetObjectByTag("statueacheron"), SpeakString("aaaaah ??")); DelayCommand(1.0f, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING, 1.0, 1.0))); DelayCommand(2.0f, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHING, 1.0, 1.0))); DelayCommand(3.0f, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2, 1.0, 1.0))); int i; string sReceptacleEclair; for (i=0;i<5;i++) { sReceptacleEclair = "porte_ac_eclair" + IntToString(i); DelayCommand(4.0f + i, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), GetLocation(GetObjectByTag(sReceptacleEclair)))); } DelayCommand(8.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_DISPEL_DISJUNCTION), oPC, 1.0f)); ActionWait(0.5f); location portes = GetLocation(GetObjectByTag("retourlandessanglantes")); DelayCommand(9.0f, AssignCommand(oPC, ActionJumpToLocation(portes))); } } } Bon en fait je souhaitais juste faire un monstre qui permettait à tout joueur disant le mot de passe, ici : j'élève les autruches, de se téléporter dans une zone secrète. PS : je mets pas de commentaires, je sais j'ai tord _________________ Atha, Artisan Scripteur. meet the most beautiful woman in the world |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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