LlSensorRepeat

From Second Life Wiki
Revision as of 06:59, 29 October 2008 by Strife Onizuka (Talk | contribs)

Jump to: navigation, search

Summary

Function: llSensorRepeat( string name, key id, integer type, float range, float arc, float rate );

Performs a single scan for name and id with type within range meters and arc radians of forward vector and repeats every rate seconds. It does not perform the first scan until rate seconds have passed.

• string name Object or avatar name
• key id group, avatar or prim UUID
• integer type mask (AGENT, ACTIVE, PASSIVE, and/or SCRIPTED)
• float range range 0.0 to 96.0m
• float arc the max angle between the local x-axis of the prim and detectable objects, range 0.0 to PI
• float rate How often a sensor/no_sensor will be queued.

If name, id, and/or type are empty or 0, they are ignored.
If id is an invalid key or NULL_KEY it is treated as empty.

See: llSensor for an excellent explanation of arc.

Caveats

  • When searching for an avatar but not by name, it doesn't matter which AGENT flag is used.
  • The repeat of the sensor event is adversely effected by time dilation (lag).
  • When a sensor event is queued, it dequeues all other sensor events in the queue.
  • The script must have a sensor event, without it no_sensor will not be triggered. An empty sensor event is enough to satisfy this condition and cause no_sensor to be triggered.
All Issues ~ Search JIRA for related Bugs

Examples

<lsl>// Written by Steamy Latte. // Scans every 30 seconds for visitors within 10 meters. // Reports new visitors to object owner when she is in range.

string AllAgents; string OwnerName;

default {

   state_entry()
   {
       // arc=PI is a sphere, you could look more narrowly in the direction object is facing with PI/2, PI/4 etc.
       // don't repeat this too often to avoid lag.
       llSensorRepeat("", "", AGENT, 10.0, PI, 30.0);
   }
   sensor(integer num_detected)
   {
       string thisAgent = "";
       integer agentNum;
       for (agentNum=0; agentNum<num_detected; agentNum++)
       {
           key thisKey = llDetectedKey(agentNum);
           string thisAgent = llDetectedName(agentNum);
           if (thisKey == llGetOwner())
           {
               if (AllAgents != "")
               {
                   llOwnerSay("We've had the following visitors:" + AllAgents);
                   AllAgents = "";
               }
           }
           else if (llSubStringIndex(AllAgents+"\n", "\n"+thisAgent+"\n") < 0)
           {
               AllAgents = AllAgents + "\n" + thisAgent;
           }
       }
   }
}</lsl>

Notes

Lag tip: Consider llVolumeDetect as a less resource intensive alternative to llSensorRepeat in many cases.

See Also

Events

•  sensor Triggered when a sensor detects something
•  no_sensor Triggered when a sensor detects nothing

Functions

•  llSensor Runs a sensor once
•  llSensorRemove Stops the llSensorRepeat timer

Articles

•  Object Type

Deep Notes

All Issues

~ Search JIRA for related Issues
   llSensorRepeat() with SCRIPTED flag does *not* detect objects with idle scripts

Signature

function void llSensorRepeat( string name, key id, integer type, float range, float arc, float rate );