Lash Carver Posted July 29, 2014 Share Posted July 29, 2014 key OwnerKey; string OwnerName; key Sitter= NULL_KEY; key Driver = NULL_KEY; string Anim = "crouch"; vector Linear; vector Angular; float FlightForwardPower = 24; float FlightReversePower = 16; float FlightUpPower = 14; float FlightDownPower = 14; float FlightStrafePower = 12; float FlightTurnPower = 7; default { state_entry() { OwnerKey = llGetOwner(); OwnerName = llKey2Name(OwnerKey); llSetSitText("-FLY-"); llCollisionSound("", 0.0); llSitTarget(<0.8,0.0,0.65>, llEuler2Rot(<0,0,0> )); llSetBuoyancy(0); } changed(integer change) { if((change & CHANGED_LINK) == CHANGED_LINK) { Sitter = llAvatarOnSitTarget(); if (Driver != NULL_KEY) {llUnSit(Sitter); return;} if (Sitter != NULL_KEY) { llRequestPermissions(OwnerKey, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA); } else { llOwnerSay("Stood up"); llSetStatus(STATUS_PHYSICS, FALSE); llReleaseControls(); llStopAnimation(Anim); Driver = NULL_KEY; } } } run_time_permissions(integer perms) { if(perms == (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA)) { Driver = Sitter; Linear = <0,0,0>; Angular = <0,0,0>; llStopAnimation("sit"); llStartAnimation(Anim); 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_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_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 ]); 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); llSetTimerEvent(0.001); } } 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; } timer() { llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear); llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular); } } I am terrible with vehicles, can somebody tell me why my flying vehicle can't turn? Link to comment Share on other sites More sharing options...
Yingzi Xue Posted July 30, 2014 Share Posted July 30, 2014 You are missing += on the turns in your control event. Here it is corrected: key OwnerKey;string OwnerName;key Sitter= NULL_KEY;key Driver = NULL_KEY;string Anim = "crouch";vector Linear;vector Angular;float FlightForwardPower = 24;float FlightReversePower = 16;float FlightUpPower = 14;float FlightDownPower = 14;float FlightStrafePower = 12;float FlightTurnPower = 7;default{ state_entry() { OwnerKey = llGetOwner(); OwnerName = llKey2Name(OwnerKey); llSetSitText("-FLY-"); llCollisionSound("", 0.0); llSitTarget(<0.8,0.0,0.65>, llEuler2Rot(<0,0,0> )); llSetBuoyancy(0); } changed(integer change) { if((change & CHANGED_LINK) == CHANGED_LINK) { Sitter = llAvatarOnSitTarget(); if (Driver != NULL_KEY) {llUnSit(Sitter); return;} if (Sitter != NULL_KEY) { llRequestPermissions(OwnerKey, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA); } else { llOwnerSay("Stood up"); llSetStatus(STATUS_PHYSICS, FALSE); llReleaseControls(); llStopAnimation(Anim); Driver = NULL_KEY; } } } run_time_permissions(integer perms) { if(perms == (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA)) { Driver = Sitter; Linear = <0,0,0>; Angular = <0,0,0>; llStopAnimation("sit"); llStartAnimation(Anim); 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_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_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 ]); 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); llSetTimerEvent(0.001); } } 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; } timer() { llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear); llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular); }} Link to comment Share on other sites More sharing options...
Rolig Loon Posted July 30, 2014 Share Posted July 30, 2014 Nice catch! I stared at that for a while last night and didn't spot it. :smileywink: Link to comment Share on other sites More sharing options...
Yingzi Xue Posted July 30, 2014 Share Posted July 30, 2014 Thanks. I saw it within seconds of viewing the code, but it's because I've been working with vehicles lately that I found it so quickly. Link to comment Share on other sites More sharing options...
Lash Carver Posted July 30, 2014 Author Share Posted July 30, 2014 OMG thank you! geez I spent hours looking it over and couldn't get it lol. EDIT: Crap still not working! (no change) Link to comment Share on other sites More sharing options...
Rolig Loon Posted July 30, 2014 Share Posted July 30, 2014 It's not likely to solve the problem, but I can't help noticing that your timer is WAY too fast. Second Life updates frames 45 times a second, so you're asking to fire that timer about 20 times faster than the servers update. Link to comment Share on other sites More sharing options...
Lash Carver Posted July 30, 2014 Author Share Posted July 30, 2014 I know about the time, since it's auto-capped, it's just "as fast as possible". I just can't figure out why it works PERFECTLY on everything except turning... Link to comment Share on other sites More sharing options...
arton Rotaru Posted July 31, 2014 Share Posted July 31, 2014 When exactly does it not turn. Always, or only when in mouselook. Which would be expected behavior. There is also an issue in the changed event. This will let you only sit once. Link to comment Share on other sites More sharing options...
Lash Carver Posted July 31, 2014 Author Share Posted July 31, 2014 It will not turn, at all, ever. I have checked and the controls are firing and the angular is changing as expected, just nothing happens. I ust found something interesting though! My vehicle is only 3 prims and this one script. Just to test, I made a block of wood and put my script inside and ta-da! works perfect. Whats wrong with my linkset!? Link to comment Share on other sites More sharing options...
arton Rotaru Posted July 31, 2014 Share Posted July 31, 2014 Hehe, you should let us know, when you find out. Maybe you have called llSetStatus(STATUS_ROTATE_Z,FALSE); at an earlier time? Link to comment Share on other sites More sharing options...
Yingzi Xue Posted July 31, 2014 Share Posted July 31, 2014 There are numerous problems with this script's design. What I've done is added in some angular motion (banking) and decay, but it is very slow. That may be because of the airplane mode, or it may be one of your values. Not sure. I've also removed the timer which isn't necessary since pressing the control keys triggers a control event and updates the motors. Keep in mind I don't recomment using this script until you've made it much more efficient. I just slapped some fixes in it. See more on a better way to do this script after the code window. key OwnerKey;string OwnerName;key Sitter= NULL_KEY;key Driver = NULL_KEY;string Anim = "crouch";vector Linear;vector Angular;float FlightForwardPower = 24;float FlightReversePower = 16;float FlightUpPower = 14;float FlightDownPower = 14;float FlightStrafePower = 12;float FlightTurnPower = 7;default{ state_entry() { OwnerKey = llGetOwner(); OwnerName = llKey2Name(OwnerKey); llSetSitText("-FLY-"); llCollisionSound("", 0.0); llSitTarget(<0.8,0.0,0.65>, llEuler2Rot(<0,0,0> )); llSetBuoyancy(0); } changed(integer change) { if((change & CHANGED_LINK) == CHANGED_LINK) { Sitter = llAvatarOnSitTarget(); if (Driver != NULL_KEY) {llUnSit(Sitter); return;} if (Sitter != NULL_KEY) { llRequestPermissions(OwnerKey, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA); } else { llOwnerSay("Stood up"); llSetStatus(STATUS_PHYSICS, FALSE); llReleaseControls(); llStopAnimation(Anim); Driver = NULL_KEY; } } } run_time_permissions(integer perms) { if(perms == (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA)) { Driver = Sitter; Linear = <0,0,0>; Angular = <0,0,0>; llStopAnimation("sit"); llStartAnimation(Anim); 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_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_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 ]); 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, 1.0); llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 0.7); llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 2.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); } } 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.x -= FlightTurnPower; // Added for bank, but VERY slow Angular.z += FlightTurnPower; } else if((edges & ~levels & CONTROL_ROT_LEFT)) Angular.z = 0; if((edges & levels & CONTROL_ROT_RIGHT)) { Angular.x += FlightTurnPower; // Added for bank, but VERY slow Angular.z -= FlightTurnPower; } else if((edges & ~levels & CONTROL_ROT_RIGHT)) Angular.z = 0; llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear); llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular); llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 999.0); // Quick decay llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 999.0); // Quick decay }} The following recommendations come directly from code that can be found at the Vehicle Laboratory in-world. I highly suggest you visit there for some more detailed insights into vehicle scripts. It can be found via search. (1) The first thing I would do is make your motion/speed values into vectors instead of floats, so you can add them together in one fell swoop, rather than adding piecemeal. (2) Set up bitwise integers for linear and angular controls. Store the controls pertaining to each. (3) Use the bitwise integers in (2) above to test for linear or angular key presses in your control event, then add all values together for the respective keys being pressed and pass them to your linear and angular motors. The nice thing about this is you only send to the specific motor you're pressing keys for, because of that bitwise integer you set up in (2). For a complete example of all three, go to the Vehicle Laboratory and grab a few of the sample scripts, you'll see exactly what I mean here and you'll see how much more efficient it is. Link to comment Share on other sites More sharing options...
Lash Carver Posted July 31, 2014 Author Share Posted July 31, 2014 Yeah it's still very early but I was hoping to get the basic movement working, then work on cleaning stuff up a bit. Thanks for all the continued help! I recreated my vehicle linkset and it's magically working now. Really not sure what broke my other build. Link to comment Share on other sites More sharing options...
Yingzi Xue Posted July 31, 2014 Share Posted July 31, 2014 See the end of my post, under the script. I did not post the code because it's not mine to post, but the code is free to anyone that visits the Vehicle Laboratory. It's saved me a lot of headache learning vehicles and it's super-efficient. I just visited a bit ago, his place is in disarray at the moment, but he does have the vehicle scripts available if you look. Take the balloon to the vehicle laboratory. Go here and grab the hovercraft and airplane examples. You'll learn a lot. He has other examples too, boat, submarine, etc. http://maps.secondlife.com/secondlife/Slate/185/62/259 Glad to hear it started working for you. Link to comment Share on other sites More sharing options...
Lash Carver Posted July 31, 2014 Author Share Posted July 31, 2014 ugh ok no idea where to even start looking at the lab. The signs point into the ground, the map shows a completely different layout...etc. Where is an example script?! EDIT: Nevermind, thanks for the surl! lol perfect they are definitly smooth! Link to comment Share on other sites More sharing options...
Yingzi Xue Posted July 31, 2014 Share Posted July 31, 2014 Yeah, it's a mess there right now. Glad you found them. I don't think you can do a vehicle script any more efficient than those examples, the way the controls are handled. When I wanted to learn I had two choices--either use the wiki and learn the settings through trial and error or find examples I could learn off of. After finding VLAB, I was able to grasp the settings a lot easier and write my own vehicle script. I grabbed all the notecards and examples a year or two ago, when everything was still in place at VLAB. I dropped you a folder in-world with all the goodies. It should help. Link to comment Share on other sites More sharing options...
irihapeti Posted August 3, 2014 Share Posted August 3, 2014 i just pick up on this part in the change event if (Sitter != NULL_KEY) { llRequestPermissions(OwnerKey, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA); } the script as wrote is asking perms of the Owner rather than the Sitter Link to comment Share on other sites More sharing options...
Recommended Posts
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