integer channel = -10;
string menuText = "Select your target:";
list avatarsDetected = [ ];
list keysDetected = [ ];
useKey(key targetKey)
{
// This is where you "do something" with that key. I dunno whatYOU plan to do with it
// in my demo in world, I passed it to a particle beam. There's some issues with that
// since the particle target range seems to be the client's draw distance.
// but if you wanted to rez a follower, or whatever, you'd do that here.
}
default
{
state_entry()
{
llListen(channel, "", llGetOwner(), ""

;
}
listen(integer channel, string name, key id, string message)
{
integer listPos = llListFindList(avatarsDetected, (list)message);
useKey(llList2Key(keysDetected, listPos));
llSay(0, "i love u " + message);
}
touch_start(integer duration)
{
llSensor("", NULL_KEY, AGENT, 100, PI);
}
sensor(integer numDetected)
{
if (numDetected > 12) numDetected = 12;
integer nextStep;
string nextAvatarName;
string nextAvatarKey;
avatarsDetected = [ ];
keysDetected = [ ];
for (nextStep = 0; nextStep < numDetected; nextStep++)
{
nextAvatarName = llDetectedName(nextStep);
nextAvatarKey = llDetectedKey(nextStep);
if (llStringLength(nextAvatarName) > 24) nextAvatarName = llGetSubString(nextAvatarName, 0, 23);
avatarsDetected = (avatarsDetected=[]) + avatarsDetected + nextAvatarName;
keysDetected = (keysDetected=[]) + keysDetected + nextAvatarKey;
}
llDialog(llGetOwner(), menuText, avatarsDetected, channel);
}
}