Difference between revisions of "LlGiveInventoryList"

From Second Life Wiki
Jump to navigation Jump to search
m
m
Line 52: Line 52:
         }
         }


         if (inventoryItems != [] )
         if (inventoryItems == [] )
         {
         {
             llSay(0, "No copiable items found, sorry.");
             llSay(0, "No copiable items found, sorry.");

Revision as of 11:36, 26 September 2014

Summary

Function: llGiveInventoryList( key target, string folder, list inventory );
3.0 Forced Delay
10.0 Energy

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.

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;
       for ( ; index < inventoryNumber; ++index )
       {
           string itemName = llGetInventoryName(INVENTORY_ALL, index);
           if (itemName != thisScript)
           {
               if (llGetInventoryPermMask(itemName, MASK_OWNER) & PERM_COPY)
               {
                   inventoryItems += itemName;
               }
               else
               {
                   llSay(0, "Unable to copy the item named '" + itemName + "'.");
               }
           }
       }
       if (inventoryItems == [] )
       {
           llSay(0, "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 separately (only one time, right? right!)

default {

   touch_start(integer num_detected)
   {
       key owner = llGetOwner();
       if (llDetectedKey(0) != owner)
           return;
       list inventoryItems;
       integer inventoryNumber = llGetInventoryNumber(INVENTORY_ALL);
       integer index;
       for ( ; index < inventoryNumber; ++index )
       {
           string itemName = llGetInventoryName(INVENTORY_ALL, index);
           if (itemName != llGetScriptName() )
           {
               if (llGetInventoryPermMask(itemName, MASK_OWNER) & PERM_COPY)
               {
                   inventoryItems += itemName;
               }
               else
               {
                   llGiveInventory(owner, itemName);    // 2.0 seconds delay
               }
           }
       }
       if (inventoryItems != [] )
           llGiveInventoryList(owner, llGetObjectName(), inventoryItems);    // 3.0 seconds delay
   }

}

</lsl>

See Also

Events

•  changed

Functions

•  llGiveInventory

Deep Notes

Signature

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