This is not actually a project or problem of mine, I was helping someone with scripting in my Mentor capacity. I have have this sort of error in other old scripts, though, and the person I was helping had it also. I don't know what to tell them about the cause and the solution. It occurs to me there might have been changes in LSL since the code was written, or that some of the free scripts may just have a few bugs in them. Also I suspect possibly some oddness with the sitting on sit target.
CODE
float speed=0;
float high=2400;
float turn=25;
float lift=0;
integer sit = FALSE;
integer vertoff = FALSE;
integer adecayoff = FALSE;
integer ldecayoff = FALSE;
string Vname;
key avatar;
help()
{
//llWhisper(0,"Key Actions:");
//llWhisper(0,"Right click and 'Fly' <-- Starts " + Vname);
//llWhisper(0,"Click STAND UP button <-- Stops " + Vname + " and returns contols");
//llWhisper(0,"W or Forward <-- Accelerates or goes faster forwards");
//llWhisper(0,"S or Backwards <-- Accelerates or goes faster backwards");
//llWhisper(0,"E or Page up <-- Gains Hieght");
//llWhisper(0,"C or Page down <-- Loses Hieght");
//llWhisper(0,"A or Left <-- Turns left");
//llWhisper(0,"D or Right <-- Turns right");
}
stuntparams()
{
llSitTarget(<-0.5, 0.0, 0.3>, <0,0,0,1>);
llSetSitText("Get On");
llSetCameraEyeOffset(<-10.0, 0.0, 3.0>);
llSetCameraAtOffset(<0.0, 0.0, 0.0>);
llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
llRemoveVehicleFlags(-1);
// linear friction
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000, .1, 1000> ); //1000,2,0.5
// angular friction
llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <.1, .1, .1> );
// linear motor
llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 0.1 );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1 );
// angular motor
llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 2.5 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 6 );
// no hover
llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 1 );
llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.1 );
llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 100 );
llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0.1 );
// linear deflection
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1 );
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 10 );
// angular deflection
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 1 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10 );
// vertical attractor
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, .1 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 );
// banking
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, .5 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .1 );//1000
// default rotation of local frame
llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );
// remove these flags
llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_WATER_ONLY
| VEHICLE_FLAG_HOVER_TERRAIN_ONLY
| VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT
| VEHICLE_FLAG_LIMIT_ROLL_ONLY
| VEHICLE_FLAG_HOVER_UP_ONLY
| VEHICLE_FLAG_LIMIT_MOTOR_UP);
}
default
{
state_entry()
{
stuntparams();
Vname=llGetObjectName();
llSetTimerEvent(0.0);
llStopSound();
llSetStatus(STATUS_PHYSICS, FALSE);
llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", NULL_KEY);
//llWhisper(0,Vname + " is ready for use");
}
on_rez(integer start_param)
{
llResetScript();
}
touch(integer total_number)
{
key owner=llGetOwner();
if (llDetectedKey(0)==owner)
{
help();
}
else
{
//llWhisper(0,llDetectedName(0) + ", Please step away from the " + Vname);
}
}
changed(integer change)
{
avatar = llAvatarOnSitTarget();
string name=llKey2Name(avatar);
if(change & CHANGED_LINK)
{
if(avatar == NULL_KEY)
{
// You have gotten off
llSetTimerEvent(0.0);
llStopSound();
llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", NULL_KEY);
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, FALSE);
llReleaseControls();
llStopAnimation("sit");
sit = FALSE;
//llPushObject(llGetOwner(), <0, 2, 7>, <0,0,0>, TRUE);
llSetStatus(STATUS_PHYSICS, FALSE);
llResetScript();
}
else if(avatar == llGetOwner())
{
// You have gotten on
llSetStatus(STATUS_PHYSICS, TRUE);
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, TRUE);
sit = TRUE;
llRequestPermissions(avatar,PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION);
}
else
{
//llWhisper(0,name + ", Please step away from the " + Vname);
llUnSit(avatar);
}
}
}
run_time_permissions(integer perms)
{
if(perms & (PERMISSION_TAKE_CONTROLS))
{
llStopAnimation("sit");
llStartAnimation("stand");
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE);
llMessageLinked(LINK_ALL_CHILDREN, 0, "rotor", NULL_KEY);
//llLoopSound("jet0",0.7);
llSetTimerEvent(0.2);
}
else
{
llUnSit(avatar);
}
}
control(key id, integer level, integer edge)
{
vertoff = FALSE;
adecayoff = FALSE;
ldecayoff = FALSE;
if ((level & CONTROL_FWD) && (level & CONTROL_BACK))
{
ldecayoff = TRUE;
speed=0;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>);
}
if (level & CONTROL_FWD)
{
ldecayoff = TRUE;
if(speed > 30) { speed = 30; }
else { speed += 1; }
lift= speed * 0.25;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>);
}
if (level & CONTROL_BACK)
{
ldecayoff = TRUE;
if(speed < -10) { speed = -10; }
else { speed -= 1; }
lift= speed * 0.25;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>);
}
if (level & CONTROL_ROT_RIGHT)
{
adecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <turn,0,0>);
}
if (level & CONTROL_ROT_LEFT)
{
adecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <-turn,0,0>);
}
if (level & CONTROL_RIGHT)
{
vertoff = TRUE;
adecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <(turn/2),0,0>);
}
if (level & CONTROL_LEFT)
{
vertoff = TRUE;
adecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <-(turn/2),0,0>);
}
if (level & CONTROL_UP)
{
ldecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,high>);
}
if (level & CONTROL_DOWN)
{
ldecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,-(high/3)>);
}
if (vertoff)
{
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1000 );
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 1000 );//1000
}
if (!vertoff)
{
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, .1 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 );
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, .5 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .1 );//1000
}
if (adecayoff)
{
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 300 );
llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <6,6,6> );
}
if (!adecayoff)
{
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, .2 );
llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <.1, .1, .1> );
}
if (ldecayoff)
{
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 30 );
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1, 6, 6> );
}
if (!ldecayoff)
{
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 3 );
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1, 2, .05> );
}
}
timer()
{
llSetStatus(STATUS_PHYSICS, TRUE);
}
}