Difference between revisions of "LlGetObjectPermMask"

From Second Life Wiki
Jump to navigation Jump to search
(add first example - promptly complain any time the SL GUI restricts copying differently than you wish)
(make example shorter & more useful -- float a label over an object: its name, description, and permissions)
Line 10: Line 10:
|constants={{LSL Constants Perm Mask}}
|constants={{LSL Constants Perm Mask}}
|examples=
|examples=
Promptly complain any time the SL GUI restricts copying differently than you wish.
Picking apart a permissions mask can produce such labels as "Open/ Yes Mod/ Yes Copy/ Yes Transfer", for example:
<pre>
<pre>
// Remember the last perms described.
// Float a label over an object: its name, description, and permissions.


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


fetchPerms()
     string line = "Closed";
{
     if ((nextPerms & PERMS_OPEN) == PERMS_OPEN)
     everyonePerms = llGetObjectPermMask(MASK_EVERYONE);
    {
     nextPerms = llGetObjectPermMask(MASK_NEXT);
         if (everyonePerms & PERM_COPY)
}
 
// Describe the perms.
 
permsShouldBe()
{
        integer wasTroubles = troubles;
        troubles = 0;
       
         if (!(everyonePerms & PERM_COPY))
         {
         {
             llOwnerSay("No = Allow anyone to copy " + llGetObjectName());
             line = "Open";
            troubles += 1;
        }
       
        if (!(nextPerms & PERM_MODIFY))
        {
            llOwnerSay("No = Next owner can modify " + llGetObjectName());
            troubles += 1;
        }
        if (!(nextPerms & PERM_COPY))
        {
            llOwnerSay("No = Next owner can copy " + llGetObjectName());
            troubles += 1;
        }
        if (!(nextPerms & PERM_TRANSFER))
        {
            llOwnerSay("No = Next owner can resell/ give away " + llGetObjectName());
            troubles += 1;
        }
       
        if (wasTroubles && !troubles)
        {
            llOwnerSay("Open / Yes Mod/ Yes Copy/ Yes Transfer");
        }
       
        if (wasTroubles || troubles)
        {
            llOwnerSay("");
         }
         }
    }
   
    if (nextPerms & PERM_MODIFY)
    {
        line += "/ Yes Mod";
    }
    if (nextPerms & PERM_COPY)
    {
        line += "/ Yes Copy";
    }
    if (nextPerms & PERM_TRANSFER)
    {
        line += "/ Yes Transfer";
    }
   
    return line;
}
}
// Describe the perms when rezzed or reset, and when the perms change.


default
default
Line 70: Line 47:
     on_rez(integer start_param)
     on_rez(integer start_param)
     {
     {
         llResetScript();  
         llResetScript();
     }
     }
     state_entry()
     state_entry()
     {
     {
         fetchPerms();
         string name = llGetObjectName();
         permsShouldBe();
 
         llSetTimerEvent(1.0); // 1.0 = once per second
         string description = llGetObjectDesc();
    }
          
    timer()
         integer everyonePerms = llGetObjectPermMask(MASK_EVERYONE);
    {
         integer nextPerms = llGetObjectPermMask(MASK_NEXT);
         integer wasEveryonePerms = everyonePerms;      
         string permissions = perms2String(everyonePerms, nextPerms);
         integer wasNextPerms = nextPerms;      
 
         fetchPerms();
         string between = "\n---\n";
         if (everyonePerms != wasEveryonePerms)
         vector color = <1.0, 1.0, 1.0>; // color = <R, G, B>
         {
         float opacity = 1.0; // opacity = alpha = 1.0 - transparency
            permsShouldBe();
         string lines = name + between + description + between + permissions;
         }
               
         else if (nextPerms != wasNextPerms)
         llSetText(lines, color, opacity);
         {
            permsShouldBe();
        }
     }
     }
}
}

Revision as of 08:44, 4 October 2007

Summary

Function: integer llGetObjectPermMask( integer mask );

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.
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

Picking apart a permissions mask can produce such labels as "Open/ Yes Mod/ Yes Copy/ Yes Transfer", for example:

// Float a label over an object: its name, description, and permissions.

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;
}

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }
    state_entry()
    {
        string name = llGetObjectName();

        string description = llGetObjectDesc();
        
        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);
    }
}

See Also

Functions

•  llGetInventoryPermMask

Deep Notes

Search JIRA for related Issues

Signature

function integer llGetObjectPermMask( integer mask );