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.
A bit mask of CONTROL_* constants
Whether to generate control events for the specified controls. TRUE = generate them; FALSE = don't generate them.
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
pass_on
is TRUE, when CONTROL_ML_LBUTTON is in the controls, mouse clicks are blocked while in mouselook (SVC-4973, SVC-7532, declared as expected behaviour).// 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);
This example will report presses of the UP and DOWN controls in chat, after permissions are granted.
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"); } }
llReleaseControls
to release controls that were taken with llTakeControls, and also the PERMISSION_TAKE_CONTROLS permissionaccept
parameter is TRUE.llRequestPermissions
, PERMISSION_TAKE_CONTROLS and run_time_permissions are typically needed in scripts that use this function.