Control
From Second Life Wiki
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Tutorials |
Contents |
Description
! Event: control( key id, integer level, integer edge ){ ; }Result of llTakeControls library function call and user input.
| • key | id | |||
| • integer | level | – | bitfield of CONTROL_* flags, non-zero while one or more keys is being held down. | |
| • integer | edge | – | bitfield of CONTROL_* flags, non-zero when one or more keys have been just pressed or released. |
| Constant | Value | Description |
|---|---|---|
| CONTROL_FWD | 0x00000001 | Move forward control (↑ or W) |
| CONTROL_BACK | 0x00000002 | Move back control (↓ or S) |
| CONTROL_LEFT | 0x00000004 | Move left control (⇧ Shift-← or ⇧ Shift-A [← or A in mouselook]) |
| CONTROL_RIGHT | 0x00000008 | Move right control (⇧ Shift-→ or ⇧ Shift-D [→ or D in mouselook]) |
| CONTROL_ROT_LEFT | 0x00000100 | Rotate left control (← or A) |
| CONTROL_ROT_RIGHT | 0x00000200 | Rotate right control (→ or D) |
| CONTROL_UP | 0x00000010 | Move up control (PgUp or E) |
| CONTROL_DOWN | 0x00000020 | Move down control (PgDn or C) |
| CONTROL_LBUTTON | 0x10000000 | Left mouse button control |
| CONTROL_ML_LBUTTON | 0x40000000 | Left mouse button control while in mouselook |
Examples
default { state_entry() { llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS); } run_time_permissions(integer perm) { if(PERMISSION_TAKE_CONTROLS & perm) { llTakeControls( CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON | CONTROL_ML_LBUTTON | 0, TRUE, TRUE); } } control(key id, integer level, integer edge) { integer start = level & edge; integer end = ~level & edge; integer held = level & ~edge; integer untouched = ~(level | edge); llOwnerSay(llList2CSV([level, edge, start, end, held, untouched])); } }
Notes
llGetRot in mouselook for an attachment returns the angle the avatar is looking in.
If llMinEventDelay is set to at least double this events delay, then this event will treat the llMinEventDelay as if it were half; in other words, this event can trigger twice as often as other events if the llMinEventDelay is greater than 0.1
My tests determined that the key returned when an agent control is caught is not the key for that agent, but is the object owner's key. If more then one script is used in the same object to hold permissions for multiple agents simultaneously, control may be triggered in all scripts but there is no way to know which agent actually caused the trigger. This has been filed as SVC-476.

