Difference between revisions of "LlGetInventoryPermMask"

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)
(much the same example as before, but much much more brief and no per-second timer contribution to lag)
Line 11: Line 11:
|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.
<pre>
<pre>
// Remember the last perms described.
// Complain unless this script is Open/ Yes Mod/ Yes Copy/ Yes Transfer.


integer everyonePerms;
warnIfClosed()
integer nextPerms;
{       
integer troubles;
    integer PERMS_OPEN = (PERM_MODIFY | PERM_COPY | PERM_TRANSFER);
 
    string item = llGetScriptName();
fetchPerms()
     integer everyonePerms = llGetInventoryPermMask(item, MASK_EVERYONE);
{
     integer nextPerms = llGetInventoryPermMask(item, MASK_NEXT);
     everyonePerms = llGetInventoryPermMask(llGetScriptName(), MASK_EVERYONE);
    if ((everyonePerms & PERM_COPY))
     nextPerms = llGetInventoryPermMask(llGetScriptName(), MASK_NEXT);
    {
}
         if ((nextPerms & PERMS_OPEN) == PERMS_OPEN)
 
// Describe the copyable thing for which some clients respect the perms.
 
string me()
{
    return llGetScriptName();
}
 
// Describe the perms.
 
permsShouldBe()
{
        integer wasTroubles = troubles;
        troubles = 0;
       
         if (!(everyonePerms & PERM_COPY))
         {
         {
            llOwnerSay("No = Allow anyone to copy " + me());
             llOwnerSay("Open/ Yes Mod/ Yes Copy/ Yes Transfer/ Thank you");
            troubles += 1;
             return;
        }
       
        if (!(nextPerms & PERM_MODIFY))
        {
            llOwnerSay("No = Next owner can modify " + me());
            troubles += 1;
        }
        if (!(nextPerms & PERM_COPY))
        {
            llOwnerSay("No = Next owner can copy " + me());
            troubles += 1;
        }
        if (!(nextPerms & PERM_TRANSFER))
        {
            llOwnerSay("No = Next owner can resell/ give away " + me());
            troubles += 1;
        }
       
        if (wasTroubles && !troubles)
        {
             llOwnerSay("Open / Yes Mod/ Yes Copy/ Yes Transfer");
        }
       
        if (wasTroubles || troubles)
        {
             llOwnerSay("");
         }
         }
    }
    llSay(0, "Q: Open/ Yes Mod/ Yes Copy/ Yes Transfer? A: Not so!!!");
}
}
// Describe the perms when rezzed or reset, and when the perms change.


default
default
Line 78: Line 35:
     on_rez(integer start_param)
     on_rez(integer start_param)
     {
     {
         llResetScript();  
         llResetScript();
     }
     }
     state_entry()
     state_entry()
     {
     {
         fetchPerms();
         warnIfClosed();
        permsShouldBe();
        llSetTimerEvent(1.0); // 1.0 = once per second
    }
    timer()
    {
        integer wasEveryonePerms = everyonePerms;       
        integer wasNextPerms = nextPerms;       
        fetchPerms();
        if (everyonePerms != wasEveryonePerms)
        {
            permsShouldBe();
        }
        else if (nextPerms != wasNextPerms)
        {
            permsShouldBe();
        }
     }
     }
}
}

Revision as of 09:03, 4 October 2007

Summary

Function: integer llGetInventoryPermMask( string item, integer mask );

Returns an integer bitfield that is the requested permission mask for the inventory item

• string item an item in the inventory of the prim this script is in
• integer mask 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

Caveats

  • If item is missing from the prim's inventory then an error is shouted on DEBUG_CHANNEL.
All Issues ~ Search JIRA for related Bugs

Examples

// Complain unless this script is Open/ Yes Mod/ Yes Copy/ Yes Transfer.

warnIfClosed()
{        
    integer PERMS_OPEN = (PERM_MODIFY | PERM_COPY | PERM_TRANSFER);
    string item = llGetScriptName();
    integer everyonePerms = llGetInventoryPermMask(item, MASK_EVERYONE);
    integer nextPerms = llGetInventoryPermMask(item, MASK_NEXT);
    if ((everyonePerms & PERM_COPY))
    {
        if ((nextPerms & PERMS_OPEN) == PERMS_OPEN)
        {
            llOwnerSay("Open/ Yes Mod/ Yes Copy/ Yes Transfer/ Thank you");
            return;
        }
    }
    llSay(0, "Q: Open/ Yes Mod/ Yes Copy/ Yes Transfer? A: Not so!!!");
}

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }
    state_entry()
    {
        warnIfClosed();
    }
}

Deep Notes

Search JIRA for related Issues

Signature

function integer llGetInventoryPermMask( string item, integer mask );