Difference between revisions of "Give InvItem every n hours"

From Second Life Wiki
Jump to navigation Jump to search
Line 65: Line 65:
}
}
</lsl>
</lsl>
[[User:Criz Collins|Criz Collins]] 11:14, 11 June 2008 (PDT)
{{visl
|Mentors=*
|LSL=*
}}
{{skills
|Builder=*
|Scripter=*
|}}
{{ISO 639-3/cat-speaking/Volunteers|deu}}
{{ISO 639-3/cat-speaking/Volunteers|eng}}
{{ISO 639-3/cat-speaking/Volunteers|gml}}
{{ISO 639-3/cat-speaking/Volunteers|gsg}}
{{ISO 639-3/cat-speaking/Volunteers|nds}}
{{ISO 639-3/cat-speaking|deu}}
{{ISO 639-3/cat-speaking|eng}}
{{ISO 639-3/cat-speaking|gml}}
{{ISO 639-3/cat-speaking|gsg}}
{{ISO 639-3/cat-speaking|nds}}
{{visl
    |Greeters=
    |Mentors=*
    |Helpers=
    |Instructors=
    |Scribe=
    |Linguist=
    |Buddy=*
    |ApprenticeBuddy=
    |Coach=
    |OrientationCoach=
|}}
{{LSLC|Library|Give InvItem every n hours}}
{{LSLC|Library|Give InvItem every n hours}}

Revision as of 10:14, 11 June 2008

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>

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