Difference between revisions of "Give InvItem every n hours"

From Second Life Wiki
Jump to navigation Jump to search
m (-1 >> ERR_GENERIC and 0 >> FALSE and 1 >> TRUE)
m (language tags to <source>)
 
(One intermediate revision by one other user not shown)
Line 2: Line 2:
This script will give an inventory item on touch only every n hours, even if somebody touches the object more than once.
This script will give an inventory item on touch only every n hours, even if somebody touches the object more than once.


<lsl>
<source lang="lsl2">
// Idea and written by Criz Collins
// Idea and written by Criz Collins
// Don't sell this FREE script!!!
// Don't sell this FREE script!!!
Line 36: Line 36:
             integer giveallowed = FALSE;
             integer giveallowed = FALSE;
             integer index = llListFindList( visitors, [ llDetectedKey(n) ] );
             integer index = llListFindList( visitors, [ llDetectedKey(n) ] );
             if (index == ERR_GENERIC)
             if (index == -1)
             {
             {
                 visitors = visitors + [ llDetectedKey(n) ];
                 visitors = visitors + [ llDetectedKey(n) ];
Line 61: Line 61:
     }
     }
}
}
</lsl>
</source>


[[User:Criz Collins|Criz Collins]] 11:14, 11 June 2008 (PDT)
[[User:Criz Collins|Criz Collins]] 11:14, 11 June 2008 (PDT)

Latest revision as of 20:02, 24 January 2015

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)