CODE
float speed=0;
float high=9;
float turn=3;
float lift=0;
integer sit = FALSE;
integer vertoff = FALSE;
integer adecayoff = FALSE;
integer ldecayoff = FALSE;
string Vname;
key avatar;
sub()
{
llSitTarget(<0.7, 0.0, -2.05>, ZERO_ROTATION);
llSetSitText("Pilot");
llSetCameraEyeOffset(<-10.0, 0.0, 3.0>);
llSetCameraAtOffset(<0.0, 0.0, 0.0>);
llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
llRemoveVehicleFlags(-1);
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000, 2, 1000> );
llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <.1, .1, .1> );
llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0 );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 3 );
llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 2.5 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 6 );
llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0 );
llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0 );
llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 1000 );
llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0.5 );
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1 );
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1000 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 1 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 1000 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, .1 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 );
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, .5 );
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .1 );
llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );
llSetVehicleFlags(VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT | VEHICLE_FLAG_HOVER_WATER_ONLY);
llRemoveVehicleFlags(
VEHICLE_FLAG_HOVER_TERRAIN_ONLY
| VEHICLE_FLAG_LIMIT_ROLL_ONLY
| VEHICLE_FLAG_HOVER_UP_ONLY
| VEHICLE_FLAG_LIMIT_MOTOR_UP);
}
default
{
state_entry()
{
sub();
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();
}
changed(integer change)
{
avatar = llAvatarOnSitTarget();
string name=llKey2Name(avatar);
if(change & CHANGED_LINK)
{
if(avatar == NULL_KEY)
{
llSetTimerEvent(0.0);
llStopSound();
llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", NULL_KEY);
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, FALSE);
llReleaseControls();
sit = FALSE;
llPushObject(llGetOwner(), <0, 2, 7>, <0,0,0>, TRUE);
llSetStatus(STATUS_PHYSICS, FALSE);
llResetScript();
}
else if(avatar == llGetOwner())
{
llSetStatus(STATUS_PHYSICS, TRUE);
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, TRUE);
sit = TRUE;
llRequestPermissions(avatar,PERMISSION_TAKE_CONTROLS);
}
else
{
llWhisper(0,name + ", Please step away from the " + Vname);
llUnSit(avatar);
}
}
}
run_time_permissions(integer perms)
{
if(perms & (PERMISSION_TAKE_CONTROLS))
{
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, "start", NULL_KEY);
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 = FALSE;
if(speed > 30)
{
speed = 1;
}
else
{
speed += .1;
}
lift= speed * 0.25;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>);
}
if (level & CONTROL_BACK)
{
ldecayoff = FALSE;
if(speed < -1)
{
speed = -1;
}
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)
{
vector pos = llGetPos();
float surface = llWater(ZERO_VECTOR);
ldecayoff = FALSE;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,high>);
if (pos.z >= surface)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);
}
}
if (level & CONTROL_DOWN)
{
vector pos = llGetPos();
float surface = llWater(ZERO_VECTOR);
ldecayoff = FALSE;
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 );
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 1000 );
}
if (!vertoff)
{
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, .1 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 );
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, .5 );
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .1 );
}
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, <1000, 6, 6> );
}
if (!ldecayoff)
{
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 3 );
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000, 2, .05> );
}
}
timer()
{
llSetStatus(STATUS_PHYSICS, TRUE);
}
}
there are a number of good free submarines on SLex with full perms. i'm sure if you got one and looked at the scripts they will be able to help you