[Aide] Affichage via notecard !

Répondre
Partager Rechercher
Bonsoir,
J'ai un petit problème : j'ai un objet qui affiche un menu pour afficher un texte au dessus d'un autre objet (non lié) ! Sur le premier objet on rentre dans une notecard le texte que l'on veut et en cliquant sur choix 1 ça doit l'enregistrer pour que lorsqu'on clique sur "Show Text" on est le texte personnalisé et là je sais pas comment faire ! Voici les 2 scripts qui se compile et fonctionne presque comme il faut !
1er objet :
Code PHP:

key owner;
key user;
integer ecoute;
integer delai 60;
integer canal// < plus de canal defini
list menu_pincipal= ["Show text","Hide text","Couleurs Texte","Choix1","Choix2"];      // /
string Option_Hide "Hide text";
string Option_Show "Show text";
string Option_Color "Couleurs Texte";
list 
lColorMenu = ["*Banane*","*Blanc*","*Bleu*","*Jaune*","*Noir*","*Rouge*","*Rose*","*Vert*","*Violet*","*Fuchsia*"];
list 
lVectorColor = [<0.890,0.812,0.341>,<1.000,1.000,1.000>,<0.0,0.0,1.0>,<1.000,1.000,0.000>,<0.000,0.000,0.000>,<1.0,0.0,0.0>,<1.000,0.753,0.796>,<0.000,0.502,0.000>,<0.561,0.369,0.600>,<1.000,0.000,0.667>];
vector vColor = <1.0,1.0,1.0>;
string sMessage;

list 
lMaList;
key kReq;
integer iLine;
string sNote;

init()    {
    
vidage();
    
//je trouve le nom de la 1ere (zeroième) notecard du contenu de l'objet
    
sNote llGetInventoryName(INVENTORY_NOTECARD,0);
    
llOwnerSay("ready");
}
vidage()    {
    
iLine 0;
    
lMaList = [];
}

lecture()    {
    
kReq llGetNotecardLine(sNoteiLine++);
}


default
{
    
state_entry()
    {
        
init();
        
canal = (integer)llFrand(10000000)-10000000// canal dynamique pour éviter la communication entre un meme prim identique
         
llSetText (sMessagevColor1.0) ;
        
menu_pincipal=[Option_Show]+["Choix1","Choix2"];
    }
    
touch_start(integer total_number)
    {
        
        
user llDetectedKey(0);
        
ecoute llListen(canal""user""); // plus de NULL_KEY , on cible l'user. Limitation du lag au moment de l ecoute
        
if (user == llGetOwner())
        {
            
llDialog(llDetectedKey(0), "Choisissez une option"menu_pincipalcanal); // on precise les menus "menu_pincipal"
            
llSetTimerEvent(delai);
        }
    }
    
listen(integer channelstring namekey idstring message)
    {
         if (
message == "Couleurs Texte"
        {
            
llDialog(id"Choisissez une Couleur"lColorMenucanal);
        }
        else if(
message == "*Banane*")
        {
            
llSay(110,"*Banane*");
        }
         else if(
message == "*Blanc*")
        {
            
llSay(110,"*Blanc*");
        }
        else if(
message == "*Bleu*")
        {
            
llSay(110,"*Bleu*");
        }
        else if(
message == "*Jaune*")
        {
            
llSay(110,"*Jaune*");
        }
        else if(
message == "*Noir*")
        {
            
llSay(110,"*Noir*");
        }
        else if(
message == "*Rouge*")
        {
            
llSay(110,"*Rouge*");
        }
        else if(
message == "*Rose*")
        {
            
llSay(110,"*Rose*");
        }
        else if(
message == "*Vert*")
        {
            
llSay(110,"*Vert*");
        }
        else if(
message == "*Violet*")
        {
            
llSay(110,"*Violet*");
        }
        else if(
message == "*Fuchsia*")
        {
            
llSay(110,"*Fuchsia*");
        }
       
        else if(
message == "Show text")
        {
            
llSay(110,"Show text");
            
menu_pincipal=[Option_Hide]+[Option_Color]+["Choix1","Choix2"];
        }
        else if(
message == "Hide text")
        {
            
llSay(110,"Hide text");
            
menu_pincipal=[Option_Show]+["Choix1","Choix2"];
        } 
        else if(
message == "Choix1")
        {
         
vidage();
        if (
sNote != ""// y'a-t-il bien une carte a lire
            
lecture();
        else 
llSay(0"Merci de me donner une notecard à lire");  
        }
        else if (
message == "Choix2")
        {
            
llSay (0"Autre bon choix");
        }
    }
         
dataserver(key idstring data)
    {
//passons au choses serieuses
        
if (id == kReq)    { // juste pour etre sur que dataserver répond bien a ma question et non a une autre
            
if (data != EOF) {// rappel : EOF pour End Of Files

                
data llStringTrim(dataSTRING_TRIM); // efface les espaces parasites en début et fin de ligne
                
string initial llGetSubString(data0,0); // quel est le premier caractère

                
if ((initial != "") && (initial != "#"))    {
                    
//initial != "" permet de pas mettre de lignes vide ds la list
                    // initial != "#" une ligne de la notecard commençant par # sera considérer comme commentaire
                    // et donc pas mémorisée. (facultatif)

                    
lMaList += [data]; // mémorisation dans la liste
                
}
                
lecture(); // ligne suivante
            
}
            else { 
// on est en EOF (toute la carte a été lue
                // reste plus qu'a utiliser la carte
                // ici par un simple llSay
                
llSay(0"Le contenu de la carte est : \n" llDumpList2String(lMaList"\n"));
            }
        }
    }

    
timer()
    {
        
llSetTimerEvent(0.0);
        
llListenRemove(ecoute);
    }
    
changed(integer chang// lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
    
{
        if(
chang CHANGED_OWNER)
        {
            
llResetScript();
        }
    }
    
attach(key id)
    {
        
llResetScript();
    }
    
on_rez(integer i// lors de la pose de l objet au sol , on reset pour modifier le canal dynamique
    
{
        
llResetScript();
    }

et le second :
Code PHP:

string sMessage;
vector vColor = <1.0,1.0,1.0>;
list 
lColorMenu = ["*Banane*","*Blanc*","*Bleu*","*Jaune*","*Noir*","*Rouge*","*Rose*","*Vert*","*Violet*","*Fuchsia*"];
list 
lVectorColor = [<0.890,0.812,0.341>,<1.000,1.000,1.000>,<0.0,0.0,1.0>,<1.000,1.000,0.000>,<0.000,0.000,0.000>,<1.0,0.0,0.0>,<1.000,0.753,0.796>,<0.000,0.502,0.000>,<0.561,0.369,0.600>,<1.000,0.000,0.667>];
string sNote;

default
{
    
state_entry()
    {
        
llListen(110,"","","");
    }
    
listeninteger canalstring nomkey idstring message )
    {
        if (~
llListFindList(lColorMenu,[message]))
        {
            
integer index llListFindList(lColorMenu,[message]);
            
vColor llList2Vector(lVectorColor,index);
            
llSetText (sMessagevColor1.0) ;
        }
       else if (
message == "Show text")
        {
           
llOwnerSay("Show text");
           
sMessage "message";
           
llSetText (sMessagevColor1.0) ;
           
        }
        else if (
message == "Hide text")
        {
          
llOwnerSay("Hide text");
          
sMessage "";
          
llSetText (sMessagevColor1.0) ;
           
        }
        
    }

J'ai essayé plusieurs choses mais rien ne fonctionnaient ! J'arrive pas à faire apparaître le texte tapé dans la notecard (il s'affiche mais dans le chat et pas au dessus de l'objet)

ps : J'ai remis les scripts avec la configuration la plus cohérente !
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Un peu de mise en page,
un peu d'optimisation,
un peu de correction (gestion de l'écoute et du timer dans le 1er script),
et la modification qui doit répondre à ta demande.

Premier script :
Code:
key     user;
integer ecoute;
integer delai = 60;
integer canal; // < plus de canal defini
list    menu_principal;
string  Option_Hide  = "Hide text";
string  Option_Show  = "Show text";
string  Option_Color = "Couleurs Texte";
list    lColorMenu   = [ "*Banane*",
                         "*Blanc*",
                         "*Bleu*",
                         "*Jaune*",
                         "*Noir*",
                         "*Rouge*",
                         "*Rose*",
                         "*Vert*",
                         "*Violet*",
                         "*Fuchsia*"
                       ];
list    lVectorColor = [ <0.890, 0.812, 0.341>,
                         <1.000, 1.000, 1.000>,
                         <0.000, 0.000, 1.000>,
                         <1.000, 1.000, 0.000>,
                         <0.000, 0.000, 0.000>,
                         <1.000, 0.000, 0.000>,
                         <1.000, 0.753, 0.796>,
                         <0.000, 0.502, 0.000>,
                         <0.561, 0.369, 0.600>,
                         <1.000, 0.000, 0.667>
                       ];
vector  vColor       = <1.000, 1.000, 1.000>;

list    lMaList;
key     kReq;
integer iLine;
string  sNote;

init()
{
    vidage();
    //je trouve le nom de la 1ere (zeroième) notecard du contenu de l'objet
    sNote = llGetInventoryName( INVENTORY_NOTECARD, 0 );
    llOwnerSay( "ready" );
}

vidage()
{
    iLine   = 0;
    lMaList = [];
}

lecture()
{
    kReq = llGetNotecardLine( sNote, iLine++ );
}

default
{
    state_entry()
    {
        init();
        canal = (integer)llFrand( 10000000.0 ) - 10000000; // canal dynamique pour éviter la communication entre un meme prim identique
        llSetText( "", vColor, 1.0 ) ;
        menu_principal = [ Option_Show ] + [ "Choix1", "Choix2" ];
    }

    touch_start( integer total_number )
    {
        user = llDetectedKey( 0 );
        if( user == llGetOwner() )
        {
            ecoute = llListen( canal, "", user, "" ); // plus de NULL_KEY , on cible l'user. Limitation du lag au moment de l ecoute
            llDialog( user, "Choisissez une option", menu_principal, canal ); // on precise les menus "menu_principal"
            llSetTimerEvent( delai );
        }
    }

    listen( integer channel, string name, key id, string message )
    {
        if( message == "Couleurs Texte" )
        {
            llSetTimerEvent( 0.0 );
            llSetTimerEvent( delai );
            llDialog( id, "Choisissez une Couleur", lColorMenu, canal );
        }
        else
        {
            llSetTimerEvent( 0.0 );
            llListenRemove( ecoute );

            if( llListFindList( lColorMenu, [ message ] ) >= 0 )
            {
                llSay( 110, message );
            }
            else if( message == "Show text" )
            {
                llSay( 110, "Show text" + llDumpList2String( lMaList, "\n" ) );
                menu_principal = [ Option_Hide, Option_Color, "Choix1", "Choix2" ];
            }
            else if(message == "Hide text")
            {
                llSay( 110, "Hide text" );
                menu_principal = [ Option_Show, "Choix1", "Choix2" ];
            }
            else if( message == "Choix1" )
            {
                vidage();
                if( sNote != "" ) // y'a-t-il bien une carte a lire
                    lecture();
                else
                    llSay( 0, "Merci de me donner une notecard à lire" );
            }
            else if( message == "Choix2" )
            {
                llSay( 0, "Autre bon choix" );
            }
        }
    }

    dataserver( key id, string data )
    {//passons au choses serieuses
        if (id == kReq)    { // juste pour etre sur que dataserver répond bien a ma question et non a une autre
            if (data != EOF) {// rappel : EOF pour End Of Files

                data = llStringTrim(data, STRING_TRIM); // efface les espaces parasites en début et fin de ligne
                string initial = llGetSubString(data, 0,0); // quel est le premier caractère

                if ((initial != "") && (initial != "#"))    {
                    //initial != "" permet de pas mettre de lignes vide ds la list
                    // initial != "#" une ligne de la notecard commençant par # sera considérer comme commentaire
                    // et donc pas mémorisée. (facultatif)

                    lMaList += [data]; // mémorisation dans la liste
                }
                lecture(); // ligne suivante
            }
            else { // on est en EOF (toute la carte a été lue
                // reste plus qu'a utiliser la carte
                // ici par un simple llSay
                llSay(0, "Le contenu de la carte est : \n" + llDumpList2String(lMaList, "\n"));
            }
        }
    }

    timer()
    {
        llSetTimerEvent( 0.0 );
        llListenRemove( ecoute );
    }

    changed(integer chang) // lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
    {
        if(chang & CHANGED_OWNER)
        {
            llResetScript();
        }
    }
    attach(key id)
    {
        llResetScript();
    }
    on_rez(integer i) // lors de la pose de l objet au sol , on reset pour modifier le canal dynamique
    {
        llResetScript();
    }
}
Second script :
Code:
string  sMessage;
vector  vColor     = <1.0,1.0,1.0>;
list    lColorMenu   = [ "*Banane*",
                         "*Blanc*",
                         "*Bleu*",
                         "*Jaune*",
                         "*Noir*",
                         "*Rouge*",
                         "*Rose*",
                         "*Vert*",
                         "*Violet*",
                         "*Fuchsia*"
                       ];
list    lVectorColor = [ <0.890, 0.812, 0.341>,
                         <1.000, 1.000, 1.000>,
                         <0.000, 0.000, 1.000>,
                         <1.000, 1.000, 0.000>,
                         <0.000, 0.000, 0.000>,
                         <1.000, 0.000, 0.000>,
                         <1.000, 0.753, 0.796>,
                         <0.000, 0.502, 0.000>,
                         <0.561, 0.369, 0.600>,
                         <1.000, 0.000, 0.667>
                       ];
integer index;

default
{
    state_entry()
    {
        llListen( 110, "", "", "" );
    }

    listen( integer canal, string nom, key id, string message )
    {
        if( ( index = llListFindList( lColorMenu, [ message ] ) ) >= 0 )
        {
            vColor = llList2Vector( lVectorColor, index );
            llSetText( sMessage, vColor, 1.0 );
        }
        else if( message == "Hide text" )
        {
            llOwnerSay( "Hide text" );
            sMessage = "";
            llSetText( sMessage, vColor, 1.0 );
        }
        else if( llGetSubString( message, 0, 8 ) == "Show text" )
        {
            llOwnerSay( "Show text" );
            if( llStringLength( message ) > 9 )
                sMessage = llGetSubString( message, 9, -1 );
            else
                sMessage = "";
           llSetText( sMessage, vColor, 1.0 );
        }
    }
}
Bonjour,
Merci ça fonctionne à merveille et j'ai réussi à l'adapter à mon script par contre j'arrive pas à l'utiliser en direct ! Je l'ai mis dans un seul prim pour que celui ci se l'affiche au dessus !
Voici le script :
Code PHP:

key user;
integer vi;
integer oui;
integer on;
integer ok;
integer go;
integer ja;
integer ecoute;
integer delai 60;
integer canal// < plus de canal defini
list lColorMenu = ["*Banane*","*Blanc*","*Bleu*","*Jaune*","*Noir*","*Rouge*","*Rose*","*Vert*","*Violet*","*Fushia*"];
list 
lVectorColor = [<0.890,0.812,0.341>,<1.000,1.000,1.000>,<0.0,0.0,1.0>,<1.000,1.000,0.000>,<0.000,0.000,0.000>,<1.0,0.0,0.0>,<1.000,0.753,0.796>,<0.000,0.502,0.000>,<0.561,0.369,0.600>,<1.000,0.000,0.667>];
list 
menu0= ["Banane","Blanc","Bleu","Jaune","Noir","Rouge","Rose","Vert","Violet","Retour"];
list 
menu1= ["+","-","Retour"];
list 
menu2= ["1","2","3","4","5","6","Retour"];
list 
menu_principal= ["Show Text","Hide text","Couleurs Texte","Couleurs","Taille","Billets","Info","Hud Jarretiere","Load"];      // 
string Option_Hide "Hide text";
string Option_Show "Show text";
string Option_Color "Couleurs Texte";
list 
blanc= ["Antique","Ivoire","retour","Blank"];
list 
bleu= ["B.Clair","Turquoise","retour","Nuit"];
list 
jaune= ["J.Clair","Pop-Corn","retour","Citron"];
list 
rouge= ["Rouges","Cerise","retour","Indien"];
list 
rose= ["R.Clair","Broadway","retour","Mat"];
list 
vert= ["V.Clair","Olive","retour","Pin"];
list 
violet= ["Violette","Outremer","retour","Sombre"];
vector vColor = <1.0,1.0,1.0>;
string sMessage;
integer index;

list 
lMaList;
key kReq;
integer iLine;
string aNote;

init()    {
    
vidage();
    
//je trouve le nom de la 1ere (zeroième) notecard du contenu de l'objet
    
aNote llGetInventoryName(INVENTORY_NOTECARD,0);
    
llOwnerSay("ready");
}
vidage()    {
    
iLine 0;
    
lMaList = [];
}

lecture()    {
    
kReq llGetNotecardLine(aNoteiLine++);
}

default
{
    
state_entry()
    {
        
init();
        
canal = (integer)llFrand(10000000)-10000000// canal dynamique pour éviter la communication entre un meme prim identique
        
llSetText (sMessagevColor1.0) ;
        
menu_principal=[Option_Show]+["Couleurs","Taille","Billets","Info","Hud Jarretiere","Load"];
        
    }
    
touch_start(integer total_number)
    {
        
user llDetectedKey(0);
        
ecoute llListen(canal""user""); // plus de NULL_KEY , on cible l'user. Limitation du lag au moment de l ecoute
        
if (user == llGetOwner())
        {
            
llDialog(llDetectedKey(0), "Personnalisation de la Jarretière"menu_principalcanal);   // on precise les menus "menu_pincipal"
            
llSetTimerEvent(delai);
        }
    }

    
listen(integer channelstring namekey idstring message)
    {
     
        if (
message == "Couleurs Texte"
        {
            
llSetTimerEvent0.0 );
            
llSetTimerEventdelai );
            
llDialog(id"Choisissez une Couleur"lColorMenucanal);
        }
        else
        {
            
llSetTimerEvent0.0 );
            
llListenRemoveecoute );

            if( 
llListFindListlColorMenu, [ message ] ) >= )
            {
                
llSay110message );
            }

            else if(
message == "Show Text"llDumpList2String(lMaList"\n"))
        {
            
llOwnerSay"Show text" );
            if( 
llStringLengthmessage ) > )
                
sMessage llGetSubStringmessage9, -);
            else
                
sMessage "";
           
llSetTextsMessagevColor1.0 );
           
menu_principal = [ Option_HideOption_Color"Couleurs","Taille","Billets","Info","Hud Jarretiere","Load"];
        }
             else if( 
message == "Hide text" )
        {
            
llOwnerSay"Hide text" );
            
sMessage "";
            
llSetTextsMessagevColor1.0 );
            
menu_principal = [ Option_Show"Couleurs","Taille","Billets","Info","Hud Jarretiere","Load"];
        }
            else if( 
message == "Load" )
            {
                
vidage();
                if( 
aNote != "" // y'a-t-il bien une carte a lire
                    
lecture();
                else
                    
llSay0"Merci de me donner une notecard à lire" );
            }
         else if (
message == "Couleurs")
        {
            
llDialog(id"Choisissez une Couleur",menu0canal); // pas d'arret de l'ecoute et du timer , on en a encore besoin
        
}
        else if (
message == "Blanc")
        {
            
llDialog(id"Choisissez une Couleur",blanccanal); // idem
        
}
        else if (
message == "Bleu")
        {
            
llDialog(id"Choisissez une Couleur",bleucanal); // idem
        
}
        else if (
message == "Jaune")
        {
            
llDialog(id"Choisissez une Couleur",jaunecanal); // idem
        
}
        else if (
message == "Rouge")
        {
            
llDialog(id"Choisissez une Couleur",rougecanal); // idem
        
}
        else if (
message == "Rose")
        {
            
llDialog(id"Choisissez une Couleur",rosecanal); // idem
        
}
        else if (
message == "Vert")
        {
            
llDialog(id"Choisissez une Couleur",vertcanal); // idem
        
}
        else if (
message == "Violet")
        {
            
llDialog(id"Choisissez une Couleur",violetcanal); // idem
        
}
        else if (
message == "Taille")
        {
            
llDialog(id"Réglez votre taille",menu1canal); // idem
        
}
        else if (
message == "Billets")
        {
            
llDialog(id"Nombre de billets visibles",menu2canal); // idem
        
}
        else if (
message == "Retour")
        { 
            
llDialog(id,"Personnalisation de la jarretière"menu_principalcanal); 
        }
        else if (
message == "retour")
        { 
            
llDialog(id,"Choisissez une couleur"menu0canal); 
        }
        
        
        else if (
message == "Banane")
        {
            
llSetColor(<0.890,0.812,0.341>, ALL_SIDES);
            
llSetTimerEvent(0.0);               
            
llListenRemove(ecoute);             // on arrete l'ecoute et le Timer apres avoir executer la Fonction.
        
}
        else if (
message == "Antique")
        {
            
llSetColor(<0.980,0.922,0.843>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Ivoire")
        {
            
llSetColor(<1.000,1.000,0.941>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Blank")
        {
            
llSetColor(<1.000,1.000,1.000>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
       else if (
message == "B.Clair")
        {
            
llSetColor(<0.690,0.878,0.902>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Turquoise")
        {
            
llSetColor(<0.000,0.780,0.549>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Nuit")
        {
            
llSetColor(<0.098,0.098,0.439>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "J.Clair")
        {
            
llSetColor(<1.000,1.000,0.878>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Pop-Corn")
        {
            
llSetColor(<1.000,1.000,0.667>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Citron")
        {
            
llSetColor(<1.000,0.890,0.012>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Noir")
        {
            
llSetColor(<0.000,0.000,0.000>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Rouges")
        {
            
llSetColor(<1.000,0.000,0.000>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Cerise")
        {
            
llSetColor(<0.200,0.000,0.000>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Indien")
        {
            
llSetColor(<0.690,0.090,0.122>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "R.Clair")
        {
            
llSetColor(<1.000,0.431,0.780>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Broadway")
        {
            
llSetColor(<1.000,0.000,0.400>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Mat")
        {
            
llSetColor(<1.000,0.800,0.800>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "V.Clair")
        {
            
llSetColor(<0.596,0.984,0.596>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Olive")
        {
            
llSetColor(<0.310,0.310,0.184>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Pin")
        {
            
llSetColor(<0.000,0.200,0.000>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Violette")
        {
            
llSetColor(<0.561,0.369,0.600>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Outremer")
        {
            
llSetColor(<0.361,0.141,0.431>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Sombre")
        {
            
llSetColor(<0.529,0.122,0.471>, ALL_SIDES);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "+")
        {
            
llMessageLinked(LINK_SET,0,"+",NULL_KEY);
            
llSetScale(llGetScale()+<0.0,0.02,0.02>);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "-")
        {
            
llMessageLinked(LINK_SET,0,"-",NULL_KEY);
            
llSetScale(llGetScale()-<0.0,0.02,0.02>);
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "1")
        {
            if(
on)
            {
                
llSetLinkAlpha(2,1.0,1-3);
            }
            else
            {
                
llSetLinkAlpha(2,0.0,ALL_SIDES);
            }
            
on=!on;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "2")
        {
            if(
ok)
            {
                
llSetLinkAlpha(3,1.0,1-3);
            }
            else
            {
                
llSetLinkAlpha(3,0.0,ALL_SIDES);
            }
            
ok=!ok;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "3")
        {
            if(
go)
            {
                
llSetLinkAlpha(4,1.0,1-3);
            }
            else
            {
                
llSetLinkAlpha(4,0.0,ALL_SIDES);
            }
            
go=!go;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "4")
        {
            if(
ja)
            {
                
llSetLinkAlpha(5,1.0,1-3);
            }
            else
            {
                
llSetLinkAlpha(5,0.0,ALL_SIDES);
            }
            
ja=!ja;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "5")
        {
            if(
vi)
            {
                
llSetLinkAlpha(6,1.0,ALL_SIDES);
            }
            else
            {
                
llSetLinkAlpha(6,0.0,ALL_SIDES);
            }
            
vi=!vi;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "6")
        {
            if(
oui)
            {
                
llSetLinkAlpha(7,1.0,ALL_SIDES);
            }
            else
            {
                
llSetLinkAlpha(7,0.0,ALL_SIDES);
            }
            
oui=!oui;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Info")
        {
            
llGiveInventory(id"Info");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Hud Jarretiere")
        {
            
llGiveInventory(id"Hud Jarretiere");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
    } 
}

    
dataserverkey idstring data )
    {
//passons au choses serieuses
        
if (id == kReq)    { // juste pour etre sur que dataserver répond bien a ma question et non a une autre
            
if (data != EOF) {// rappel : EOF pour End Of Files

                
data llStringTrim(dataSTRING_TRIM); // efface les espaces parasites en début et fin de ligne
                
string initial llGetSubString(data0,0); // quel est le premier caractère

                
if ((initial != "") && (initial != "#"))    {
                    
//initial != "" permet de pas mettre de lignes vide ds la list
                    // initial != "#" une ligne de la notecard commençant par # sera considérer comme commentaire
                    // et donc pas mémorisée. (facultatif)

                    
lMaList += [data]; // mémorisation dans la liste
                
}
                
lecture(); // ligne suivante
            
}
            else { 
// on est en EOF (toute la carte a été lue
                // reste plus qu'a utiliser la carte
                // ici par un simple llSay
                
llSay(0"Chargement Message Jarretière : \n" llDumpList2String(lMaList"\n"));
            }
        }
    }

    
timer()
    {
        
llSetTimerEvent0.0 );
        
llListenRemoveecoute );
    }

    
changed(integer chang// lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
    
{
        if(
chang CHANGED_OWNER)
        {
            
llResetScript();
        }
    }
    
attach(key id)
    {
        
llResetScript();
    }
    
on_rez(integer i// lors de la pose de l objet au sol , on reset pour modifier le canal dynamique
    
{
        
llResetScript();
    }

La notecard se charge mais j'arrive pas a activer "Show Text" et donc à afficher le texte (je me suis inspiré du script écrit par Mingyar Ishtari)
Merci
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Citation :
Publié par Polo Slok
(je me suis inspiré du script écrit par Mingyar Ishtari)
Merci
loooooooooooooool tu fais bien de le préciser car :

Citation :
Publié par Mingyar Ishtari
Un peu de mise en page,
un peu d'optimisation,
un peu de correction (gestion de l'écoute et du timer dans le 1er script),
et la modification qui doit répondre à ta demande.
Ton inspiration t'a "juste" fait perdre, la mise en page, l'optimisation et la correction.
Autant de "détails" que je t'avais déjà rédigé y'a quelques semaines :

pour l'activation de ton show text, regarde ta condition ligne 91 : Comment ton message pourrait être égal au ton bouton + le contenu de ta notecard ?

XanorK
Bonjour,
C'est ma méthode de travail qui ne convient pas et j'en suis conscient. Je veux allé à l'essentiel en oubliant les + qui rendent le script agréable ceci dit je prend en compte vos optimisation que j'essaie d'appliquer à mes scripts quand ceci sont fonctionnelle. Ce script était déjà écrit j'ai juste voulu le compléter, mais je vais le reposter avec ce que vous m'avez appris. A l'avenir, j'essayerais d'êtres plus rigoureux. Merci de votre aide et de ces remarques qui me permettent d'avancer.
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Alors voila j'ai réécrit ce script :
Code PHP:

key user;
integer vi;
integer oui;
integer on;
integer ok;
integer go;
integer ja;
integer ecoute;
integer delai 60;
integer canal// < plus de canal defini
list lColorMenu = ["*Banane*",
                   
"*Blanc*",
                   
"*Bleu*",
                   
"*Jaune*",
                   
"*Noir*",
                   
"*Rouge*",
                   
"*Rose*",
                   
"*Vert*",
                   
"*Violet*",
                   
"*Fushia*"];
list 
lVectorColor = [<0.890,0.812,0.341>,
                     <
1.000,1.000,1.000>,
                     <
0.0,0.0,1.0>,
                     <
1.000,1.000,0.000>,
                     <
0.000,0.000,0.000>,
                     <
1.0,0.0,0.0>,
                     <
1.000,0.753,0.796>,
                     <
0.000,0.502,0.000>,
                     <
0.561,0.369,0.600>,
                     <
1.000,0.000,0.667>];
list 
menu0= ["Banane","Blanc","Bleu","Jaune","Noir","Rouge","Rose","Vert","Violet","Retour"];
list 
menu1= ["+","-","Retour"];
list 
menu2= ["1","2","3","4","5","6","Retour"];
list 
menu_principal= ["Show Text","Hide text","Couleurs Texte","Couleurs","Taille","Billets","Info","Hud Jarretiere","Load"];      // 
string Option_Hide "Hide text";
string Option_Show "Show text";
string Option_Color "Couleurs Texte";
list 
blanc= ["Antique",
             
"Ivoire",
             
"retour",
             
"Blank"];
list 
bleu= ["B.Clair",
            
"Turquoise",
            
"retour",
            
"Nuit"];
list 
jaune= ["J.Clair",
             
"Pop-Corn",
             
"retour",
             
"Citron"];
list 
rouge= ["Rouges",
             
"Cerise",
             
"retour",
             
"Indien"];
list 
rose= ["R.Clair",
            
"Broadway",
            
"retour",
            
"Mat"];
list 
vert= ["V.Clair",
            
"Olive",
            
"retour",
            
"Pin"];
list 
violet= ["Violette",
              
"Outremer",
              
"retour",
              
"Sombre"];
vector vColor = <1.0,1.0,1.0>;
string sMessage;
integer index;

SetColor(vector couleur)    
{
    
llSetColor(couleurALL_SIDES);
}
resetEcoute()
{
    
llSetTimerEvent(0.0);
    
llListenRemove(ecoute);
}

list 
lMaList;
key kReq;
integer iLine;
string aNote;

init()    {
    
vidage();
    
//je trouve le nom de la 1ere (zeroième) notecard du contenu de l'objet
    
aNote llGetInventoryName(INVENTORY_NOTECARD,0);
    
llOwnerSay("ready");
}
vidage()    {
    
iLine 0;
    
lMaList = [];
}

lecture()    {
    
kReq llGetNotecardLine(aNoteiLine++);
}

default
{
    
state_entry()
    {
        
init();
        
canal = (integer)llFrand(10000000)-10000000// canal dynamique pour éviter la communication entre un meme prim identique
        
llSetText (sMessagevColor1.0) ;
        
menu_principal=["Show Text"]+["Couleurs","Taille","Billets","Info","Hud Jarretiere","Load"];
        
    }
    
touch_start(integer total_number)
    {
        
user llDetectedKey(0);
        
ecoute llListen(canal""user""); // plus de NULL_KEY , on cible l'user. Limitation du lag au moment de l ecoute
        
if (user == llGetOwner())
        {
            
llDialog(llDetectedKey(0), "Personnalisation de la Jarretière"menu_principalcanal);   // on precise les menus "menu_pincipal"
            
        
}
    }

    
listen(integer channelstring namekey idstring message)
    {
     
        if (
message == "Couleurs Texte"
        {
            
            
llDialog(id"Choisissez une Couleur"lColorMenucanal);
        }
            else if(~
llListFindList(lColorMenu,[message]))
        {
            
integer index llListFindList(lColorMenu,[message]);
            
vColor llList2Vector(lVectorColor,index);
            
llSetText (sMessagevColor1.0) ;
            
resetEcoute();
        }
        else if(
message == "Show Text")
        {
            
sMessage = ("" llDumpList2String(lMaList"\n"));
            
llSetText (sMessagevColor1.0) ;
            
menu_principal = ["Hide Text"]+["Couleurs Texte"]+["Couleurs","Taille","Billets","Info","Hud Jarretiere","Load"];
            
        }
        else if(
message == "Hide Text")
        {
            
sMessage "";
            
llSetText (sMessagevColor1.0) ;
            
menu_principal = ["Show Text"]+["Couleurs","Taille","Billets","Info","Hud Jarretiere","Load"];
            
        }
            else if( 
message == "Load" )
            {
                
vidage();
                if( 
aNote != "" // y'a-t-il bien une carte a lire
                    
lecture();
                else
                    
llSay0"Merci de me donner une notecard à lire" );
            }
         else if (
message == "Couleurs")
        {
            
llDialog(id"Choisissez une Couleur",menu0canal); // pas d'arret de l'ecoute et du timer , on en a encore besoin
        
}
        else if (
message == "Blanc")
        {
            
llDialog(id"Choisissez une Couleur",blanccanal); // idem
        
}
        else if (
message == "Bleu")
        {
            
llDialog(id"Choisissez une Couleur",bleucanal); // idem
        
}
        else if (
message == "Jaune")
        {
            
llDialog(id"Choisissez une Couleur",jaunecanal); // idem
        
}
        else if (
message == "Rouge")
        {
            
llDialog(id"Choisissez une Couleur",rougecanal); // idem
        
}
        else if (
message == "Rose")
        {
            
llDialog(id"Choisissez une Couleur",rosecanal); // idem
        
}
        else if (
message == "Vert")
        {
            
llDialog(id"Choisissez une Couleur",vertcanal); // idem
        
}
        else if (
message == "Violet")
        {
            
llDialog(id"Choisissez une Couleur",violetcanal); // idem
        
}
        else if (
message == "Taille")
        {
            
llDialog(id"Réglez votre taille",menu1canal); // idem
        
}
        else if (
message == "Billets")
        {
            
llDialog(id"Nombre de billets visibles",menu2canal); // idem
        
}
        else if (
message == "Retour")
        { 
            
llDialog(id,"Personnalisation de la jarretière"menu_principalcanal); 
        }
        else if (
message == "retour")
        { 
            
llDialog(id,"Choisissez une couleur"menu0canal); 
        }
        
        
        else if (
message == "Banane")
        {
            
SetColor(<0.890,0.812,0.341>);
            
resetEcoute();             // on arrete l'ecoute et le Timer apres avoir executer la Fonction.
        
}
        else if (
message == "Antique")
        {
            
SetColor(<0.980,0.922,0.843>);
            
resetEcoute();             //idem
        
}
        else if (
message == "Ivoire")
        {
            
SetColor(<1.000,1.000,0.941>);
            
resetEcoute();            //idem
        
}
        else if (
message == "Blank")
        {
            
SetColor(<1.000,1.000,1.000>);
            
resetEcoute();          //idem
        
}
       else if (
message == "B.Clair")
        {
            
SetColor(<0.690,0.878,0.902>);
            
resetEcoute();           //idem
        
}
        else if (
message == "Turquoise")
        {
            
SetColor(<0.000,0.780,0.549>);
            
resetEcoute();            //idem
        
}
        else if (
message == "Nuit")
        {
           
SetColor(<0.098,0.098,0.439>);
           
resetEcoute();           //idem
        
}
        else if (
message == "J.Clair")
        {
            
SetColor(<1.000,1.000,0.878>);
            
resetEcoute();            //idem
        
}
        else if (
message == "Pop-Corn")
        {
            
SetColor(<1.000,1.000,0.667>);
            
resetEcoute();            //idem
        
}
        else if (
message == "Citron")
        {
            
SetColor(<1.000,0.890,0.012>);
            
resetEcoute();           //idem
        
}
        else if (
message == "Noir")
        {
            
SetColor(<0.000,0.000,0.000>);
            
resetEcoute();          //idem
        
}
        else if (
message == "Rouges")
        {
            
SetColor(<1.000,0.000,0.000>);
            
resetEcoute();             //idem
        
}
        else if (
message == "Cerise")
        {
            
SetColor(<0.200,0.000,0.000>);
            
resetEcoute();          //idem
        
}
        else if (
message == "Indien")
        {
            
SetColor(<0.690,0.090,0.122>);
            
resetEcoute();           //idem
        
}
        else if (
message == "R.Clair")
        {
            
SetColor(<1.000,0.431,0.780>);
            
resetEcoute();         //idem
        
}
        else if (
message == "Broadway")
        {
            
SetColor(<1.000,0.000,0.400>);
            
resetEcoute();       //idem
        
}
        else if (
message == "Mat")
        {
            
SetColor(<1.000,0.800,0.800>);
            
resetEcoute();        //idem
        
}
        else if (
message == "V.Clair")
        {
            
SetColor(<0.596,0.984,0.596>);
            
resetEcoute();             //idem
        
}
        else if (
message == "Olive")
        {
            
SetColor(<0.310,0.310,0.184>);
            
resetEcoute();            //idem
        
}
        else if (
message == "Pin")
        {
            
SetColor(<0.000,0.200,0.000>);
            
resetEcoute();            //idem
        
}
        else if (
message == "Violette")
        {
            
SetColor(<0.561,0.369,0.600>);
            
resetEcoute();             //idem
        
}
        else if (
message == "Outremer")
        {
            
SetColor(<0.361,0.141,0.431>);
            
resetEcoute();           //idem
        
}
        else if (
message == "Sombre")
        {
            
SetColor(<0.529,0.122,0.471>);
            
resetEcoute();            //idem
        
}
        else if (
message == "+")
        {
            
llMessageLinked(LINK_SET,0,"+",NULL_KEY);
            
llSetScale(llGetScale()+<0.0,0.02,0.02>);
            
resetEcoute();            //idem
        
}
        else if (
message == "-")
        {
            
llMessageLinked(LINK_SET,0,"-",NULL_KEY);
            
llSetScale(llGetScale()-<0.0,0.02,0.02>);
            
resetEcoute();            //idem
        
}
        else if (
message == "1")
        {
            if(
on)
            {
                
llSetLinkAlpha(2,1.0,1-3);
            }
            else
            {
                
llSetLinkAlpha(2,0.0,ALL_SIDES);
            }
            
on=!on;
           
resetEcoute();             //idem
        
}
        else if (
message == "2")
        {
            if(
ok)
            {
                
llSetLinkAlpha(3,1.0,1-3);
            }
            else
            {
                
llSetLinkAlpha(3,0.0,ALL_SIDES);
            }
            
ok=!ok;
            
resetEcoute();           //idem
        
}
        else if (
message == "3")
        {
            if(
go)
            {
                
llSetLinkAlpha(4,1.0,1-3);
            }
            else
            {
                
llSetLinkAlpha(4,0.0,ALL_SIDES);
            }
            
go=!go;
            
resetEcoute();             //idem
        
}
        else if (
message == "4")
        {
            if(
ja)
            {
                
llSetLinkAlpha(5,1.0,1-3);
            }
            else
            {
                
llSetLinkAlpha(5,0.0,ALL_SIDES);
            }
            
ja=!ja;
            
resetEcoute();            //idem
        
}
        else if (
message == "5")
        {
            if(
vi)
            {
                
llSetLinkAlpha(6,1.0,ALL_SIDES);
            }
            else
            {
                
llSetLinkAlpha(6,0.0,ALL_SIDES);
            }
            
vi=!vi;
            
resetEcoute();          //idem
        
}
        else if (
message == "6")
        {
            if(
oui)
            {
                
llSetLinkAlpha(7,1.0,ALL_SIDES);
            }
            else
            {
                
llSetLinkAlpha(7,0.0,ALL_SIDES);
            }
            
oui=!oui;
            
resetEcoute();           //idem
        
}
        else if (
message == "Info")
        {
            
llGiveInventory(id"Info");
            
resetEcoute();            //idem
        
}
        else if (
message == "Hud Jarretiere")
        {
            
llGiveInventory(id"Hud Jarretiere");
            
resetEcoute();            //idem
        
}
    } 


    
dataserverkey idstring data )
    {
//passons au choses serieuses
        
if (id == kReq)    { // juste pour etre sur que dataserver répond bien a ma question et non a une autre
            
if (data != EOF) {// rappel : EOF pour End Of Files

                
data llStringTrim(dataSTRING_TRIM); // efface les espaces parasites en début et fin de ligne
                
string initial llGetSubString(data0,0); // quel est le premier caractère

                
if ((initial != "") && (initial != "#"))    {
                    
//initial != "" permet de pas mettre de lignes vide ds la list
                    // initial != "#" une ligne de la notecard commençant par # sera considérer comme commentaire
                    // et donc pas mémorisée. (facultatif)

                    
lMaList += [data]; // mémorisation dans la liste
                
}
                
lecture(); // ligne suivante
            
}
            else { 
// on est en EOF (toute la carte a été lue
                // reste plus qu'a utiliser la carte
                // ici par un simple llSay
                
llSay(0"Chargement Message Jarretière : \n" llDumpList2String(lMaList"\n"));
            }
        }
    }

    
timer()
    {
        
resetEcoute();
    }

    
changed(integer chang// lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
    
{
        if(
chang CHANGED_OWNER)
        {
            
llResetScript();
        }
    }
    
attach(key id)
    {
        
llResetScript();
    }
    
on_rez(integer i// lors de la pose de l objet au sol , on reset pour modifier le canal dynamique
    
{
        
llResetScript();
    }

Avec ce que vous m'avez appris (l'optimisation et la mise en page) et puis je me suis rendu compte d'une chose que j'ignorais, c'est que on retrouve plus facilement ses erreurs. Désormais je vais prendre cette habitude car en plus j'ai réussi à faire fonctionner le script comme je le désirais même si je ne suis pas très à l'aise avec l'optimisation !
Je vous remercie de m'avoir remis dans la bonne direction, je faisais fausse route ! Merci
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
On essaie encore une fois ?

  1. Beaucoup de mise en page :
    • Des espaces bien placés pour faciliter la navigation avec les Ctrl-flèche droite ou gauche

    • Une indentation strictement respectée.
  2. Un peu de correction :
    • Je n'ai pas bien compris les instruction llSetLinkAlpha(2,1.0,1-3); Que vient faire ce 1-3 dont le résultat est -2 ? Je l'ai remplacé par ALL_SIDES.
    • Si tu veux gérer un timer pour les menus, il faut, d'une part, l'initialiser (touch_start), d'autre par, le réinitialiser à chaque appel de llDialog.
    • Dans la version précédente de ton script, j'avais corrigé l'ouverture de l'écoute. Comme tu n'en as pas tenu compte, je recommence.
  3. Beaucoup d'optimisation :
    • Une organisation du listen pour n'appeler qu'une seule fois la fonction resetEcoute().
    • Pour l'appel des sous menus de couleurs.
    • Pour la gestion de la couleur de l'objet.
    • Pour la gestion de la transparence.

Résultat : 150 lignes de code gagnées.
Code:
key user;

//integer on;
//integer ok;
//integer go;
//integer ja;
//integer vi;
//integer oui;
// Remplaçons ton oui plyglotte par une liste
list    lAlphaLink = [ 0, 0, 0, 0, 0, 0 ];

integer ecoute;
float   delai = 60.0;
integer canal; // < plus de canal defini

list lColorTxt  = [ "*Banane*",
                    "*Blanc*",
                    "*Bleu*",
                    "*Jaune*",
                    "*Noir*",
                    "*Rouge*",
                    "*Rose*",
                    "*Vert*",
                    "*Violet*",
                    "*Fushia*"
                  ];

list lVecColorTxt = [ <0.890, 0.812, 0.341>,        // *Banane*
                      <1.000, 1.000, 1.000>,        // *Blanc*
                      <0.000, 0.000, 1.000>,        // *Bleu*
                      <1.000, 1.000, 0.000>,        // *Jaune*
                      <0.000, 0.000, 0.000>,        // *Noir*
                      <1.000, 0.000, 0.000>,        // *Rouge*
                      <1.000, 0.753, 0.796>,        // *Rose*
                      <0.000, 0.502, 0.000>,        // *Vert*
                      <0.561, 0.369, 0.600>,        // *Violet*
                      <1.000, 0.000, 0.667>         // *Fushia*
                    ];

list    lColorObj = [ "Banane",
                      "Antique",
                      "Ivoire",
                      "Blank",
                      "B.Clair",
                      "Turquoise",
                      "Nuit",
                      "J.Clair",
                      "Pop-Corn",
                      "Citron",
                      "Noir",
                      "Rouges",
                      "Cerise",
                      "Indien",
                      "R.Clair",
                      "Broadway",
                      "Mat",
                      "V.Clair",
                      "Olive",
                      "Pin",
                      "Violette",
                      "Outremer",
                      "Sombre"
                    ];

list    lVecColorObj = [ <0.890, 0.812, 0.341>,     //  Banane
                         <0.980, 0.922, 0.843>,     //  Antique
                         <1.000, 1.000, 0.941>,     //  Ivoire
                         <1.000, 1.000, 1.000>,     //  Blank
                         <0.690, 0.878, 0.902>,     //  B.Clair
                         <0.000, 0.780, 0.549>,     //  Turquoise
                         <0.098, 0.098, 0.439>,     //  Nuit
                         <1.000, 1.000, 0.878>,     //  J.Clair
                         <1.000, 1.000, 0.667>,     //  Pop-Corn
                         <1.000, 0.890, 0.012>,     //  Citron
                         <0.000, 0.000, 0.000>,     //  Noir
                         <1.000, 0.000, 0.000>,     //  Rouges
                         <0.200, 0.000, 0.000>,     //  Cerise
                         <0.690, 0.090, 0.122>,     //  Indien
                         <1.000, 0.431, 0.780>,     //  R.Clair
                         <1.000, 0.000, 0.400>,     //  Broadway
                         <1.000, 0.800, 0.800>,     //  Mat
                         <0.596, 0.984, 0.596>,     //  V.Clair
                         <0.310, 0.310, 0.184>,     //  Olive
                         <0.000, 0.200, 0.000>,     //  Pin
                         <0.561, 0.369, 0.600>,     //  Violette
                         <0.361, 0.141, 0.431>,     //  Outremer
                         <0.529, 0.122, 0.471>      //  Sombre
                       ];

list menu0 = [ "Banane", "Blanc", "Bleu", "Jaune", "Noir", "Rouge", "Rose", "Vert", "Violet", "Retour" ];
list menu1 = [ "+", "-", "Retour" ];
list menu2 = [ "1", "2", "3", "4", "5", "6", "Retour" ];
list menu_principal;
string Option_Hide = "Hide text";
string Option_Show = "Show text";
string Option_Color = "Couleurs Texte";

list    lSousCouleursMess = [
                              "Blanc",
                              "Bleu",
                              "Jaune",
                              "Rouge",
                              "Rose",
                              "Vert",
                              "Violet"
                            ];

list    lSousCouleursList = [ 
// Blanc
                          "Antique",
                          "Ivoire",
                          "retour",
                          "Blank",
// Bleu
                          "B.Clair",
                          "Turquoise",
                          "retour",
                          "Nuit",
// Jaune
                          "J.Clair",
                          "Pop-Corn",
                          "retour",
                          "Citron",
// Rouge
                          "Rouges",
                          "Cerise",
                          "retour",
                          "Indien",
// Rose
                          "R.Clair",
                          "Broadway",
                          "retour",
                          "Mat",
// Vert
                          "V.Clair",
                          "Olive",
                          "retour",
                          "Pin",
// Violet
                          "Violette",
                          "Outremer",
                          "retour",
                          "Sombre"
                        ];

vector  vColor = <1.0,1.0,1.0>;
string  sMessage;
integer index;

list    lMaList;
key     kReq;
integer iLine;
string  aNote;

resetEcoute()
{
    llSetTimerEvent( 0.0 );
    llListenRemove( ecoute );
}

init()
{
    vidage();
    //je trouve le nom de la 1ere (zeroième) notecard du contenu de l'objet
    aNote = llGetInventoryName( INVENTORY_NOTECARD, 0 );
    llOwnerSay( "ready" );
}

vidage()
{
    iLine   = 0;
    lMaList = [];
}

lecture()
{
    kReq = llGetNotecardLine( aNote, iLine++ );
}

default
{
    state_entry()
    {
        init();
        canal = (integer)llFrand( 10000000.0 ) - 10000000; // canal dynamique pour éviter la communication entre un meme prim identique
        llSetText( sMessage, vColor, 1.0 ) ;
        menu_principal = [ "Show Text", "Couleurs", "Taille", "Billets", "Info", "Hud Jarretiere", "Load" ];
    }

    touch_start( integer total_number )
    {
        user   = llDetectedKey(0);
        if( user == llGetOwner() )
        {
            ecoute = llListen( canal, "", user, "" ); // plus de NULL_KEY , on cible l'user. Limitation du lag au moment de l ecoute
            llSetTimerEvent( delai );
            llDialog( user, "Personnalisation de la Jarretière", menu_principal, canal );   // on precise les menus "menu_pincipal"
        }
    }

    listen( integer channel, string name, key id, string message )
    {
        if( message == "Couleurs Texte" )
        {
            llSetTimerEvent( 0.0 );
            llSetTimerEvent( delai );
            llDialog( id, "Choisissez une Couleur", lColorTxt, canal );
        }
        else if( message == "Couleurs" )
        {
            llSetTimerEvent( 0.0 );
            llSetTimerEvent( delai );
            llDialog( id, "Choisissez une Couleur", menu0, canal ); // pas d'arret de l'ecoute et du timer , on en a encore besoin
        }
        else if( ( index = llListFindList( lSousCouleursMess, [ message ] ) ) >= 0 )
        {
            llSetTimerEvent( 0.0 );
            llSetTimerEvent( delai );
            llDialog( id, "Choisissez une Couleur", llList2List( lSousCouleursList, index * 4, index * 4 + 3 ), canal ); // idem
        }
        else if( message == "Taille")
        {
            llSetTimerEvent( 0.0 );
            llSetTimerEvent( delai );
            llDialog( id, "Réglez votre taille", menu1, canal ); // idem
        }
        else if( message == "Billets" )
        {
            llSetTimerEvent( 0.0 );
            llSetTimerEvent( delai );
            llDialog( id, "Nombre de billets visibles", menu2, canal ); // idem
        }
        else if( message == "Retour" )
        {
            llSetTimerEvent( 0.0 );
            llSetTimerEvent( delai );
            llDialog( id, "Personnalisation de la jarretière", menu_principal, canal );
        }
        else if( message == "retour" )
        {
            llSetTimerEvent( 0.0 );
            llSetTimerEvent( delai );
            llDialog( id, "Choisissez une couleur", menu0, canal );
        }
        else
        {
            resetEcoute();

            if( message == "Show Text" )
            {
                sMessage = llDumpList2String( lMaList, "\n" );
                llSetText( sMessage, vColor, 1.0 ) ;
                menu_principal = [ "Hide Text", "Couleurs Texte", "Couleurs", "Taille", "Billets", "Info", "Hud Jarretiere", "Load" ];
            }
            else if( message == "Hide Text" )
            {
                sMessage = "";
                llSetText( sMessage, vColor, 1.0 );
                menu_principal = [ "Show Text", "Couleurs", "Taille", "Billets", "Info", "Hud Jarretiere", "Load" ];
            }
            else if( message == "Load" )
            {
                vidage();
                if( aNote != "" ) // y'a-t-il bien une carte a lire
                    lecture();
                else
                    // Puisque seul le owner peut appeler le menu, pourquoi polluer le chat ?
                    llOwnerSay( "Merci de me donner une notecard à lire" );
            }
// Gestion de la couleur du texte
            else if( ( index = llListFindList( lColorTxt, [ message ] ) ) >= 0 )
            {
                vColor = llList2Vector( lVecColorTxt, index );
                llSetText( sMessage, vColor, 1.0 );
            }
// Gestion de la couleur de l'objet
            else if( ( index = llListFindList( lColorObj, [ message ] ) ) >= 0 )
            {
                llSetColor( llList2Vector( lVecColorObj, index ), ALL_SIDES );
            }
            else if( message == "+" )
            {
                llMessageLinked( LINK_SET, 0, "+", NULL_KEY );
                llSetScale( llGetScale() + <0.0, 0.02, 0.02> );
            }
            else if( message == "-" )
            {
                llMessageLinked( LINK_SET, 0, "-", NULL_KEY );
                llSetScale( llGetScale() - <0.0, 0.02, 0.02> );
            }
// Gestion de la transparence/opacité des prims (de 1 à 6)
            else if( (string)((integer)message) == message &&
                     (integer)message >= 1 && (integer)message <= 6 )
            {
                index = (integer)message;
                llSetLinkAlpha( index + 1, (float)llList2Integer( lAlphaLink, index - 1 ), ALL_SIDES );;
                lAlphaLink = llListReplaceList( lAlphaLink, [ ! llList2Integer( lAlphaLink, index - 1 ) ], index - 1, index - 1 );
            }
            else if( message == "Info" || message == "Hud Jarretiere" )
            {
                llGiveInventory( id, message );
            }
        }
    }

    dataserver( key id, string data )
    {//passons au choses serieuses
        if (id == kReq)    { // juste pour etre sur que dataserver répond bien a ma question et non a une autre
            if (data != EOF) {// rappel : EOF pour End Of Files

                data = llStringTrim(data, STRING_TRIM); // efface les espaces parasites en début et fin de ligne
                string initial = llGetSubString(data, 0,0); // quel est le premier caractère

                if ((initial != "") && (initial != "#"))    {
                    //initial != "" permet de pas mettre de lignes vide ds la list
                    // initial != "#" une ligne de la notecard commençant par # sera considérer comme commentaire
                    // et donc pas mémorisée. (facultatif)

                    lMaList += [data]; // mémorisation dans la liste
                }
                lecture(); // ligne suivante
            }
            else { // on est en EOF (toute la carte a été lue
                // reste plus qu'a utiliser la carte
                // ici par un simple llSay
                llSay(0, "Chargement Message Jarretière : \n" + llDumpList2String(lMaList, "\n"));
            }
        }
    }

    timer()
    {
        resetEcoute();
    }

    changed( integer chang ) // lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
    {
        if( chang & CHANGED_OWNER )
        {
            llResetScript();
        }
    }

    attach( key id )
    {
        llResetScript();
    }

    on_rez( integer i ) // lors de la pose de l objet au sol , on reset pour modifier le canal dynamique
    {
        llResetScript();
    }
}
Voilà, et comme disait Marie-Pierre Casey :
Bonjour,
J'ai regardé ce script et je vois qu'il ne ressemble plus beaucoup au mien. Je ne suis qu'un débutant en Lsl et j'ai un peu de mal avec l'optimisation et toute les astuces pour arriver à ce que tu as fait. Je fréquente l'école Sl de script quand j'en ai le temps, j'ai donc écrit le script comme on me l'as appris avec des fonctions simples.
Citation :
Publié par Mingyar Ishtari
  1. Beaucoup de mise en page :
    • Des espaces bien placés pour faciliter la navigation avec les Ctrl-flèche droite ou gauche

    • Une indentation strictement respectée.

Je vois que ça rend le code plus lisible.

Citation :
Publié par Mingyar Ishtari
  1. Un peu de correction :
    • Je n'ai pas bien compris les instruction llSetLinkAlpha(2,1.0,1-3); Que vient faire ce 1-3 dont le résultat est -2 ? Je l'ai remplacé par ALL_SIDES.
    • Si tu veux gérer un timer pour les menus, il faut, d'une part, l'initialiser (touch_start), d'autre par, le réinitialiser à chaque appel de llDialog.
    • Dans la version précédente de ton script, j'avais corrigé l'ouverture de l'écoute. Comme tu n'en as pas tenu compte, je recommence.

Le 1-3 c'est pour sélectionner les faces du prim mais le ALL_SIDES est plus approprié. C'est pas évident à comprendre les fonctions d'ouverture d'écoute et de timer.

Citation :
Publié par Mingyar Ishtari

  1. Beaucoup d'optimisation :
    • Une organisation du listen pour n'appeler qu'une seule fois la fonction resetEcoute().
    • Pour l'appel des sous menus de couleurs.
    • Pour la gestion de la couleur de l'objet.
    • Pour la gestion de la transparence.

En tant que débutant et apprenant le lsl en voyant ça je me sens perdu, c'est pour ça que j'avais des fonctions et événements tout simples. Ça aére le programme mais je ne connais pas encore toutes ces astuces. Je ne suis pas très à l'aise avec l'optimisation, mais à force de pratiquer et d'apprendre ça va rentrer.
Merci pour ce cours, je vais essayer d'appliquer ceci au maximum.
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Répondre

Connectés sur ce fil

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