[script testé] Double porte coulissante en 1 primitive (vérouillable et sonore)

1 post / 0 new
#1 Wed, 05/04/2017 - 10:47
No picture available
Archael Magic

[script testé] Double porte coulissante en 1 primitive (vérouillable et sonore)

Bonjour,

Un vieux script que j'ai eu un peu de mal à retrouver mais que j'affectionne particulièrement pour la simplicité de sa mise en place et l'absence totale de paramétrage.

//********************************************************
//Ce script à été sélectionné pour vous par YadNi Monde 
//dans le FORUM SecondLife
//Son auteur souhaite qu'il reste gratuit et commenté.
//Les commentaires incluent le mode d'emploi et aucune aide
//ne sera apportée par YadNi Monde ni par l'auteur.
//SI CELA NE VOUS CONVIENT PAS, NE L'UTILISEZ PAS !
//Commentaires traduits et implémentés, script simplifié par Archael Magic pour utilisation francophone
//********************************************************

//La double porte coulissante 1 primitive a été écrite par Seagel Neville en Novembre 2006 pour le domaine public
//
//Bonjour,
//
//Ceci est pour une double porte coulissant en 1 primitive.
//Déposez juste ce script dans une primitive.
//Vous pouvez l'ouvrir en la touchant ou en la percuttant.
//Par sécurité, elle est vérouillable par le propriétaire.
//Après l'avoir déposé, pous pouvez en changer la taille, la couleur et la transparence.
//Je vous déconseille de la texturer parce qu'elle a des faces très complexes 


integer pitch = 5;
float TimeInterval = 3.0;
integer TouchFlag;
integer Holding;
integer SecureFlag;

Open()
{
    TouchFlag = TRUE;
    llTriggerSound("0de28e42-de04-4244-b903-46917c693877", 1.0);//UUID de votre son
    integer i;
    for(i = 0; i < pitch + 1; i++)
    {
        llSetPrimitiveParams([PRIM_TYPE, 0, 0, <0.000000, 1.000000, 0.000000>,
        0.949000, <0.000000, 0.000000, 0.000000>, <(float)i/pitch, 1.000000, 0.000000>,
        <0.000000, 0.000000, 0.000000>]);   
    }
    llSetTimerEvent(TimeInterval);
}

Close()
{
    llSetTimerEvent(0);
    TouchFlag = FALSE;
    llTriggerSound("0de28e42-de04-4244-b903-46917c693877", 1.0);//UUID de votre son
    integer i;
    for(i = pitch - 1; i >= 0 ; i--)
    {
        llSetPrimitiveParams([PRIM_TYPE, 0, 0, <0.000000, 1.000000, 0.000000>,
        0.949000, <0.000000, 0.000000, 0.000000>, <(float)i/pitch, 1.000000, 0.000000>,
        <0.000000, 0.000000, 0.000000>]);
    }
}

TouchOpen()
{
    if(TouchFlag == FALSE)
    {
        Open();
    }
    else
    {
        Close();
    }
}

CollideOpen()
{
    if(TouchFlag == FALSE)
    {
        Open();
    }
    else
    {
        llSetTimerEvent(TimeInterval);
    }
}

Init()
//ATTENTION Si vous ne mettez pas cette section en commentaire, votre porte reprend un alignement, une forme et une couleur qui ne vous conviendront peut-être pas, à chaque réinitialisation du script
//{
//    llSetPrimitiveParams([PRIM_MATERIAL, PRIM_MATERIAL_GLASS, PRIM_SIZE, <2.0, 2.7, 0.01>,
//    PRIM_TYPE, 0, 0, <0.0, 1.0, 0.0>, 0.949, <0.0, 0.0, 0.0>, <0.0, 1.0, 0.0>, <0.0, 0.0, 0.0>,
//    PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_ROTATION, <0.7, 0, 0, 0.7>,
//    PRIM_COLOR, ALL_SIDES, <0.0, 0.0, 0.5>, 0.5, PRIM_POSITION, llGetPos() + (<0, 0, 1.1> * llGetRot()),
//    PRIM_TEXTURE, ALL_SIDES, "", //UUID de votre texture
//    <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>, 0.0]);
//}
//fin de section
{
        SecureFlag = FALSE; // Pour vérouiller : TRUE
}
default
{
    state_entry()
    {
        Init();
    }
    changed(integer change)
    {
        if(change & CHANGED_OWNER)
        {
            llResetScript();
        }
    }
    touch(integer total_number)
    {
        if(llDetectedKey(0) == llGetOwner())
        {
            Holding++;
            if(Holding == 50)
            {
                if(SecureFlag == TRUE)
                {
                    llOwnerSay("Sécurité active");
                    SecureFlag = TRUE;
                }
                else
                {
                    llOwnerSay("Sécurité désactivée");
                    SecureFlag = FALSE;
                }
            }
        }
    }
    touch_end(integer total_number)
    {
        Holding = 0;
        if(SecureFlag == FALSE)
        {
            TouchOpen();
        }
        else
        {
            if(llDetectedKey(0) == llGetOwner())
            {
                TouchOpen();
            }
            else
            {
                llWhisper(0, "Désolé, cette porte est vérouillée.");
            }
        }
    }
    collision_start(integer num_detected)
    {
        if(SecureFlag == FALSE)
        {
            CollideOpen();
        }
        else
        {
            if(llDetectedKey(0) == llGetOwner())
            {
                CollideOpen();
            }
            else
            {
                llWhisper(0, "Désolé, cette porte est vérouillée.");
                llSleep(5.0);
            }
        }
    }
    timer()
    {
        Close();
    }
}