User:LindaB Helendale/removeAllScripts: Difference between revisions

From Second Life Wiki
Jump to navigation Jump to search
No edit summary
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
The script below removes all the scripts from a linkset. Unfortunately it cannot be made fully automatic, see the comments in the script, but this is the easiest way I could figure out.
The script below removes all the scripts from a linkset. Unfortunately it cannot be made fully automatic, see the comments in the script, but this is the easiest way I could figure out.


<lsl>
<source lang="lsl2">  
/**
/**
Remove all scripts from linkset by LindaB Helendale
Remove all scripts from linkset by LindaB Helendale
Line 18: Line 18:


Recompiling from Build>Scripts>Recompile is not reliable, since the object
Recompiling from Build>Scripts>Recompile is not reliable, since the object
inventory may not beup to date and some of the inserted cleaning scripts  
inventory may not be up to date and some of the inserted cleaning scripts  
may not be compiled. Taking the object back to inv and rerezzing refreshes  
may not be compiled. Taking the object back to inv and rerezzing refreshes  
the inventory and it should work... 'should work' in SL sense ;)
the inventory and it should work... 'should work' in SL sense ;)
Line 63: Line 63:
     }
     }
}  
}  
</lsl>
</source>

Latest revision as of 05:03, 7 September 2015

The script below removes all the scripts from a linkset. Unfortunately it cannot be made fully automatic, see the comments in the script, but this is the easiest way I could figure out.

<source lang="lsl2"> /** Remove all scripts from linkset by LindaB Helendale Permission to use this script in any way granted.

Usage:

 1. Drop this script in the root prim.
 2. Take the object in the inventory, and rez it again
 2. Select the object and choose Build>Scripts>Set Scripts to Running

Running scripts cannot be installed without remote PIN, so we can only drop the scripts in the child prims and set them running manually. With give inventory scripts reach destination disabled (not running, and cannot be made to run unless the destination object is taken to inventory and rezzed again, or the script is recompiled).

Recompiling from Build>Scripts>Recompile is not reliable, since the object inventory may not be up to date and some of the inserted cleaning scripts may not be compiled. Taking the object back to inv and rerezzing refreshes the inventory and it should work... 'should work' in SL sense ;)

After getting the scripts compiled, set them running from Build>Scripts>Set Scripts to Running

NOTE: if you drop this in a child prim, it will clean only that prim.

    • /

remove_all_scripts() {

   integer N=llGetInventoryNumber(INVENTORY_SCRIPT)-1;
   string me=llGetScriptName();
   string msg="Link #" + (string)llGetLinkNumber();
   if (llGetLinkNumber()<=1) {
       msg += " (root)";
   }
   msg +=  ": removing " + (string)N + " scripts";
   llOwnerSay(msg);
   while(N>=0) {
       string s=llGetInventoryName(INVENTORY_SCRIPT,N--);
       if (s!=me) {
           llRemoveInventory(s);
       }
   }
   llRemoveInventory(me);

}

default {

   state_entry()
   {        
       integer numLinks = llGetNumberOfPrims();
       if (numLinks>1) {
           if (llGetLinkNumber()==1) {
               integer i;
               for(i=2;i<=numLinks;i++) {
                   llGiveInventory(llGetLinkKey(i),llGetScriptName());
               }
               llOwnerSay("To clean the " + (string)(numLinks-1) + " child prims, you have to start the cleaning scripts inserted in them. \n1) Take the object back in the inv, and rez it.\n2) Select the object and choose Build>Scripts>Set Scripts to Running");
           }
       }
       remove_all_scripts();
   }

} </source>