llPassTouches

From Second Life Wiki
Revision as of 16:14, 1 January 2016 by Strife Onizuka (talk | contribs) (reworking of documentation)
Jump to navigation Jump to search

Summary

Function: llPassTouches( integer pass );
0.0 Forced Delay
10.0 Energy

Sets pass-touches prim attribute.

• integer pass integer in the interval [0, 2]

Value Child Scripted Child Unscripted Description
0 not passed passed Touches are not passed on to the root while there is a script in the prim.
1 passed passed Default: Touches are passed from children on to the root.
2 not passed not passed Touches are never passed on to the root.

Caveats

  • This has no effect when called on the root prim.
  • Touches are always passed to the parent when there is no touch event script in the child, even if this is set (TRUE or FALSE) within another event in a child's script.
    • If you want to block touches from a child , you must add a script with a touch event in the child. This creates a default no passes.

Examples

Make a two prim LINK_SET (Object). Name the root "Parent" and the child "Child". To the root add this script -
integer told;

default
{
    state_entry()
    {
        told = FALSE;
    }
    touch_start(integer total_number)
    {
        if(!(llDetectedLinkNumber(0) == llGetLinkNumber()))// We can use a condition like this to filter from which prims touches are triggered.
        {
            llSay(0, "My child tells me you touched it. Abuse report pending.");// This will only be spoken if the child is touched twice.
            told = TRUE;
        }
        else
        {
            if(!told)
                llSay(0, "You can touch me all you like");// The unaware Parent leads you on.
            else
                llSay(0, "If I had my way you would have your hands cut off!");// Not any more.
        }
    }
}

And to the child add this script -

integer once_is_too_often;
default
{
    state_entry()
    {
        llPassTouches(FALSE);// Innocent child doesn't know to say something the first time.
        once_is_too_often = FALSE;
    }
    touch_start(integer total_number)
    {
        if(llDetectedLinkNumber(0) == llGetLinkNumber())// Again we check who is being touched.
        {
            if(!once_is_too_often)
            {
                llSay(0, "If you touch me again I'm telling.");
                llPassTouches(TRUE); // But if a second time, it will tell.
                once_is_too_often = TRUE;// And then fall silent.
            }
        }
    }
}

See Also

Events

•  touch_start
•  touch
•  touch_end

Functions

•  llPassCollisions

Deep Notes

History

  • Introduction: ?
  • Change: SVC-5923 - Server version 1.40.2 - New pass value added: 2

Footnotes

  1. ^ The ranges in this article are written in Interval Notation.

Signature

function void llPassTouches( integer pass );