Home |
Add a script
|
||
|---|---|---|---|
| Category: | Contributor: | Description | |
| Vehicles | Encog Dod | SuperCar | |
SuperCar
SuperCar
Download this script - Please use this link to get this script. If you see all the code on one long line, please use Wordpad or another editor, such as LSLEdit.exe. The .LSL file you will download is an ordinary text file.
1 // From the book: 2 // 3 // Scripting Recipes for Second Life 4 // by Jeff Heaton (Encog Dod in SL) 5 // ISBN: 160439000 6 X// Copyright 2007 by Heaton Research, Inc. 7 // 8 // This script may be freely copied and modified so long as this header 9 // remains unmodified. 10 // 11 // For more information about this book visit the following web site: 12 // 13 // http://www.heatonresearch.com/articles/series/22/ 14 15 float forward_power = 15; //Power used to go forward (1 to 30) 16 float reverse_power = -15; //Power ued to go reverse (-1 to -30) 17 float turning_ratio = 2.0; //How sharply the vehicle turns. Less is more sharply. (.1 to 10) 18 string sit_message = "Ride"; //Sit message 19 string not_owner_message = "You are not the owner of this vehicle ..."; //Not owner message 20 float VERTICAL_THRUST = 7; 21 22 float ROTATION_RATE = 2.0; // Rate of turning 23 24 becomeBoat() 25 { 31 llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1, 1, 1> ); 33 34 35 36 llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0>); 37 llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1); 39 41 llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 5 ); 42 llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0.15); 44 llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 2.0 ); 45 llSetVehicleFloatParam( VEHICLE_BUOYANCY, 1 ); 53 llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.1 ); 54 llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .5 ); 56 } 57 58 becomeCar() 59 { 60 //car 66 llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0); 69 llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.5); 70 llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000.0, 2.0, 1000.0>); 71 llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <10.0, 10.0, 1000.0>); 74 } 75 76 becomePlane() 77 { 79 84 85 llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 0.2); 88 llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.1); 89 90 llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <5,5,5>); 91 llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1,1,1>); 92 93 llSetVehicleFloatParam(VEHICLE_BUOYANCY, 1.0); 94 97 99 llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.1 );100 llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .5 );101 }102 103 default104 {105 state_entry()106 {107 llSetSitText(sit_message);108 // forward-back,left-right,updown109 llSitTarget(<0.2,0,0.45>, ZERO_ROTATION );110 111 llSetCameraEyeOffset(<-8, 0.0, 5.0>);112 llSetCameraAtOffset(<1.0, 0.0, 2.0>);113 114 llPreloadSound("car_start");115 llPreloadSound("car_run");116 118 119 becomeCar();120 121 }122 124 {125 if( id==llGetOwner() )126 {127 if( message == "drive" )128 becomeCar();129 else if (message == "fly" )130 becomePlane();131 else if (message == "float" )132 becomeBoat();133 }134 }135 136 138 {139 140 141 if (change & CHANGED_LINK)142 {143 144 key agent = llAvatarOnSitTarget();145 if (agent)146 { 147 if (agent != llGetOwner())148 {149 llSay(0, not_owner_message);150 llUnSit(agent);152 }153 else154 {155 llTriggerSound("car_start",1);156 157 llSay(0,"Welcome to the super car, say 'drive' to make me a car, 'fly' to make me fly, or 'float' to make me a boat.");158 llSleep(.4);160 llSleep(.1);162 163 llLoopSound("car_run",1);164 }165 }166 else167 {168 llStopSound();169 171 llSleep(.1);173 llSleep(.4);174 llReleaseControls();176 177 llResetScript();178 }179 }180 181 }182 183 run_time_permissions(integer perm)184 {185 if (perm) {186 llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE);187 }188 }189 191 {192 integer reverse=1;193 vector angular_motor;194 195 //get current speed198 199 200 //car controls201 if(level & CONTROL_FWD)202 {203 llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <forward_power,0,0>);204 reverse=1;205 }206 if(level & CONTROL_BACK)207 {208 llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <reverse_power,0,0>);209 reverse = -1;210 }211 212 if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))213 {214 angular_motor.z -= turning_ratio;215 }216 217 if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))218 {219 angular_motor.z += turning_ratio;220 }221 222 if(level & CONTROL_UP) {223 llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,VERTICAL_THRUST>);224 } else if (edge & CONTROL_UP) {225 llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);226 }227 if(level & CONTROL_DOWN) {228 llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,-VERTICAL_THRUST>);229 } else if (edge & CONTROL_DOWN) {230 llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);231 }232 233 llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);234 235 236 } //end control 237 238 239 } //end default