Difference between revisions of "LlSensorRepeat"

From Second Life Wiki
Jump to navigation Jump to search
(Added an example.)
Line 1: Line 1:
{{LSL_Function/uuid|id}}
{{LSL_Function
{{LSL_Function
|func=llSensorRepeat
|func=llSensorRepeat
|sort=SensorRepeat
|sort=SensorRepeat
|func_id=29|func_sleep=0.0|func_energy=10.0
|func_id=29|func_sleep=0.0|func_energy=10.0
|p1_type=string|p1_name=name
|p1_type=string|p1_name=name|p1_desc=Object or avatar name
|p2_type=key|p2_name=id
|p2_type=key|p2_name=id
|p3_type=integer|p3_name=type|p3_desc=mask
|p3_type=integer|p3_name=type|p3_desc=mask
|p4_type=float|p4_name=range
|p4_type=float|p4_name=range|p4_desc=range 0.0 to 96.0m
|p5_type=float|p5_name=arc
|p5_type=float|p5_name=arc|p5_desc=range 0.0 to {{LSL Const|PI|float|3.141592653}}
|p6_type=float|p6_name=rate
|p6_type=float|p6_name=rate|p6_desc=How often a [[sensor]]/[[no_sensor]] will be queued.
|func_footnote=If '''name''', '''id''', and/or '''type''' are empty or 0, they are ignored.<br/>If '''id''' is an invalid key or [[NULL_KEY]] it is treated as empty.<br/><br/>
|func_footnote=If '''name''', '''id''', and/or '''type''' are empty or 0, they are ignored.<br/>If '''id''' is an invalid key or [[NULL_KEY]] it is treated as empty.
 
See: [http://www.lslwiki.net/lslwiki/wakka.php?wakka=llSensor llSensor] for an excellent explanation of '''arc'''.
See: [http://www.lslwiki.net/lslwiki/wakka.php?wakka=llSensor llSensor] for an excellent explanation of '''arc'''.
|func_desc=Performs a single scan for '''name''' and '''id''' with '''type''' within '''range''' meters and '''arc''' radians of forward vector and repeats every '''rate''' seconds.
|func_desc=Performs a single scan for '''name''' and '''id''' with '''type''' within '''range''' meters and '''arc''' radians of forward vector and repeats every '''rate''' seconds.
Line 15: Line 17:
|spec
|spec
|caveats=*The repeat of the sensor event is adversely effected by [[llGetRegionTimeDilation|time dilation]] (lag).
|caveats=*The repeat of the sensor event is adversely effected by [[llGetRegionTimeDilation|time dilation]] (lag).
*When a [[sensor]] event is queued, it dequeues all other sensor events in the queue.
|constants={{LSL Constants Sensor|type}}
|constants={{LSL Constants Sensor|type}}
{{{!}} {{Prettytable}}
{{{!}} {{Prettytable}}
Line 22: Line 25:
{{!}}-
{{!}}-
{{!}}[[PI_BY_TWO]]
{{!}}[[PI_BY_TWO]]
{{!}}A hemisphere
{{!}}A hemisphere scan
{{!}}-
{{!}}-
{{!}}[[PI]]
{{!}}[[PI]]
{{!}}A full sphere
{{!}}A full sphere scan
{{!}}}
{{!}}}
|examples=
|examples=

Revision as of 18:16, 10 May 2008

Summary

Function: llSensorRepeat( string name, key id, integer type, float range, float <span title="range 0.0 to PI" style="border-bottom:1px dotted; cursor:help;">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 group, avatar or prim UUID
• integer type mask
• float range range 0.0 to 96.0m
• float arc 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 Mask Description (llDetectedType()) Description (llSensor() and llSensorRepeat() mask)
AGENT_BY_LEGACY_NAME 0x1 Agents This is used to find agents by legacy name.
AGENT 0x1 Agents This is also used to find agents by legacy name, and is functionally identical to AGENT_BY_LEGACY_NAME
AGENT_BY_USERNAME 0x10 Reserved This is used to find agents by username.
ACTIVE 0x2 Physical tasks. (Physical objects & agents) Physical objects that are moving or objects containing an active script. Thus, it is using SL server resources now.
PASSIVE 0x4 Non-physical objects. Non-scripted or script is inactive and non-physical or, if physical, not moving. Thus, it is not using SL server resources now.
SCRIPTED 0x8 Objects containing any active script. Objects that has any script, which is doing anything in simulator just now.
llDetectedType() Scripted Not Scripted Agent Standing Agent Sitting
Physical Movement 10 (ACTIVE|SCRIPTED) 2 (ACTIVE) 3 (ACTIVE|AGENT) 3 (ACTIVE|AGENT)
Non-Physical 12 (PASSIVE|SCRIPTED) 4 (PASSIVE) 1 (AGENT) 5 (PASSIVE|AGENT)
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.
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

Search JIRA for related Issues

Signature

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