Deed Tools
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Directions
Put the following script in the root prim of the item you are about to Deed to Group. Note: Make sure you are the Creator of the object you are deeding.
Syntax
/1<Name> <Command> <Parameters...>
Commands
Kill
Command: kill
Instantly Kills the Deeded Object
Ghost
Command: ghost <Name/UUID> The deeded object will follow the object specified either by Name or UUID. Useful for repositioning the Deeded Object.
Command: unghost' Stops the Deeded object from following the other object. Note: If the other object is deleted this command is auto-ran.
Pin
Command: pin <Number> Sets the Remote Load Script Pin to <Number>. Allows other scripts to load running scripts into the deeded object.
Command: unpin Disables remotely loaded scripts.
Drop
Command: drop Allows items to be dropped into the Deeded object's inventory.
Command: undrop Disables items from being dropped into the Deeded object's inventory
Reset
Command: reset <Script> Resets the <Script> inside the Deeded object.
Run
Command: run <Script> Set the <Script> inside the Deeded object to Running.
Run
Command: stop <Script> Stops the <Script> inside the Deeded object.
Example Commands
/1MyObject kill /1MyObject ghost AnotherObject /1MyObject reset SomeScript /1
DeedTools Script
<lsl> integer CHANNEL = 1; key gGhostPrim; default {
state_entry()
{
llListen(CHANNEL,"",llGetCreator(),"");
llInstantMessage(llGetCreator(),"For help, type: /" + (string)CHANNEL + llGetObjectName() + " help\n");
}
listen(integer channel, string name, key id, string msg)
{
string name = llToLower(llGetObjectName());
msg = msg;
if( llSubStringIndex(llToLower(msg),name) != 0) return;
msg = llStringTrim(llGetSubString(msg,llStringLength(name),-1),STRING_TRIM);
list params = llParseString2List(msg,[" "],[]);
string command = llToLower(llList2String(params,0));
string param = llDumpList2String(llDeleteSubList(params,0,0)," ");
params = [];
if( command == "help" )
{
llInstantMessage(id,"\nSyntax: /"+ (string)CHANNEL + llGetObjectName() + " <command> <params>\n\n" +
"kill: Kills the object\n" +
"ghost <name/UUID>: Follow the object and rotate along with in\n" +
"unghost: Stop following an object\n" +
"pin #: Sets script loading pin to <#>\n" +
"unpin: Removes loading script pin"
);
llInstantMessage(id,"\n"+
"drop: Allows objects to be dropped into the prim\n" +
"undrop: Prevents objects from being dropped into the prim\n" +
"reset <script>: Resets the script named <script>\n" +
"run <script>: Starts the script named <script>\n" +
"stop <script>: Stopts the script named <script>"
);
}
if( command == "kill" )
{
llInstantMessage(id,"Killing " + llGetObjectName() );
llDie();
}
if( command == "move" || command == "rmove")
{
vector p = (vector)param;
if( command == "rmove" ) p += llGetPos();
if( llVecMag( p - llGetPos() ) > 100 )
{
llInstantMessage(id,"Unable to move: Distance is too great");
return;
}
while( llGetPos() != p ) {llSetPos(p);}
}
if( command == "rot" || command == "rrot" )
{
rotation r = llEuler2Rot((vector)param*DEG_TO_RAD);
if( command == "rrot" ) r = llGetRot() * r;
llSetRot(r);
}
if( command == "pin" )
{
llSetRemoteScriptAccessPin((integer)param);
}
if( command == "unpin" )
{
llSetRemoteScriptAccessPin(0);
}
if( command == "drop" ) llAllowInventoryDrop(TRUE);
if( command == "undrop") llAllowInventoryDrop(FALSE);
if( command == "reset" ) llResetOtherScript(param);
if( command == "run" ) llSetScriptState(param,TRUE);
if( command == "stop") llSetScriptState(param,FALSE);
if( command == "ghost" )
{
gGhostPrim = param;
if( llGetOwnerKey(param) == NULL_KEY )
{
llSensor(gGhostPrim,"",ACTIVE|PASSIVE,20.0,PI);
} else {
llSetTimerEvent(1.0);
}
}
if( command == "unghost" )
{
llSetTimerEvent(0.0);
}
}
sensor(integer i)
{
gGhostPrim = llDetectedKey(0);
llSetTimerEvent(1.0);
}
no_sensor()
{
llInstantMessage(llGetCreator(),(string)gGhostPrim + " not found");
}
timer()
{
list p = llGetObjectDetails(gGhostPrim,[OBJECT_POS,OBJECT_ROT]);
if( llGetListLength(p) == 0 )
{
llSetTimerEvent(0.0);
llInstantMessage(llGetCreator(),"Object Lost..");
} else {
llSetPos(llList2Vector(p,0));
llSetRot(llList2Rot(p,1));
}
}
} </lsl>