Voici un script efficace et instructif pour allumer et éteindre une lampe (lampe de chevet, ampoule, plafonnier, lampadaire) automatiquement en fonction du jour et de la nuit. Ce script est proposé en liaison avec le tutoriel de Surfaqua Oh : lampe de chevet

 

// Simple controleur de lumiere par commande automatique selon le jour ou la nuit

vector vLightColor = <1.0, 1.0, 0.5>; //La couleur de la lumière émise (pas la couleur de la lampe)
float fIntensity = 1.0; // Agit comme un variateur de lumière pour ajuster le flux
float fRadius = 3.0; //C'est la distance de pleine intensité mesurée à partir de l'ampoule
float fDimming = 1.0; //C'est l'atténuation de la lumière ; 0.0 pleine lumière quelque soit la distance ; 2.0 très atténuée par la distance
//En ajustant les 3 paramètres on obtient le bon effet

float fGlow = 0.02; //C'est la brillance de la lampe, ne pas abuser!

vector vColorOn = <1.0, 1.0, 1.0>; //C'est un ajout de couleur quand on allume
vector vColorOff = <0.7, 0.7, 0.7>; //C'est la'jout de couleur quand on éteint

key kOwner; //la clé unique du propriétaire de la lampe ; ça sert à empêcher les autres de jouer avec

integer bState = TRUE; //indicateur de l'état de la lampe ; TRUE = allumée ; FALSE = éteinte

float fDelay = 10.0; //le délai en secondes entre 2 vérifications de l'état jour/nuit

//Cette fonction indique si il fait nuit ou jour dans la région où se trouve le script
integer gkDayOrNight()
{
vector vPosSun = llGetSunDirection(); //cette fonction standard nous renvoie un vecteur avec la position du soleil par rapport à l'horizon
if (vPosSun.z <= 0.0) //Le soleil est sous l'horizon
{
return FALSE; //alors la fonction retourne FALSE
}
else //Le soleil est au-dessus de l'horizon
{
return TRUE; //alors la fonction retourne TRUE
}
}

default
{
state_entry()
{
llWhisper(0, "Lumière allumée"); //au lancement du script, indique que l'on démarre avec la lampe allumée
//Cette instruction paramètre la lampe lorsqu'elle est allumée ; les commande sont à l'intérieure d'une liste, d'où les [...]
llSetPrimitiveParams ([PRIM_POINT_LIGHT, TRUE, vLightColor, fIntensity, fRadius, fDimming, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_GLOW, ALL_SIDES, fGlow]);
//PRIM_POINT_LIGHT : définit la lumière projetée par la lampe sur le reste du décor ; correspond à la partie lumière de l'onglet Attributs de la fenêtre de modification
//PRIM_FULLBRIGHT : définit la luminosité de la lampe ; correspond à la case Lumineux de l'onglet Texture de la fenêtre de modification
//PRIM_GLOW : définit le rayonnement de la lampe ; correspond à la case Rayonnement de l'onglet Texture de la fenêtre de modification
//TRUE : c'est quand la case correspondante est cochée
//FALSE : c'est quand la case correspondante n'est pas cochée
//ALL_SIDES : affecte toutes les faces de l'objet
//autres paramètres : voir en début de programme

llSetColor(vColorOn,ALL_SIDES); //place une ajout de couleur blanche quand la lampe est allumée
kOwner = llGetOwner(); //La clé unique du propriétaire est mémorisée
llSetTimerEvent(fDelay); //On demande un event timer toutes les fDelay secondes
}
//L'initialisation du script est terminée ; plus rien ne se passe tant que l'on ne touche pas l'objet ou que le timer nous dit que l'état jour/nuit a changé

touch_start(integer iNbrTouch) //déclencher si quelqu'un touche l'objet
{
if(llDetectedKey(0) == kOwner) //Pour que le propriétaire de la lampe soit le seul à allumer la lampe, on vérifie que la clé de celui qui a touché ets égale à la clé du propriétaire
{
if(bState == FALSE) //si le lampe est éteinte, il faut l'allumer
{
llSetColor(vColorOn,ALL_SIDES); //place une ajout de couleur blanche quand la lampe est allumée
llSetPrimitiveParams ([PRIM_POINT_LIGHT, TRUE, vLightColor, fIntensity, fRadius, fDimming, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_GLOW, ALL_SIDES, fGlow]); //voir la même instruction plus haut
bState = TRUE; //indiquer que la lampe est allumée
}
else //sinon la lampe est allumée, il faut l'éteindre
{
llSetColor(vColorOff,ALL_SIDES); //place une ajout de couleur grise quand la lampe est allumée
llSetPrimitiveParams ([PRIM_POINT_LIGHT, FALSE, vLightColor, fIntensity, fRadius, fDimming, PRIM_FULLBRIGHT, ALL_SIDES, FALSE, PRIM_GLOW, ALL_SIDES, 0.0]); //voir la même instruction plus haut
bState = FALSE; //Indiquer que la lampe est éteinte
}
}
}

timer()
{
bState = !gkDayOrNight(); //ceci met dans bState l'inverse de la réponse. Si la réponse est FALSE (nuit) bState devient TRUE (allumée). Si la réponse est TRUE (jour) bState devient FALSE (éteinte). Il ne reste plus qu'à appliquer le résultat
if(bState == TRUE) //il faut allumer la lampe
{
llSetColor(vColorOn,ALL_SIDES); //place une ajout de couleur blanche quand la lampe est allumée
llSetPrimitiveParams ([PRIM_POINT_LIGHT, TRUE, vLightColor, fIntensity, fRadius, fDimming, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_GLOW, ALL_SIDES, fGlow]); //voir la même instruction plus haut
}
else //sinon il faut éteindre la lampe
{
llSetColor(vColorOff,ALL_SIDES); //place une ajout de couleur grise quand la lampe est allumée
llSetPrimitiveParams ([PRIM_POINT_LIGHT, FALSE, vLightColor, fIntensity, fRadius, fDimming, PRIM_FULLBRIGHT, ALL_SIDES, FALSE, PRIM_GLOW, ALL_SIDES, 0.0]); //voir la même instruction plus haut
bState = FALSE; //Indiquer que la lampe est éteinte
}
}

on_rez(integer iPNumb) //lorsque la lampe est sortie de l'inventaire
{
llResetScript(); //le script est réinitialisé
}
}
//Il existe d'autres moyens pour éteindre/allumer la lampe ; en la touchant avec l'évènement touch ; en passant commande dans le chat public.

//En fouillant la Librairie Scripts de http://www.avatars-3d.com/librairie-script vous trouverez de tels scripts.

 

 


Les commentaires vous expliquent les bases nécessaires pour obtenir le résultat ; placer ce script dans la racine de l'objet ou dans la prim qui fait office d'ampoule. Laissez la lampe décider seule si elle doit être allumée ou éteinte en fonction du jour et de la nuit (fonctionnement aléatoire si l'état du soleil a été bidouillé par l'estate owner). Pour vérifier à tout moment le bon fonctionnement de la lampe, cliquez avec le bouton gauche pour éteindre et cliquez à nouveau pour allumer. A vous maintenant, une fois le mécanisme compris, de l'améliorer et de l'adapter dans vos créations.

Dans le Librairie Script vous trouverez 2 autres scripts proposant des mécanismes différents d'allumage : Lampe de chevet automatique - Lamp avec Commande par touch et Lampe de chevet - Commande vocale