Hello, Avatar!

Second Life et Programmation Créative

Aller au contenu | Aller au menu | Aller à la recherche

Keyword - LSL Facile

Fil des billets - Fil des commentaires

Libérez les contrôles !

Voici une petite astuce (rapide...) pour détecter qu'un avatar à libéré les contrôles, alors qu'il en a donné l'autorisation auparavant.

Il suffit de mettre un timer qui vérifie si les permissions sont encore actives, comme le montre le code ci-dessous :

// Surveille les permissions sur les contrôles
timer()
{
        if (!(PERMISSION_TAKE_CONTROLS & llGetPermissions()))
        {
                // Faire le travail ici... Le plus souvent, basculer vers un autre état.
        }
}

C'est simple de chez simple, mais il fallait y penser.

Jour, nuit, jour, nuit...

ampoule.pngCatherine Pfeiffer a envoyé un petit script via le groupe Constructeurs et Scripteurs : c'est un script qui allume et éteint une ampoule en fonction de l'heure qu'il est.

Catherine m'a expliqué qu'il était plus précis de se baser sur l'horloge SL plutôt que sur la position du soleil. C'est surtout bien plus simple, et ça permet de découvrir llGetGMTclock. Notez que l'emploi de llSetPrimitiveParams est nécessaire pour changer les attributs de luminosité.

// This script is licensed under GPL license version 2
//
// In short: feel free to redistribute and modify it, as long as
// any copies of it can be redistributed and modified as well.
//
// The official text of the licence is available at
// http://www.gnu.org/licences/gpl.html
//
// (c) The owner of Avatar Catherine Pfeffer, 2006-2007

integer old_value = -1;

// Set the light
setLight()
{
    integer time;
    integer value;

    time = (integer) llGetGMTclock();
    time = time % 14400;                // 4 hours is the length of the day

    if (8700 < time && time < 12900)    // night is between 2:30 and 3:30 GMT
        value = 0;
    else value = 1;

    if (value != old_value)
    {
        old_value = value;
        if (value == 0)
        {                              // night: switch on
            llSetPrimitiveParams( [ PRIM_FULLBRIGHT, ALL_SIDES, TRUE ] );
            llSetPrimitiveParams( [ PRIM_POINT_LIGHT, TRUE,
              <1, 1, 0>, 1.0, 20.0, 0.75 ] );
        }
        else
        {                              // day: switch off
            llSetPrimitiveParams( [ PRIM_FULLBRIGHT, ALL_SIDES, FALSE ] );
            llSetPrimitiveParams( [ PRIM_POINT_LIGHT, FALSE,
              <1, 1, 1>, 1.0, 20.0, 0.75 ] );
        }
    }    
}

// Event manager
default
{
    state_entry()
    {
        setLight();
        llSetTimerEvent(300);         // each 5 minutes
    }

    timer()
    {
        setLight();
    }
}

En gros : toutes les cinq minutes, on regarde l'heure; si on est entre 2:30 et 3:30 GMT et que la lumière est allumée, on l'éteint. Sinon, si la lumière est éteinte en dehors de cette tranche horaire, on l'allume.

Profitez-en pour aller voir le wiki naissant de ce nouveau groupe d'entraide dont je fais partie.

Un générateur de LSL online

Si vous avez besoin d'obtenir très rapidement du code LSL pour accomplir des tâches élémentaires, comme par exemple :

  • Rezzer un objet;
  • Donner quelque chose à un avatar;
  • Dire quelque chose dans le chat;
  • Changer la couleur de l'objet;
  • Changer la texture de l'objet...

Il vous suffit d'aller sur ce générateur en ligne, de choisir, puis d'appuyer sur le bouton "Make my script".

Ce petit générateur est hébergé sur le blog anglophone http://www.3greeneggs.com, animé par un professeur.

Une vitre qui s'opacifie quand on la touche ?

Le script d'une vitre qui devient opaque quand on la touche :

Niveau très facile :

// Du moins au plus opaque
list Alphas = [.25, .75, 1];

integer AlphaCourant = 0;

default
{
    touch_start(integer total_number)
    {
        if (++AlphaCourant > llGetListLength(Alphas) - 1)
            AlphaCourant= 0;
       
        llSetAlpha(llList2Float(Alphas, AlphaCourant), ALL_SIDES);
    }
}

Si vous souhaitez ajouter des pas intermédiaires, il suffit de changer ou d'ajouter des valeurs dans le tableau Alphas, sachant que 0 est invisible et 1 complètement opaque. A l'inverse de ce qu'on met dans la valeur Transparence de l'onglet Texture, attention !