Comment récupérer ce que dit le joueur depuis un script ?

Répondre
Partager Rechercher
Bonjour,

j'aimerais récupérer par script ce que dit un joueur, récupérer la "string".
C'est pour provoquer un évènement seulement si le joueur tape le bon message.
Comment je m'y prends ? car j'ai pas trouvé cette fonction dans l'éditeur.

Pour t'expliquer le principe rapidement, il faut :

- Activer la fonction d'écoute dans l'évènement "OnSpawn" de la créature, et définir quelles seront les phrases à "écouter".

- Gérer les actions à effectuer dans le "OnConversation" de la créature selon les phrases "entendues".


Dans le "OnSpawn", il devrait y avoir une ligne genre "SetListening(TRUE);" déjà active, vu que les créatures par défaut réagissent entre elles à certaines phrases "silencieuses". Il faudra rajouter "SetListenPattern()" pour ajouter des phrases à reconnaître en leur donnant un numéro d'identification.

Pour le "OnConversation", il faudra récupérer le numéro d'identification de la phrase avec "GetListenPatternNumber()", afin d'accomplir l'action voulue.

Exemple :
Code PHP:

// Partie dans le "OnSpawn" de la créature.
 // Ce n'est pas un script complet, c'est juste à
 // inclure dans un script déjà existant.

 // Pour la partie en dessous, je vais faire écouter
 // le mot "bonjour". Je lui donne un numéro d'identification,
 // par exemple 1000.
 
SetListenPattern(OBJECT_SELF,"bonjour",1000);
 
SetListening(OBJECT_SELF,TRUE); // normalement cette ligne existe déjà. 
Code PHP:

// Partie dans le "OnConversation" de la créature.
 // Ce n'est pas un script complêt, c'est juste à
 // inclure dans un script déjà existant.

 // Sachant qu'avec SetListening, la créature analysera
 // CHAQUE phrase dite, on regarde si elle correspond
 // au numéro d'identification enregistré grace à la
 // commande GetListenPatternNumber();
 
int nNumber GetListenPatternNumber();
 
// Et si la phrase et le numéro correspondent...
 
if(nNumber == 1000)
 {
     
// ...on fait agir la créature :
     
SpeakString("Bonjour !");

     
// Grace à "GetLastSpeaker()", on peut éventuellement
     // savoir qui a prononcé la dernière phrase entendue...
     
object oSpeaker GetLastSpeaker();

     
// ...et agir avec lui au besoin :
     
FloatingTextStringOnCreature("La créature vous a entendu.",oSpeaker,FALSE); // ça c'est pour vérifier si ça marche, juste.
 

C'était la méthode la plus simple. Car la créature réagira à n'importe quelle phrase contenant le mot "bonjour", peu importe les majuscules et les minuscules.

Pour se permettre une analyse plus poussée, il faudra décortiquer la phrase un peu plus. Pour ce faire, on détourne la fonction "SetListenPattern();" du "OnSpawn", pour pouvoir traiter une phrase complète dans le "OnConversation".

Exemple :
Code PHP:

// La partie dans le "OnSpawn" de la créature.
 // se transforme donc en ça :

 
SetListenPattern(OBJECT_SELF,"**",1000);
 
SetListening(OBJECT_SELF,TRUE); 
Code PHP:

// Dans le "OnConversation", on va modifier quelques
 // éléments :

 // Le début reste le même :
 
int nNumber GetListenPatternNumber();
 
// On garde également la condition, même si toutes les
 // phrases seront reçues.
 
if(nNumber == 1000)
 {
     
// La commande ci dessous nous permet de prendre la
     // phrase sous sa forme "string".
     
string sPhrase GetMatchedSubstring(0);

     
// C'est là que ça se corse un peu :
     // Nous allons analyser la phrase complète à la recherche
     // du mot "bonjour". L'avantage/inconvénient est que l'on
     // doit convertir nous-même les caractères majuscules en
     // minuscule, et vice-versa. Par exemple pour faire un mot
     // passe vraiment tordu, où le joueur devra faire attention
     // aux majuscules/minuscules, il faudra passer par là.

     // Là je crée une variable pour nous permettre de faire une
     // "boucle d'analyse" (cherchez pas, j'ai pris ce terme au hasard)
     
int n;
     
// Ensuite, je récupère la longueur de la phrase.
     
int nLength GetStringLength(sPhrase);
     
// Et je démarre ma boucle, à la recherche du mot "bonjour",
     // grace à la fonction "GetSubString(...)".
     
while(nLength)
     {
         
// En décortiquant la fonction d'en dessous :
         // La fonction "GetLowerCase()" permet de convertir
         // les caractères en minuscules. Ceci nous servira dans
         // le cas où on ne veut pas faire la différence entre
         // majuscules et minuscules.
         // La fonction "GetSubString()" nous permet de récupérer
         // un morceau de sPhrase, à partir de la position "n",
         // sur 7 caractères (la même taille que le mot "bonjour").
         // Et si tout correspond...
         
if(GetLowerCase(GetSubString(sPhrase,n,7)) == "bonjour";
         {
             
// Je stoppe la boucle
             
break;
         }
         
// sinon on augmente n de 1, et on laisse la boucle
         // continuer sa recherche.
         
n++;
     }

     
// Là on arrive au stade où on va vérifier si le mot "bonjour" a
     // bien été trouvé, en comparant simplement "n" à "nLength".
     // Si "n" est inférieur à "nLength", c'est que le mot "bonjour" a
     // été détecté, et que la boucle a été stoppée.
     // On me dira "mais tu vérifies deux fois la même chose", que
     // je pourrais incorporer les actions dans la boucle, mais c'est
     // un choix personnel.
     
if(nLength)
     {
         
// On peut donc faire agir notre créature en fonction
         // de nos besoins, comme pour la méthode précédente...
         
SpeakString("Bonjour !");

         
// ...et également repèrer la dernière personne a avoir parlé...
         
object oSpeaker GetLastSpeaker();
         
// ...et agir avec elle au besoin :
         
FloatingTextStringOnCreature("La créature vous a entendu.",oSpeaker,FALSE);
     }
 } 
Si la deuxième méthode n'est pas vraiment nécessaire pour un simple mot de passe, elle est beaucoup plus attractive pour un système de langage, par exemple. Car à l'exception des messages privés ou des messages systèmes, une créature en mode "écoute" entend les canaux MD, parler, crier, murmurer (canal groupe à vérifier).

Il faut voir à faire un minimum dans la précaution, et ne pas mettre côte à côte deux PNJ programmés pour prononcer la même phrase que celle qu'ils écoutent. Genre deux PNJ répondant "bonjour" à un autre "bonjour". Ils se répondraient constamment en boucle, voire un PNJ seul qui se répond à lui même ! ^^

Ah aussi, dans ce genre d'utilisation, les guillemets sont à proscrire. Il vaut mieux mettre deux apostrophes à la suite pour simuler les guillemets.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés