llRequestExperiencePermissions

From Second Life Wiki
Jump to navigation Jump to search

Summary

Function: llRequestExperiencePermissions( key agent, string name );

Asks the agent for permission to participate in the script's Experience.

• key agent Key of the agent to request permissions from
• string name Deprecated, no longer used

This request is similar to llRequestPermissions with all the following permissions: PERMISSION_TAKE_CONTROLS, PERMISSION_TRIGGER_ANIMATION, PERMISSION_ATTACH, PERMISSION_TRACK_CAMERA, PERMISSION_CONTROL_CAMERA and PERMISSION_TELEPORT. However, unlike llRequestPermissions, the decision to allow or block the request is persistent and applies to all scripts using the experience grid-wide.

Subsequent calls to llRequestExperiencePermissions from scripts in the experience will receive the same response automatically with no user interaction.

Either experience_permissions or experience_permissions_denied will be generated in response to this call. If no response is given by the agent, the request will time out after at least 5 minutes. Multiple requests by the same script can be made during this time out though the script can only have permission for one agent at a time.

Agents in god mode will always see the permission dialog even if the experience has been previously approved.

Outstanding permission requests will be lost if the script is de-rezzed, moved to another region, or reset.

For this function to work, the script must be compiled into an Experience.

Caveats

  • If you recompile a script that was previously associated with an Experience but do so with a client that lacks the ability to compile scripts into an experience the script will lose the associated Experience.

Examples

This is a shell for a HUD Dispenser. It detects an avatar by the collision event, then rezzes an object that will request experience permissions and attach to the avatar: <syntaxhighlight lang="lsl2"> default {

   state_entry()
   {
       llVolumeDetect(TRUE);
   }
   
   collision_start(integer NumberOfCollisions)
   {
       integer i = 0;
       for(; i < NumberOfCollisions; i++)
       {
           integer channel = llRound(llFrand(-1000));
           key give_to = llDetectedKey(i);
           llSay(0, "Rezzing HUD for " + (string)give_to + " using channel " + (string)channel);
           llRezObject(llGetInventoryName(INVENTORY_OBJECT, 0), llGetPos(), ZERO_VECTOR, ZERO_ROTATION, channel);
llRegionSay(channel, "ATTACH

Notes

Compiling

For a script to be associated with an Experience...

  • It must be compiled with a client that is Experience aware,
  • The "Use Experience" checkbox must be checked,
  • And one of the users Experience keys selected.
Important: Not all TPVs have this functionality.

Deep Notes

Signature

function void llRequestExperiencePermissions( key agent, string name );