llRequestPermissions( key agent, integer permissions );
|• key||agent||–||avatar UUID that is in the same region|
|• integer||permissions||–||Permission mask (bitfield containing the permissions to request).|
Script execution continues without waiting for a response. When a response is given, a run_time_permissions event is put in the event queue.
|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_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||Anyone|
|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|
- 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_permissions event. Granting permissions takes time, and you shouldn’t assume it’s completed until the run_time_permissions handler gets invoked.
- The menu-option “Stop Animating Me” will release certain permissions (PERMISSION_TRIGGER_ANIMATION and PERMISSION_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 llResetScript can 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 llGetPermissions and llGetPermissionsKey immediately, despite the run_time_permissions event 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_permissions to 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.
Credit to LSL Portal with changes for brevity and clarity.