TOXDropBox
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
//:TOX: DropBox
//Script Name: :TOX: Dropbox.lsl
//By: Dimentox Travanti
//
// This is a Drop box which allows people to drop in items it can have a required prefix on the items
// And has the abilility to hand out a template / instructions
// Also you can set the color and if it notifies you.
//
//CONFIG //
string templatename=""; // give a template? leave blank for no
integer allowed = INVENTORY_NOTECARD; /// the type of item allowed
string rname = "dcs"; //name to be allowed it will check for the item must be named this to start
string inst ="INSTRUCTIONS HERE"; // instructions that are given. blank for no instructions
integer showhover = 1; //Show hover text
string title = ""; //leave blank to display the objects name;
vector color = <1,1,1>; //hover color
float alpha = 1.0; // the brightness of the hover 1.0 is full 0.0 is not visable
integer showtotal = 0; //1 for yes 0 for no
integer protect = 1; //Protect against other scripts runing when droped in?
integer notify = 0; // Notify of new additions.
///////////////NOTHING UNDER HERE SHOULD NEED TO BE CHANGED!///////////
//Needed vars//
list items;
integer ctotal=0;
list ids;
list types = [INVENTORY_TEXTURE, INVENTORY_SOUND, INVENTORY_LANDMARK,
INVENTORY_CLOTHING, INVENTORY_OBJECT, INVENTORY_SCRIPT,INVENTORY_NOTECARD,
INVENTORY_BODYPART, INVENTORY_ANIMATION, INVENTORY_GESTURE];
//functions
set()
{
if (showhover == 1)
{
string temp = title + "\n";
if (templatename != "")
{
temp += "Touch for Template\n";
}
if (inst != "")
{
temp += "Touch for Instructions\n";
}
if (showtotal == 1)
{
temp +="Total: "+(string)ctotal;
}
llSetText(temp, color, alpha);
}
}
string genslurl()
{
string sim = llEscapeURL(llGetRegionName());
vector pos = llGetPos();
integer x = (integer)pos.x;
integer y = (integer)pos.y;
integer z = (integer)pos.z;
return "http:///slurl.com/secondlife/"+sim+"/"+(string)x+"/"+(string)y+"/"+(string)z+"/";
}
sprotect()
{
integer num = llGetInventoryNumber(INVENTORY_SCRIPT);
integer x;
for (x = 0; x< num; x++)
{
string name = llGetInventoryName(INVENTORY_SCRIPT, x);
if (name != llGetScriptName())
{
llSetScriptState(name, FALSE);
}
}
}
integer remove()
{
//textures
integer removed = 0;
integer tcount = llGetListLength(types);
integer x = 0;
while (x < tcount)
{
integer type = llList2Integer(types, x);
// llOwnerSay((string)type);
if (type != allowed) // make sure its not an allowed thing.
{
integer num = llGetInventoryNumber(type);
integer z = 0;
while (z < num)
{
string name = llGetInventoryName(type, z);
// llOwnerSay(name);
if (name == llGetScriptName() || name == templatename)
{
//do nothing
} else {
llSay(0, "I am sorry this type of item is not allowed to be given in this box. \n"+inst);
llRemoveInventory(llGetInventoryName(type, z));
removed = 1;
}
z++;
}
}
x++;
}
return removed;
}
default
{
state_entry()
{
llSay(0, genslurl());
sprotect();
if (title == "")
{
title = llGetObjectName();
}
integer tot = llGetInventoryNumber(allowed);
ctotal = llGetInventoryNumber(allowed);
integer i = 0;
for(i;i < tot;++i)
{
string name = llGetInventoryName(allowed,i);
key id = llGetInventoryKey(name);
integer index = llListFindList((list)name,items);
if(index = -1 )
{
items += name;
ids += id;
llOwnerSay("Added named: " + name);
}
}
set();
}
touch_start(integer total_number)
{
if (templatename != "")
{
llGiveInventory(llDetectedKey(0), templatename);
}
if (inst != "")
{
llSay(0, inst);
}
}
changed(integer change)
{
if(change & CHANGED_INVENTORY)
{
sprotect();
llSay(0, "Please Wait Proccessing your submission");
if (llGetInventoryNumber(allowed) != ctotal)
{
integer tot = llGetInventoryNumber(allowed);
integer i = 0;
for(i;i < tot;++i)
{
string name = llGetInventoryName(allowed,i);
key id = llGetInventoryKey(name);
integer index = llListFindList(items,(list)name);
if(index == -1)
{
if (name != templatename || name != llGetScriptName())
{
integer rlen = llStringLength(rname) - 1;
if (llToLower(llGetSubString(name, 0, rlen)) != llToLower(rname))
{
llSay(0, "This item is not named properly and will be removed\n" + inst);
llRemoveInventory(name);
} else {
items += name;
ids += id;
llSay(0, "Thanks for the submission of " + name);
if (notify == 1)
{
string msg = "You have a new item named " + name + " waiting for you!\nLocation: "+ genslurl();
llInstantMessage(llGetOwner(), msg);
}
}
}
}
}
}else {
remove();
}
set();
}
}
}