Difference between revisions of "LlGetObjectPermMask"

From Second Life Wiki
Jump to navigation Jump to search
m (clarify to "an object permissions mask" from "a permissions mask")
m (tweaks to the example - make draggable from inventory, make no change visible, make missing name/ description loud, factor out llDumpList2String)
Line 9: Line 9:
|caveats
|caveats
|constants={{LSL Constants Perm Mask}}
|constants={{LSL Constants Perm Mask}}
|examples=
|examples=Label an object for sale by dragging a script from inventory on to an object. See the label blink out and then come back to say something like "Open/ Yes Mod/ Yes Copy/ Yes Transfer".
Picking apart an object permissions mask can produce such labels as "Open/ Yes Mod/ Yes Copy/ Yes Transfer", for example:
<pre>
<pre>
// Float a label over an object: its name, description, and permissions.
// Float a label over an object: its name, description, and permissions.
// http://wiki.secondlife.com/wiki/llGetObjectPermMask


string perms2String(integer everyonePerms, integer nextPerms)
string perms2String(integer everyonePerms, integer nextPerms)
Line 41: Line 41:
      
      
     return line;
     return line;
}
list getLabels()
{
    string name = llGetObjectName();
    if (name == "Object") { name = "(No Name)"; }
   
    string description = llGetObjectDesc();
    if (description == "") { description = "(No Description)"; }
       
    integer everyonePerms = llGetObjectPermMask(MASK_EVERYONE);
    integer nextPerms = llGetObjectPermMask(MASK_NEXT);
    string permissions = perms2String(everyonePerms, nextPerms);
    return [name, description, permissions];
}
   
floatLabels(list lines)
{
        string label = llDumpList2String(lines, "\n---\n");
        vector color = <1.0, 1.0, 1.0>; // color = <R, G, B>
        float opacity = 1.0; // opacity = alpha = 1.0 - transparency       
        llSetText(label, color, opacity);
}
}


default
default
{
{
    on_rez(integer start_param)
    {
        llResetScript();
    }
     state_entry()
     state_entry()
     {
     {
         string name = llGetObjectName();
         llSetText("", <0.0, 0.0, 0.0>, 0.0);
 
         llSleep(0.1);
        string description = llGetObjectDesc();
         floatLabels(getLabels());
       
         llRemoveInventory(llGetScriptName());
        integer everyonePerms = llGetObjectPermMask(MASK_EVERYONE);
        integer nextPerms = llGetObjectPermMask(MASK_NEXT);
        string permissions = perms2String(everyonePerms, nextPerms);
 
        string between = "\n---\n";
        vector color = <1.0, 1.0, 1.0>; // color = <R, G, B>
         float opacity = 1.0; // opacity = alpha = 1.0 - transparency
         string lines = name + between + description + between + permissions;
               
         llSetText(lines, color, opacity);
     }
     }
}
}

Revision as of 15:47, 7 October 2007

Summary

Function: integer llGetObjectPermMask( integer mask );
0.0 Forced Delay
10.0 Energy

Returns an integer that is the requested permission mask for the root object the task is attached to.

• integer mask

Category Description
MASK_BASE 0 The base permissions.
MASK_OWNER 1 Current owner permissions.
MASK_GROUP 2 Active group permissions.
MASK_EVERYONE 3 Permissions everyone has.
MASK_NEXT 4 Permissions the next owner will have.
MASK_COMBINED 16 Include object inventory contents when calculating perms.

Combine with other mask flags, for instance MASK_OWNER|MASK_COMBINED

Permissions Value Description
PERM_ALL 0x7FFFFFFF Move/Modify/Copy/Transfer permissions
PERM_COPY 0x00008000 Copy permission
PERM_MODIFY 0x00004000 Modify permission
PERM_MOVE 0x00080000 Move permission
PERM_TRANSFER 0x00002000 Transfer permission

Examples

Label an object for sale by dragging a script from inventory on to an object. See the label blink out and then come back to say something like "Open/ Yes Mod/ Yes Copy/ Yes Transfer".

// Float a label over an object: its name, description, and permissions.
// http://wiki.secondlife.com/wiki/llGetObjectPermMask

string perms2String(integer everyonePerms, integer nextPerms)
{        
    integer PERMS_OPEN = (PERM_MODIFY | PERM_COPY | PERM_TRANSFER);

    string line = "Closed";
    if ((nextPerms & PERMS_OPEN) == PERMS_OPEN)
    {
        if (everyonePerms & PERM_COPY)
        {
            line = "Open";
        }
    }
    
    if (nextPerms & PERM_MODIFY)
    {
        line += "/ Yes Mod";
    }
    if (nextPerms & PERM_COPY)
    {
        line += "/ Yes Copy";
    }
    if (nextPerms & PERM_TRANSFER)
    {
        line += "/ Yes Transfer";
    }
    
    return line;
}

list getLabels()
{
    string name = llGetObjectName();
    if (name == "Object") { name = "(No Name)"; }
    
    string description = llGetObjectDesc();
    if (description == "") { description = "(No Description)"; }
        
    integer everyonePerms = llGetObjectPermMask(MASK_EVERYONE);
    integer nextPerms = llGetObjectPermMask(MASK_NEXT);
    string permissions = perms2String(everyonePerms, nextPerms);
    return [name, description, permissions];
}
    
floatLabels(list lines)
{
        string label = llDumpList2String(lines, "\n---\n");
        vector color = <1.0, 1.0, 1.0>; // color = <R, G, B>
        float opacity = 1.0; // opacity = alpha = 1.0 - transparency        
        llSetText(label, color, opacity);
}

default
{
    state_entry()
    {
        llSetText("", <0.0, 0.0, 0.0>, 0.0);
        llSleep(0.1);
        floatLabels(getLabels());
        llRemoveInventory(llGetScriptName());
    }
}

See Also

Functions

•  llGetInventoryPermMask

Deep Notes

Signature

function integer llGetObjectPermMask( integer mask );