<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial,helvetica,sans-serif;font-size:12pt"><div>Jeff Heaton, in his book, "Introduction to Linden Scripting Language for Second Life" has a vehicle script for a basic car on page 171. At the risk of irritating Jeff, I am pasting it here and hoping we can use it for a test script to wring out vehicle script functionality.<br><br>It uses the LSL functions llSetVehicleType(), llSetVehicleFloatParam() & llSetVehicleVectorParam() which are three of the key vehicle functions we need to support.<br><br>I am hoping a few folks might take this script, test it, Mantis the results and help us get momentum to patch the missing pieces.<br><br>Charles<br><br>// Encog's Magic Wagon<br>// Very simple vehicle script<br><br>float forward_power = 15; //Power used to go forward (1 to 30)<br>float reverse_power = -15; //Power ued to go reverse (-1 to -30)<br>float
 turning_ratio = 2.0; //How sharply the vehicle turns. Less is more sharply. (.1 to 10)<br>string sit_message = "Ride"; //Sit message<br>string not_owner_message = "You are not the owner of this vehicle ..."; //Not owner message<br><br>setVehicle()<br>{<br>    //car<br>        <br>        llSetVehicleType(VEHICLE_TYPE_CAR);<br>        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);<br>        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);<br>        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.10);<br>        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 0.10);<br>        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE,
 1.0);<br>        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);<br>        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.1);<br>        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.1);<br>        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <10.0, 2.0, 1000.0>);<br>        llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <0.1, 0.1, 0.1>);<br>        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.50);<br>        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 0.50);<br>    <br>}<br><br>default<br>{<br>    state_entry()<br>   
 {<br>        llSetSitText(sit_message);<br>        // forward-back,left-right,updown<br>        llSitTarget(<0.2,0,0.45>, ZERO_ROTATION );<br>        <br>        llSetCameraEyeOffset(<-8, 0.0, 5.0>);<br>        llSetCameraAtOffset(<1.0, 0.0, 2.0>);<br>        <br>        //llPreloadSound("car_start");<br>        //llPreloadSound("car_run");<br>        setVehicle();<br>    }<br>    <br>    changed(integer change)<br>    {<br>        <br>       
 <br>        if (change & CHANGED_LINK)<br>        {<br>            <br>            key agent = llAvatarOnSitTarget();<br>            if (agent)<br>            {                <br>                if (agent != llGetOwner())<br>                {<br>                    llSay(0,
 not_owner_message);<br>                    llUnSit(agent);<br>                    llPushObject(agent, <0,0,50>, ZERO_VECTOR, FALSE);<br>                }<br>                else<br>                {<br>                    //llTriggerSound("car_start",1);<br>                   
 <br>                    <br>                    llMessageLinked(LINK_ALL_CHILDREN , 0, "WHEEL_DRIVING", NULL_KEY);<br>                    llSleep(.4);<br>                    llSetStatus(STATUS_PHYSICS, TRUE);<br>                    setVehicle();<br>                   
 llSleep(.1);<br>                    llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);<br><br>                    //llLoopSound("car_run",1);<br>                }<br>            }<br>            else<br>            {<br>                //llStopSound();<br>               
 <br>                llSetStatus(STATUS_PHYSICS, FALSE);<br>                llSleep(.4);<br>                llReleaseControls();<br>                llTargetOmega(<0,0,0>,PI,0);<br>                <br>                llResetScript();<br>            }<br>        }<br>        <br>    }<br>    <br>    run_time_permissions(integer
 perm)<br>    {<br>        if (perm)<br>        {<br>            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT | <br>                            CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);<br>        }<br>    }<br>    <br>    control(key id, integer level, integer edge)<br>    {<br>        integer reverse=1;<br>        vector angular_motor;<br>        <br>        //get current
 speed<br>        vector vel = llGetVel();<br>        float speed = llVecMag(vel);<br><br>        //car controls<br>        if(level & CONTROL_FWD)<br>        {<br>            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <forward_power,0,0>);<br>            reverse=1;<br>        }<br>        if(level & CONTROL_BACK)<br>        {<br>            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION,
 <reverse_power,0,0>);<br>            reverse = -1;<br>        }<br><br>        if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))<br>        {<br>            angular_motor.z -= speed / turning_ratio * reverse;<br>        }<br>        <br>        if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))<br>        {<br>            angular_motor.z += speed / turning_ratio * reverse;<br>        }<br><br>        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION,
 angular_motor);<br><br>    } //end control   <br>    <br>    <br>} //end default<br></div></div></body></html>