Difference between revisions of "LlCollisionFilter"

From Second Life Wiki
Jump to navigation Jump to search
 
(25 intermediate revisions by 11 users not shown)
Line 1: Line 1:
{{LSL_Function
{{LSL_Function
|inject-2={{Issues/SVC-2490}}{{LSL_Function/uuid|id|object=*|pd=filter by}}
{{LSL_Function/boolean|accept|pd=|ph=|td=only process collisions that match|fd=instead excludes matches}}
|func_id=110|func_sleep=0.0|func_energy=10.0
|func_id=110|func_sleep=0.0|func_energy=10.0
|sort=CollisionFilter
|sort=CollisionFilter
|func=llCollisionFilter
|func=llCollisionFilter
|p1_type=string|p1_name=name
|p1_type=string|p1_name=name|p1_desc=filter for specific object name or avatar {{LSLGC|Avatar/Name|legacy name}}|p1_hover=filter for specific object name or avatar legacy name
|p2_type=key|p2_name=id
|p2_type=key|p2_name=id
|p3_type=integer|p3_name=accept
|p3_type=integer|p3_subtype=boolean|p3_name=accept
|func_footnote=if '''accept''' == {{LSLG|TRUE}}, only accept collisions with objects '''name''' and '''id''' (either is optional), otherwise with objects not '''name''' or '''id'''
|func_footnote=If {{LSLP|accept}} == [[TRUE]], only accept collisions with objects {{LSLP|name}} AND {{LSLP|id}} (either is optional), otherwise with objects not {{LSLP|name}} AND {{LSLP|id}}<br/>
If {{LSLP|name}} or {{LSLP|id}} are blank they are not used to filter incoming messages (or you could say they match everything).
If {{LSLP|id}} is an invalid key or a [[NULL_KEY|null key]], it is considered blank.<br/>
|func_desc=Sets the collision filter, exclusively or inclusively.
|func_desc=Sets the collision filter, exclusively or inclusively.
|return_text
|return_text
|spec
|spec
|caveats
|caveats=
*Any call of llCollisionFilter in the same event as [[llVolumeDetect]] changing (not just being called, but actually moving from [[FALSE]] to [[TRUE]] or vice versa) will be disregarded (before or after), '''if''' the event handler previously called a user-defined function. See [[#SVC-2490]]
**You can get around this by calling them in separate events, such as [[touch_start]] and [[touch_end]].
*Damage caused by [[llSetDamage]] will still apply to a filtered avatar.
**Consequently, the object will immediately die on collision with the avatar. (And kill the avatar their health reaches 0.)
|constants
|constants
|examples
|examples=
Stop filtering:
<source lang="lsl2">llCollisionFilter("", NULL_KEY, TRUE);</source>
Filter out all collisions:
<source lang="lsl2">llCollisionFilter("", NULL_KEY, FALSE);</source>
This script, placed in a wearable object, detects a collision when the person wearing it collides with an object named "Post":
* 1st instance :
an object named "Post" has several child prims named "Object" .
The prim named "Post" hits the scripted object or scripted prim , the collision will be detected
* 2nd instance :
an object named "Post" has several child prims named "Object" .
A child prim named "Object" hits the scripted object or scripted prim, the collision will be detected
* 3rd instance :
an object named "Object" has several child prims named "Post" .
A prim named "Post" hits the scripted object or scripted prim, the collision will not be detected
 
<source lang="lsl2">default
{
    state_entry()
    {
        llCollisionFilter("Post","",TRUE);
    }
 
    collision_start(integer total_number)
    {
        llSay(0, "OUCH!");
    }
}</source>
|helpers
|helpers
|also_functions
|also_functions=
|also_events
{{LSL DefineRow||[[llPassCollisions]]|}}
{{LSL DefineRow||[[llVolumeDetect]]|}}
|also_events=
{{LSL DefineRow||[[collision_start]]|}}
{{LSL DefineRow||[[collision]]|}}
{{LSL DefineRow||[[collision_end]]|}}
|also_articles
|also_articles
|notes
|notes
|permission
|permission
|cat1=Collision
|cat1=Collision
|cat2
|cat2=Legacy Name/As A Parameter
|cat3
|cat3
|cat4
|cat4
}}
}}

Latest revision as of 18:26, 21 May 2020

Summary

Function: llCollisionFilter( string name, key id, integer accept );
0.0 Forced Delay
10.0 Energy

Sets the collision filter, exclusively or inclusively.

• string name filter for specific object name or avatar legacy name
• key id filter by group, avatar or object UUID
• integer accept TRUE only process collisions that match, FALSE instead excludes matches

If accept == TRUE, only accept collisions with objects name AND id (either is optional), otherwise with objects not name AND id
If name or id are blank they are not used to filter incoming messages (or you could say they match everything). If id is an invalid key or a null key, it is considered blank.

Caveats

  • Any call of llCollisionFilter in the same event as llVolumeDetect changing (not just being called, but actually moving from FALSE to TRUE or vice versa) will be disregarded (before or after), if the event handler previously called a user-defined function. See #SVC-2490
  • Damage caused by llSetDamage will still apply to a filtered avatar.
    • Consequently, the object will immediately die on collision with the avatar. (And kill the avatar their health reaches 0.)

Examples

Stop filtering:

llCollisionFilter("", NULL_KEY, TRUE);

Filter out all collisions:

llCollisionFilter("", NULL_KEY, FALSE);

This script, placed in a wearable object, detects a collision when the person wearing it collides with an object named "Post":

  • 1st instance :

an object named "Post" has several child prims named "Object" . The prim named "Post" hits the scripted object or scripted prim , the collision will be detected

  • 2nd instance :

an object named "Post" has several child prims named "Object" . A child prim named "Object" hits the scripted object or scripted prim, the collision will be detected

  • 3rd instance :

an object named "Object" has several child prims named "Post" . A prim named "Post" hits the scripted object or scripted prim, the collision will not be detected

default
{
    state_entry()
    {
        llCollisionFilter("Post","",TRUE);
    }

    collision_start(integer total_number)
    {
        llSay(0, "OUCH!");
    }
}

See Also

Events

•  collision_start
•  collision
•  collision_end

Functions

•  llPassCollisions
•  llVolumeDetect

Deep Notes

Signature

function void llCollisionFilter( string name, key id, integer accept );