Difference between revisions of "LlSensor"

From Second Life Wiki
Jump to: navigation, search
m (testing)
m (testing - will revert)
Line 5: Line 5:
 
|func_desc=Performs a single scan for '''name''' and '''id''' with '''type''' within '''range''' meters and '''arc''' radians of forward vector
 
|func_desc=Performs a single scan for '''name''' and '''id''' with '''type''' within '''range''' meters and '''arc''' radians of forward vector
 
|p1_type=string|p1_name=name|p1_desc=object or avatar name
 
|p1_type=string|p1_name=name|p1_desc=object or avatar name
|p2_type=key|p2_name=id|p2_desc=
+
<!--|p2_type=key|p2_name=id|p2_desc=
 
|p3_type=integer|p3_name=type|p3_desc=mask ({{#var:AGENT}},{{#var:AGENT_BY_LEGACY_NAME}},{{#var:AGENT_BY_USERNAME}},{{#var:ACTIVE}}, {{#var:PASSIVE}}, and/or {{#var:SCRIPTED}})|p3_hover=mask (AGENT, AGENT_BY_LEGACY_NAME, AGENT_BY_USERNAME, ACTIVE, PASSIVE, and/or SCRIPTED)
 
|p3_type=integer|p3_name=type|p3_desc=mask ({{#var:AGENT}},{{#var:AGENT_BY_LEGACY_NAME}},{{#var:AGENT_BY_USERNAME}},{{#var:ACTIVE}}, {{#var:PASSIVE}}, and/or {{#var:SCRIPTED}})|p3_hover=mask (AGENT, AGENT_BY_LEGACY_NAME, AGENT_BY_USERNAME, ACTIVE, PASSIVE, and/or SCRIPTED)
 
|p4_type=float|p4_name=range|p4_desc=range {{Interval|gte=0.0|center=range|lte=96.0m}}|p4_hover=range 0.0 to 96.0m inclusive
 
|p4_type=float|p4_name=range|p4_desc=range {{Interval|gte=0.0|center=range|lte=96.0m}}|p4_hover=range 0.0 to 96.0m inclusive
|p5_type=float|p5_name=arc|p5_desc=the max angle between the local x-axis of the prim and detectable objects, range 0.0 to {{#var:PI}}|p5_hover=the max angle between the local x-axis of the prim and detectable objects, range 0.0 to PI
+
|p5_type=float|p5_name=arc|p5_desc=the max angle between the local x-axis of the prim and detectable objects, range 0.0 to {{#var:PI}}|p5_hover=the max angle between the local x-axis of the prim and detectable objects, range 0.0 to PI-->
 
|func_footnote=If '''name''' or '''id''' is empty then that empty constraint is ignored.<br/>If '''id''' is an invalid key or [[NULL_KEY]] it is treated as empty.
 
|func_footnote=If '''name''' or '''id''' is empty then that empty constraint is ignored.<br/>If '''id''' is an invalid key or [[NULL_KEY]] it is treated as empty.
 
|return_text
 
|return_text

Revision as of 12:28, 15 February 2012

Summary

Function: llSensor( string name );

Performs a single scan for name and id with type within range meters and arc radians of forward vector

• string name object or avatar name

If name or id is empty then that empty constraint is ignored.
If id is an invalid key or NULL_KEY it is treated as empty.

Caveats

  • Objects do not detect themselves, and attachments cannot detect their wearers (this includes HUD attachments).
  • For an object to be detected, the center of its root prim (the same point it would report with llGetRootPosition) must be within the sensor beam.
  • For an agent to be detected, a point near the pelvis must be inside the sensor beam (the same as llGetRootPosition would report in a script attached to that avatar). This point is indicated by red crosshairs when Advanced>Character>Display Agent Target is turned on.
    • If the agent is sitting on an object, the root prim of the sat upon object becomes a second sensor target for the agent (but not if the avatar is outside the sensor arc, see SVC-5145).
  • 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.
  • If type is zero, the sensor will silently fail, neither sensor or no_sensor will be triggered.
  • Only 16 objects will be scanned each time.
All Issues ~ Search JIRA for related Bugs

Examples

This sensor scans a 45 degree cone about the x-axis. (PI/2 or PI_BY_TWO scans a hemisphere. PI is a spherical scan.) <lsl>llSensor( "Gigs Taggart", NULL_KEY, AGENT, 96.0, PI/4 );</lsl>

This sensor detects all prims and agents with a given name within 15m of the sensor. (AGENT, PASSIVE and ACTIVE behave inclusively. SCRIPTED is not inclusive and will exclude non-scripted targets (like avatars) from the detected set.)

<lsl>llSensor( "", NULL_KEY, ( AGENT

Notes

Loops & Repetition

Using llSensor in a for loop is a beginners mistake, as events will not interrupt each other (the sensor event will not interupt whatever event is currently being executed). To perform repeat sensor sweeps, llSensorRepeat is the better solution. While it is possible to call llSensor from a timer event, it is less efficient to do so; there is a limit to the number of events that can be processed in a second and using the timer just to call llSensor will result in your script getting less timeslice.

See Also

Events

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

Functions

•  llSensorRepeat Runs a sensor on a timer
•  llSensorRemove Stops the llSensorRepeat timer

Deep Notes

Search JIRA for related Issues

Signature

function void llSensor( string name );