TOXDropBox
Revision as of 19:09, 24 January 2015 by ObviousAltIsObvious Resident (talk | contribs) (<lsl> tag to <source>)
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();
}
}
}