llSensorRepeat
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: llSensorRepeat( string name, key id, integer type, float range, float arc, float rate );0.0 | Forced Delay |
10.0 | Energy |
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 object UUID | |
• integer | type | – | mask (AGENT, AGENT_BY_LEGACY_NAME, AGENT_BY_USERNAME, ACTIVE, PASSIVE, and/or SCRIPTED) | |
• float | range | – | range in meters, [0.0, 96.0] | |
• float | arc | – | the max angle between the local x-axis of the prim and detectable objects, range [0.0, 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.
Depending upon which AGENT* flag is used determines the format requirements for name
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 affected by time dilation (lag).
- Sensors placed in attachments will use the direction the avatar is facing as their forward vector. In mouselook, this means that it will be wherever the avatar is looking, while out of mouselook, this means whichever way the avatar is pointing. This does not include where the avatar's head is pointing, or what animation the avatar is doing, just the direction the avatar would move in if you walked forward. This is the case, regardless of where the object is attached.
- Only the most recent sensor event is queued. Previous sensor events are replaced.
- llSensorRepeat can occasionally detect outside of it's specified range every few cycles when used near sim borders. llSensor in a timer does not.
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 | |
• | llOverMyLand | – | What happens over owners land |