$nav ===== 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 $lct[PERMISSION_TAKE_CONTROLS] permissions. ===== Parameters ===== === controls === A bit mask of $ct[CONTROL_*] constants === accept === Whether to generate $lev[control] events for the specified controls. $lct[TRUE] = generate them; $lct[FALSE] = don't generate them. === pass_on === Whether the specified controls should still perform their normal functions (e.g. if $lct[CONTROL_FWD] is among the controls to take, whether it still moves the avatar forward). $ct[TRUE] = perform their normal functions too; $ct[FALSE] = don't perform their normal functions. Note that a value of $ct[TRUE] is not honoured for $lct[CONTROL_ML_LBUTTON] ===== Notes ===== * Even if $prm[pass_on] is $ct[TRUE], when $lct[CONTROL_ML_LBUTTON] is in the controls, mouse clicks are blocked while in mouselook ($JIRA[SVC-4973], $JIRA[SVC-7532], declared as expected behaviour). * While it's possible for two scripts in the same prim to take controls from two different users, that won't work as expected: there's no way to know the originator of the control. $TODO[Expand/Test again] See the $lev[control] event for more details. ===== 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. 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 ===== * $lfn[llReleaseControls] to release controls that were taken with $fn[llTakeControls], and also the $ct[PERMISSION_TAKE_CONTROLS] permission * $lev[control] event, to be notified when controls are pressed and the $prm[accept] parameter is $ct[TRUE]. * $lfn[llRequestPermissions], $lct[PERMISSION_TAKE_CONTROLS] and $lev[run_time_permissions] are typically needed in scripts that use this function.