LlSensorRemove
De DigiWiki.
The following basic example shows an object that when touched starts scanning for avatars in 10m every 30 seconds, and stops as soon as at least one is found, and returns their name.
default { touch_start(integer x) { llSensorRepeat("", NULL_KEY, AGENT, 10.0, PI, 30.0); } sensor(integer x) { key id = llDetectedKey(0); string name = llGetDisplayName(id); if (("" == name) || ("???" == name)) name = llDetectedName(0); llSay(PUBLIC_CHANNEL, name + " was found first!"); llSensorRemove(); } }
The next script is a more real-world example of a scanner that when touched will begin listing avatar names and distances, but will stop if no avatars are detected. It demonstrates the use of llSensor() when starting the scan, to avoid the initial delay of an llSensorRepeat() call.
integer scanning = FALSE; default { touch_start(integer x) { llSensor("", NULL_KEY, AGENT, 10.0, PI); // Start the scan } sensor(integer x) { string text = ""; vector myPos = llGetPos(); // Loop through avatars from furthest to nearest while ((--x) >= 0) { key id = llDetectedKey(x); // Get display name, or use legacy name as a fallback string name = llGetDisplayName(id); if (("" == name) || ("???" == name)) name = llDetectedName(x); // Add distance to the name name += " (" + (string)((integer)llVecDist(myPos, llDetectedPos(x))) + "m)"; if (text) name = "\n" + name; text += name; } llSetText(text, <1.0, 1.0, 1.0>, 1.0); if (!scanning) { // Repeat the scan every 30 seconds llSensorRepeat("", NULL_KEY, AGENT, 10.0, PI, 30.0); scanning = TRUE; } } no_sensor() { // No avatars nearby, lets turn off the scan llSetText("", ZERO_VECTOR, 0.0); llSensorRemove(); scanning = FALSE; } }