Das nächste Script dient einfach mal wieder der Entspannung und soll denjenigen unter euch, denen das mit den Scripten der letzten Lektionen doch ein wenig kompliziert war, für das Durchhalten entschädigen.
Die Door Bell oder Türklingel bekommt ihren eigenen Prim. Rein kommt ein Script, das beim „touch“ 1. einen Sound abspielt und 2. dem Besitzer ein IM sendet.
Was zuerst kommt, kennt ihr schon: wir brauchen eine Konstante für den Klang.
string DOOR_BELL_SOUND = "ee871042-e272-d8ec-3d40-0b0cb3371346";
Der Sound ist entweder ein key (wie hier in diesem Beispiel) oder der Name eines Sounddatei, die dann aber im Inventar des Klingelknopfes sein muss.
Das Script bekommt nun einen default state mit einem touch_start Event:
default
{
touch_start(integer total_number)
{
// play sound
if (DOOR_BELL_SOUND != "")
{
llTriggerSound(DOOR_BELL_SOUND, 1.0);
}
...
Nun die zweite Anforderung: eine IM an den Besitzer.
...
// send IM
string tName = llKey2Name(llDetectedKey(0));
string tLocation = llGetRegionName();
vector tPos = llGetPos();
tLocation += " (" + (string) ((integer) tPos.x) + ", ";
tLocation += (string) ((integer) tPos.y) + ", ";
tLocation += (string) ((integer) tPos.z) + ")";
llInstantMessage(llGetOwner(), tName + " is on the door at " + tLocation + ".");
Wir ermitteln als erstes den Namen des Avatars, der den „touch“ ausgelöst hat, und speichern ihn in die Variable tName. Dann ermitteln wir den Namen der Region. (Es könnte ja sein, dass jemand mehrere Häuser bzw. mehrere Klingeln besitzt.) llGetPos() ermittelt die Position der Klingel, die nun formatiert in die Variable tLocation gespeichert wird.
Schließlich senden wir den Text mit llInstantMessage() an den Besitzer, den wir mit llGetOwner() ermittelt haben.
Hier nochmal das ganze Script:
// constants
string DOOR_BELL_SOUND = "ee871042-e272-d8ec-3d40-0b0cb3371346";
default
{
touch_start(integer total_number)
{
// play sound
if (DOOR_BELL_SOUND != "")
{
llTriggerSound(DOOR_BELL_SOUND, 1.0);
}
// send IM
string tName = llKey2Name(llDetectedKey(0));
string tLocation = llGetRegionName();
vector tPos = llGetPos();
tLocation += " (" + (string) ((integer) tPos.x) + ", ";
tLocation += (string) ((integer) tPos.y) + ", ";
tLocation += (string) ((integer) tPos.z) + ")";
llInstantMessage(llGetOwner(), tName + " is on the door at " + tLocation + ".");
}
}
Bis bald,
Eure Jenni


