Give InvItem every n hours

From Second Life Wiki
Revision as of 20:02, 24 January 2015 by ObviousAltIsObvious Resident (talk | contribs) (language tags to <source>)
(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.

// 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);
            }
        }
    }
}

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