Ginge Reymont
Registered User
Join date: 10 Oct 2005
Posts: 190
|
10-10-2005 13:55
I have tried numorous methods but all failed..
Any ideas?
|
Zapoteth Zaius
Is back
Join date: 14 Feb 2004
Posts: 5,634
|
10-10-2005 14:37
//////////////////////////////////////////// // Follow Me Script // // Written by Xylor Baysklef ////////////////////////////////////////////
/////////////// CONSTANTS /////////////////// string FWD_DIRECTION = "+x";
vector POSITION_OFFSET = <-1, 1, 1>; // Local coords float SCAN_REFRESH = 1.0;
string FOLLOW = "come"; string STAY = "stay";
integer FOLLOW_STOP = 5000; integer FOLLOW_START = 5001; ///////////// END CONSTANTS /////////////////
///////////// GLOBAL VARIABLES /////////////// key gOwner; integer gOverride = FALSE; rotation gFwdRot; float gTau; float gMass; /////////// END GLOBAL VARIABLES /////////////
StartScanning() { llSensorRepeat("", gOwner, AGENT, 96.0, PI, SCAN_REFRESH); }
StopScanning() { llSensorRemove(); }
// Move to a position far away from the current one. MoveTo(vector target) { vector Pos = llGetPos(); while (llVecDist(llGetPos(), target) > 0.01) { llSetPos(target); } }
rotation GetFwdRot() { // Special case... 180 degrees gives a math error if (FWD_DIRECTION == "-x") { return llAxisAngle2Rot(<0, 0, 1>, PI); } string Direction = llGetSubString(FWD_DIRECTION, 0, 0); string Axis = llToLower(llGetSubString(FWD_DIRECTION, 1, 1)); vector Fwd; if (Axis == "x") Fwd = <1, 0, 0>; else if (Axis == "y") Fwd = <0, 1, 0>; else Fwd = <0, 0, 1>; if (Direction == "-") Fwd *= -1; return llRotBetween(Fwd, <1, 0, 0>); }
rotation GetRotation(rotation rot) { vector Fwd; Fwd = llRot2Fwd(rot); float Angle = llAtan2( Fwd.y, Fwd.x ); return gFwdRot * llAxisAngle2Rot(<0, 0, 1>, Angle); }
default { state_entry() { gOwner = llGetOwner(); gFwdRot = GetFwdRot(); gMass = llGetMass(); gTau = 0.2; llListen(0, "", gOwner, FOLLOW); llListen(0, "", gOwner, STAY); llMoveToTarget(llGetPos(), gTau); llSetStatus(STATUS_PHYSICS, TRUE); StartScanning(); } on_rez(integer param) { if (llGetOwner() != gOwner) llResetScript(); } sensor(integer num_detected) { if (gOverride) return; vector Pos = llDetectedPos(0); rotation Rot = llDetectedRot(0); vector Offset = POSITION_OFFSET * Rot; Pos += Offset; StopScanning(); rotation TargetRot = GetRotation(Rot); llRotLookAt(TargetRot, gTau * 5.0, gTau); //MoveTo(Pos); llMoveToTarget(Pos, gTau); StartScanning(); } listen(integer channel, string name, key id, string mesg) { if (mesg == FOLLOW) { StartScanning(); llWhisper(0, "Follow Mode Activated."); return; } if (mesg == STAY) { StopScanning(); llWhisper(0, "Follow Mode Deactivated."); } } link_message(integer sender, integer channel, string data, key id) { if (channel == FOLLOW_STOP) { gOverride = TRUE; llSetStatus(STATUS_PHYSICS, FALSE); return; } if (channel == FOLLOW_START) { gOverride = FALSE; llMoveToTarget(llGetPos(), gTau); llSetStatus(STATUS_PHYSICS, TRUE); return; } } }
Something I have in my inventory.. Play with it to get it to do what you want 
_____________________
I have the right to remain silent. Anything I say will be misquoted and used against me.--------------- Zapoteth Designs, Temotu (100,50)--------------- 
|