| 
	
			
			
			
	
	 | 
	 
	
	
	
		
		
		
		
		
		
			
			On essaie encore une fois ? 
- 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.
 
 
  
- 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.
 
 
  
- 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.
 
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 :
 
		 
		
		
		
		
		
		
		
		
		
		
		
	 |