// SCRIPT REMOVER by Dora Gustafson, Studio Dora 2010
// Based on 'Script eraser v1.2' Script by Dora Gustafson 2008
// Place script in the root of the object you want to clean for scripts and follow the instructions
// v1.01 monitor number of scripts started
vector position_original;
integer primNo;
integer childcount = 1;
float eb_delay = 0.03125; // seconds to hold script. Defeat event buffer limit (64 events)
eraser()
{ // erase all scripts from prim
integer i = 0;
string s;
string thisScript = llGetScriptName();
do
{ s = llGetInventoryName( INVENTORY_SCRIPT, i );
if ( s != thisScript ) llRemoveInventory( s );
else ++i; // don't erase skip it
}
while ( llGetInventoryNumber( INVENTORY_SCRIPT ) > 1 );
if ( primNo == 1 )
{
llOwnerSay("All scripts have been removed from this object");
llSetText("", <1.0, 1.0, 1.0>, 1.0);
}
llRemoveInventory( thisScript ); // remove this as the last
}
default
{
state_entry()
{
integer dg;
primNo = llGetLinkNumber();
if ( primNo == 1 )
{
childcount = 1;
position_original = llGetPos();
for ( dg = 2; dg <= llGetNumberOfPrims(); dg++ ) llGiveInventory( llGetLinkKey( dg ), llGetScriptName());
llOwnerSay("\n1. Take this object into Inventory!\n2. Rezz it back into the world!\n(will snap in position if less than 10m from where it was)");
}
else if (primNo > 1)
{
llSleep( eb_delay*primNo );
llMessageLinked( LINK_ROOT, FALSE, "child running", NULL_KEY);
}
}
on_rez( integer parm )
{
if ( !primNo )
{ // if linkset is just one prim, probably the box it is sold in
llOwnerSay("\nOpen prim and save script in inventory before use:\nPlace script in the object you want to clean and follow the instructions\nCongratulations with this SCRIPT REMOVER by Dora Gustafson, Studio Dora");
}
else if ( primNo == 1 )
{
llSetPos( position_original );
llOwnerSay( "\n3. Select and 'Set Scripts to Running in Selection'");
}
}
link_message(integer targ, integer num, string instruct, key id)
{
if ( instruct == "Erase Only" ) eraser();
else if ( instruct == "child running" )
{
if ( ++childcount == llGetNumberOfPrims() ) llMessageLinked( LINK_SET, FALSE, "Erase Only", NULL_KEY);
llSetText( (string)(llGetNumberOfPrims()-childcount)+" scripts are NOT running", <1.0, 1.0, 1.0>, 1.0);
}
}
}