[Script] llListen et listen avec plusieurs channels

Répondre
Partager Rechercher
bonjour à tous -)

je réquisitionne une fois de plus votre aide j'ai tourné et retourné dans tous les sens le wiki du lsl je n'arrive pas au même résultat. mon problème est très simple

dans mon state_entry je fais ceci
Code:
integer CHANNEL_DIALOG = 1000;
integer CHANNEL_SUBDIALOG = 1002;
{
llListen(CHANNEL_DIALOG, "", llGetOwner(), "");
llListen(CHANNEL_SUBDIALOG, "", llGetOwner(), "");
llListen(0, "", llGetOwner(), "");
}

je dois en effet écouter le channel dialog lorsque j'affiche un dialog à l'utilisateur et le channel 0 car il peut taper des commandes pour diriger mon objet.

ensuite il y a mon event

Code:
 listen(integer channel, string name, key id, string message)
{ 
 
if (channel == CHANNEL_DIALOG)
{
// analyse du retour
}
 
if (channel == CHANNEL_SUBDIALOG)
{
// analyse du retour
}
 
if (channel == 0)
{
// analyse de la commande
}
 
llOwnerSay((string)channel + "#" + (string)message);
}
Et la surprise, le llOwnerSay me retourne toujours le CHANNEL_SUBDIALOG ! Même si j'ai tapé un mot dans le chat (0) il me retourne bien ce mot dans message, mais channel correspond toujours au CHANNEL_SUBDIALOG.

Est-ce que je fais qqch de faux ??? J'ai regardé les nombreux exemple pour écouter plusieurs channel à la fois et il me semble que je ne l'utilise pas faux. J'ai essayé de jouer un peu avec llListenControl en activant le bon channel au bon moment mais rien n'y fait, ça ne fonctionne pas!
Pour faire de la simple communication sur un channel ça fonctionne très bien mais dès que je dois faire des boîtes de dialogues avec sous-menu etc. je me retrouve dans ce genre de cas :/

Si qqn peut m'aider ça serait vraiment génial, et peut-être que ça en débloquera d'autres.

P.s. s'il y a des erreurs de syntaxe inutile de les préciser c'est un code d'exemple pour montrer juste ce que je fais.

Merci de m'avoir lu
je me permet d'insister désolé du dérangement mais personne ne rencontre de conflits à l'utilisation de ces fonctions ?

je n'ai bientôt plus de cheveux et je comprends maintenant le choix de coupe de Nibb -))

non mais sans rire, ça fonctionne chez vous les scripts multicanaux ?
laisse moi le temps de regarder

normalement, si tu fermes correctement les llListen après usage, et que tu passes pas ton temps à en ouvrir, bref que tu restes en dessous des 64 lListen() simultanées, ça marche, donc je regarde ce code là, et je reviens
bon, une fois tes 2 bouts de codes complétés et assemblés, ça donne le programme suivant:
Code:
integer CHANNEL_DIALOG = 1000;
integer CHANNEL_SUBDIALOG = 1002;

default {
    state_entry() {
        llListen(CHANNEL_DIALOG, "", llGetOwner(), "");
        llListen(CHANNEL_SUBDIALOG, "", llGetOwner(), "");
        llListen(0, "", llGetOwner(), ""); }

    listen(integer channel, string name, key id, string message) { 
        if (channel == CHANNEL_DIALOG) {
            // analyse du retour
            llOwnerSay("dialogue"); }
        else if (channel == CHANNEL_SUBDIALOG) {
            // analyse du retour
            llOwnerSay("sub-dialogue"); }
        else if (channel == 0) {
            // analyse de la commande
            llOwnerSay("general"); } 
        llOwnerSay((string)channel + "#" + (string)message); } }
Qui fonctionne parfaitement.

J'ai mis des 'else' histoire d'accélérer le traitement du code.
Donc je ne sais pas ce que tu as mis dans le code initial, mais j'aurais tendance à penser que tu as channel = CHANNEL_SUBDIALOG dedans.
Citation :
Publié par master71
laisse moi le temps de regarder

normalement, si tu fermes correctement les llListen après usage, et que tu passes pas ton temps à en ouvrir, bref que tu restes en dessous des 64 lListen() simultanées, ça marche, donc je regarde ce code là, et je reviens
avec mon script j'en ai maximum 3
je viens d'aller vérifier pour la variable channel mais elle n'est pas déclarée globalement

je comprends pas pourquoi quand je parle sur le 0 !

merci déjà pour ton aide maître!
Bonjour,

Je me permet de récupérer cette discussion pour demander si il est possible de lire le message de 2 CHANNELS en mm tps ?

Je m'explique : J'aimerais récupérer 2 parties de messages pour les réunir dans un llSetText...

Code PHP:

llSetText(message du canal X message du canal Y
Quelqu'un pourrait-il m'aider ?

Merci d'avance...

Ghis.
Merci Nibb pour ta réponse.

Donc si dans ma ligne de commande j'écrit :
Code PHP:

llSetText("Texte" llListen(Y""""message) + "Texte"), <1.01.01.0>, 1.0); 

Cela devrait marcher...

J'essais ça ce soir...(Corrigez moi si je me trompe)

Ghis.
C'est pas du tout comme ça que ça marche.

La fonction llListen se place dans un evenement state_entry ou on_rez, au début de l'execution du script. Ca veut dire "on va écouter tout ce qui se dit et si ça correspond aux critères, on le fait passer à l'evenement listen". Les critères sont: le canal, la clé, le nom, et une chaine. Voir www.lslwiki.net pour les détails.

Ensuite, c'est l'evenement listen qui va récupérer le contenu du chat et executer l'action que tu veux faire, un llSetText en l'occurence.

par exemple:
Code:
string texte1;
string texte2;

default {

    

    state_entry() {

        // Ici, on declare les llListen
        llListen(1, "", NULL_KEY, "");
        llListen(2, "", NULL_KEY, "");
    }
    
    listen(integer channel, string name, key id, string message) { 

        //Ici, on recupere tout ce qui correspond aux criteres des llListen
        if (channel==1) texte1 = name;
        if (channel==2) texte2 = name;

        llSetText(texte1 + " " +texte2,<1,1,1>, 1);
       
    }
}
Répondre

Connectés sur ce fil

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