Table of Contents

Start Functions Events Constants Types Language Articles

Function: llTakeControls

llTakeControls(integer controls, integer accept, integer pass_on)

Enables the user to use certain control keys or mouse button presses for interacting with a script.

Requires PERMISSION_TAKE_CONTROLS permissions.

Parameters

controls

A bit mask of CONTROL_* constants

accept

Whether to generate control events for the specified controls. TRUE = generate them; FALSE = don't generate them.

pass_on

Whether the specified controls should still perform their normal functions (e.g. if CONTROL_FWD is among the controls to take, whether it still moves the avatar forward). TRUE = perform their normal functions too; FALSE = don't perform their normal functions. Note that a value of TRUE is not honoured for CONTROL_ML_LBUTTON

Notes

Short examples

// Capture the forward control, but let it still move the avatar forward.
llTakeControls(CONTROL_FWD, TRUE, TRUE);

// Capture all controls that let the agent move (it can still move when pushed or falling)
llTakeControls(CONTROL_FWD|CONTROL_BACK
              |CONTROL_LEFT|CONTROL_RIGHT
              |CONTROL_UP|CONTROL_DOWN
              |CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT
              , TRUE, FALSE);

Complete examples

This example will report presses of the UP and DOWN controls in chat, after permissions are granted.

llTakeControls-example.lsl
default
{
    state_entry()
    {
        llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
    }

    run_time_permissions(integer perms)
    {
        if (perms & PERMISSION_TAKE_CONTROLS)
            llTakeControls(CONTROL_UP | CONTROL_DOWN, TRUE, TRUE);
    }

    controls(key avatar, integer level, integer edge)
    {
        if (level & edge & CONTROL_UP)
            llOwnerSay("UP pressed");
        if (~level & edge & CONTROL_UP)
            llOwnerSay("UP released");
        if (level & edge & CONTROL_DOWN)
            llOwnerSay("DOWN pressed");
        if (~level & edge & CONTROL_DOWN)
            llOwnerSay("DOWN released");
    }
}

See also