User:Toady Nakamura/Prim Contents Lister

From Second Life Wiki
< User:Toady Nakamura
Revision as of 12:41, 13 November 2013 by Toady Nakamura (talk | contribs) (added script)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

From an SL wiki [1] which lists it to hover text. But it's easier to use if it outputs to the local chat, so I modded it to do that and also to wait and not repeat every 5 seconds the way he had it!


<lsl> // FLOAT BOX CONTENTS -- Rolig Loon -- November 2009 // //Modified Toady Nakamura 11/13/13 // Leave the header!! // Free to copy, modify, or distribute. // Please do not sell this script. Be nice.

list contents = []; default {

   state_entry()
   {
       // this is a list of all the possible inventory types, as constants.
       list list_types = [INVENTORY_NONE, INVENTORY_TEXTURE, INVENTORY_SOUND, INVENTORY_LANDMARK,
       INVENTORY_CLOTHING, INVENTORY_OBJECT, INVENTORY_NOTECARD, INVENTORY_SCRIPT,
       INVENTORY_BODYPART, INVENTORY_ANIMATION, INVENTORY_GESTURE];

       // this list is of the string names corresponding to the one above.
       list list_names = ["None", "Texture", "Sound", "Landmark", "Clothing", "Object", "Notecard",
       "Script", "Body Part", "Animation", "Gesture"];

       integer all = llGetInventoryNumber(INVENTORY_ALL);
       integer i;
       for (i=0;i<=all-1;++i)
       {
       integer detected_type = llGetInventoryType(llGetInventoryName(INVENTORY_ALL,i)); // look up which type this object is.
       integer type_index = llListFindList(list_types,[detected_type]); // where in list_types is this type?
       string type_name = llList2String(list_names, type_index); // get the corresponding entry in the names list.
       contents += type_name + ": " + llGetInventoryName(INVENTORY_ALL,i) + "\n "; //Display type of content item and its name
       }
       llSetTimerEvent(1);  
       llOwnerSay("This box lists contents when you reset the script, add or take something from contents, and / or touch the box.");
   }

   changed(integer change)
   {
       if (change & CHANGED_INVENTORY)  // If something is added to or removed from box inventory
       {
           llResetScript();
       }
   }
   
   touch_start(integer numb)
   {
       llSetTimerEvent(1.0);
   }

   timer()
   {
       contents = llList2List(contents,1,-1) + llList2String(contents,0); // Move item 0 to the end of the list
       list temp = llList2List(contents,-8,-1); // Display only the last eight items 
       llOwnerSay("THIS BOX CONTAINS: \n " + llDumpList2String(temp,""));
       llSetTimerEvent(0.0);
   }

} </lsl>