06.11.2012, 12:32
(Dieser Beitrag wurde zuletzt bearbeitet: 06.11.2012, 14:43 von Rebekka Revnik.)
Ich richte grad mein Haus ein und da hat mich bei den Lampen gestört, dass da immer massenhaft Skripte drin waren. Also hab ich mir mal ein Lampen-Skript gemacht, das für alles geeignet ist und das bei mir jetzt in alle Lampen kommt. Vielleicht kanns ja noch jemand gebrauchen.
Außerdem hat hier schon zu lange keiner mehr was geschrieben :-)
Mal ne kurze Erläuterung:
Mit dem Skript kann man eine oder mehrere Lampen steuern, per Klick und/oder automatisch bei Nacht oder Tag einschalten. Wer nur die Automatik Wünscht, löscht einfach das Event touch_start aus dem Skript raus. Per Linkset wird nur ein Skript benötigt.
Die Prims der Lampe, die leuchten sollen, benennt ihr wie es bei PRIMNAME steht, also hier "light". Der gilt immer für das gesamte Linkset, also kann man auch mehrere Lampen verlinken und braucht dann nur das eine Skript.
Der Channel ist nur dafür da, um nicht verlinkte Lampen simweit fernzusteuern, in jede Lampe muss dann das Skript rein. Mit unterschiedlichen Kanälen kann man so auch verschiedene Lampengruppen steuern. Wird das nicht benötigt, einfach nur Channel = 0 setzen.
Wenn AUTOMATIC = TRUE ist dann wird die Lampe automatisch bei Nacht eingeschaltet (oder bei Tag wenn ON_AT_NIGHT = FALSE ist, warum auch immer man das brauchen sollte). Man kann die Lampe dann aber trotzdem per Hand abschalten, sie wird dann erst wieder nächste Nacht automatisch eingeschaltet.
Es folgen die drei möglichen Prim-Eigenschaften Glow, Light und Fullbright, die kann jeder so einstellen wie er will. Die jeweils erste Konstante mit _ON am Ende gibt an, ob diese Eigenschaft verwendet werden soll oder nicht. (Wenn alle drei ausgeschaltet sind ist es aber keine Lampe mehr.)
Und zum Schluss kann mans noch einen Sound ertönen lassen wenn man die Lampe anklickt...
Edit: Sorry Zeile vergessen
Außerdem hat hier schon zu lange keiner mehr was geschrieben :-)
Mal ne kurze Erläuterung:
Mit dem Skript kann man eine oder mehrere Lampen steuern, per Klick und/oder automatisch bei Nacht oder Tag einschalten. Wer nur die Automatik Wünscht, löscht einfach das Event touch_start aus dem Skript raus. Per Linkset wird nur ein Skript benötigt.
Die Prims der Lampe, die leuchten sollen, benennt ihr wie es bei PRIMNAME steht, also hier "light". Der gilt immer für das gesamte Linkset, also kann man auch mehrere Lampen verlinken und braucht dann nur das eine Skript.
Der Channel ist nur dafür da, um nicht verlinkte Lampen simweit fernzusteuern, in jede Lampe muss dann das Skript rein. Mit unterschiedlichen Kanälen kann man so auch verschiedene Lampengruppen steuern. Wird das nicht benötigt, einfach nur Channel = 0 setzen.
Wenn AUTOMATIC = TRUE ist dann wird die Lampe automatisch bei Nacht eingeschaltet (oder bei Tag wenn ON_AT_NIGHT = FALSE ist, warum auch immer man das brauchen sollte). Man kann die Lampe dann aber trotzdem per Hand abschalten, sie wird dann erst wieder nächste Nacht automatisch eingeschaltet.
Es folgen die drei möglichen Prim-Eigenschaften Glow, Light und Fullbright, die kann jeder so einstellen wie er will. Die jeweils erste Konstante mit _ON am Ende gibt an, ob diese Eigenschaft verwendet werden soll oder nicht. (Wenn alle drei ausgeschaltet sind ist es aber keine Lampe mehr.)
Und zum Schluss kann mans noch einen Sound ertönen lassen wenn man die Lampe anklickt...
Edit: Sorry Zeile vergessen
Code:
// Konstanten
// Allgemeines
string PRIMNAME = "light"; // Name der Prims die als Lampen fungieren
integer CHANNEL = -99999; // Listenerkanal (0 wenn nicht gewünscht)
// Nachtschaltung
integer AUTOMATIC = TRUE; // Soll automatisch eingeschaltet werden?
integer ON_AT_NIGHT = TRUE; // Lampe an bei Nacht (wenn FALSE dann an bei Tag)
// Glühen
integer GLOW_ON = TRUE; // Glühen an oder nicht
float GLOW_INTENSITY = 0.5; // Intensität des Glühens (0..1)
integer GLOW_SIDE = ALL_SIDES; // Seite(n) fürs Glühen
// Leuchten
integer LIGHT_ON = TRUE; // Licht an oder nicht
vector LIGHT_COLOR = <1.0, 1.0, 1.0>; // Farbe für Licht
float LIGHT_INTENSITY = 1.0; // Intensität des Leuchtens (0..1)
float LIGHT_RADIUS = 5.0; // Lichtradius in m
float LIGHT_FALLOFF = 0.75; // Abfall des Leuchtens
// Helligkeit
integer BRIGHT_ON = TRUE; // Helligkeit an oder nicht
integer BRIGHT_SIDE = ALL_SIDES; // Seite(n) für die Helligkeit
// Schalter-Sound
integer PLAY_SOUND = TRUE; // Sound an oder nicht
float SOUND_VOL = 0.5; // Lautstärke (0..1)
string SOUND = "bac3e333-9624-4b1a-ade2-d2b01d5960aa"; // ein Klicken
// Variablen
integer Mode;
integer On;
integer LastCheck = FALSE;
LightOn()
{
list l = [];
if(LIGHT_ON) l += [PRIM_POINT_LIGHT, TRUE, LIGHT_COLOR, LIGHT_INTENSITY, LIGHT_RADIUS, LIGHT_FALLOFF];
if(GLOW_ON) l += [PRIM_GLOW, GLOW_SIDE, GLOW_INTENSITY];
if(BRIGHT_ON) l += [PRIM_FULLBRIGHT, TRUE];
integer i;
integer x = llGetNumberOfPrims();
for(i = 1; i <= x; i++) if(llGetLinkName(i) == PRIMNAME) llSetLinkPrimitiveParamsFast(i, l);
if(CHANNEL != 0) llRegionSay(CHANNEL, (string)TRUE);
On = TRUE;
}
LightOff()
{
list l = [];
if(LIGHT_ON) l += [PRIM_POINT_LIGHT, FALSE, LIGHT_COLOR, LIGHT_INTENSITY, LIGHT_RADIUS, LIGHT_FALLOFF];
if(GLOW_ON) l += [PRIM_GLOW, GLOW_SIDE, 0.0];
if(BRIGHT_ON) l += [PRIM_FULLBRIGHT, FALSE];
integer i;
integer x = llGetNumberOfPrims();
for(i = 1; i <= x; i++) if(llGetLinkName(i) == PRIMNAME) llSetLinkPrimitiveParamsFast(i, l);
if(CHANNEL != 0) llRegionSay(CHANNEL, (string)FALSE);
On = FALSE;
}
Switch(integer on)
{
if(on) LightOn(); else LightOff();
}
default {
state_entry()
{
Mode = FALSE;
On = FALSE;
Switch(On);
if(CHANNEL != 0)
{
llRegionSay(CHANNEL, (string)On);
llListen(CHANNEL, "", NULL_KEY, "");
}
if(AUTOMATIC) llSetTimerEvent(60.0);
}
touch_start(integer total_number)
{
if (PLAY_SOUND) llPlaySound(SOUND, SOUND_VOL);
On = !On;
Switch(On);
}
on_rez(integer start_param)
{
llResetScript();
}
timer()
{
vector v = llGetSunDirection();
if (v.z < 0.0) Mode = ON_AT_NIGHT;
else Mode = !ON_AT_NIGHT;
if (Mode != LastCheck)
{
Switch(Mode);
LastCheck = Mode;
}
}
listen(integer channel, string name, key id, string message)
{
On = (integer)message;
Switch(On);
}
}