Give InvItem every n hours

From Second Life Wiki
Revision as of 14:20, 9 September 2014 by Omei Qunhua (talk | contribs) (-1 meaning not found, is not a generic error)
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 = FALSE;
           integer index = llListFindList( visitors, [ llDetectedKey(n) ] );
           if (index == -1)
           {
               visitors = visitors + [ llDetectedKey(n) ];
               lastsent = lastsent + [(integer)llGetUnixTime()];
               giveallowed = TRUE;
           }
           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 = TRUE;
               }

// else giveallowed = FALSE;

           }
           if (giveallowed)// == TRUE
           {
               llGiveInventory(llDetectedKey(n), giveitem);
           }
       }
   }

} </lsl>

Criz Collins 11:14, 11 June 2008 (PDT)