Jump to content

i need a way to make my owner only basic car script open access to all.


Brobruhdude
 Share

You are about to reply to a thread that has been inactive for 3321 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

so

this is original

//Drifting Thoughts Car script
//by Kayla Stonecutter
//Date: 3/20/2006
//


//Basic settings
float       ForwardPower; //Forward power
list        ForwardPowerGears = [10, 30, 50, 100,110,200];
float       ReversePower = -20; //Reverse power
float       TurnPower = 700; //Turning power
float       TurnSpeedAdjust = 0.1; //how much effect speed has on turning, higher numbers effect more. 0.0 to disable

float       FlightForwardPower = 24;
float       FlightReversePower = 16;
float       FlightUpPower = 14;
float       FlightDownPower = 14;
float       FlightStrafePower = 12;
float       FlightTurnPower = 4;


string      SitText = "Lets Roll!"; //Text to show on pie menu
string      NonOwnerMessage = "This is not your ride. Go get your own..."; //Message when someone other than owner tries to sit

string      OwnerName;
integer     ListenCh = 0;
string      HornCommand = "h";
string      RevCommand = "r";
string      IdleCommand = "i";
string      StopCommand = "s";
string      FlightCommand = "fly";
string      GroundCommand = "drive";

string      FlightSound = "plane";
string      HornSound = "horn";
string      IdleSound = "idle"; //Sound to play when idling
string      RunSound = "run"; //Sound to play when the gas in pressed
string      RevSound = "rev";
string      StartupSound = "starter"; //Sound to play when owner sits
string      DrivingAnim = "driving generic"; //Animation to play when owner sits

//Other variables
key         Owner;
integer     NumGears;
integer     Gear = 0;
integer     NewSound;
string      Sound;
integer     CurDir;
integer     LastDir;
integer     Forward;
vector      SpeedVec;
vector      Linear;
vector      Angular;
integer     Active;
key         sitting;
integer     Moving;
string      SimName;

integer     DIR_STOP = 100;
integer     DIR_START = 101;
integer     DIR_NORM = 102;
integer     DIR_LEFT = 103;
integer     DIR_RIGHT = 104;
integer     DIR_FLIGHT = 105;


default
{
    state_entry()
    {
        Owner = llGetOwner();
        OwnerName = llKey2Name(Owner);
        TurnSpeedAdjust *= 0.01;
        ForwardPower = llList2Integer(ForwardPowerGears, 0);
        NumGears = llGetListLength(ForwardPowerGears);
        llSetSitText(SitText);
        llCollisionSound("", 0.0);
        llSitTarget(<0.8,0.0,0.65>, llEuler2Rot(<0,0,0> ));
        state Ground;
    }
}

state Ground
{
    state_entry()
    {
        llListen(ListenCh, OwnerName, NULL_KEY, "");
        llStopSound();
        if(!Active)
        {
            llSetStatus(STATUS_PHYSICS, TRUE);
            llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
            llUnSit(llAvatarOnSitTarget());
        }else{
            SimName = llGetRegionName();
            llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);
            llMessageLinked(LINK_ALL_CHILDREN, DIR_NORM, "", NULL_KEY);
            NewSound = 1;
            Sound = IdleSound;
            Linear = <0,0,-2>;
        }
        
        llSetVehicleType(VEHICLE_TYPE_CAR);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);
        
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.1);
        
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);
        
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.3);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.2);
        
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 2.0, 1000.0> );
        llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000.0, 1000.0, 1000.0> );
        
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 300.0);
        
        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0 );
        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0 );
        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 1000 );
        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0 );
        
        llRemoveVehicleFlags(VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
        
        llSetVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP);
    }
    
    on_rez(integer param)
    {
        llResetScript();
    }
    
    listen(integer channel, string name, key id, string message)
    {
        if(llGetOwnerKey(id) != Owner) return;
        message = llToLower(message);
        if(message == HornCommand) llMessageLinked(LINK_SET, 12345, HornSound, NULL_KEY);
        else if(message == RevCommand) llMessageLinked(LINK_SET, 12345, RevSound, NULL_KEY);
        else if(message == IdleCommand) llLoopSound(IdleSound, 1.0);
        else if(message == StopCommand) llStopSound();
        else if((message == FlightCommand) && Active) state Flight;
    }
    
    changed(integer change)
    {
        if((change & CHANGED_LINK) == CHANGED_LINK)
        {
            sitting = llAvatarOnSitTarget();
            if((sitting != NULL_KEY) && !Active)
            {
                if(sitting != llGetOwner())
                {
                    llWhisper(0, NonOwnerMessage);
                    llUnSit(sitting);
                }else{
                    llRequestPermissions(Owner, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA);
                    llTriggerSound(StartupSound, 1.0);
                    llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);
                    llSetPos(llGetPos() + <0,0,0.15>);
                    llSetStatus(STATUS_PHYSICS, TRUE);
                    SimName = llGetRegionName();
                    llLoopSound(IdleSound,1);
                    llSetTimerEvent(0.1);
                    CurDir = DIR_NORM;
                    LastDir = DIR_NORM;
                }
            }else if((sitting == NULL_KEY) && Active)
            {
                llSetTimerEvent(0.0);
                llStopAnimation(DrivingAnim);
                Active = 0;
                llStopSound();
                llSetStatus(STATUS_PHYSICS, FALSE);
                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
                llReleaseControls();
            }
        }
    }
    
    run_time_permissions(integer perms)
    {
        if(perms == (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA))
        {
            Active = 1;
            Linear = <0,0,-2>;
            Angular = <0,0,0>;
            llStopAnimation("sit");
            llStartAnimation(DrivingAnim);
            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
            llSetCameraParams([
                CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
                CAMERA_BEHINDNESS_ANGLE, 2.0, // (0 to 180) degrees
                CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds
                CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters
                // CAMERA_FOCUS, <0,0,0>, // region-relative position
                CAMERA_FOCUS_LAG, 0.1 , // (0 to 3) seconds
                CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
                CAMERA_FOCUS_THRESHOLD, 0.5, // (0 to 4) meters
                CAMERA_PITCH, 20.0, // (-45 to 80) degrees
                // CAMERA_POSITION, <0,0,0>, // region-relative position
                CAMERA_POSITION_LAG, 0.1, // (0 to 3) seconds
                CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
                CAMERA_POSITION_THRESHOLD, 0.5, // (0 to 4) meters
                CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
            ]);
        }
    }
    
    control(key id, integer levels, integer edges)
    {
        if(!Moving)
        {
            Moving = 1;
            llSetStatus(STATUS_PHYSICS, TRUE);
        }
        SpeedVec = llGetVel() / llGetRot();
        if((edges & levels & CONTROL_UP))
        {
            if((Gear + 1) != NumGears)
            {
                ++Gear;
                llWhisper(0, "Gear " + (string)(Gear + 1));
                ForwardPower = llList2Float(ForwardPowerGears, Gear);
                if(Linear.x > 0) Linear.x = ForwardPower;
            }
        }else if((edges & levels & CONTROL_DOWN))
        {
            if((Gear - 1) != -1)
            {
                --Gear;
                llWhisper(0, "Gear " + (string)(Gear + 1));
                ForwardPower = llList2Float(ForwardPowerGears, Gear);
                if(Linear.x > 0) Linear.x = ForwardPower;
            }
        }
        if((edges & levels & CONTROL_FWD))
        {
            Linear.x += ForwardPower;
            NewSound = 1;
        }else if((edges & ~levels & CONTROL_FWD))
        {
            Linear.x -= ForwardPower;
            NewSound = 1;
        }
        if((edges & levels & CONTROL_BACK))
        {
            Linear.x += ReversePower;
            NewSound = 1;
        }else if((edges & ~levels & CONTROL_BACK))
        {
            Linear.x -= ReversePower;
            NewSound = 1;
        }
        if(NewSound)
        {
            if(Linear.x) Sound = RunSound;
            else Sound = IdleSound;
        }
        if(llFabs(SpeedVec.x) < 0.5)
        {
            if(levels & CONTROL_ROT_LEFT) CurDir = DIR_LEFT;
            else if(levels & CONTROL_ROT_RIGHT) CurDir = DIR_RIGHT;
            else CurDir = DIR_NORM;
            Angular.z = 0.0;
        }else{
            if(SpeedVec.x < 0.0)
            {
                Forward = -1;
                SpeedVec.x *= -TurnSpeedAdjust;
            }else{
                Forward = 1;
                SpeedVec.x *= TurnSpeedAdjust;
            }
            if(levels & CONTROL_ROT_LEFT)
            {
                CurDir = DIR_LEFT;
                Angular.z = (TurnPower - SpeedVec.x) * Forward;
            }else if((edges & ~levels & CONTROL_ROT_LEFT))
            {
                CurDir = DIR_NORM;
                Angular.z = 0;
            }
            if(levels & CONTROL_ROT_RIGHT)
            {
                CurDir = DIR_RIGHT;
                Angular.z = -((TurnPower - SpeedVec.x) * Forward);
            }else if((edges & ~levels & CONTROL_ROT_RIGHT))
            {
                CurDir = DIR_NORM;
                Angular.z = 0;
            }
        }
    }
    
    moving_end()
    {
        if(llGetRegionName() == SimName)
        {
            Moving = 0;
            llSetStatus(STATUS_PHYSICS, FALSE);
        }else{
            SimName = llGetRegionName();
        }
    }
    
    timer()
    {
        if(Linear != <0.0,  0.0, -2.0>)
        {
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);
            llApplyImpulse(Linear, TRUE);
        }
        if(Angular != <0.0, 0.0, 0.0>) llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);
        if(CurDir != LastDir)
        {
            llMessageLinked(LINK_ALL_CHILDREN, CurDir, "", NULL_KEY);
            LastDir = CurDir;
        }
        if(NewSound)
        {
            llStopSound();
            NewSound = 0;
            llLoopSound(Sound, 1.0);
        }
    }
}

state Flight
{
    state_entry()
    {
        Linear = <0,0,0>;
        llStopSound();
        llMessageLinked(LINK_ALL_CHILDREN, DIR_FLIGHT, "", NULL_KEY);
        llLoopSound(FlightSound, 1.0);
        llSetStatus(STATUS_PHYSICS, FALSE);
        llSetPos(llGetPos() + <0,0,0.25>);
        vector rot = llRot2Euler(llGetRot());
        llSetRot(llEuler2Rot(<0,0,rot.z>));
        llListen(ListenCh, OwnerName, NULL_KEY, "");
        llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
        
        // linear friction
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 100.0, 100.0>);
        
        // uniform angular friction
        llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.5);
        
        // linear motor
        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1.0);
        
        // angular motor
        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 2.0);
        
        // hover
        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.0);
        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 360.0);
        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0.988);
        
        // linear deflection
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);
        
        // angular deflection
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.25);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 100.0);
        
        // vertical attractor
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1.0);
        
        // banking
        llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 1.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 1.0);
        
        // default rotation of local frame
        llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0.00000, 0.00000, 0.00000, 0.00000>);
        
        // removed vehicle flags
        llRemoveVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY);
        
        // set vehicle flags
        llSetVehicleFlags(VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
        llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON, TRUE, FALSE);
        
        llSetStatus(STATUS_PHYSICS, TRUE);
    }
    
    listen(integer channel, string name, key id, string message)
    {
        if(llGetOwnerKey(id) != Owner) return;
        message = llToLower(message);
        if(message == GroundCommand) state Ground;
    }
    
    control(key name, integer levels, integer edges)
    {
        if((levels & CONTROL_LBUTTON))
        {
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);
            llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0,0,0>);
            llSetStatus(STATUS_PHYSICS, FALSE);
            llSleep(0.1);
            llSetStatus(STATUS_PHYSICS, TRUE);
            return;
        }
        
        if((edges & levels & CONTROL_UP)) Linear.z += FlightUpPower;
        else if((edges & ~levels & CONTROL_UP)) Linear.z = 0.0;
        
        if((edges & levels & CONTROL_DOWN)) Linear.z -= FlightDownPower;
        else if((edges & ~levels & CONTROL_DOWN)) Linear.z = 0.0;
        
        if((edges & levels & CONTROL_FWD)) Linear.x += FlightForwardPower;
        else if((edges & ~levels & CONTROL_FWD)) Linear.x = 0.0;
        
        if((edges & levels & CONTROL_BACK)) Linear.x -= FlightReversePower;
        else if((edges & ~levels & CONTROL_BACK)) Linear.x = 0.0;
        
        if((edges & levels & CONTROL_LEFT)) Linear.y += FlightStrafePower;
        else if((edges & ~levels & CONTROL_LEFT)) Linear.y = 0.0;
        
        if((edges & levels & CONTROL_RIGHT)) Linear.y -= FlightStrafePower;
        else if((edges & ~levels & CONTROL_RIGHT)) Linear.y = 0.0;
        
        if((edges & levels & CONTROL_ROT_LEFT)) Angular.z = FlightTurnPower;
        else if((edges & ~levels & CONTROL_ROT_LEFT)) Angular.z = 0;
        
        if((edges & levels & CONTROL_ROT_RIGHT)) Angular.z = -FlightTurnPower;
        else if((edges & ~levels & CONTROL_ROT_RIGHT)) Angular.z = 0;
    }
    
    changed(integer change)
    {
        if((change & CHANGED_LINK) == CHANGED_LINK)
        {
            sitting = llAvatarOnSitTarget();
            if(sitting == NULL_KEY)
            {
                llSetTimerEvent(0.0);
                llStopAnimation(DrivingAnim);
                Active = 0;
                llStopSound();
                llSetStatus(STATUS_PHYSICS, FALSE);
                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
                llReleaseControls();
                state Ground;
            }
        }
    }
    
    timer()
    {
        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);

        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);
    }
}

Link to comment
Share on other sites

Well, look at the logic.  I know it can be hard sometimes to work on a script that someone else wrote, but this is a fairly simple one with straightforward logic.  In state Ground, you have an if test in the listen event that dumps execution if it hears a message that is not from the owner:

if(llGetOwnerKey(id) != Owner) return;

and another in the changed event than repels any avatar other than the owner who sits down:

if(sitting != llGetOwner())
                {

so you want to eliminate that too, as well as the bracket that closes that test:

}else

Then, in state Flight, you have another listen event that has the same bailout:

if(llGetOwnerKey(id) != Owner) return;

Other than that, the script doesn't care who sits on it or talks to it. 

Link to comment
Share on other sites

//Drifting Thoughts Car script
//by Kayla Stonecutter
//Date: 3/20/2006
//


//Basic settings
float       ForwardPower; //Forward power
list        ForwardPowerGears = [10, 30, 50, 100,110,200];
float       ReversePower = -20; //Reverse power
float       TurnPower = 700; //Turning power
float       TurnSpeedAdjust = 0.1; //how much effect speed has on turning, higher numbers effect more. 0.0 to disable

float       FlightForwardPower = 24;
float       FlightReversePower = 16;
float       FlightUpPower = 14;
float       FlightDownPower = 14;
float       FlightStrafePower = 12;
float       FlightTurnPower = 4;


string      SitText = "Lets Roll!"; //Text to show on pie menu
string      NonOwnerMessage = "This is not your ride. Go get your own..."; //Message when someone other than owner tries to sit

string      OwnerName;
integer     ListenCh = 0;
string      HornCommand = "h";
string      RevCommand = "r";
string      IdleCommand = "i";
string      StopCommand = "s";
string      FlightCommand = "fly";
string      GroundCommand = "drive";

string      FlightSound = "plane";
string      HornSound = "horn";
string      IdleSound = "idle"; //Sound to play when idling
string      RunSound = "run"; //Sound to play when the gas in pressed
string      RevSound = "rev";
string      StartupSound = "starter"; //Sound to play when owner sits
string      DrivingAnim = "driving generic"; //Animation to play when owner sits

//Other variables
key         Owner;
integer     NumGears;
integer     Gear = 0;
integer     NewSound;
string      Sound;
integer     CurDir;
integer     LastDir;
integer     Forward;
vector      SpeedVec;
vector      Linear;
vector      Angular;
integer     Active;
key         sitting;
integer     Moving;
string      SimName;

integer     DIR_STOP = 100;
integer     DIR_START = 101;
integer     DIR_NORM = 102;
integer     DIR_LEFT = 103;
integer     DIR_RIGHT = 104;
integer     DIR_FLIGHT = 105;


default
{
    state_entry()
    {
       

 

 

 

 


        TurnSpeedAdjust *= 0.01;
        ForwardPower = llList2Integer(ForwardPowerGears, 0);
        NumGears = llGetListLength(ForwardPowerGears);
        llSetSitText(SitText);
        llCollisionSound("", 0.0);
        llSitTarget(<0.8,0.0,0.65>, llEuler2Rot(<0,0,0> ));
        state Ground;
    }
}

state Ground
{
    state_entry()
    {
        llListen(ListenCh, OwnerName, NULL_KEY, "");
        llStopSound();
        if(!Active)
        {
            llSetStatus(STATUS_PHYSICS, TRUE);
            llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
            llUnSit(llAvatarOnSitTarget());
        }else{
            SimName = llGetRegionName();
            llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);
            llMessageLinked(LINK_ALL_CHILDREN, DIR_NORM, "", NULL_KEY);
            NewSound = 1;
            Sound = IdleSound;
            Linear = <0,0,-2>;
        }
        
        llSetVehicleType(VEHICLE_TYPE_CAR);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);
        
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.1);
        
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);
        
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.3);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.2);
        
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 2.0, 1000.0> );
        llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000.0, 1000.0, 1000.0> );
        
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 300.0);
        
        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0 );
        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0 );
        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 1000 );
        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0 );
        
        llRemoveVehicleFlags(VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
        
        llSetVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP);
    }
    
    on_rez(integer param)
    {
        llResetScript();
    }
    
    listen(integer channel, string name, key id, string message)
    {

 

 

 

 


        if(message == HornCommand) llMessageLinked(LINK_SET, 12345, HornSound, NULL_KEY);
        else if(message == RevCommand) llMessageLinked(LINK_SET, 12345, RevSound, NULL_KEY);
        else if(message == IdleCommand) llLoopSound(IdleSound, 1.0);
        else if(message == StopCommand) llStopSound();
        else if((message == FlightCommand) && Active) state Flight;
    }
    
    changed(integer change)
    {
        if((change & CHANGED_LINK) == CHANGED_LINK)
        {
            sitting = llAvatarOnSitTarget();
            if((sitting != NULL_KEY) && !Active)
            {
             

 

 

 

{
                    llRequestPermissions(Owner, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA);
                    llTriggerSound(StartupSound, 1.0);
                    llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);
                    llSetPos(llGetPos() + <0,0,0.15>);
                    llSetStatus(STATUS_PHYSICS, TRUE);
                    SimName = llGetRegionName();
                    llLoopSound(IdleSound,1);
                    llSetTimerEvent(0.1);
                    CurDir = DIR_NORM;
                    LastDir = DIR_NORM;
                }
            }else if((sitting == NULL_KEY) && Active)
            {
                llSetTimerEvent(0.0);
                llStopAnimation(DrivingAnim);
                Active = 0;
                llStopSound();
                llSetStatus(STATUS_PHYSICS, FALSE);
                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
                llReleaseControls();
            }
        }
    }
    
    run_time_permissions(integer perms)
    {
        if(perms == (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA))
        {
            Active = 1;
            Linear = <0,0,-2>;
            Angular = <0,0,0>;
            llStopAnimation("sit");
            llStartAnimation(DrivingAnim);
            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
            llSetCameraParams([
                CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
                CAMERA_BEHINDNESS_ANGLE, 2.0, // (0 to 180) degrees
                CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds
                CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters
                // CAMERA_FOCUS, <0,0,0>, // region-relative position
                CAMERA_FOCUS_LAG, 0.1 , // (0 to 3) seconds
                CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
                CAMERA_FOCUS_THRESHOLD, 0.5, // (0 to 4) meters
                CAMERA_PITCH, 20.0, // (-45 to 80) degrees
                // CAMERA_POSITION, <0,0,0>, // region-relative position
                CAMERA_POSITION_LAG, 0.1, // (0 to 3) seconds
                CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
                CAMERA_POSITION_THRESHOLD, 0.5, // (0 to 4) meters
                CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
            ]);
        }
    }
    
    control(key id, integer levels, integer edges)
    {
        if(!Moving)
        {
            Moving = 1;
            llSetStatus(STATUS_PHYSICS, TRUE);
        }
        SpeedVec = llGetVel() / llGetRot();
        if((edges & levels & CONTROL_UP))
        {
            if((Gear + 1) != NumGears)
            {
                ++Gear;
                llWhisper(0, "Gear " + (string)(Gear + 1));
                ForwardPower = llList2Float(ForwardPowerGears, Gear);
                if(Linear.x > 0) Linear.x = ForwardPower;
            }
        }else if((edges & levels & CONTROL_DOWN))
        {
            if((Gear - 1) != -1)
            {
                --Gear;
                llWhisper(0, "Gear " + (string)(Gear + 1));
                ForwardPower = llList2Float(ForwardPowerGears, Gear);
                if(Linear.x > 0) Linear.x = ForwardPower;
            }
        }
        if((edges & levels & CONTROL_FWD))
        {
            Linear.x += ForwardPower;
            NewSound = 1;
        }else if((edges & ~levels & CONTROL_FWD))
        {
            Linear.x -= ForwardPower;
            NewSound = 1;
        }
        if((edges & levels & CONTROL_BACK))
        {
            Linear.x += ReversePower;
            NewSound = 1;
        }else if((edges & ~levels & CONTROL_BACK))
        {
            Linear.x -= ReversePower;
            NewSound = 1;
        }
        if(NewSound)
        {
            if(Linear.x) Sound = RunSound;
            else Sound = IdleSound;
        }
        if(llFabs(SpeedVec.x) < 0.5)
        {
            if(levels & CONTROL_ROT_LEFT) CurDir = DIR_LEFT;
            else if(levels & CONTROL_ROT_RIGHT) CurDir = DIR_RIGHT;
            else CurDir = DIR_NORM;
            Angular.z = 0.0;
        }else{
            if(SpeedVec.x < 0.0)
            {
                Forward = -1;
                SpeedVec.x *= -TurnSpeedAdjust;
            }else{
                Forward = 1;
                SpeedVec.x *= TurnSpeedAdjust;
            }
            if(levels & CONTROL_ROT_LEFT)
            {
                CurDir = DIR_LEFT;
                Angular.z = (TurnPower - SpeedVec.x) * Forward;
            }else if((edges & ~levels & CONTROL_ROT_LEFT))
            {
                CurDir = DIR_NORM;
                Angular.z = 0;
            }
            if(levels & CONTROL_ROT_RIGHT)
            {
                CurDir = DIR_RIGHT;
                Angular.z = -((TurnPower - SpeedVec.x) * Forward);
            }else if((edges & ~levels & CONTROL_ROT_RIGHT))
            {
                CurDir = DIR_NORM;
                Angular.z = 0;
            }
        }
    }
    
    moving_end()
    {
        if(llGetRegionName() == SimName)
        {
            Moving = 0;
            llSetStatus(STATUS_PHYSICS, FALSE);
        }else{
            SimName = llGetRegionName();
        }
    }
    
    timer()
    {
        if(Linear != <0.0,  0.0, -2.0>)
        {
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);
            llApplyImpulse(Linear, TRUE);
        }
        if(Angular != <0.0, 0.0, 0.0>) llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);
        if(CurDir != LastDir)
        {
            llMessageLinked(LINK_ALL_CHILDREN, CurDir, "", NULL_KEY);
            LastDir = CurDir;
        }
        if(NewSound)
        {
            llStopSound();
            NewSound = 0;
            llLoopSound(Sound, 1.0);
        }
    }
}

state Flight
{
    state_entry()
    {
        Linear = <0,0,0>;
        llStopSound();
        llMessageLinked(LINK_ALL_CHILDREN, DIR_FLIGHT, "", NULL_KEY);
        llLoopSound(FlightSound, 1.0);
        llSetStatus(STATUS_PHYSICS, FALSE);
        llSetPos(llGetPos() + <0,0,0.25>);
        vector rot = llRot2Euler(llGetRot());
        llSetRot(llEuler2Rot(<0,0,rot.z>));
      

 

 

 


        llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
        
        // linear friction
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 100.0, 100.0>);
        
        // uniform angular friction
        llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.5);
        
        // linear motor
        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1.0);
        
        // angular motor
        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 2.0);
        
        // hover
        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.0);
        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 360.0);
        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0.988);
        
        // linear deflection
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);
        
        // angular deflection
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.25);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 100.0);
        
        // vertical attractor
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1.0);
        
        // banking
        llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 1.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 1.0);
        
        // default rotation of local frame
        llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0.00000, 0.00000, 0.00000, 0.00000>);
        
        // removed vehicle flags
        llRemoveVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY);
        
        // set vehicle flags
        llSetVehicleFlags(VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
        llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON, TRUE, FALSE);
        
        llSetStatus(STATUS_PHYSICS, TRUE);
    }
    
    listen(integer channel, string name, key id, string message)
    {

 

 

 

 

 

 


        if(message == GroundCommand) state Ground;
    }
    
    control(key name, integer levels, integer edges)
    {
        if((levels & CONTROL_LBUTTON))
        {
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);
            llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0,0,0>);
            llSetStatus(STATUS_PHYSICS, FALSE);
            llSleep(0.1);
            llSetStatus(STATUS_PHYSICS, TRUE);
            return;
        }
        
        if((edges & levels & CONTROL_UP)) Linear.z += FlightUpPower;
        else if((edges & ~levels & CONTROL_UP)) Linear.z = 0.0;
        
        if((edges & levels & CONTROL_DOWN)) Linear.z -= FlightDownPower;
        else if((edges & ~levels & CONTROL_DOWN)) Linear.z = 0.0;
        
        if((edges & levels & CONTROL_FWD)) Linear.x += FlightForwardPower;
        else if((edges & ~levels & CONTROL_FWD)) Linear.x = 0.0;
        
        if((edges & levels & CONTROL_BACK)) Linear.x -= FlightReversePower;
        else if((edges & ~levels & CONTROL_BACK)) Linear.x = 0.0;
        
        if((edges & levels & CONTROL_LEFT)) Linear.y += FlightStrafePower;
        else if((edges & ~levels & CONTROL_LEFT)) Linear.y = 0.0;
        
        if((edges & levels & CONTROL_RIGHT)) Linear.y -= FlightStrafePower;
        else if((edges & ~levels & CONTROL_RIGHT)) Linear.y = 0.0;
        
        if((edges & levels & CONTROL_ROT_LEFT)) Angular.z = FlightTurnPower;
        else if((edges & ~levels & CONTROL_ROT_LEFT)) Angular.z = 0;
        
        if((edges & levels & CONTROL_ROT_RIGHT)) Angular.z = -FlightTurnPower;
        else if((edges & ~levels & CONTROL_ROT_RIGHT)) Angular.z = 0;
    }
    
    changed(integer change)
    {
        if((change & CHANGED_LINK) == CHANGED_LINK)
        {
            sitting = llAvatarOnSitTarget();
            if(sitting == NULL_KEY)
            {
                llSetTimerEvent(0.0);
                llStopAnimation(DrivingAnim);
                Active = 0;
                llStopSound();
                llSetStatus(STATUS_PHYSICS, FALSE);
                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
                llReleaseControls();
                state Ground;
            }
        }
    }
    
    timer()
    {
        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);

        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);
    }
}

 

 

 

OK i yanked out what I think you said  and this is what I got, I left big spaces so you can see where i pulled stuff out of.  I cant get inworld right now to test but does it look right?

Link to comment
Share on other sites

No.  You removed more than I pointed to.  There was no need to remove the two lines from the state_entry event in state default and you removed one too many lines from the listen event in state Flight.  For some reason, you also removed the listen handle from the state_entry event in state Flight, so that the listen event will be disabled.  You really need to put it back in, and change it to read

llListen(ListenCh, "", NULL_KEY, "");

I missed seeing that before.  It was a clumsy bit of scripting in the original and it would have stalled your script completely now that you removed the two lines in the state_entry event in state default.

Link to comment
Share on other sites

Then, in state Flight, you have another listen event that has the same bailout:

if(llGetOwnerKey(id) != Owner) return;

 

i took that out.

 

  I dont know I guess my 60 year old brain cant figure it out, I have always sucked at scripting. I cant focus. How much to just do it and it gets paid inworld?

 

Link to comment
Share on other sites

You also removed the line right after it that defines

     message = llToLower(message);

so that the following test will always fail, since the global variable GroundCommand = "drive", which is all lower case.

There's nothing wrong with a 60 year old brain.  Mine was still good at that age and probably still is on most days.  :smileywink:

Scripting is only marginally about syntax.  Mostly it's about logic.  If you focus too tightly on the words, you'll miss seeing what the script is trying to do, or losing sight of what you want it to do.  You are right, though, that it's hard to modify someone else's script by posting in a forum designed for scripters. This is the sort of thing that you either work on patiently, one change at a time, by yourself or you hire a scripter to do for you.  When I am working on an unfamiliar script, I spend a long time just reading it. Then, as I make changes I add debug messages that will let the script tell me what my changes have done.  If you want to continue poking at it, I suggest taking a similar approach.  Go slowly and back up when things go off the rails.  At least you know that the script used to work before you started.  That's more than I can say with many things I write from scratch.

Link to comment
Share on other sites

Is this better?

 

 

//Drifting Thoughts Car script
//by Kayla Stonecutter
//Date: 3/20/2006
//


//Basic settings
float       ForwardPower; //Forward power
list        ForwardPowerGears = [10, 30, 50, 100,110,200];
float       ReversePower = -20; //Reverse power
float       TurnPower = 700; //Turning power
float       TurnSpeedAdjust = 0.1; //how much effect speed has on turning, higher numbers effect more. 0.0 to disable

float       FlightForwardPower = 24;
float       FlightReversePower = 16;
float       FlightUpPower = 14;
float       FlightDownPower = 14;
float       FlightStrafePower = 12;
float       FlightTurnPower = 4;


string      SitText = "Lets Roll!"; //Text to show on pie menu
string      NonOwnerMessage = "This is not your ride. Go get your own..."; //Message when someone other than owner tries to sit

string      OwnerName;
integer     ListenCh = 0;
string      HornCommand = "h";
string      RevCommand = "r";
string      IdleCommand = "i";
string      StopCommand = "s";
string      FlightCommand = "fly";
string      GroundCommand = "drive";

string      FlightSound = "plane";
string      HornSound = "horn";
string      IdleSound = "idle"; //Sound to play when idling
string      RunSound = "run"; //Sound to play when the gas in pressed
string      RevSound = "rev";
string      StartupSound = "starter"; //Sound to play when owner sits
string      DrivingAnim = "driving generic"; //Animation to play when owner sits

//Other variables
key         Owner;
integer     NumGears;
integer     Gear = 0;
integer     NewSound;
string      Sound;
integer     CurDir;
integer     LastDir;
integer     Forward;
vector      SpeedVec;
vector      Linear;
vector      Angular;
integer     Active;
key         sitting;
integer     Moving;
string      SimName;

integer     DIR_STOP = 100;
integer     DIR_START = 101;
integer     DIR_NORM = 102;
integer     DIR_LEFT = 103;
integer     DIR_RIGHT = 104;
integer     DIR_FLIGHT = 105;


default
{
    state_entry()
    {
        Owner = llGetOwner();
        OwnerName = llKey2Name(Owner);
        TurnSpeedAdjust *= 0.01;
        ForwardPower = llList2Integer(ForwardPowerGears, 0);
        NumGears = llGetListLength(ForwardPowerGears);
        llSetSitText(SitText);
        llCollisionSound("", 0.0);
        llSitTarget(<0.8,0.0,0.65>, llEuler2Rot(<0,0,0> ));
        state Ground;
    }
}

state Ground
{
    state_entry()
    {
        llListen(ListenCh, OwnerName, NULL_KEY, "");
        llStopSound();
        if(!Active)
        {
            llSetStatus(STATUS_PHYSICS, TRUE);
            llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
            llUnSit(llAvatarOnSitTarget());
        }else{
            SimName = llGetRegionName();
            llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);
            llMessageLinked(LINK_ALL_CHILDREN, DIR_NORM, "", NULL_KEY);
            NewSound = 1;
            Sound = IdleSound;
            Linear = <0,0,-2>;
        }
        
        llSetVehicleType(VEHICLE_TYPE_CAR);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);
        
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.1);
        
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);
        
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.3);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.2);
        
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 2.0, 1000.0> );
        llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000.0, 1000.0, 1000.0> );
        
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 300.0);
        
        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0 );
        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0 );
        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 1000 );
        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0 );
        
        llRemoveVehicleFlags(VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
        
        llSetVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP);
    }
    
    on_rez(integer param)
    {
        llResetScript();
    }
    
    listen(integer channel, string name, key id, string message)
    {
        message = llToLower(message);
        if(message == HornCommand) llMessageLinked(LINK_SET, 12345, HornSound, NULL_KEY);
        else if(message == RevCommand) llMessageLinked(LINK_SET, 12345, RevSound, NULL_KEY);
        else if(message == IdleCommand) llLoopSound(IdleSound, 1.0);
        else if(message == StopCommand) llStopSound();
        else if((message == FlightCommand) && Active) state Flight;
    }
    
    changed(integer change)
    {
        if((change & CHANGED_LINK) == CHANGED_LINK)
        {
            sitting = llAvatarOnSitTarget();
            if((sitting != NULL_KEY) && !Active)
            {
                    llWhisper(0, NonOwnerMessage);
                    llUnSit(sitting);
                }else{
                    llRequestPermissions(Owner, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA);
                    llTriggerSound(StartupSound, 1.0);
                    llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);
                    llSetPos(llGetPos() + <0,0,0.15>);
                    llSetStatus(STATUS_PHYSICS, TRUE);
                    SimName = llGetRegionName();
                    llLoopSound(IdleSound,1);
                    llSetTimerEvent(0.1);
                    CurDir = DIR_NORM;
                    LastDir = DIR_NORM;
                }
            }else if((sitting == NULL_KEY) && Active)
            {
                llSetTimerEvent(0.0);
                llStopAnimation(DrivingAnim);
                Active = 0;
                llStopSound();
                llSetStatus(STATUS_PHYSICS, FALSE);
                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
                llReleaseControls();
            }
        }
    }
    
    run_time_permissions(integer perms)
    {
        if(perms == (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA))
        {
            Active = 1;
            Linear = <0,0,-2>;
            Angular = <0,0,0>;
            llStopAnimation("sit");
            llStartAnimation(DrivingAnim);
            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
            llSetCameraParams([
                CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
                CAMERA_BEHINDNESS_ANGLE, 2.0, // (0 to 180) degrees
                CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds
                CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters
                // CAMERA_FOCUS, <0,0,0>, // region-relative position
                CAMERA_FOCUS_LAG, 0.1 , // (0 to 3) seconds
                CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
                CAMERA_FOCUS_THRESHOLD, 0.5, // (0 to 4) meters
                CAMERA_PITCH, 20.0, // (-45 to 80) degrees
                // CAMERA_POSITION, <0,0,0>, // region-relative position
                CAMERA_POSITION_LAG, 0.1, // (0 to 3) seconds
                CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
                CAMERA_POSITION_THRESHOLD, 0.5, // (0 to 4) meters
                CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
            ]);
        }
    }
    
    control(key id, integer levels, integer edges)
    {
        if(!Moving)
        {
            Moving = 1;
            llSetStatus(STATUS_PHYSICS, TRUE);
        }
        SpeedVec = llGetVel() / llGetRot();
        if((edges & levels & CONTROL_UP))
        {
            if((Gear + 1) != NumGears)
            {
                ++Gear;
                llWhisper(0, "Gear " + (string)(Gear + 1));
                ForwardPower = llList2Float(ForwardPowerGears, Gear);
                if(Linear.x > 0) Linear.x = ForwardPower;
            }
        }else if((edges & levels & CONTROL_DOWN))
        {
            if((Gear - 1) != -1)
            {
                --Gear;
                llWhisper(0, "Gear " + (string)(Gear + 1));
                ForwardPower = llList2Float(ForwardPowerGears, Gear);
                if(Linear.x > 0) Linear.x = ForwardPower;
            }
        }
        if((edges & levels & CONTROL_FWD))
        {
            Linear.x += ForwardPower;
            NewSound = 1;
        }else if((edges & ~levels & CONTROL_FWD))
        {
            Linear.x -= ForwardPower;
            NewSound = 1;
        }
        if((edges & levels & CONTROL_BACK))
        {
            Linear.x += ReversePower;
            NewSound = 1;
        }else if((edges & ~levels & CONTROL_BACK))
        {
            Linear.x -= ReversePower;
            NewSound = 1;
        }
        if(NewSound)
        {
            if(Linear.x) Sound = RunSound;
            else Sound = IdleSound;
        }
        if(llFabs(SpeedVec.x) < 0.5)
        {
            if(levels & CONTROL_ROT_LEFT) CurDir = DIR_LEFT;
            else if(levels & CONTROL_ROT_RIGHT) CurDir = DIR_RIGHT;
            else CurDir = DIR_NORM;
            Angular.z = 0.0;
        }else{
            if(SpeedVec.x < 0.0)
            {
                Forward = -1;
                SpeedVec.x *= -TurnSpeedAdjust;
            }else{
                Forward = 1;
                SpeedVec.x *= TurnSpeedAdjust;
            }
            if(levels & CONTROL_ROT_LEFT)
            {
                CurDir = DIR_LEFT;
                Angular.z = (TurnPower - SpeedVec.x) * Forward;
            }else if((edges & ~levels & CONTROL_ROT_LEFT))
            {
                CurDir = DIR_NORM;
                Angular.z = 0;
            }
            if(levels & CONTROL_ROT_RIGHT)
            {
                CurDir = DIR_RIGHT;
                Angular.z = -((TurnPower - SpeedVec.x) * Forward);
            }else if((edges & ~levels & CONTROL_ROT_RIGHT))
            {
                CurDir = DIR_NORM;
                Angular.z = 0;
            }
        }
    }
    
    moving_end()
    {
        if(llGetRegionName() == SimName)
        {
            Moving = 0;
            llSetStatus(STATUS_PHYSICS, FALSE);
        }else{
            SimName = llGetRegionName();
        }
    }
    
    timer()
    {
        if(Linear != <0.0,  0.0, -2.0>)
        {
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);
            llApplyImpulse(Linear, TRUE);
        }
        if(Angular != <0.0, 0.0, 0.0>) llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);
        if(CurDir != LastDir)
        {
            llMessageLinked(LINK_ALL_CHILDREN, CurDir, "", NULL_KEY);
            LastDir = CurDir;
        }
        if(NewSound)
        {
            llStopSound();
            NewSound = 0;
            llLoopSound(Sound, 1.0);
        }
    }
}

state Flight
{
    state_entry()
    {
        Linear = <0,0,0>;
        llStopSound();
        llMessageLinked(LINK_ALL_CHILDREN, DIR_FLIGHT, "", NULL_KEY);
        llLoopSound(FlightSound, 1.0);
        llSetStatus(STATUS_PHYSICS, FALSE);
        llSetPos(llGetPos() + <0,0,0.25>);
        vector rot = llRot2Euler(llGetRot());
        llSetRot(llEuler2Rot(<0,0,rot.z>));
        llListen(ListenCh, OwnerName, NULL_KEY, "");
        llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
        
        // linear friction
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 100.0, 100.0>);
        
        // uniform angular friction
        llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.5);
        
        // linear motor
        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1.0);
        
        // angular motor
        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 2.0);
        
        // hover
        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.0);
        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 360.0);
        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0.988);
        
        // linear deflection
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);
        
        // angular deflection
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.25);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 100.0);
        
        // vertical attractor
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1.0);
        
        // banking
        llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 1.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 1.0);
        
        // default rotation of local frame
        llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0.00000, 0.00000, 0.00000, 0.00000>);
        
        // removed vehicle flags
        llRemoveVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY);
        
        // set vehicle flags
        llSetVehicleFlags(VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
        llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON, TRUE, FALSE);
        
        llSetStatus(STATUS_PHYSICS, TRUE);
    }
    
    listen(integer channel, string name, key id, string message)
    {
        message = llToLower(message);
        if(message == GroundCommand) state Ground;
    }
    
    control(key name, integer levels, integer edges)
    {
        if((levels & CONTROL_LBUTTON))
        {
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);
            llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0,0,0>);
            llSetStatus(STATUS_PHYSICS, FALSE);
            llSleep(0.1);
            llSetStatus(STATUS_PHYSICS, TRUE);
            return;
        }
        
        if((edges & levels & CONTROL_UP)) Linear.z += FlightUpPower;
        else if((edges & ~levels & CONTROL_UP)) Linear.z = 0.0;
        
        if((edges & levels & CONTROL_DOWN)) Linear.z -= FlightDownPower;
        else if((edges & ~levels & CONTROL_DOWN)) Linear.z = 0.0;
        
        if((edges & levels & CONTROL_FWD)) Linear.x += FlightForwardPower;
        else if((edges & ~levels & CONTROL_FWD)) Linear.x = 0.0;
        
        if((edges & levels & CONTROL_BACK)) Linear.x -= FlightReversePower;
        else if((edges & ~levels & CONTROL_BACK)) Linear.x = 0.0;
        
        if((edges & levels & CONTROL_LEFT)) Linear.y += FlightStrafePower;
        else if((edges & ~levels & CONTROL_LEFT)) Linear.y = 0.0;
        
        if((edges & levels & CONTROL_RIGHT)) Linear.y -= FlightStrafePower;
        else if((edges & ~levels & CONTROL_RIGHT)) Linear.y = 0.0;
        
        if((edges & levels & CONTROL_ROT_LEFT)) Angular.z = FlightTurnPower;
        else if((edges & ~levels & CONTROL_ROT_LEFT)) Angular.z = 0;
        
        if((edges & levels & CONTROL_ROT_RIGHT)) Angular.z = -FlightTurnPower;
        else if((edges & ~levels & CONTROL_ROT_RIGHT)) Angular.z = 0;
    }
    
    changed(integer change)
    {
        if((change & CHANGED_LINK) == CHANGED_LINK)
        {
            sitting = llAvatarOnSitTarget();
            if(sitting == NULL_KEY)
            {
                llSetTimerEvent(0.0);
                llStopAnimation(DrivingAnim);
                Active = 0;
                llStopSound();
                llSetStatus(STATUS_PHYSICS, FALSE);
                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
                llReleaseControls();
                state Ground;
            }
        }
    }
    
    timer()
    {
        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);

        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);
    }
}

Link to comment
Share on other sites

Try this:

//Drifting Thoughts Car script//by Kayla Stonecutter//Date: 3/20/2006////Basic settingsfloat       ForwardPower; //Forward powerlist        ForwardPowerGears = [10, 30, 50, 100,110,200];float       ReversePower = -20; //Reverse powerfloat       TurnPower = 700; //Turning powerfloat       TurnSpeedAdjust = 0.1; //how much effect speed has on turning, higher numbers effect more. 0.0 to disablefloat       FlightForwardPower = 24;float       FlightReversePower = 16;float       FlightUpPower = 14;float       FlightDownPower = 14;float       FlightStrafePower = 12;float       FlightTurnPower = 4;string      SitText = "Lets Roll!"; //Text to show on pie menustring      NonOwnerMessage = "This is not your ride. Go get your own..."; //Message when someone other than owner tries to sitinteger     ListenCh = 0;string      HornCommand = "h";string      RevCommand = "r";string      IdleCommand = "i";string      StopCommand = "s";string      FlightCommand = "fly";string      GroundCommand = "drive";string      FlightSound = "plane";string      HornSound = "horn";string      IdleSound = "idle"; //Sound to play when idlingstring      RunSound = "run"; //Sound to play when the gas in pressedstring      RevSound = "rev";string      StartupSound = "starter"; //Sound to play when owner sitsstring      DrivingAnim = "driving generic"; //Animation to play when owner sits//Other variablesinteger     NumGears;integer     Gear = 0;integer     NewSound;string      Sound;integer     CurDir;integer     LastDir;integer     Forward;vector      SpeedVec;vector      Linear;vector      Angular;integer     Active;key         sitting;integer     Moving;string      SimName;integer     listener;integer     DIR_STOP = 100;integer     DIR_START = 101;integer     DIR_NORM = 102;integer     DIR_LEFT = 103;integer     DIR_RIGHT = 104;integer     DIR_FLIGHT = 105;default{    state_entry()    {        TurnSpeedAdjust *= 0.01;        ForwardPower = llList2Integer(ForwardPowerGears, 0);        NumGears = llGetListLength(ForwardPowerGears);        llSetSitText(SitText);        llCollisionSound("", 0.0);        llSitTarget(<0.8,0.0,0.65>, llEuler2Rot(<0,0,0> ));        state Ground;    }}state Ground{    state_entry()    {        llStopSound();        if(!Active)        {            llSetStatus(STATUS_PHYSICS, TRUE);            llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);            llUnSit(llAvatarOnSitTarget());        }else{            SimName = llGetRegionName();            llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);            llMessageLinked(LINK_ALL_CHILDREN, DIR_NORM, "", NULL_KEY);            NewSound = 1;            Sound = IdleSound;            Linear = <0,0,-2>;        }                llSetVehicleType(VEHICLE_TYPE_CAR);        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);                llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.1);                llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);                llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.3);        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.2);                llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 2.0, 1000.0> );        llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000.0, 1000.0, 1000.0> );                llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.0);        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 300.0);                llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0 );        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0 );        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 1000 );        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0 );                llRemoveVehicleFlags(VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);                llSetVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP);    }        on_rez(integer param)    {        llResetScript();    }        listen(integer channel, string name, key id, string message)    {        message = llToLower(message);        if(message == HornCommand) llMessageLinked(LINK_SET, 12345, HornSound, NULL_KEY);        else if(message == RevCommand) llMessageLinked(LINK_SET, 12345, RevSound, NULL_KEY);        else if(message == IdleCommand) llLoopSound(IdleSound, 1.0);        else if(message == StopCommand) llStopSound();        else if((message == FlightCommand) && Active) state Flight;    }        changed(integer change)    {        if((change & CHANGED_LINK) == CHANGED_LINK)        {            sitting = llAvatarOnSitTarget();            if((sitting != NULL_KEY) && !Active)            {                listener = llListen(ListenCh, "", sitting, "");                llRequestPermissions(sitting, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA);                llTriggerSound(StartupSound, 1.0);                llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);                llSetPos(llGetPos() + <0,0,0.15>);                llSetStatus(STATUS_PHYSICS, TRUE);                SimName = llGetRegionName();                llLoopSound(IdleSound,1);                llSetTimerEvent(0.1);                CurDir = DIR_NORM;                LastDir = DIR_NORM;            }            else if((sitting == NULL_KEY) && Active)            {                llSetTimerEvent(0.0);                llListenRemove(listener);                llStopAnimation(DrivingAnim);                Active = 0;                llStopSound();                llSetStatus(STATUS_PHYSICS, FALSE);                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);                llReleaseControls();            }        }    }        run_time_permissions(integer perms)    {        if(perms == (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA))        {            Active = 1;            Linear = <0,0,-2>;            Angular = <0,0,0>;            llStopAnimation("sit");            llStartAnimation(DrivingAnim);            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);            llSetCameraParams([                CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive                CAMERA_BEHINDNESS_ANGLE, 2.0, // (0 to 180) degrees                CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds                CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters                // CAMERA_FOCUS, <0,0,0>, // region-relative position                CAMERA_FOCUS_LAG, 0.1 , // (0 to 3) seconds                CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)                CAMERA_FOCUS_THRESHOLD, 0.5, // (0 to 4) meters                CAMERA_PITCH, 20.0, // (-45 to 80) degrees                // CAMERA_POSITION, <0,0,0>, // region-relative position                CAMERA_POSITION_LAG, 0.1, // (0 to 3) seconds                CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)                CAMERA_POSITION_THRESHOLD, 0.5, // (0 to 4) meters                CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters            ]);        }    }        control(key id, integer levels, integer edges)    {        if(!Moving)        {            Moving = 1;            llSetStatus(STATUS_PHYSICS, TRUE);        }        SpeedVec = llGetVel() / llGetRot();        if((edges & levels & CONTROL_UP))        {            if((Gear + 1) != NumGears)            {                ++Gear;                llWhisper(0, "Gear " + (string)(Gear + 1));                ForwardPower = llList2Float(ForwardPowerGears, Gear);                if(Linear.x > 0) Linear.x = ForwardPower;            }        }else if((edges & levels & CONTROL_DOWN))        {            if((Gear - 1) != -1)            {                --Gear;                llWhisper(0, "Gear " + (string)(Gear + 1));                ForwardPower = llList2Float(ForwardPowerGears, Gear);                if(Linear.x > 0) Linear.x = ForwardPower;            }        }        if((edges & levels & CONTROL_FWD))        {            Linear.x += ForwardPower;            NewSound = 1;        }else if((edges & ~levels & CONTROL_FWD))        {            Linear.x -= ForwardPower;            NewSound = 1;        }        if((edges & levels & CONTROL_BACK))        {            Linear.x += ReversePower;            NewSound = 1;        }else if((edges & ~levels & CONTROL_BACK))        {            Linear.x -= ReversePower;            NewSound = 1;        }        if(NewSound)        {            if(Linear.x) Sound = RunSound;            else Sound = IdleSound;        }        if(llFabs(SpeedVec.x) < 0.5)        {            if(levels & CONTROL_ROT_LEFT) CurDir = DIR_LEFT;            else if(levels & CONTROL_ROT_RIGHT) CurDir = DIR_RIGHT;            else CurDir = DIR_NORM;            Angular.z = 0.0;        }else{            if(SpeedVec.x < 0.0)            {                Forward = -1;                SpeedVec.x *= -TurnSpeedAdjust;            }else{                Forward = 1;                SpeedVec.x *= TurnSpeedAdjust;            }            if(levels & CONTROL_ROT_LEFT)            {                CurDir = DIR_LEFT;                Angular.z = (TurnPower - SpeedVec.x) * Forward;            }else if((edges & ~levels & CONTROL_ROT_LEFT))            {                CurDir = DIR_NORM;                Angular.z = 0;            }            if(levels & CONTROL_ROT_RIGHT)            {                CurDir = DIR_RIGHT;                Angular.z = -((TurnPower - SpeedVec.x) * Forward);            }else if((edges & ~levels & CONTROL_ROT_RIGHT))            {                CurDir = DIR_NORM;                Angular.z = 0;            }        }    }        moving_end()    {        if(llGetRegionName() == SimName)        {            Moving = 0;            llSetStatus(STATUS_PHYSICS, FALSE);        }else{            SimName = llGetRegionName();        }    }        timer()    {        if(Linear != <0.0,  0.0, -2.0>)        {            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);            llApplyImpulse(Linear, TRUE);        }        if(Angular != <0.0, 0.0, 0.0>) llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);        if(CurDir != LastDir)        {            llMessageLinked(LINK_ALL_CHILDREN, CurDir, "", NULL_KEY);            LastDir = CurDir;        }        if(NewSound)        {            llStopSound();            NewSound = 0;            llLoopSound(Sound, 1.0);        }    }}state Flight{    state_entry()    {        Linear = <0,0,0>;        llStopSound();        llMessageLinked(LINK_ALL_CHILDREN, DIR_FLIGHT, "", NULL_KEY);        llLoopSound(FlightSound, 1.0);        llSetStatus(STATUS_PHYSICS, FALSE);        llSetPos(llGetPos() + <0,0,0.25>);        vector rot = llRot2Euler(llGetRot());        llSetRot(llEuler2Rot(<0,0,rot.z>));        llListen(ListenCh, "", sitting, "");        llSetVehicleType(VEHICLE_TYPE_AIRPLANE);                // linear friction        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 100.0, 100.0>);                // uniform angular friction        llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.5);                // linear motor        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1.0);                // angular motor        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1.0);        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 2.0);                // hover        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.0);        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.0);        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 360.0);        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0.988);                // linear deflection        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.0);        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);                // angular deflection        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.25);        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 100.0);                // vertical attractor        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1.0);                // banking        llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.0);        llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 1.0);        llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 1.0);                // default rotation of local frame        llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0.00000, 0.00000, 0.00000, 0.00000>);                // removed vehicle flags        llRemoveVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY);                // set vehicle flags        llSetVehicleFlags(VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);        llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON, TRUE, FALSE);                llSetStatus(STATUS_PHYSICS, TRUE);    }        listen(integer channel, string name, key id, string message)    {        message = llToLower(message);        if(message == GroundCommand) state Ground;    }        control(key name, integer levels, integer edges)    {        if((levels & CONTROL_LBUTTON))        {            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);            llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0,0,0>);            llSetStatus(STATUS_PHYSICS, FALSE);            llSleep(0.1);            llSetStatus(STATUS_PHYSICS, TRUE);            return;        }                if((edges & levels & CONTROL_UP)) Linear.z += FlightUpPower;        else if((edges & ~levels & CONTROL_UP)) Linear.z = 0.0;                if((edges & levels & CONTROL_DOWN)) Linear.z -= FlightDownPower;        else if((edges & ~levels & CONTROL_DOWN)) Linear.z = 0.0;                if((edges & levels & CONTROL_FWD)) Linear.x += FlightForwardPower;        else if((edges & ~levels & CONTROL_FWD)) Linear.x = 0.0;                if((edges & levels & CONTROL_BACK)) Linear.x -= FlightReversePower;        else if((edges & ~levels & CONTROL_BACK)) Linear.x = 0.0;                if((edges & levels & CONTROL_LEFT)) Linear.y += FlightStrafePower;        else if((edges & ~levels & CONTROL_LEFT)) Linear.y = 0.0;                if((edges & levels & CONTROL_RIGHT)) Linear.y -= FlightStrafePower;        else if((edges & ~levels & CONTROL_RIGHT)) Linear.y = 0.0;                if((edges & levels & CONTROL_ROT_LEFT)) Angular.z = FlightTurnPower;        else if((edges & ~levels & CONTROL_ROT_LEFT)) Angular.z = 0;                if((edges & levels & CONTROL_ROT_RIGHT)) Angular.z = -FlightTurnPower;        else if((edges & ~levels & CONTROL_ROT_RIGHT)) Angular.z = 0;    }        changed(integer change)    {        if((change & CHANGED_LINK) == CHANGED_LINK)        {            sitting = llAvatarOnSitTarget();            if(sitting == NULL_KEY)            {                llSetTimerEvent(0.0);                llStopAnimation(DrivingAnim);                Active = 0;                llStopSound();                llSetStatus(STATUS_PHYSICS, FALSE);                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);                llReleaseControls();                state Ground;            }        }    }        timer()    {        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);    }}

 

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 3321 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...