Give InvItem every n hours

From Second Life Wiki
Revision as of 04:24, 14 April 2008 by Criz Collins (talk | contribs) (New page: {{LSL Header}} This script will give an inventory item on touch only every n hours, even if somebody touches the object more than once. <lsl> // Idea and written by Criz Collins // Don't ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This script will give an inventory item on touch only every n hours, even if somebody touches the object more than once.

<lsl> // Idea and written by Criz Collins // Don't sell this FREE script!!!

string giveitem = "name of item in objects inventory"; float giveevery = 24; // hours!

/////////////////////////////////////////////

list visitors; list lastsent; integer n;

default {

   on_rez( integer param )
   {
       llResetScript();
   }
   changed(integer change) 
   {
       if (change & CHANGED_INVENTORY) 
       {
           llResetScript();
       }
   }
   
   touch_start(integer total_number)
   {
       for (n=0; n<total_number; n++)
       {
           integer giveallowed = 0;
           integer index = llListFindList( visitors, [ llDetectedKey(n) ] );
           if (index == -1)
           {
               visitors = visitors + [ llDetectedKey(n) ];
               lastsent = lastsent + [(integer)llGetUnixTime()];
               giveallowed = 1;
           }
           else
           {
               if (llList2Integer(lastsent, index) <= ((integer)llGetUnixTime() - (giveevery * 60 * 60)))
               {
                   list replacer = [(integer)llGetUnixTime()];
                   list newlastsent = llListReplaceList(lastsent, replacer, index, index);
                   lastsent = [];
                   lastsent = newlastsent;
                   giveallowed = 1;
               }
               else
               {
                   giveallowed = 0;
               }
           }
           if (giveallowed == 1)
           {
               llGiveInventory(llDetectedKey(n), giveitem);
           }
       }
   }

} </lsl>