Besoin d'aide sur les pattern

Répondre
Partager Rechercher
Bonjour tous !
J'ai lu le sujet d'explication sur les patterns, (très bien fait), mais je n'ai pas trouvé ce que je cherchais.

J'aimerais, dans une conversation avec un PNJ, que l'on tape un message dans le canal "parler", et que je puisse récuperer dans un script ce message sous forme de chaine de caractères (un peu comme un sujet avait été fait sur une histoire d'enigmes), c'est juste pour pouvoir réutiliser cette "string" après (et donc la stocker dans une variable).

J'espere que la chose est possible. Merci d'avance.
Et comment que c'est possible !

De mémoire, d'autres me corrigeront si j'oublie quelque chose. Les étapes sont :

- permettre à son PNJ d'entendre et de retenir certains types de caractères. Pour cela, dans le script OnSpawn du PNJ, on place :

Code PHP:

SetListenPattern(OBJECT_SELF,"**",2001); 

- permettre à son PNJ d'enregistrer les phrases qu'il entend. Pour cela, dans le script OnConversation du PNJ, on place également un petit :

Code PHP:

if (GetListenPatternNumber()==2001)
{
string nMot=GetMatchedSubstring(0);
SetLocalString(OBJECT_SELF,"mot",nMot);

Voici pour la base. Note qu'avec ce système, ton PNJ va enregistrer toutes les phrases qu'il entend, la dernière écrasant la précédente. Mais la base est là. Grâce au sujet sur les pattern expliquant bien le principe des filtres me semble-t-il, tu peux trier le type de phrase que tu souhaites enregistrer en modifiant les "**".
Oh super ! c'est exactement ce que je cherchais !
En réalité je veux juste qu'il enregistre des nombres (c'est pour un systeme de Loto, ou l'on entrerai les chiffres que l'on joue...)
Encore merci.
Nouveau problème.
Bon j'ai largement avancé là dessus. Je parviens à récuperer la chaine de caractères entrés par le joueur.

cependant, j'aimerai qu'elle apparaisse dans un dialogue, pas un SpeakTokStr ou autre ActionSpeakString, qui place le texte au dessus du perso en question (pas de fenetre qui s'ouvre).

J'ai plus où moins réussi à obtenir ce que je voulais grâce aux Custom Tokens (Merci pour la bibliothèque la dessus, super vraiment), mais je trouve cela trop fastidieux. Je voulais donc savoir s'il existait un moyen de caser une "string" dans une conversation avec un PJ sans utiliser de Custom Token.

Merci d'avance.
__________________
marion.
Non, je crois bien que c'est l'unique moyen d'insérer des chaînes de caractères qui ne soient pas toujours les mêmes.
Cela dit si tu utilise un seul custom token pour toute la réplique, ça permet de rendre les choses moins fastidieuses. C'était le conseil à deux balles du jour
J'ai un Custom token pour la chaine entiere (jy avais pensé aussi ).

Le seul problème que je rencontre (il est minime) est qu'en fait j'entre une chaine de caractères, pendant une conversation, stockée dans une variable locale, et dans un custom token.

Et je cherche à ce que la réplique suivante du PNJ contienne ce que j'ai dit. Je n'y suis pas parvenue, sauf si je quitte la conversation et que je la reprend. Je posterai le script ou je bloque ce soir.
je suis pas sur de bien comprend ce que tu veux, mais.... un SetCustomToken dans l'initialisation de la conversation (genre lors du teste d'affichage de la phrase) devrait te permettre de modifier dynamiquement n'importe quel Custom Token.

Sans vouloir faire de la pub pour mes productions, si tu veux des exemples concrès d'utilisation de CustomToken (sans la bibliothèque de jedai, et sans les patterns, tu peux aller faire un tour du coté des sources du DiaSe, qui repose sur un système dynamique de CustomTokens

bon courage !
J'explique mon but :
Je veux faire un jeu de Loterie, un peu comme le loto, ou le PJ entrerai ses chiffres lors d'une conversation avec un PNJ. Ensuite je veux que le PNJ lui réponde Lesquels il vient de jouer, pour confirmer, et il pourrai les lui redonner à nimporte quel moment.

Dans le OnSpawn du PNJ j'ai mis :

Code PHP:

SetListenPattern(OBJECT_SELF"*n,*n,*n,*n,*n"2003); 

Cela implique qu'on doive entrer les numéros séparés par des virgules, sans espaces (plus simple pour gerer les substring apres.)

Dans le OnConversation de ce PNJ :

Code PHP:

if (GetListenPatternNumber() == 2003)
    {
    
string s01 GetMatchedSubstring(0); // 1er nombre
    
string s02 GetMatchedSubstring(2); // 2eme nombre
    
string s03 GetMatchedSubstring(4); // 3eme nombre
    
string s04 GetMatchedSubstring(6); // 4eme nombre
    
string s05 GetMatchedSubstring(8); // 5eme nombre

    // les cinq nombres joues
    
string s10 s01 ", " s02 ", " s03 ", " s04 " et " s05;

    
object oModule GetModule();
    
object oPC GetPCSpeaker();
    
SetLocalInt(oPC"jeu_loto"10); // Le PJ verifie s'il a joue

    // Variable Locale contenant les numeros joues
    
SetLocalString(oModule"nums"s10);

    
// Custom Token pour la conversation
    
AddCustomToken(202"{modstring(nums:}");
    } 
La variable "loto joue" est juste la pour permettre au PNJ de verifié si on a effectivement joué, et donc pour nous repeter les nombres.

La phrase suivante du dialogue est "Vous avez joué <CUSTOM202>" ou quelque chose d'approchant. cependant comme je disais mon problèeme est qu'il ne l'affiche pas la premiere fois que l'on joue, et à chaque fois il retourne les nombres que l'on a joué lors de la derniere conversation (pas ceux que l'on vient d'écrire).

J'éspère avoir été assez claire. Azrael, je vais jeter un coup d'oeil, ça m'a l'air pas mal ton truc.
erf, alors serais-ce pasque les CustomTokens s'initialisent avant la lancée du script OnConversation ?

il ne me semble pas avoir remarqué ce genre de chose, mais peut être après tout.

Essaye de faire ca dans un script a part, et de lancer le script de conversation par un ExecuteScript, on sait jamais...
Répondre

Connectés sur ce fil

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