// Avatarscanner-Demo von argus Portal
list avatare_UUIDs_neueTPL;
list avatare_UUIDsL;
list alarmlisteIDL;
integer an;
float reichweite;
verwaltung(integer gefunden)
{
integer neuindex;
key bestandID;
key neuID;
integer len;
integer i;
// Scan auf bereits erfasste Avatare
len = llGetListLength(avatare_UUIDsL);
for (i=0;i < len;i++)
{
bestandID = llList2Key(avatare_UUIDsL,i);
neuindex = llListFindList(avatare_UUIDs_neueTPL,[bestandID]);
if (neuindex == -1)
{ // Name war da; jetzt nicht mehr
llOwnerSay("verschwunden: " + llKey2Name(bestandID));
avatare_UUIDsL = llDeleteSubList(avatare_UUIDsL,i,i);
len--;
if (llListFindList(alarmlisteIDL,[bestandID]) != -1)
{
llPlaySound("alarmsound_weg",1);
}
}
}
// Scan auf neue Avatare
for (i=0;i < gefunden;i++)
{
neuID = llList2Key(avatare_UUIDs_neueTPL,i);
if (llListFindList(avatare_UUIDsL,[neuID]) == -1)
{ // Avatar ist neu
llOwnerSay("erschienen: " + llKey2Name(neuID));
avatare_UUIDsL += [neuID];
if (llListFindList(alarmlisteIDL,[neuID]) != -1)
{
llPlaySound("alarmsound_neu",1);
}
}
}
}
default
{
state_entry()
{
an = FALSE;
reichweite = 20.0;
// Dies hier ggf. auskommentieren und die Zeilen
// hierdrunter freischalten
alarmlisteIDL = [];
// alarmlisteIDL = [(key)"hier key eintragen"];
// alarmlisteIDL += [(key)"hier key eintragen"];
// usw.
}
on_rez(integer s)
{
llResetScript();
}
touch_start(integer nr)
{
if (an == FALSE)
{
an = TRUE;
avatare_UUIDsL = [];
llSetText("an",<1,1,1>,1);
llSensorRepeat("",NULL_KEY,AGENT,reichweite,PI,1.0);
}
else
{
an = FALSE;
llSetText("",<1,1,1>,1);
llSensorRemove();
}
}
sensor(integer nr)
{
integer i;
avatare_UUIDs_neueTPL = [];
// Temp.Liste füllen
for (i=0;i!= nr;i++)
{
avatare_UUIDs_neueTPL += [llDetectedKey(i)];
}
verwaltung(nr);
}
no_sensor()
{
if (llGetListLength(avatare_UUIDsL) != 0)
{
avatare_UUIDsL = [];
llOwnerSay("Niemand mehr in Reichweite");
if (llGetListLength(alarmlisteIDL) != 0)
{
llPlaySound("alarmsound_leer",1);
}
}
}
}