Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Looping a llMoveToTarget

Exile Loudon
Aspiring Scripter
Join date: 10 Dec 2005
Posts: 122
03-31-2006 21:22
Since you can't move more then like 96 m with one move to target and I want to move to 300m, how would I loop it so it would move to 300m on command? I want it so when I say "/2 private box" it moves me up 300m from wherever I am, and rezzes a platform. I thought my script would work, but it doesn't seem to work. It ony moves to 200m, and it rezzes the platform before I start moving. Here is the script:
CODE
default
{
state_entry()
{
llListen(2,"",llGetOwner(),"");

}
listen(integer channel, string name, key id, string message)
{
vector pos = llGetPos();
if (message == "privacy box")
{
llOwnerSay("Moving 300m higher into the air...");
llMoveToTarget(pos + <0,0,60>,1);
integer target = llTarget(pos,1);
llStopMoveToTarget();
llTargetRemove(target);
vector pos1 = llGetPos();
llMoveToTarget(pos1 + <0,0,60>,1);
integer target1 = llTarget(pos1,1);
llStopMoveToTarget();
llTargetRemove(target1);
vector pos2 = llGetPos();
llMoveToTarget(pos2 + <0,0,60>,1);
integer target2 = llTarget(pos2,1);
llTargetRemove(target2);
llStopMoveToTarget();
vector pos3 = llGetPos();
llMoveToTarget(pos3 + <0,0,60>,1);
integer target3 = llTarget(pos3,1);
llTargetRemove(target3);
llStopMoveToTarget();
vector pos4 = llGetPos();
llMoveToTarget(pos4 + <0,0,60>,1);
integer target4 = llTarget(pos4,1);
llTargetRemove(target2);
llStopMoveToTarget();

llOwnerSay("Arrived, rezzing platform.");
llRezObject("Privacy Platform",pos, ZERO_VECTOR, ZERO_ROTATION, 0);
}
}
}
Jillian Callahan
Rotary-winged Neko Girl
Join date: 24 Jun 2004
Posts: 3,766
03-31-2006 21:53
CODE
vector target;

move(vector targ)
{
if (llVecDist(llGetPos(), targ) < 55.0) // if closer than 55 meters
{
llMoveToTarget(targ, 1.0); // go directly there
}
else
{
llMoveToTarget(llGetPos + <0.0,0.0,55.0>, 0.2); // otherwise go 55 meters over current postion (because llMoveToTarget has a 60 meter range)
}
}

default
{
state_entry()
{
llListen(1, "", llGetOwner(), "");
}

listen(integer c, string name, key id, string msg)
{
if (llToLower(msg) == "skybox") state skybox;
}
}

state skybox
{
state_entry()
{
llMinEventDelay(0.1); // so not to get silly about not_at_target
target = llGetPos() + <0.0, 0.0, 300.0>; // Your target altitude
llTarget(target, 0.5); // to fire events related to getting there
move(target); // calls subroutine to move you
}

not_at_target()
{
move(target); // if we're not there yet, update the mover
}

at_target(integer tnum, vector tpos, vector opos)
{
llTargetRemove(tnum); // remove to stop firing events
llMoveToTarget(llGetPos(), 0.2); // hold position
llRezObject("platform name", llGetPos(), ZERO_VECTOR, ZERO_ROTATION, 0); // res the platform
llStopMoveToTarget(); // drop onto platform
state default; // return to listen state
}
}
Not compiled or tested, written while sleepy. Hope it helps though! :)
_____________________
Exile Loudon
Aspiring Scripter
Join date: 10 Dec 2005
Posts: 122
04-01-2006 04:23
This works perfectly (A few little changes were made, but nothing drastic.) Once again, Jillian, Thank you!