From Second Life Wiki
(Redirected from
LSL llSensorRepeat)
SensorRepeat
llSensorRepeat
Description
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.
| • 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 avatars only.
|
| ACTIVE
| 0x2
| This is used to find objects that are moving.
|
|
| type Flag
| Description
|
| PASSIVE
| 0x4
| This is used to find objects that are not moving.
|
| SCRIPTED
| 0x8
| This is used to find objects that have a script attached to them.
|
|
| Float Constants
| Arc
|
| PI_BY_TWO
| A hemisphere scan
|
| PI
| A full sphere scan
|
|
Caveats
- 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.
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