I was wondering how to properly code the script below to Turn Banking Forwards backwards left and right in mouse look and still steer properly out of mouse look.
I Tried adding:
llSetVehicleFlags(VEHICLE_FLAG_MOUSELOOK_BANK
| VEHICLE_FLAG_MOUSELOOK_STEER
| VEHICLE_FLAG_CAMERA_DECOUPLED);
To the Script but it will only turn if I mouselook and hold Right at the same time.
Im stumped. If anyone can Help I would greatly appreciate it.
integer sit = FALSE;
integer listenTrack;
integer brake = TRUE;
integer BEACON_INT = 1440; //# of mins between beacon messages
integer beaconMins; // current # of minutes elapsed since last beacon message
float X_THRUST = 28;
float Z_THRUST = 28;
float xMotor;
float zMotor;
key agent;
key pilot;
vector SIT_POS = <0.0, 0.0, 0.8>;
vector CAM_OFFSET = <-5.0, 0.0, 2.0>;
vector CAM_ANG = <0.0, 0.0, 2.0>;
listenState(integer on) // start/stop listen
{
if (listenTrack)
{
llListenRemove(listenTrack);
listenTrack = 0;
}
if (on) listenTrack = llListen(0, "", pilot, ""
;}
help()
{
llWhisper(0,"O Master of the , you may use these commands to fly me..."
;llWhisper(0," Say START to begin moving."
;llWhisper(0," Say STOP to stop moving."
;llWhisper(0," PgUp/PgDn or E/C = hover up/down"
;llWhisper(0," Arrow keys or WASD = forward, back, left, right"
;llWhisper(0," Say HELP to display help."
;}
default {
state_entry()
{
llSetSitText("Fly"
;llSitTarget(SIT_POS, ZERO_ROTATION);
llSetCameraEyeOffset(CAM_OFFSET);
llSetCameraAtOffset(CAM_ANG);
llCollisionSound("SkidSL",1.0);
//SET VEHICLE PARAMETERS
llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <200, 20, 20> );
// uniform angular friction
llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 2 );
// linear motor
llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 2 );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 120 );
// agular motor
llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, .4);
// hover
llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 2 );
llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0 );
llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 10000 );
llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0.977 );
// no linear deflection
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0 );
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 5 );
// no angular deflection
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0);
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 5);
// no vertical attractor
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 1 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1 );
// banking
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 2);
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, .5);
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 0.01);
// default rotation of local frame
llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0,0,0,1>
;// remove these flags
llRemoveVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP
| VEHICLE_FLAG_HOVER_WATER_ONLY
| VEHICLE_FLAG_LIMIT_ROLL_ONLY
| VEHICLE_FLAG_HOVER_TERRAIN_ONLY
| VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT
| VEHICLE_FLAG_HOVER_UP_ONLY
| VEHICLE_FLAG_LIMIT_MOTOR_UP );
}
on_rez(integer num)
{
llSetStatus(STATUS_PHYSICS, FALSE);
pilot = llGetOwner();
llSetTimerEvent(60); // beacon timer for 1 min intervals
}
listen(integer channel, string name, key id, string message)
{
message == llToLower(message);
if (message == "help"

{
help();
}
if (message == "stop"

{
brake = TRUE;
llWhisper(0,"We are stopped, O Master. You may say START to resume flight."
;llSetStatus(STATUS_PHYSICS, FALSE);
}
else if (message == "start"

{
brake = FALSE;
llWhisper(0,"I hear and obey, O Master. We now begin flight."
;llSetStatus(STATUS_PHYSICS, TRUE);
}
}
// DETECT AV SITTING/UNSITTING AND GIVE PERMISSIONS
changed(integer change)
{
agent = llAvatarOnSitTarget();
if(change & CHANGED_LINK)
{
if((agent == NULL_KEY) && (sit))
{
//
// Avatar gets off vehicle
//
llSetStatus(STATUS_PHYSICS, FALSE);
llStopAnimation(""
;llMessageLinked(LINK_SET, 0, "unseated", ""
;llStopSound();
llReleaseControls();
sit = FALSE;
listenState(FALSE);
}
else if ((agent != NULL_KEY) && (!sit))
{
//
// Avatar gets on vehicle
//
pilot = llAvatarOnSitTarget();
sit = TRUE;
llRequestPermissions(pilot, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION);
listenState(TRUE);
llWhisper(0," , "+llKey2Name(pilot)+", command me as you will. Should you need assistance, please speak the word HELP."
; llMessageLinked(LINK_SET, 0, "seated", ""
;}
}
}
//CHECK PERMISSIONS AND TAKE CONTROLS
run_time_permissions(integer perm)
{
if (perm & (PERMISSION_TAKE_CONTROLS))
{
llTakeControls(CONTROL_UP | CONTROL_DOWN | CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
}
if (perm & PERMISSION_TRIGGER_ANIMATION)
{
// Admittedly, animations are bugged. I'll let you figure it out.
-CTllStartAnimation(""
;llSetStatus(STATUS_PHYSICS, TRUE);
llStopAnimation("sit"
;}
}
//FLIGHT CONTROLS
control(key id, integer level, integer edge)
{
vector angular_motor;
integer motor_changed;
if ((level & CONTROL_FWD) || (level & CONTROL_BACK))
{
llMessageLinked(LINK_SET, 666, "moving", NULL_KEY);
if (edge & CONTROL_FWD) xMotor = X_THRUST;
if (edge & CONTROL_BACK) xMotor = -X_THRUST;
}
else
{
xMotor = 0;
llMessageLinked(LINK_SET, 666, "stopped", NULL_KEY);
}
if ((level & CONTROL_UP) || (level & CONTROL_DOWN))
{
if (level & CONTROL_UP)
{
zMotor = Z_THRUST;
}
if (level & CONTROL_DOWN)
{
zMotor = -Z_THRUST;
}
}
else
{
zMotor = 0;
}
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <xMotor,0,zMotor>
;if (level & CONTROL_RIGHT) {
angular_motor.x = TWO_PI;
angular_motor.y /= 8;
}
if (level & CONTROL_LEFT) {
angular_motor.x = -TWO_PI;
angular_motor.y /= 8;
}
if (level & CONTROL_ROT_RIGHT) {
angular_motor.x = TWO_PI;
angular_motor.y /= 8;
}
if (level & CONTROL_ROT_LEFT) {
angular_motor.x = -TWO_PI;
angular_motor.y /= 8;
}
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);
}
timer()
{
//This is a beacon. Vehicles that are not keyed to owner will often get stolen.
// To avoid leaving vehicle litter all over the world, this beacon notifies the owner of it's location.
if (beaconMins < BEACON_INT)
{
beaconMins += 1;
}
else
{
beaconMins = 0;
vector pos = llGetPos();
llInstantMessage(llGetOwner(), "O Master, I have been left unattended in "+llGetRegionName()+" "+(string)((integer)pos.x)+", "+(string)((integer)pos.y)+", at an altitude of "+(string)((integer)pos.z)+" meters."
;}
}
}
Thank you for your time
-Cherry