“LlGetInventoryPermMask”的版本间的差异
(创建页面,内容为“{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = Function: integer llGetInventoryPermMask( string item, integer categ…”) |
(没有差异)
|
2021年1月25日 (一) 08:31的最新版本
首页 | 函数 | 事件 | 类型 | 操作符 | 常数 | Flow Control | Script Library | Categorized Library | Tutorials |
函数名 |
---|
Function: integer llGetInventoryPermMask( string item, integer category ) |
参数:
|
返回值:返回库存项的请求权限类别的位字段(整数) |
注意事项 |
---|
注意事项
|
示例 |
---|
if ((permsYouHave & permsYouWant) == permsYouWant) llSay(PUBLIC_CHANNEL, "You have the perms you want."); else llSay(PUBLIC_CHANNEL, "You don't have the perms you want."); integer ownerPerms = llGetInventoryPermMask("inventory item name goes here", MASK_OWNER); integer copyAndModPerms = PERM_COPY | PERM_MODIFY; if ((ownerPerms & copyAndModPerms) == copyAndModPerms) llSay(PUBLIC_CHANNEL, "Owner has copy & modify perms."); else llSay(PUBLIC_CHANNEL, "Owner does not have copy & modify perms."); string getPermsAsReadableString(integer perm) { integer fullPerms = PERM_COPY | PERM_MODIFY | PERM_TRANSFER; integer copyModPerms = PERM_COPY | PERM_MODIFY; integer copyTransPerms = PERM_COPY | PERM_TRANSFER; integer modTransPerms = PERM_MODIFY | PERM_TRANSFER; string output = " perms: "; if ((perm & fullPerms) == fullPerms) output += "full"; else if ((perm & copyModPerms) == copyModPerms) output += "copy & modify"; else if ((perm & copyTransPerms) == copyTransPerms) output += "copy & transfer"; else if ((perm & modTransPerms) == modTransPerms) output += "modify & transfer"; else if ((perm & PERM_COPY) == PERM_COPY) output += "copy"; else if ((perm & PERM_TRANSFER) == PERM_TRANSFER) output += "transfer"; 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() { string inventoryItemName = "inventory item name goes here"; integer basePerms = llGetInventoryPermMask(inventoryItemName, MASK_BASE); integer ownerPerms = llGetInventoryPermMask(inventoryItemName, MASK_OWNER); integer nextOwnerPerms = llGetInventoryPermMask(inventoryItemName, MASK_NEXT); integer groupPerms = llGetInventoryPermMask(inventoryItemName, MASK_GROUP); integer everyonePerms = llGetInventoryPermMask(inventoryItemName, MASK_EVERYONE); llSay(0, "/me [" + inventoryItemName + "]: base" + getPermsAsReadableString(basePerms)); llSay(0, "/me [" + inventoryItemName + "]: owner" + getPermsAsReadableString(ownerPerms)); llSay(0, "/me [" + inventoryItemName + "]: next owner" + getPermsAsReadableString(nextOwnerPerms)); llSay(0, "/me [" + inventoryItemName + "]: group" + getPermsAsReadableString(groupPerms)); llSay(0, "/me [" + inventoryItemName + "]: everyone" + getPermsAsReadableString(everyonePerms)); } } 测试反义词(例如,看某物是否不是复制的): if (!(PERM_COPY & llGetInventoryPermMask(myitem, MASK_OWNER))) llSay(PUBLIC_CHANNEL, "/me [" + myitem + "]: owner doesn't have copy perms."); 提醒下一位业主在出售前设置哪些权限,选择哪些权限需要设置; CheckPerms() { string item = llGetScriptName(); integer nextOwnerPerms = llGetInventoryPermMask(item, MASK_NEXT); if(PERM_COPY & nextOwnerPerms) llOwnerSay("Set no copy"); if(PERM_MODIFY & nextOwnerPerms) llOwnerSay("Set no mod"); if(PERM_TRANSFER & nextOwnerPerms) llOwnerSay("Set no transfer"); } default { on_rez(integer start_param) { llResetScript(); } state_entry() { if(llGetOwner() != llGetInventoryCreator(llGetScriptName())) CheckPerms(); } } |
相关函数 |
---|
llGetInventoryPermmask
llGetInventoryName -返回库存项的名称 llGetInventoryType -测试库存项是否存在并返回其类型 llGetInventoryNumber -返回库存中特定类型的项目的数量 llGetInventoryKey -返回库存项的UUID(如果是完整的perm) llGetInventoryCreator -返回库存物品的创建者 |
相关事件 |
---|