bah c'est normal, un llListen() dure tant que tu ne l'arrêtes pas.
Sur ton premier script, tu réinitialisais dès qu'une phrase était tapée, donc pas de soucis, le llListen() était détruit à ce moment là.
Là tu ne peux pas réinitialiser le script, et donc à chaque touch, tu crées un nouveau llListen(), mais tous ceux que tu as fais avant restent
Donc c'est pas propre du tout comme programmation, à la fin de ton événement listen() tu dois retirer ton llListen(), pour cela tu dois stocker le handler retourné par llListen(), et utiliser llListenRemove().
Ou alors utiliser les états pour structurer ton programme, ça t'évite de devoir gérer les handlers des llListen(), puisque le changement d'état détruit les llListen() liés à cet état.
ça t'évite aussi un script qui sait plus où il en est si tu cliques quand il attend un message d'un des utilisateurs (dans ce cas, tu as le message de l'un, avec le pseudo de l'autre, voire encore plus embrouillé)
Les return ne servent à rien si ta programmation est propre. Je te suggère le script suivant, un peu amélioré au niveau fonctionnalités, je te laisse le débugguer complètement, j'ai qu'un seul avatar et je peux pas tout tester
string nomDetect;
list records;
integer index;
integer len;
default {
state_entry() {
records = [];
state attente; }
on_rez (integer num) {
llResetScript(); } }
state attente {
state_entry() {
llSetText("Please click-me to leave a message! \n Merci de me cliquer pour laisser un message!", <0.0,0.8,0.0>, 1.0); }
touch_start(integer num_detected) {
nomDetect = llDetectedName(0);
if (nomDetect == llGetOwner()) state consultation;
else state record; }
on_rez (integer num) {
llResetScript(); } }
state consultation {
state_entry() {
llSetText("consultation.", <1,0.0,0.0>, 1.0);
index = 0;
len = llGetListLength( records );
if (len == 0) {
llOwnerSay("Pas de message.");
state attente; }
llOwnerSay("Bienvenu sur le repondeur, les commandes sont:");
llOwnerSay("p: message precedent.");
llOwnerSay("N: message suivant.");
llOwnerSay("L: lecture message courant.");
llOwnerSay("D: suppression message courant");
llOwnerSay("F: fin consultation.");
llOwnerSay("H: aide.");
llOwnerSay("C: suppression de tous les messages.");
llListen(0, "", llGetOwner(), ""); }
listen( integer channel, string name, key id, string message ) {
if( message == "H" ){
llOwnerSay("Bienvenu sur le repondeur, les commandes sont:");
llOwnerSay("p: message precedent.");
llOwnerSay("N: message suivant.");
llOwnerSay("L: lecture message courant.");
llOwnerSay("D: suppression message courant");
llOwnerSay("F: fin consultation.");
llOwnerSay("H: aide.");
llOwnerSay("C: suppression de tous les messages."); }
else if( message == "P" ) {
if (index > 0) index--;
llOwnerSay("message n:" + (string)index + ": ");
llOwnerSay(llList2String(records, index) ); }
else if( message == "L" ) {
llOwnerSay("message n:" + (string)index + ": ");
llOwnerSay(llList2String(records, index) ); }
else if( message == "N" ) {
llOwnerSay("message n:" + (string)index + ": ");
llOwnerSay(llList2String(records, index) );
if (index < len - 1) index++; }
else if( message == "D" ) {
records = llDeleteSubList(records, index, index);
len = llGetListLength( records );
if (len == 0) {
llOwnerSay("Plus de message.");
state attente; }
if (index > 0) index--; }
else if( message == "F" )
state attente;
else if( message == "C" ){
records = [];
llOwnerSay("Le repondeur est efface!"); } }
on_rez (integer num) {
llResetScript(); } }
state record {
state_entry() {
llSetText("Recording.", <1,0.0,0.0>, 1.0);
llWhisper(0, nomDetect + " : Please leave a one line message / Merci de laisser un message d'une ligne.");
llWhisper(0, "You have only 30s / vous n'avez que 30s.");
llListen(0, "", llDetectedKey(0), "");
llSetTimerEvent(30); }
timer () {
llWhisper(0, nomDetect + " Out of time / depassement duree.");
state attente; }
listen( integer channel, string name, key id, string message ) {
llSetTimerEvent(0);
llInstantMessage(llGetOwner(), nomDetect + " : " + message);
string temp = llGetTimestamp();
temp = llGetSubString(temp, 0, 9) + "," + llGetSubString(temp, 11, 15);
temp += " " + nomDetect + " : " + message;
records = (records=[]) + records + [temp];
llWhisper(0, nomDetect + " : bip. your message is recorded / votre message est enregistre.");
state attente; }
on_rez (integer num) {
llResetScript(); } }