// 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.
|