Difference between revisions of "LlGetObjectPermMask"

From Second Life Wiki
Jump to navigation Jump to search
m (fixed typo)
 
(10 intermediate revisions by 5 users not shown)
Line 2: Line 2:
|func_id=287|func_sleep=0.0|func_energy=10.0
|func_id=287|func_sleep=0.0|func_energy=10.0
|func=llGetObjectPermMask
|func=llGetObjectPermMask
|return_type=integer|p1_type=integer|p1_name=mask|p1_desc=MASK_* flag
|return_type=integer|return_subtype=bit field
|p1_type=integer|p1_name=category|p1_desc=MASK_* flag
|func_footnote
|func_footnote
|func_desc
|func_desc
|return_text=that is the requested permission '''mask''' for the root object the task is attached to.
|return_text=of the requested permission {{LSLP|category}} for the object containing this script.
|spec
|spec
|caveats
|caveats
|constants={{LSL Constants Perm Mask}}
|constants={{LSL Constants Perm Mask}}
|examples=
|examples=
<lsl>
<source lang="lsl2">
if ((permsYouHave & permsYouWant) == permsYouWant)
    llSay(0, "You have the perms you want.");
else
    llSay(0, "You don't have the perms you want.");
</source>
<source lang="lsl2">
integer ownerPerms = llGetObjectPermMask(MASK_OWNER);
integer copyAndModPerms = PERM_COPY | PERM_MODIFY;
 
if ((ownerPerms & copyAndModPerms) == copyAndModPerms)
    llSay(0, "Owner has copy & modify perms.");
else
    llSay(0, "Owner does not have copy & modify perms.");
</source>
<source lang="lsl2">
string getPermsAsReadableString(integer perm)
string getPermsAsReadableString(integer perm)
{
{
    integer allPerms = PERM_ALL;
     integer fullPerms = PERM_COPY | PERM_MODIFY | PERM_TRANSFER;
     integer fullPerms = PERM_COPY | PERM_MODIFY | PERM_TRANSFER;
    integer copyModMovePerms = PERM_COPY | PERM_MODIFY | PERM_MOVE;
     integer copyModPerms = PERM_COPY | PERM_MODIFY;
     integer copyModPerms = PERM_COPY | PERM_MODIFY;
    integer copyTransMovePerms = PERM_COPY | PERM_TRANSFER | PERM_MOVE;
     integer copyTransPerms = PERM_COPY | PERM_TRANSFER;
     integer copyTransPerms = PERM_COPY | PERM_TRANSFER;
    integer modTransMovePerms = PERM_MODIFY | PERM_TRANSFER | PERM_MOVE;
     integer modTransPerms = PERM_MODIFY | PERM_TRANSFER;
     integer modTransPerms = PERM_MODIFY | PERM_TRANSFER;
    integer copyMovePerms = PERM_COPY | PERM_MOVE;
    integer transMovePerms = PERM_TRANSFER | PERM_MOVE;


     string output = " perms: ";
     string output = " perms: ";


     if ((perm & fullPerms) == fullPerms)
     if ((perm & allPerms) == allPerms)
         output += "full permissions";
        output += "full and move";
    else if ((perm & fullPerms) == fullPerms)
         output += "full";
    else if ((perm & copyModMovePerms) == copyModMovePerms)
        output += "copy & modify & move";
     else if ((perm & copyModPerms) == copyModPerms)
     else if ((perm & copyModPerms) == copyModPerms)
         output += "copy & modify permissions";
         output += "copy & modify";
    else if ((perm & copyTransMovePerms) == copyTransMovePerms)
        output += "copy & transfer & move";
     else if ((perm & copyTransPerms) == copyTransPerms)
     else if ((perm & copyTransPerms) == copyTransPerms)
         output += "copy & transfer permissions";
         output += "copy & transfer";
    else if ((perm & modTransMovePerms) == modTransMovePerms)
        output += "modify & transfer & move";
     else if ((perm & modTransPerms) == modTransPerms)
     else if ((perm & modTransPerms) == modTransPerms)
         output += "modify & transfer permissions";
         output += "modify & transfer";
    else if ((perm & copyMovePerms) == copyMovePerms)
        output += "copy & move";
     else if ((perm & PERM_COPY) == PERM_COPY)
     else if ((perm & PERM_COPY) == PERM_COPY)
         output += "copy permissions";
         output += "copy";
    else if ((perm & transMovePerms) == transMovePerms)
        output += "transfer & move";
     else if ((perm & PERM_TRANSFER) == PERM_TRANSFER)
     else if ((perm & PERM_TRANSFER) == PERM_TRANSFER)
         output += "transfer permissions";
         output += "transfer";
    else if ((perm & PERM_MOVE) == PERM_MOVE)
        output += "move";
    else
        output += "none";


     //  remember, neither 'only mod perms' nor 'no perms' is possible
     //  Remember, items in Second Life must have either
     //  item either has copy or mod perms at least.
    //  PERM_COPY or PERM_TRANSFER when "talking about"
     //  owner perms or perms for next owner.


     return
     return
         output;
         output;
}
}
default
default
{
{
     state_entry()
     state_entry()
     {
     {
         integer basePerms = llGetObjectPermMask(MASK_BASE);
         integer basePerms     = llGetObjectPermMask(MASK_BASE);
         integer ownerPerms = llGetObjectPermMask(MASK_OWNER);
         integer ownerPerms     = llGetObjectPermMask(MASK_OWNER);
         integer nextOwnerPerms = llGetObjectPermMask(MASK_NEXT);
         integer nextOwnerPerms = llGetObjectPermMask(MASK_NEXT);
         integer groupPerms = llGetObjectPermMask(MASK_GROUP);
         integer groupPerms     = llGetObjectPermMask(MASK_GROUP);
         integer everyonePerms = llGetObjectPermMask(MASK_EVERYONE);
         integer everyonePerms = llGetObjectPermMask(MASK_EVERYONE);
 
    //  PUBLIC_CHANNEL has the integer value 0
 
        llSay(PUBLIC_CHANNEL, "base" + getPermsAsReadableString(basePerms));
        llSay(PUBLIC_CHANNEL, "owner" + getPermsAsReadableString(ownerPerms));
        llSay(PUBLIC_CHANNEL, "next owner" + getPermsAsReadableString(nextOwnerPerms));
        llSay(PUBLIC_CHANNEL, "group" + getPermsAsReadableString(groupPerms));
        llSay(PUBLIC_CHANNEL, "everyone" + getPermsAsReadableString(everyonePerms));
    }
}
</lsl>
See the text floating above an object blink out and then come back to say something like:
<pre>
            Open Object
                ---
            by Anonymous
                ---
Open/ Yes Mod/ Yes Copy/ Yes Transfer
</pre>
when you drag the following script from inventory on to the object:
<lsl>
// Float a label over an object: its name, description, and permissions.
// http://wiki.secondlife.com/wiki/llGetObjectPermMask


string perms2String(integer everyonePerms, integer nextPerms)
        llSay(0, "base"      + getPermsAsReadableString(basePerms));
{       
        llSay(0, "owner"     + getPermsAsReadableString(ownerPerms));
    integer PERMS_OPEN = (PERM_MODIFY | PERM_COPY | PERM_TRANSFER);
         llSay(0, "next owner" + getPermsAsReadableString(nextOwnerPerms));
 
         llSay(0, "group"     + getPermsAsReadableString(groupPerms));
    string line = "Closed";
         llSay(0, "everyone"   + getPermsAsReadableString(everyonePerms));
    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];
}
}
   
</source>
floatLabels(list lines)
<source lang="lsl2">
integer isLocked()
{
{
        string label = llDumpList2String(lines, "\n---\n");
    return !(llGetObjectPermMask(MASK_OWNER) & PERM_MOVE);
        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);
}
}
</source>


default
{
    state_entry()
    {
        llSetText("", <0.0, 0.0, 0.0>, 0.0);
        llSleep(0.1);
        floatLabels(getLabels());
        llRemoveInventory(llGetScriptName());
    }
}
</lsl>
|helpers
|helpers
|also_functions={{LSL DefineRow||[[llGetInventoryPermMask]]|}}
|also_functions={{LSL DefineRow||[[llGetInventoryPermMask]]|}}
Line 142: Line 115:
|also_articles=
|also_articles=
{{LSL DefineRow||[[hex]]}}
{{LSL DefineRow||[[hex]]}}
|notes=The perms of a newly created object often are Base = PERM_ALL, Owner = PERM_ALL, Next = PERM_MOVE or PERM_TRANSFER, Group = 0 (none), Everyone = 0 (none). The perms2String example describes those perms as "Closed / Yes Transfer".
|notes=
The perms of a newly created object are often:
  Base = PERM_ALL
  Owner = PERM_ALL
  Next = PERM_MOVE or PERM_TRANSFER
  Group = 0 (none)
  Everyone = 0 (none)
|cat1=Permissions/Asset
|cat1=Permissions/Asset
|cat2=Object
|cat2=Object

Latest revision as of 10:58, 18 March 2018

Summary

Function: integer llGetObjectPermMask( integer category );

Returns a bit field (an integer) of the requested permission category for the object containing this script.

• integer category MASK_* flag

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

if ((permsYouHave & permsYouWant) == permsYouWant)
    llSay(0, "You have the perms you want.");
else
    llSay(0, "You don't have the perms you want.");
integer ownerPerms = llGetObjectPermMask(MASK_OWNER);
integer copyAndModPerms = PERM_COPY | PERM_MODIFY;

if ((ownerPerms & copyAndModPerms) == copyAndModPerms)
    llSay(0, "Owner has copy & modify perms.");
else
    llSay(0, "Owner does not have copy & modify perms.");
string getPermsAsReadableString(integer perm)
{
    integer allPerms = PERM_ALL;
    integer fullPerms = PERM_COPY | PERM_MODIFY | PERM_TRANSFER;

    integer copyModMovePerms = PERM_COPY | PERM_MODIFY | PERM_MOVE;
    integer copyModPerms = PERM_COPY | PERM_MODIFY;

    integer copyTransMovePerms = PERM_COPY | PERM_TRANSFER | PERM_MOVE;
    integer copyTransPerms = PERM_COPY | PERM_TRANSFER;

    integer modTransMovePerms = PERM_MODIFY | PERM_TRANSFER | PERM_MOVE;
    integer modTransPerms = PERM_MODIFY | PERM_TRANSFER;

    integer copyMovePerms = PERM_COPY | PERM_MOVE;

    integer transMovePerms = PERM_TRANSFER | PERM_MOVE;

    string output = " perms: ";

    if ((perm & allPerms) == allPerms)
        output += "full and move";
    else if ((perm & fullPerms) == fullPerms)
        output += "full";
    else if ((perm & copyModMovePerms) == copyModMovePerms)
        output += "copy & modify & move";
    else if ((perm & copyModPerms) == copyModPerms)
        output += "copy & modify";
    else if ((perm & copyTransMovePerms) == copyTransMovePerms)
        output += "copy & transfer & move";
    else if ((perm & copyTransPerms) == copyTransPerms)
        output += "copy & transfer";
    else if ((perm & modTransMovePerms) == modTransMovePerms)
        output += "modify & transfer & move";
    else if ((perm & modTransPerms) == modTransPerms)
        output += "modify & transfer";
    else if ((perm & copyMovePerms) == copyMovePerms)
        output += "copy & move";
    else if ((perm & PERM_COPY) == PERM_COPY)
        output += "copy";
    else if ((perm & transMovePerms) == transMovePerms)
        output += "transfer & move";
    else if ((perm & PERM_TRANSFER) == PERM_TRANSFER)
        output += "transfer";
    else if ((perm & PERM_MOVE) == PERM_MOVE)
        output += "move";
    else
        output += "none";

    //  Remember, items in Second Life must have either
    //  PERM_COPY or PERM_TRANSFER when "talking about"
    //  owner perms or perms for next owner.

    return
        output;
}
default
{
    state_entry()
    {
        integer basePerms      = llGetObjectPermMask(MASK_BASE);
        integer ownerPerms     = llGetObjectPermMask(MASK_OWNER);
        integer nextOwnerPerms = llGetObjectPermMask(MASK_NEXT);
        integer groupPerms     = llGetObjectPermMask(MASK_GROUP);
        integer everyonePerms  = llGetObjectPermMask(MASK_EVERYONE);

        llSay(0, "base"       + getPermsAsReadableString(basePerms));
        llSay(0, "owner"      + getPermsAsReadableString(ownerPerms));
        llSay(0, "next owner" + getPermsAsReadableString(nextOwnerPerms));
        llSay(0, "group"      + getPermsAsReadableString(groupPerms));
        llSay(0, "everyone"   + getPermsAsReadableString(everyonePerms));
    }
}
integer isLocked()
{
    return !(llGetObjectPermMask(MASK_OWNER) & PERM_MOVE);
}

Notes

The perms of a newly created object are often:

 Base = PERM_ALL
 Owner = PERM_ALL
 Next = PERM_MOVE or PERM_TRANSFER
 Group = 0 (none)
 Everyone = 0 (none)

See Also

Functions

•  llGetInventoryPermMask

Articles

•  hex

Deep Notes

Search JIRA for related Issues

Tests

•  llGetObjectPermMask_Test

Signature

function integer llGetObjectPermMask( integer category );