/We're saving the keys to be sure people can only touch once.
//To avoid running out of memory, the list must be cleared occassionally or at least trimmed.
//This is accomplished, in this script, by resetting after set period of time
integer reset_list=86400;//reset list after one day (in seconds)
list touched;
default{
touch_start(integer total_number){
key id = llDetectedKey(0);
if(llListFindList(touched,[id])==-1){
touched+=[id];
llGiveInventory(id,llGetInventoryName(INVENTORY_OBJECT,(integer)llFrand(llGetInventoryNumber(INVENTORY_OBJECT))));
}
if(llGetTime()>=reset_list){llResetScript();}//clear list | restart script time
}
}