LSL-Tür-Skript: Berühren zum Öffnen, schließt sich selbst
Kostenloses LSL-Türskript für Second Life. Berühren zum Öffnen und Schließen, die Tür schwingt um ihr Scharnier und schließt sich nach einigen Sekunden selbst. Geräusche optional.
Ein einfaches, zuverlässiges Türskript für Second Life. Berühre die Tür, und sie schwingt auf ihrem Scharnier auf; berühre sie erneut, um sie zu schließen, oder lass sie nach einigen Sekunden von selbst zufallen. Das Skript merkt sich bei jedem Öffnen, wo die geschlossene Tür steht, sodass du die Tür später verschieben kannst und sie trotzdem funktioniert.
// Touch Door with auto-close - free LSL script from WhatSL (https://whatsl.com/scripts/lsl-door-script)
// Free to use, change and put in your own creations, also ones you sell.
//
// Put this script in an upright door that is its own object (not linked to the house).
// The door's width must run along its X axis (the red arrow in the Edit window).
// Touch to open, touch again to close. It also closes by itself after AUTO_CLOSE seconds.
float OPEN_ANGLE = 90.0; // degrees to swing; use -90.0 to open the other way
float AUTO_CLOSE = 10.0; // seconds before it closes by itself; 0.0 = stay open
integer HINGE_SIDE = 1; // 1 = hinge on the +X edge, -1 = hinge on the -X edge
string OPEN_SOUND = ""; // optional: a sound name in the door's Contents, or a sound UUID
string CLOSE_SOUND = "";
integer gOpen = FALSE;
vector gClosedPos;
rotation gClosedRot;
openDoor()
{
// remember where the closed door is, so the door can be moved and still work
gClosedPos = llGetPos();
gClosedRot = llGetRot();
vector size = llGetScale();
vector hinge = gClosedPos + <HINGE_SIDE * size.x * 0.5, 0.0, 0.0> * gClosedRot;
rotation turn = llEuler2Rot(<0.0, 0.0, OPEN_ANGLE * DEG_TO_RAD>);
llSetLinkPrimitiveParamsFast(LINK_THIS, [
PRIM_POSITION, hinge + (gClosedPos - hinge) * turn,
PRIM_ROTATION, gClosedRot * turn
]);
if (OPEN_SOUND != "") llPlaySound(OPEN_SOUND, 1.0);
gOpen = TRUE;
if (AUTO_CLOSE > 0.0) llSetTimerEvent(AUTO_CLOSE);
}
closeDoor()
{
llSetTimerEvent(0.0);
llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_POSITION, gClosedPos, PRIM_ROTATION, gClosedRot]);
if (CLOSE_SOUND != "") llPlaySound(CLOSE_SOUND, 1.0);
gOpen = FALSE;
}
default
{
touch_start(integer total)
{
if (gOpen) closeDoor();
else openDoor();
}
timer()
{
closeDoor();
}
}
Frei nutzbar, änderbar und in eigenen Kreationen verwendbar, auch in solchen, die du verkaufst.
So richtest du es ein
- Baue oder rezze deine Tür. Sie muss aufrecht stehen und ein eigenes Objekt sein, nicht mit dem Haus verlinkt.
- Prüfe, ob die Breite der Tür entlang ihrer X-Achse verläuft (der rote Pfeil im Bearbeiten-Fenster). Falls nicht, drehe die Tür mit den Bauwerkzeugen oder tausche die Größenwerte.
- Öffne den Reiter Inhalt, klicke auf Neues Skript, füge das Skript ein und speichere.
- Berühre die Tür. Öffnet sie sich in die falsche Richtung, setze OPEN_ANGLE auf -90.0. Dreht sie sich um die falsche Kante, setze HINGE_SIDE auf -1.
Einstellungen
- OPEN_ANGLE: wie weit die Tür schwingt, in Grad.
- AUTO_CLOSE: Sekunden, bis die Tür sich von selbst schließt; 0.0 lässt sie offen, bis sie berührt wird.
- HINGE_SIDE: welche senkrechte Kante das Scharnier ist.
- OPEN_SOUND / CLOSE_SOUND: der Name eines Sounds im Inhalt der Tür oder eine Sound-UUID. Leer lassen für Stille.
Tipps
- Bei Doppeltüren füge das Skript in beide Türen ein und setze eine auf OPEN_ANGLE 90.0 und die andere auf -90.0.
- Türen, die Teil eines verlinkten Hauses sind, brauchen eine andere Methode. Am einfachsten ist es, die Tür zu entlinken und als eigenes Objekt zu behalten.
Häufig gestellte Fragen
Warum dreht sich meine Tür um ihre Mitte?
Das Skript dreht sich um eine Kante, die es aus der X-Größe der Tür ermittelt. Dreht sich die Tür um die Mitte, verläuft ihre Breite nicht entlang der X-Achse. Drehe die Tür so, dass der rote Pfeil entlang ihrer Breite verläuft.
Kann ich die Tür abschließen?
Diese Version öffnet sich für alle. Für eine verschlossene Tür füge am Anfang von touch_start eine Prüfung hinzu, zum Beispiel: if (llDetectedKey(0) != llGetOwner()) return;
Verursacht das Skript Lag?
Nein. Es läuft nur, wenn jemand die Tür berührt und wenn der Timer sie schließt.