// This script was originally made by Cypher Ragu
// Mod it, resell it, do whatever you want with it just as long as you leave
this header intact
//
// Originally made for use in the "Viper" RC vehicle by Aurora Aeronautics
integer granted=FALSE;
requestperms(key id)
{
llDialog(id,"Please grant me permission to act on your controls - I need this to
work correctly.",["Okay"],-1);
llRequestPermissions(id,PERMISSION_TAKE_CONTROLS);
//llRequestPermissions(id,PERMISSION_CONTROL_CAMERA);
}
default
{
state_entry() { // as soon as the state starts
llListen(1,"",(llGetOwner()), ""); // tells the script to listen to the chat on
channel 1
llStopSound();
if(!granted)
requestperms(llGetOwner());
else
granted=FALSE;
llSetStatus(STATUS_PHYSICS, FALSE); // Makes sure physics are turned off so the
vehicle doesn't float off to somewhere
}
on_rez(integer start_param) { // when it rezzes
llResetScript(); // resets the script, forcing the script to check the owner
again
}
touch_start(integer t)
{
if(llDetectedKey(0)==llGetOwner())
{
if(granted)
{
llDialog(llDetectedKey(0),"Remote control activated. Touch me to de-activate
it.",["Okay"],-1);
state remote;
}else
{
requestperms(llGetOwner());
}
}
}
run_time_permissions(integer perm)
{
if(perm&PERMISSION_TAKE_CONTROLS)
{
granted=TRUE;
llDialog(llGetOwner(),"Touch me to activate the remote control.",["Okay"],-1);
}
}
}
state remote
{
on_rez(integer t)
{
llResetScript();
}
state_entry() {
//now begins the vehicle parameters
llMessageLinked(LINK_THIS,0,"sound on","");
if(granted)
llTakeControls(CONTROL_ML_LBUTTON | CONTROL_LBUTTON |CONTROL_FWD | CONTROL_BACK
| CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT |
CONTROL_UP | CONTROL_DOWN, TRUE, FALSE);
else
state default;
llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, .01);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1.0);
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 1);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, .2);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 0.5);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, .05);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.25);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.05);
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1,2,1>);
llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <.5,0,.5>);
llSetVehicleFloatParam(VEHICLE_BUOYANCY, 1.0);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1.0);
llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.75);
llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 0.75);
llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 0.3);
llRemoveVehicleFlags(VEHICLE_FLAG_LIMIT_ROLL_ONLY);
llSetSitText("Ride");
llSetCameraAtOffset(<0, 0, 1>);
llSetStatus(STATUS_PHYSICS,TRUE);
}
touch_start(integer t)
{
if(llDetectedKey(0)==llGetOwner())
{
llReleaseControls();
llDialog(llGetOwner(),"Remote switched off.",["Okay"],-1);
state default;
}
}
control(key id,integer level, integer edge){
float fwd = 2; //this is how fast the vehicle goes when moving foreward or
backwards. Higher number means higher top speed.
float rev = (fwd*-1)/2; // no need to mess with this, it just automatically
determines the reverse speed.
float bank = 0; // how steeply the vehicle banks on the turns
float revbank = bank*-1; //converts the previous number into a negative, no need
to change this
if(level & CONTROL_FWD)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <fwd,0,0>);
}
if(level & CONTROL_BACK)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <rev,0,0>);
}
if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))
{
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <revbank,0,1>);
}
if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
{
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <bank,0,-1>);
}
if(level & CONTROL_UP)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,2>);
}
if(level & CONTROL_DOWN)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,-2>);
}
}
}