| 
	
			
			
				
			
			
	
	 | 
	 
	
	
	
		
		
		
		
		
		
			
			Finalement j'ai voulu tester un peu le fondu enchaîné et je suis arrivé à un truc sympa. Pour commencer créez deux boîtes de base et liez les. Ensuite glissez ce script dedans pour construire le panneau (composé de deux prims évidemment   ) :
 
default {     state_entry()     {         llSetPrimitiveParams([PRIM_COLOR, ALL_SIDES, <.4,.4,.4>, 1.0,             PRIM_COLOR, 0, <1.0,1.0,1.0>, 1.0,             PRIM_TEXTURE, ALL_SIDES, "819d87ad-913d-37a7-1edf-d269f3bbb624", <8.9,.8,0.0>, <0.0,0.0,0.0>,0.0,             PRIM_TEXTURE, 0, "819d87ad-913d-37a7-1edf-d269f3bbb624", <1.0,1.0,.0>, <0.0,0.0,0.0>,0.0,             PRIM_FULLBRIGHT, 0, TRUE,             PRIM_POSITION, llGetPos() + <.0,.0,1.0>,             PRIM_ROTATION, llEuler2Rot(<270.0, 0, 180.0> * DEG_TO_RAD),             PRIM_SIZE, <2.0,1.5,.06812>,             PRIM_TYPE, PRIM_TYPE_BOX, 0, <0.0, 1.0, 0.0>, 0.0, <0.0, 0.0, 0.0>, <.9, .9, 0.0>, <0.0, 0.0, 0.0>]);         llSetLinkPrimitiveParams(2,[PRIM_COLOR, ALL_SIDES, <.4,.4,.4>, 1.0,             PRIM_COLOR, 0, <1.0,1.0,1.0>, 1.0,             PRIM_TEXTURE, ALL_SIDES, "819d87ad-913d-37a7-1edf-d269f3bbb624", <8.9,.8,0.0>, <0.0,0.0,0.0>,0.0,             PRIM_TEXTURE, 0, "819d87ad-913d-37a7-1edf-d269f3bbb624", <1.0,1.0,.0>, <0.0,0.0,0.0>,0.0,             PRIM_FULLBRIGHT, 0, TRUE,             PRIM_POSITION, <.0,.0,.002>,             PRIM_ROTATION, llEuler2Rot(<270.0, 0, 180.0> * DEG_TO_RAD),             PRIM_SIZE, <1.8,1.35,.06812>,             PRIM_TYPE, PRIM_TYPE_BOX, 0, <0.0, 1.0, 0.0>, 0.0, <0.0, 0.0, 0.0>, <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>]);         llRemoveInventory(llGetScriptName());     } } 
 
 
 
Le script s'auto-détruit à la fin de son œuvre de façonnage.
 
Maintenant que vous avez le panneau mettez dedans quelques textures, au moins 3 sinon ça marchera pas.
 
Ensuite mettez ce script dans le panneau :
 
//---------------------------------------------------------------------------------- // //                              Transition V1.0 // //                                Bestmomo Lagan // //---------------------------------------------------------------------------------- // //---------------------------------------------------------------------------------- //                              LIBRARY FUNCTIONS //----------------------------------------------------------------------------------
  // -- Génération d'un entier aléatoire -- // @ param [integer] Valeur maximale // @ return [integer] entier aléatoire integer randInt(integer n) {return (integer)llFrand(n + 1);}
  //--------------------------------------------------------------- //                        MENU FUNCTIONS //---------------------------------------------------------------
  // -- Initialisation menu -- // @ param [key]     clé de l'avatar // @ param [string] texte pour le menu // @ param  [list] noms des boutons // @ param [integer] type de menu InitMenu(key id, string texte, list boutons, integer typemenu) {     // Mise en route du timer     if(iMode == MODE_OFF) llSetTimerEvent(TIMEOUT);     llResetTime();     // Enregistrement des paramètres     lBoutonsMenu = boutons;     iCanalMenu = GetRandomChannel();     sTexteMenu = texte;     iIndexMenu = 0;     iBusy = TRUE;     iTypeMenu = typemenu;     kAvaMenu = id;     // Mise en place et enregistrement de l'écoute     iEcouteMenu = llListen(iCanalMenu, "", id, "");     // Envoi du menu     GestMenu(); }
  // -- Gestion de l'index des boutons du menu -- // @ param [string] bouton de déplacement GestIndexBoutons(string browse) {     // Nombre de boutons     integer n = llGetListLength(lBoutonsMenu);     // Navigation simple pour deux pages     if(n < 23) {         if(iIndexMenu) iIndexMenu = 0;         else iIndexMenu = 11;}     // Navigation riche pour plus de deux pages     else {         if(browse == NEXT) {             iIndexMenu += 10;             if(iIndexMenu >= n) iIndexMenu = 0;}         else {             iIndexMenu -= 10;             if(iIndexMenu < 0) iIndexMenu = n - n % 10;}     }     // Mise en route du timer     if(iMode == MODE_OFF) llSetTimerEvent(TIMEOUT);     llResetTime();     // Envoi du menu     GestMenu(); }
  //    -- Gestion menu -- GestMenu() {     // Liste globale des boutons     list lBoutons = lBoutonsMenu;     // Nombre total de boutons     integer n = llGetListLength(lBoutonsMenu);     // Si plusieurs pages     if(n > 12) {         // Que 2 pages -> navigation simple         if(n < 23) {             // Deuxième page             if(iIndexMenu)                 lBoutons = [PREVIOUS] + llList2List(lBoutonsMenu, iIndexMenu, -1);             // Première page             else                 lBoutons = llList2List(lBoutonsMenu, 0, 1) + [NEXT] + llList2List(lBoutonsMenu, 2, 10);}         // Plus de 2 pages -> navigation riche         else {             list l = [PREVIOUS, llList2String(lBoutonsMenu, iIndexMenu), NEXT];             // Première page ou page intermédiaire             if(n - iIndexMenu > 10)                 lBoutons = l + llList2List(lBoutonsMenu, iIndexMenu + 1, iIndexMenu + 9);             // Dernière page             else {                 if(iIndexMenu + 1 < n)                     lBoutons = l + llList2List(lBoutonsMenu, iIndexMenu + 1, -1);                 else lBoutons = l;}         }     }     // Envoi du menu     llDialog(kAvaMenu, sTexteMenu, lBoutons, iCanalMenu); }
  // -- Suppression d'un menu -- CancelMenu() {     // On teste s'il y a quelque chose à arrêter     if(iEcouteMenu) {         // Arrêt de l'écoute du canal         llListenRemove(iEcouteMenu);         iEcouteMenu = 0;         // Libération du menu         iBusy = FALSE;         // On arrête le timer         if(iMode == MODE_OFF) llSetTimerEvent(.0);} }
  // -- Fin du délai d'écoute des menu -- FinMenu() {     // On prévient l'avatar     llInstantMessage(kAvaMenu, "Time out for dialog.");     // On supprime le menu     CancelMenu(); }
  // -- Fonction qui génère un canal au hasard (négatif) -- // @ return [integer] retourne le canal integer GetRandomChannel() {     return ~(integer)llFrand((float)DEBUG_CHANNEL); }
 
  //---------------------------------------------------------------------------------- //                        LIBRARY VARIABLES //----------------------------------------------------------------------------------
  //---------------------------------------------- //                  MENUS //---------------------------------------------- string    PREVIOUS        = "<<<";    // Bouton pour page arrière string    NEXT            = ">>>";    // Bouton pour page avant float    TIMEOUT            = 30.0;        // Délai pour réponse au menu
  integer    iCanalMenu;                    // Canaux du Chat integer    iEcouteMenu;                // Handle de l'écoute integer    iIndexMenu;                    // Index de position dans les boutons integer    iTypeMenu;                    // Type de menu integer    iBusy;                        // Menu occupé string  sTexteMenu;                    // Texte pour le menu list    lBoutonsMenu;                // Boutons du menu key        kAvaMenu;                    // Clé de l'avatar
 
  //---------------------------------------------------------------------------------- //                               SCRIPT FUNCTIONS //----------------------------------------------------------------------------------
  //---------------------------------------------- //                  MENUS //----------------------------------------------
  // -- Création du menu général -- // @ param [key] clé de l'avatar Menu_Main(key id) {     list l = MENU_MAIN;     // Bouton marche/arrêt     if(iMode != MODE_OFF) l += "Off";     else l += "On";     // Affichage du menu     InitMenu(id, "\nSelect an option", l, TYPE_MENU_MAIN); }
  // -- Menu Settings -- Menu_Settings(key id) {     list l = MENU_SETTINGS;     // Mode Random ou Order     if(iRandom) l += "Order";     else l += "Random";     // Access si owner     if(id == llGetOwner()) l += "Access";     // Affichage du menu     InitMenu(id, "\nSelect an option", l, TYPE_MENU_SETTINGS); }
  // -- Menu d'accès -- Menu_Access(key id) {     integer i = llListFindList(ACCESS, [sAccess]);     InitMenu(id, "\nAccess is now " + sAccess + "\n\nSelect another access",         ["Back","Exit"] + llDeleteSubList(ACCESS, i, i), TYPE_MENU_ACCESS); }
  //---------------------------------------------- //                  AUTRES //----------------------------------------------
  // -- Test des droits d'accès -- // @ param [key] clé de l'avatar // @ return [interger] TRUE ou FALSE integer TestAccess(key id) {     if(sAccess == "Owner" && llGetOwner() == id) return TRUE;     else if(sAccess == "Group" && llSameGroup(id)) return TRUE;     else if(sAccess == "All") return TRUE;     else return FALSE; }
  // -- Test présence au moins 3 images -- // @ return [integer] TRUE ou FALSE integer Test_3_Images() {     integer i = llGetInventoryNumber(INVENTORY_TEXTURE) > 2;     if(i) return TRUE;     else {         llSay(0, "Sorry i need at least 3 textures to work !");         return FALSE;     } }
  // -- Mise en place d'une texture -- // @ param [integer] numéro primitive // @ param [integer] face primitive // @ param [integer] index texture Place_Texture(integer prim, integer face, integer idTexture) {     llSetLinkTexture(prim, llGetInventoryName(INVENTORY_TEXTURE, idTexture), face); }
  // -- Mise en place initiale -- Init() {     if(Test_3_Images()) {         // Fonctionnement aléatoire         if(iRandom) {             integer i;             integer n = llGetInventoryNumber(INVENTORY_TEXTURE) - 1;             integer p = randInt(n);             // Index aléatoires             for(; i < 2; ++i) {                 while(~llListFindList(lTextures, [p])) p = randInt(n);                 lTextures += p;             }         }         // Fonctionnement ordonné         else {             lTextures = [0,1,2];             iIndex = 2;         }         // Mise en place des textures         Place_Texture(PRIM_ECRAN, FACE_ECRAN, llList2Integer(lTextures, 0));         Place_Texture(PRIM_BASE, FACE_BASE, llList2Integer(lTextures, 1));         Place_Texture(PRIM_ECRAN, FACE_PRELOAD, llList2Integer(lTextures, 2));     } }
  // --  Mise en route -- Go() {     if(Test_3_Images()) {         iMode = MODE_SHOW;         // Mise en marche du timer         llSetTimerEvent(fTimeShow);     } }
  // -- Initialisation de la transition -- Init_Change() {     iMode = MODE_TRANS;     // Calcul du pas     fAlphaPas = fTempsBase / fTimeTrans;     // Initialisation alpha     fAlpha = 1.0;     // Réglage timer     llSetTimerEvent(fTempsBase); }
  // -- Changement d'image -- Change() {     // Diminution de l'alpha de l'écran     fAlpha -= fAlphaPas;     if(fAlpha > .0) llSetLinkAlpha(PRIM_ECRAN, fAlpha, FACE_ECRAN);     else {         // Réglage du timer         llSetTimerEvent(fTimeShow);         // Changement du mode         iMode = MODE_SHOW;         // Ecran transparent         llSetLinkAlpha(PRIM_ECRAN, .0, FACE_ECRAN);         // Mise en place image sur l'écran         Place_Texture(PRIM_ECRAN, FACE_ECRAN, llList2Integer(lTextures, 1));         // Petit délai de chargement         llSleep(.2);         // Nombre de textures         integer n = llGetInventoryNumber(INVENTORY_TEXTURE) - 1;         // Affichage de l'écran         llSetLinkAlpha(PRIM_ECRAN, 1.0, FACE_ECRAN);         // Mise en place image sur la base cachée         Place_Texture(PRIM_BASE, FACE_BASE, llList2Integer(lTextures, 2));         // Mise à jour de la liste des textures         lTextures = llListReplaceList(lTextures, llList2List(lTextures, 1, 2), 0, 1);         lTextures = llDeleteSubList(lTextures, 2, 2);         // Fonctionnement aléatoire         if(iRandom) {             integer p = randInt(n);             while(~llListFindList(lTextures, [p])) p = randInt(n);             lTextures += p;             Place_Texture(PRIM_ECRAN, FACE_PRELOAD, p);         }         // Fonctionnement ordonné         else {             if(++iIndex > n) iIndex = 0;             lTextures += iIndex;             Place_Texture(PRIM_ECRAN, FACE_PRELOAD, iIndex);         }     } }
  // --  Arrêt -- Off() {     iMode = MODE_OFF;     // Arrêt du timer     if(iEcouteMenu) llSetTimerEvent(TIMEOUT);     else llSetTimerEvent(.0); }
  //-------------------------------------------------------------------------------------- //                           VARIABLES GLOBALES //--------------------------------------------------------------------------------------
  //---------------------------------------------- //                  PARAMETRES //---------------------------------------------- string        VERSION            = "1.0"; integer        PRIM_BASE        = 1;        // Numéro de la primitive de base integer        PRIM_ECRAN        = 2;        // Numéro de la prim "écran" integer        FACE_BASE        = 0;        // Numéro de la face de base integer        FACE_ECRAN        = 0;        // Numéro de la face "écran" integer        FACE_PRELOAD    = 5;        // Numéro de la face de pré-chargement
  //---------------------------------------------- //                  MENU //---------------------------------------------- list     MENU_MAIN         = ["Exit","Settings"]; list    MENU_SETTINGS    = ["Back","Exit","Time Show","Time Trans"]; list     MENU_TIME        = ["Back","Exit","2s","5s","10s","20s","30s","40s","50","60s","120s","240s"]; list    ACCESS          = ["Owner","Group","All"];
  //---------------------------------------------- //                  VALEURS //---------------------------------------------- integer        TYPE_MENU_MAIN         = 0; integer        TYPE_MENU_ACCESS    = 1; integer        TYPE_MENU_SETTINGS    = 2; integer        TYPE_MENU_TIMESHOW    = 3; integer        TYPE_MENU_TIMETRANS    = 4;
  integer        MODE_OFF            = 0; integer        MODE_SHOW            = 1; integer        MODE_TRANS            = 2;
  //---------------------------------------------- //                  AUTRES //---------------------------------------------- integer        iMode;                    // Mode de fonctionnement  integer        iRandom;                // Mode Random integer        iIndex;                    // Index en mode ordonné string        sAccess     = "Owner";    // Accès float        fTimeShow    = 10.0;        // Durée de présence image float        fTimeTrans    = 5.0;        // Durée de transition float        fTempsBase    = .02;        // Temps de base float        fAlphaPas;                // Pas de changement de l'alpha float        fAlpha;                    // Valeur de l'alpha list        lTextures;                // Liste des index des 3 textures
  //-------------------------------------------------------------------------------------- //        STATE default //-------------------------------------------------------------------------------------- default {     state_entry() {         // Message         llWhisper(0, "Transition V"+ VERSION + " ready");         // Initialisation         Init();     }
      changed(integer change)    {         if(change & CHANGED_INVENTORY) Init();         }          touch_start(integer total_number)     {         key k = llDetectedKey(0);         if(TestAccess(k) == FALSE)             llInstantMessage(k, "Sorry no access for you.");         else {             if(iBusy && k != kAvaMenu)                 llInstantMessage(k, "Sorry but the menu is busy.");             else                 Menu_Main(k);         }     }
      listen(integer channel, string name, key id, string message) {         // Test de changement de page pour navigation         if(llListFindList([PREVIOUS,NEXT], [message]) != -1)             GestIndexBoutons(message);         // Traitement du bouton choisi         CancelMenu();         if(message == "Exit") return;         else {             // Traitement menu général             if(iTypeMenu == TYPE_MENU_MAIN)             {                 if(message == "On")                     Go();                 else if(message == "Off") {                     iMode = MODE_OFF;                     Off();}                 else if(message == "Settings")                     Menu_Settings(id);             }             // Gestion du menu Settings             else if(iTypeMenu == TYPE_MENU_SETTINGS) {                 if(message == "Back")                     Menu_Main(id);                 else if(message == "Access")                     Menu_Access(id);                 else if(message == "Random") {                     iRandom = TRUE;                     Menu_Settings(id);}                 else if(message == "Order") {                     iRandom = FALSE;                     Menu_Settings(id);}                 else if(message == "Time Show")                     InitMenu(id, "\nSelect a time for time show", MENU_TIME, TYPE_MENU_TIMESHOW);                 else if(message == "Time Trans")                     InitMenu(id, "\nSelect a time for time trans", MENU_TIME, TYPE_MENU_TIMETRANS);             }             // Gestion menu Access             else if(iTypeMenu == TYPE_MENU_ACCESS) {                 // Retour au menu général                 if(message == "Back")                     Menu_Settings(id);                 // Mise à jour de l'accès                 else {                     sAccess = message;                     Menu_Settings(id);}             }             else {                 if(message == "Back")                     Menu_Settings(id);                 else {                     // Gestion menus Time                     if(iTypeMenu == TYPE_MENU_TIMESHOW)                         fTimeShow = (float)message;                     else if(iTypeMenu == TYPE_MENU_TIMETRANS)                         fTimeTrans = (float)message;                     Menu_Settings(id);                 }             }         }     }
      timer()    {         if(iEcouteMenu && llGetTime() > TIMEOUT) FinMenu();         if(iMode == MODE_SHOW) Init_Change();         else if(iMode == MODE_TRANS) Change();     } } 
 
 
 
Et voilà c'est prêt. Vous n'avez plus qu'à cliquer sur le panneau pour avoir le menu et toutes ses options.
 
J'ai pas mal commenté le script pour ceux et celles qui veulent comprendre le fonctionnement.
   
		 
		
		
		
		
		
		
		
		
		
		
		
	 |