Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Vehicle friction not working! Please help.

SpankMe Pinkerton
Registered User
Join date: 13 Feb 2005
Posts: 158
08-03-2005 11:23
I'm making a game with some friends of mine and we need flying brooms. I'm an experienced programmer but new to vehicle scripts. I've looked at thee other vehicle scripts, and can't understand why my vehicle never slows down, even though the flags are set to very high friction (low half-life decay numbers). I had to code for the friction myslf using a timer (which works), but that is a waste of lag time. If the timer code is commented out, the broom will never slow down, even though the friction is set. This is illogical. I hope I'm just missing the obvious and someone can tell me why the friction does not have any slowing effect. This code is only for moving forwards and backwards. Again.. the timer is commented out. The timer friction I made works, but I should not have to do this. Thanks for any help. :-) P.S. How do you post code in a little window? lol


//BroomMain, primary broom script for CovenBall


key Rider; //Key of the riding avatar
integer LinearControls;
integer AngularControls;
integer LastAngle;
vector LinearMotor;


default
{


state_entry()
{

llSetTimerEvent(.1);
llSetSitText("Ride";);
llSitTarget(<0, 0, 0.1>, ZERO_ROTATION); //Must be set to trigger changed on sit

llSetVehicleType(VEHICLE_TYPE_BALLOON);
llSetCameraEyeOffset(<-5.5, 0.0, 3.5> );
llSetCameraAtOffset(<1.75, 0.0, 0.75> );
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.1);
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 1.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 0.5);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 0.1);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 120);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.25);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, .3);

llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <0.1, 0.1, 0.1> ); //***NOT WORKING!!!
llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <0.5, 0.5, 0.5> );

llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.25);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1.5);
llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.4);
llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 0.1);
llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 0.95);
llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 1.0);
llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.5);
llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 2.0);
llSetVehicleFlags(VEHICLE_FLAG_HOVER_UP_ONLY);
llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0.2);

LinearControls = CONTROL_FWD | CONTROL_BACK;
AngularControls = CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_DOWN | CONTROL_UP;

}


run_time_permissions(integer perm)
{

if ((perm & PERMISSION_TRIGGER_ANIMATION) == PERMISSION_TRIGGER_ANIMATION)
{
llStopAnimation("sit";);
llStartAnimation("BroomSit";);
}

if ((perm & PERMISSION_TAKE_CONTROLS) == PERMISSION_TAKE_CONTROLS)
{
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_UP | CONTROL_DOWN,TRUE, FALSE);
}

}


changed(integer change)
{
if(change == CHANGED_LINK)
{

Rider = llAvatarOnSitTarget();

if ( (Rider != llGetOwner()) && (Rider != NULL_KEY) )//Not owner, so kick off
{
llSay(0, "You are not my owner! Bug off...";);
llSleep(0.75); //Unsit works more reliable with short delay
llUnSit(Rider);
llPushObject(Rider, <0,0,5>, ZERO_VECTOR, FALSE);
}


else if(Rider == llGetOwner()) //Got on broom, so get animation and controls permision
{
llRequestPermissions(Rider,PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
llSetStatus(STATUS_PHYSICS, TRUE);
}

else //Got off broom, so stop animation and release controls
{

llSetStatus(STATUS_PHYSICS, FALSE);

if ((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) == PERMISSION_TRIGGER_ANIMATION)
{
llStopAnimation("BroomSit";);
}

if ((llGetPermissions() & PERMISSION_TAKE_CONTROLS) == PERMISSION_TAKE_CONTROLS)
{
llReleaseControls();
}

}

}
}


control(key id, integer held, integer change)
{

if (held & LinearControls)
{

if ( held & CONTROL_FWD ) //Forward held down
{
LinearMotor.x += 0.3;
}

if ( held & CONTROL_BACK ) //Back held down
{
LinearMotor.x += -0.2;
}

if (LinearMotor.x > 6) { LinearMotor.x = 6; }
if (LinearMotor.x < -6) { LinearMotor.x = -6; }

llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, LinearMotor);
}

}


timer()
{

//if ( llVecMag(llGetVel()) < 0.1 )
//{
// LinearMotor = <0,0,0>;
//}
//else
//{
// LinearMotor.x = LinearMotor.x * 0.95;
//}

// llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, LinearMotor);

}


}
Jeffrey Gomez
Cubed™
Join date: 11 Jun 2004
Posts: 3,522
08-04-2005 03:05
Here's a good resource for you:
http://secondlife.com/badgeo/wakka.php?wakka=vehicles

I believe you're looking for this parameter in conjunction with llSetVehicleFloatParam:
VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE

From: SpankMe Pinkerton
P.S. How do you post code in a little window?

CODE
// The default code view looks like this, and uses these tags:

// To use this, type "code" enclosed in square brackets []


CODE
// The PHP tag colors text in a nice, clean manner. I suggest using it
integer test;

// To use this, type "php" enclosed in square brackets []
_____________________
---