Follower script
Revision as of 13:59, 24 January 2015 by ObviousAltIsObvious Resident (talk | contribs) (<lsl> tag to <source>)
This script is based on an extract from the Batman Follower v1.2. It is very basic. If you put it in an object, that object will keep moving toward a position offset from it's owner.
vector offset = < -1, 0, 1>; //1 meter behind and 1 meter above owner's center.
default
{
state_entry()
{
llSetStatus(STATUS_PHYSICS, TRUE);
// Little pause to allow server to make potentially large linked object physical.
llSleep(0.1);
// Look for owner within 20 metres in 360 degree arc every 1 seconds.
llSensorRepeat("", llGetOwner(), AGENT, 20.0, PI,1.0);
}
sensor(integer total_number)
{ // Owner detected...
// Get position and rotation
vector pos = llDetectedPos(0);
rotation rot = llDetectedRot(0);
// Offset back one metre in X and up one metre in Z based on world coordinates.
// use whatever offset you want.
vector worldOffset = offset;
// Offset relative to owner needs a quaternion.
vector avOffset = offset * rot;
pos += avOffset; // use the one you want, world or relative to AV.
llMoveToTarget(pos,0.4);
}
}
//adding this script as a less laggy and more efficient way of doing the same as above
//this is for havok4's new functions
vector offset = < -1, 0, 1>; //1 meter behind and 1 meter above owner's center.
default
{
state_entry()
{
llSetStatus(STATUS_PHYSICS, TRUE);
// Little pause to allow server to make potentially large linked object physical.
llSleep(0.1);
llSetTimerEvent(1.0);
}
timer()
{
list det = llGetObjectDetails(llGetOwner(),[OBJECT_POS,OBJECT_ROT]);//this will never fail less owner is not in the same sim
// Owner detected...
// Get position and rotation
vector pos = llList2Vector(det,0);
rotation rot = (rotation)llList2String(det,1);
// Offset back one metre in X and up one metre in Z based on world coordinates.
// use whatever offset you want.
vector worldOffset = offset;
// Offset relative to owner needs a quaternion.
vector avOffset = offset * rot;
pos += avOffset; // use the one you want, world or relative to AV.
llMoveToTarget(pos,0.4);
}
}