//High Altitude Rezzer
//Creator: Jesse Barnett
integer target_height = 435;//Set the elevation you want to go to here. Maximum you can rez objects is 4096.
float zSpeed = 500.0;
vector x;
vector w;
list grnd;
vector ground;
vector rez_obj_offset = <0.0, 0.0, -0.5>;
//
integer channel = 0;
//Adjust this as necessary for postion of
//rezzed object in relation to vehicle. (no more then 10.0 in any axis)
default{
on_rez(integer start_param) {
llResetScript();
}
state_entry(){
grnd = [];
grnd += llGetPos(); // back to ground position?
ground = llList2Vector(grnd, 0);
vector pos = llGetPos(); // current position?
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, FALSE);
if(pos.z >= (target_height - 5)){
state descend;
}
llSetText("Sit and touch to ascend", <0,0,0>,1.0);
//
integer listen_handle = llListen(0, "", llGetOwner(), ""
;}
listen( integer channel, string name, key id, string msg )
target_height = (integer) msg
{
llSetText("Sit and touch to ascend", <0,0,0>,1.0);
}
touch_start(integer total_number){
llSetStatus(STATUS_PHYSICS, TRUE);
x = llGetPos();
x.z = target_height;
llTarget(x,50);
}
not_at_target(){
llApplyImpulse(llGetMass()*<0,0,zSpeed>,FALSE);
}
at_target(integer ascend, vector target, vector cPos){
llTargetRemove(ascend);
llMoveToTarget(target,1);
llSetTimerEvent(5.0);
}
timer(){
vector pos = llGetPos();
if(pos.z >= (target_height - 1)){
llStopMoveToTarget();
llApplyImpulse(-llGetMass()*llGetVel(),FALSE);
llSetStatus(STATUS_PHYSICS, FALSE);
llRezObject(llGetInventoryName(INVENTORY_OBJECT, 0), llGetPos() + rez_obj_offset, ZERO_VECTOR, ZERO_ROTATION, 42);
state descend;
}
}
}
state descend{
state_entry() {
vector pos = llGetPos();
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, FALSE);
if(pos.z <= (ground.z + 5)){
state default;
}
llSetText("Sit and touch to descend", <0,0,0>,1.0);
}
touch_start(integer total_number){
llSetStatus(STATUS_PHYSICS, TRUE);
w = llGetPos();
w.z = ground.z;
llTarget(w,50);
}
not_at_target(){
llApplyImpulse(llGetMass()*<0,0,-500>,FALSE);
}
at_target(integer descend, vector target2, vector Pos){
llTargetRemove(descend);
llMoveToTarget(target2,1);
llSetTimerEvent(5.0);
}
timer(){
vector pos = llGetPos();
if(pos.z <= (ground.z + 1)){
llStopMoveToTarget();
llApplyImpulse(-llGetMass()*llGetVel(),FALSE);
llSetStatus(STATUS_PHYSICS, FALSE);
llSetPos(ground);
state default;
}
}
}