La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 17:48:47


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 28/04/2003 14:25:27 Sujet du message : Récupérer des phrases de PJs à la volée

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 Confused Confused
_________________
Atha, Artisan Scripteur.
meet the most beautiful woman in the world
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 28/04/2003 19:23:01 Sujet du message :

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 Smile
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 02/05/2003 12:32:52 Sujet du message : Une solution possible

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 Mr. Green
_________________
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 Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
Wololo
Légende vivante
Inscrit le: 13 Déc 2002
Messages: 385
Répondre en citant
Posté le : 02/05/2003 18:14:59 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 06/05/2003 10:36:55 Sujet du message :

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 Surprised
_________________
Atha, Artisan Scripteur.
meet the most beautiful woman in the world
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger 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 28.243ms