llRequestPermissions
llRequestPermissions(key agent,// UUID of the agent in the same region.integer permissions// Bitfield containing the PERMISSION_* constants to request. Values: ScriptPermission
);- Energy
- 10
Ask agent for permissions to run certain classes of functions.
Script execution continues without waiting for a response. When a response is given, a run_time_permissions event is put in the event queue.
llRequestPermissions(NULL_KEY, 0);Specification
Section titled “Specification”| Constants | Action | Category | Granter | Automatically granted when… | |
|---|---|---|---|---|---|
PERMISSION_DEBIT | 0x2 | take money from agent’s account | Money | Owner | |
PERMISSION_TAKE_CONTROLS | 0x4 | take agent’s controls | Control | Anyone | sat on, attached |
PERMISSION_TRIGGER_ANIMATION | 0x10 | start or stop Animations on agent | Animation | Anyone | sat on, attached |
PERMISSION_ATTACH | 0x20 | attach/detach from agent | Attachment | Owner or Anyone | attached |
PERMISSION_CHANGE_LINKS | 0x80 | change links | Link | Owner | |
PERMISSION_TRACK_CAMERA | 0x400 | track the agent’s camera position and rotation | Camera | Anyone | sat on, attached |
PERMISSION_CONTROL_CAMERA | 0x800 | control the agent’s camera (must be sat on or attached; automatically revoked on stand or detach) | Camera | Anyone | sat on, attached |
PERMISSION_TELEPORT | 0x1000 | teleport the agent | Teleport | Anyone1 | |
PERMISSION_SILENT_ESTATE_MANAGEMENT | 0x4000 | manage estate access without notifying the owner of changes | Estate | Owner | |
PERMISSION_OVERRIDE_ANIMATIONS | 0x8000 | configure the overriding of default animations on agent | Animation | Anyone | attached |
PERMISSION_RETURN_OBJECTS | 0x10000 | Used by llReturnObjectsByOwner and llReturnObjectsByID to return objects from parcels | Cleanup | Owner, Group Owner | |
PERMISSION_PRIVILEGED_LAND_ACCESS | 0x80000 | Grants the script privileged access to land parcel functions, such as parcel sale. Used by llSetParcelForSale. | Land | Owner | |
PERMISSION_GAME_CONTROL | 0x100000 | Permission to receive game_control input events. | Control | Anyone | sat on, attached |
Caveats
Section titled “Caveats”-
A dialog is presented to the agent to grant these permissions except when granted automatically as shown in the table above.
-
If object is attached to agent, “automatic” permissions are granted without notification upon request.
-
Permissions persist across state changes.
-
Regardless of whether granting is automatic, you should always use the
run_time_permissionsevent. Granting permissions takes time, and you shouldn’t assume it’s completed until therun_time_permissionshandler gets invoked. -
The menu-option “Stop Animating Me” will release certain permissions (
PERMISSION_TRIGGER_ANIMATIONandPERMISSION_OVERRIDE_ANIMATIONS), if the script which holds these permissions is in the same region as the agent, and the script is not attached to the permission granter. -
Permissions do not accumulate.
-
If a permission was requested with a previous call to this function and granted, then in subsequent call was not requested, that permission is released (lost).
-
To request two or more permissions at the same time, use the bitwise OR (|) operator, e.g.:
llRequestPermissions(AvatarID, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION)
-
-
Permissions are requested and granted separately for each script, even if they are located in the same object.
-
It is currently not possible to request no permissions at all (see Issues below); as a workaround
llResetScriptcan be used. -
Scripts may hold permissions for only one agent at a time. To hold permissions for multiple agents you must use more than one script.
-
The result of granting permissions affects the return of
llGetPermissionsandllGetPermissionsKeyimmediately, despite therun_time_permissionsevent being queued, or dropped if the object’s event queue is full. -
Permission request dialogs never time out.
-
If a script makes two permission requests, whichever response is last is considered the granted permissions.
-
The viewer limits permission requests from any agent to any other agent to 5 dialogs in 10 seconds.
-
Permission requests and changing state …
- Requesting a permission in one state, then changing state before the agent response, will cause
run_time_permissionsto be fired in the new state once the agent responds. - Requesting only auto-granted permissions in one state, then immediately changing state, will never fire
run_time_permissions.
- Requesting a permission in one state, then changing state before the agent response, will cause
Examples
Section titled “Examples”Request permission to animate an avatar
default{ touch_start(integer detected) { llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION); } run_time_permissions(integer perm)14 collapsed lines
{ if (perm & PERMISSION_TRIGGER_ANIMATION) { llStartAnimation("sit"); llOwnerSay("animation will end in 5 seconds"); llSetTimerEvent(5.0); } } timer() { llSetTimerEvent(0.0); llStopAnimation("sit"); }}To request two (or more) permissions at the same time, use the bitwise OR (|) operator.
llRequestPermissions(AvatarID, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION);: - or -
integer perms = PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION;llRequestPermissions(AvatarID, perms);When an agent grants a script non-automatic permissions they will receive a notification (in chat) of
- The name of the object that contains the script that has been granted perms,
- The name of the owner of the object,
- The location of the object in the order Region name at position, and
- A statement of what permissions were granted.
If the script that holds the permissions is in a child prim the name will be that of the child prim (not the object (root)) and position will be its local position (relative to its root).
Known issues
Section titled “Known issues”From the issue templates included by the wiki article:
- SVC-1006 (bug): Unable to release script permissions
- SVC-8067 (nf): Improved Permissions Handling
See also
Section titled “See also”Functions
Section titled “Functions”llGetPermissions— Get the permissions grantedllGetPermissionsKey— Get the avatar who granted permissions.
Events
Section titled “Events”run_time_permissions— Permission receiver event
Articles
Section titled “Articles”Original wiki source
Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.
Footnotes
Section titled “Footnotes”-
PERMISSION_TELEPORTcannot be held by temporary attachments. ↩