From Second Life Wiki
SensorRepeat
llSensorRepeat
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
| –
| avatar or object 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.
| type Flag
| Description
|
| AGENT
| 0x1
| This is used to find agents only.
|
| ACTIVE
| 0x2
| This is used to find physical objects that are moving or objects containing an active script.
|
|
| type Flag
| Description
|
| PASSIVE
| 0x4
| This is used to find physical objects that are not moving or non-physical objects containing an inactive script or a non-scripted object.
|
| SCRIPTED
| 0x8
| This is used to find objects containing an active script.
|
|
| Float Constants
| Arc
|
| PI_BY_TWO
| A hemisphere scan
|
| PI
| A full sphere scan
|
|
Examples
// 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;
}
}
}
}
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