[Résolu] Slide show

Répondre
Partager Rechercher
Dans ton cas je pense que la meilleure solution est d'utiliser le shared media du viewer 2. Tu composes ton slide show avec un outil de création dédié (c'est pas ce qui manque), tu mets ça sur un serveur gratos et tu n'a plus qu'à indiquer l'adresse HTTP pour voir ton slide show apparaître sur une face de primitive.

Sinon oui comme le dit le matou c'est possible avec du pur LSL mais ça me paraît anachronique.
Citation :
Publié par BlackAngel Mhia
Il y a le Slideshow chez Hippo pour 600L$ qui fait tout ça sur Xstreet il y a des (Networks).
Le slide de hippo ne fait pas de transition
Pour moi c'est possible facilement pour le script: il faut utiliser le système http://nivardus.com/sl/slanim.html en faisant des gif de transition d'image à image, et en trafiquant le script de base pour qu'il fonctionne avec un timer et non pas de maniére aléatoire.
Il faut bien sur respecter la convention de nommage des textures, en faisant pour les images fixes une animation à 1 frame.
C'est sur que si on veut une transition fondu entre 2 image c'est jouable mais ça va demander un certain boulot au niveau du gif.
Citation :
Publié par Elenia Boucher
Pour moi c'est possible facilement pour le script: il faut utiliser le système http://nivardus.com/sl/slanim.html en faisant des gif de transition d'image à image, et en trafiquant le script de base pour qu'il fonctionne avec un timer et non pas de maniére aléatoire.
Il faut bien sur respecter la convention de nommage des textures, en faisant pour les images fixes une animation à 1 frame.
C'est sur que si on veut une transition fondu entre 2 image c'est jouable mais ça va demander un certain boulot au niveau du gif.
Rhhha c'est beau le rêve

Ma scripteaseuse préféré je te rappelle que le setanimtexture c'est du local t'arrivera jamais à faire synchroniser la fin d'un défilement avec le début d'un autre, c'est comme mélanger du physic et du targetomega.

Mais t'inquiètes chuis dans la place
Je sens que les dernières fonctions qui viennent d'arriver vont me servir
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 ) :

Code PHP:

default
{
    
state_entry()
    {
        
llSetPrimitiveParams([PRIM_COLORALL_SIDES, <.4,.4,.4>, 1.0,
            
PRIM_COLOR0, <1.0,1.0,1.0>, 1.0,
            
PRIM_TEXTUREALL_SIDES"819d87ad-913d-37a7-1edf-d269f3bbb624", <8.9,.8,0.0>, <0.0,0.0,0.0>,0.0,
            
PRIM_TEXTURE0"819d87ad-913d-37a7-1edf-d269f3bbb624", <1.0,1.0,.0>, <0.0,0.0,0.0>,0.0,
            
PRIM_FULLBRIGHT0TRUE,
            
PRIM_POSITIONllGetPos() + <.0,.0,1.0>,
            
PRIM_ROTATIONllEuler2Rot(<270.00180.0> * DEG_TO_RAD),
            
PRIM_SIZE, <2.0,1.5,.06812>,
            
PRIM_TYPEPRIM_TYPE_BOX0, <0.01.00.0>, 0.0, <0.00.00.0>, <.9.90.0>, <0.00.00.0>]);
        
llSetLinkPrimitiveParams(2,[PRIM_COLORALL_SIDES, <.4,.4,.4>, 1.0,
            
PRIM_COLOR0, <1.0,1.0,1.0>, 1.0,
            
PRIM_TEXTUREALL_SIDES"819d87ad-913d-37a7-1edf-d269f3bbb624", <8.9,.8,0.0>, <0.0,0.0,0.0>,0.0,
            
PRIM_TEXTURE0"819d87ad-913d-37a7-1edf-d269f3bbb624", <1.0,1.0,.0>, <0.0,0.0,0.0>,0.0,
            
PRIM_FULLBRIGHT0TRUE,
            
PRIM_POSITION, <.0,.0,.002>,
            
PRIM_ROTATIONllEuler2Rot(<270.00180.0> * DEG_TO_RAD),
            
PRIM_SIZE, <1.8,1.35,.06812>,
            
PRIM_TYPEPRIM_TYPE_BOX0, <0.01.00.0>, 0.0, <0.00.00.0>, <1.01.00.0>, <0.00.00.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 :

Code PHP:

//----------------------------------------------------------------------------------
//
//                              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(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 idstring texte, list boutonsinteger typemenu) {
    
// Mise en route du timer
    
if(iMode == MODE_OFFllSetTimerEvent(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(23) {
        if(
iIndexMenuiIndexMenu 0;
        else 
iIndexMenu 11;}
    
// Navigation riche pour plus de deux pages
    
else {
        if(
browse == NEXT) {
            
iIndexMenu += 10;
            if(
iIndexMenu >= niIndexMenu 0;}
        else {
            
iIndexMenu -= 10;
            if(
iIndexMenu 0iIndexMenu 10;}
    }
    
// Mise en route du timer
    
if(iMode == MODE_OFFllSetTimerEvent(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(12) {
        
// Que 2 pages -> navigation simple
        
if(23) {
            
// Deuxième page
            
if(iIndexMenu)
                
lBoutons = [PREVIOUS] + llList2List(lBoutonsMenuiIndexMenu, -1);
            
// Première page
            
else
                
lBoutons llList2List(lBoutonsMenu01) + [NEXT] + llList2List(lBoutonsMenu210);}
        
// Plus de 2 pages -> navigation riche
        
else {
            list 
= [PREVIOUSllList2String(lBoutonsMenuiIndexMenu), NEXT];
            
// Première page ou page intermédiaire
            
if(iIndexMenu 10)
                
lBoutons llList2List(lBoutonsMenuiIndexMenu 1iIndexMenu 9);
            
// Dernière page
            
else {
                if(
iIndexMenu n)
                    
lBoutons llList2List(lBoutonsMenuiIndexMenu 1, -1);
                else 
lBoutons l;}
        }
    }
    
// Envoi du menu
    
llDialog(kAvaMenusTexteMenulBoutonsiCanalMenu);
}

// -- 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_OFFllSetTimerEvent(.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 
MENU_MAIN;
    
// Bouton marche/arrêt
    
if(iMode != MODE_OFF+= "Off";
    else 
+= "On";
    
// Affichage du menu
    
InitMenu(id"\nSelect an option"lTYPE_MENU_MAIN);
}

// -- Menu Settings --
Menu_Settings(key id) {
    list 
MENU_SETTINGS;
    
// Mode Random ou Order
    
if(iRandom+= "Order";
    else 
+= "Random";
    
// Access si owner
    
if(id == llGetOwner()) += "Access";
    
// Affichage du menu
    
InitMenu(id"\nSelect an option"lTYPE_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(ACCESSii), 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 priminteger faceinteger idTexture) {
    
llSetLinkTexture(primllGetInventoryName(INVENTORY_TEXTUREidTexture), 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(; 2; ++i) {
                while(~
llListFindList(lTextures, [p])) randInt(n);
                
lTextures += p;
            }
        }
        
// Fonctionnement ordonné
        
else {
            
lTextures = [0,1,2];
            
iIndex 2;
        }
        
// Mise en place des textures
        
Place_Texture(PRIM_ECRANFACE_ECRANllList2Integer(lTextures0));
        
Place_Texture(PRIM_BASEFACE_BASEllList2Integer(lTextures1));
        
Place_Texture(PRIM_ECRANFACE_PRELOADllList2Integer(lTextures2));
    }
}

// --  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 .0llSetLinkAlpha(PRIM_ECRANfAlphaFACE_ECRAN);
    else {
        
// Réglage du timer
        
llSetTimerEvent(fTimeShow);
        
// Changement du mode
        
iMode MODE_SHOW;
        
// Ecran transparent
        
llSetLinkAlpha(PRIM_ECRAN.0FACE_ECRAN);
        
// Mise en place image sur l'écran
        
Place_Texture(PRIM_ECRANFACE_ECRANllList2Integer(lTextures1));
        
// Petit délai de chargement
        
llSleep(.2);
        
// Nombre de textures
        
integer n llGetInventoryNumber(INVENTORY_TEXTURE) - 1;
        
// Affichage de l'écran
        
llSetLinkAlpha(PRIM_ECRAN1.0FACE_ECRAN);
        
// Mise en place image sur la base cachée
        
Place_Texture(PRIM_BASEFACE_BASEllList2Integer(lTextures2));
        
// Mise à jour de la liste des textures
        
lTextures llListReplaceList(lTexturesllList2List(lTextures12), 01);
        
lTextures llDeleteSubList(lTextures22);
        
// Fonctionnement aléatoire
        
if(iRandom) {
            
integer p randInt(n);
            while(~
llListFindList(lTextures, [p])) randInt(n);
            
lTextures += p;
            
Place_Texture(PRIM_ECRANFACE_PRELOADp);
        }
        
// Fonctionnement ordonné
        
else {
            if(++
iIndex niIndex 0;
            
lTextures += iIndex;
            
Place_Texture(PRIM_ECRANFACE_PRELOADiIndex);
        }
    }
}

// --  Arrêt --
Off() {
    
iMode MODE_OFF;
    
// Arrêt du timer
    
if(iEcouteMenullSetTimerEvent(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_INVENTORYInit();    
    }
    
    
touch_start(integer total_number)
    {
        
key k llDetectedKey(0);
        if(
TestAccess(k) == FALSE)
            
llInstantMessage(k"Sorry no access for you.");
        else {
            if(
iBusy && != kAvaMenu)
                
llInstantMessage(k"Sorry but the menu is busy.");
            else
                
Menu_Main(k);
        }
    }

    
listen(integer channelstring namekey idstring 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_TIMETYPE_MENU_TIMESHOW);
                else if(
message == "Time Trans")
                    
InitMenu(id"\nSelect a time for time trans"MENU_TIMETYPE_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() > TIMEOUTFinMenu();
        if(
iMode == MODE_SHOWInit_Change();
        else if(
iMode == MODE_TRANSChange();
    }

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.

Citation :
Publié par Magic Cat
Bon miss Linden si la solution de bestmomo te conviens pas de soucis, sinon j'ai une alternative....
D'autres ne disent pas qu'ils ont une solution.
Ils ne disent rien, ou la donnent.
Citation :
Publié par Magic Cat
ou il lavande car ca sent bon...
Entre un script gracieusement proposé par bestmomo et un script dont on ne sait rien d'autre qu'il est payant et sent bon, je pense que le bon sens orientera vers la première solution.

J'avais cru comprendre que ce forum avait pour vocation l'entraide, pas le commerce. Je me suis apparemment trompé.
Citation :
Publié par Mingyar Ishtari
Entre un script gracieusement proposé par bestmomo et un script dont on ne sait rien d'autre qu'il est payant et sent bon, je pense que le bon sens orientera vers la première solution.

J'avais cru comprendre que ce forum avait pour vocation l'entraide, pas le commerce. Je me suis apparemment trompé.
Bonjour,
Je ne sais pas si tu es un ancien du forum, mais il fut une époque où le chat magique s'appelait Lancelot et où il donnait généreusement ses scripts à ceux qui en faisaient la demande.
Cette belle époque a pris fin le jour où il s'est rendu compte que des scripts demandés l'étaient pour une mise en vente.
Plop ici, stop au débat, ou alors ouvrez un autre sujet.
Le forum de script est ouvert à tous, si certains veulent vendre leurs scripts ils en ont entièrement le droit, personne n'est obligé de travailler gratuitement, si d'autre veulent l'offrir, ils ont le droit également.
Merci de votre compréhension.
[auto-modération]

Solo n'a pas cité aussi les centaines d'heures de cours gratuite que j'ai donné à l'ecole SL.
Le mot entraide je connais c'set moi qui l'ai inventé LOL
Hop hop hop!
Je rappelle que, même si ce forum est un forum d'entraide (entre autres), personne n'est obligé de mettre son script à la disposition de tous. Si un scripteur préfère le donner directement à la personne qui le demande ou même le lui vendre, c'est son droit.
Ce point étant rappelé, revenons au "Script spécial show". Merci.


Edit : Grillée par Biouby... Mais ça vaut aussi le beau gosse juste au dessus, hein...
Répondre

Connectés sur ce fil

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