llGiveInventoryList

From Second Life Wiki
Revision as of 13:34, 15 November 2012 by Kireji Haiku (talk | contribs)
Jump to navigation Jump to search

Summary

Function: llGiveInventoryList( key target, string folder, list inventory );

Gives inventory items to target, creating a new folder to put them in.

• key target avatar or prim UUID that is in the same region
• string folder folder name to use
• list inventory a list of items in the inventory of the prim this script is in

Specification

target types

Depending upon the type of target this function works differently.

  • Avatar
    • Must be or recently have been within the same Region as sending object. SVC-868
    • Places the inventory items in a newly created folder in the avatars inventory (even if there is a folder by the same name, a new one is created).
  • Prim / Object
    • The prim must be in the same region.
    • Does not create a folder.

Caveats

  • This function causes the script to sleep for 3.0 seconds.
  • If target is not the owner nor shares the same owner, and inventory does not have transfer permissions, an error is shouted on DEBUG_CHANNEL.
  • If inventory permissions do not allow copy, the transfer fails and an error is shouted on DEBUG_CHANNEL.
  • If target is a prim that is not in the same region an error is shouted on DEBUG_CHANNEL.
  • When scripts are copied or moved between inventories, their state does not survive the transfer. Memory, event queue and execution position are all discarded.
  • If inventory is missing from the prim's inventory then an error is shouted on DEBUG_CHANNEL.
All Issues ~ Search JIRA for related Bugs

Examples

<lsl> // when the prim is touched, the script checks all other inventory items whether or not they're copiable // copiable items are added to a list, if the list is not empty when all items have been checked // the prim gives them to the touching avatar within a single folder

default {

   touch_start(integer num_detected)
   {
       string thisScript = llGetScriptName();
       list inventoryItems;
       integer inventoryNumber = llGetInventoryNumber(INVENTORY_ALL);


       integer index;
       do
       {
           string itemName = llGetInventoryName(INVENTORY_ALL, index);
           if (itemName != thisScript)
           {
               if (llGetInventoryPermMask(itemName, MASK_OWNER) & PERM_COPY)
               {
                   inventoryItems += itemName;
               }
               else
               {
                   llSay(PUBLIC_CHANNEL, "Unable to copy the item named '" + itemName + "'.");
               }
           }
       }
       while(++index < inventoryNumber);
       //  if the list is empty, the length of the list is 0 (FALSE)
       if (!llGetListLength(inventoryItems))
       {
           llSay(PUBLIC_CHANNEL, "No copiable items found, sorry.");
       }
       else
       {
           llGiveInventoryList(llDetectedKey(0), llGetObjectName(), inventoryItems);//  3.0 seconds delay
       }
   }

} </lsl> <lsl> // script gives items to owner only // all copiable items are given within a single folder // all no-copy items are transferred seperately (only one time, right? right!)

default {

   touch_start(integer num_detected)
   {
       key owner = llGetOwner();
       key touchingAvatar = llDetectedKey(0);
   //  to reduce indentation we invert the
   //  if-owner-check to if-not-owner
       if(touchingAvatar != owner)
           return;
       list inventoryItems;
       integer inventoryNumber = llGetInventoryNumber(INVENTORY_ALL);
       integer index;
       do
       {
           string itemName = llGetInventoryName(INVENTORY_ALL, index);
           if (llGetInventoryPermMask(itemName, MASK_OWNER) & PERM_COPY)
           {
               inventoryItems += itemName;
           }
           else
           {
               llGiveInventory(owner, itemName);//  2.0 seconds delay
           }
       }
       while(++index < inventoryNumber);
       llGiveInventoryList(owner, llGetObjectName(), inventoryItems);//  3.0 seconds delay
   }

}

</lsl>

See Also

Events

•  changed

Functions

•  llGiveInventory

Deep Notes

All Issues

~ Search JIRA for related Issues
   llGiveInventoryList should be able to work gridwide

Signature

function void llGiveInventoryList( key target, string folder, list inventory );