Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Lampenskript
#1
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

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);
    }
}
Zitieren
#2
Whow,danke schön RebekkaSmile
Zitieren
#3
Das sieht interessant aus. Werde ich mal ausprobieren. Danke - auch für die gute Beschreibung!
Zitieren
#4
Huhu

Danke RebekkaWink Das ist ja ein riesen Teil, muss das immer komplett in jeden Prim(der Lampe ist)? oder muss das irgendwo unterteilt und in verschiedene Prims gepackt werden, so das z.b. auch ein Lichtschalter genutzt werden kann? Oder brauch man da noch eins?

Auf jedenfall echt klasse, jetzt kann man noch mehr Atmosphaere in die Sim bringenWink


lg
Ezry
Nichts im Leben ist ein Muss!!!!!!!!!!!..............Alles ein Kann!!!!!


http://angels-world.selfhost.eu:8002
Zitieren
#5
Nein Ezry, das Skript kommt nur einmal in ein Lampenset. Kannst ja mehrere Lampen verlinken, so hab ichs meistens gemacht. Die Prims die leuchten sollen mussst nur umbenennen, also "light" oder was du eben ins Skript schreibst. Bei mehreren Lampen empfielt sich dann ein Schalter als Root Prim, da kommt das Skript eben da rein. Oder ferngesteuert, da brauchst das Skript einmal im Schalter und einmal im Linkset.
Hoffe das war einigermassen verständlich :-)
LG Reb
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste