SONDS UUID:
tunner run d13e4f99-372e-3e86-09f2-3cede5bd7063
car starter 9255ae87-5ed6-4519-4b5a-7e1b1c3693f6
car startup b0572b96-c967-17d6-99df-44fe7a847462
car_idle 7b7acab0-9323-8cbf-ef14-e3548c7edf5c
ANIM FOR SIT IN THE CAR:
UUID: driving generic 4309ebc1-c123-1c45-bb34-12d69229fa09
This animation also in the download in format bvh and anim.
Car Script
tunner run d13e4f99-372e-3e86-09f2-3cede5bd7063
car starter 9255ae87-5ed6-4519-4b5a-7e1b1c3693f6
car startup b0572b96-c967-17d6-99df-44fe7a847462
car_idle 7b7acab0-9323-8cbf-ef14-e3548c7edf5c
ANIM FOR SIT IN THE CAR:
UUID: driving generic 4309ebc1-c123-1c45-bb34-12d69229fa09
This animation also in the download in format bvh and anim.
Car Script
PHP Code:
//Drifting Thoughts Car script
//by Kayla Stonecutter
//Date: 3/20/2006
//
//Basic settings
float ForwardPower; //Forward power
list ForwardPowerGears = [15, 30, 45, 60, 120, 160, 200, 600, 60000];
float ReversePower = -40; //Reverse power
float TurnPower = 30; //Turning power
float TurnSpeedAdjust = 1.0; //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 = "Roll Out"; //Text to show on pie menu
string NonOwnerMessage = "GET YOUR OWN CAR YOU ASSHOLE!"; //Message when someone other than owner tries to sit
string OwnerName;
integer ListenCh = 3;
string HornCommand = "h";
string RevCommand = "r";
string IdleCommand = "i";
string StopCommand = "s";
string FlightCommand = "f";
string GroundCommand = "g";
string BurnCommand = "burn";
string FlightSound = "Flight";
string HornSound = "loud horn";
string NonOwnerSound = "Alarm";
string IdleSound = "car_idle"; //Sound to play when idling
string RunSound = "tunner run"; //Sound to play when the gas in pressed
string RevSound = "tunner rev";
string StartupSound = "car startup"; //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.6,0.65,0.5>, llEuler2Rot(<0,0,0> ));
state Ground;
}
}
state Ground
{
state_entry()
{
llListen(ListenCh, OwnerName, NULL_KEY, "");
llStopSound();
if(!Active)
{
llSetStatus(STATUS_PHYSICS, FALSE);
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.1);
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;
else if(message == BurnCommand) { llMessageLinked(LINK_SET, 5000, "burnout", NULL_KEY); llLoopSound(RunSound,1.0); llSleep(10); llLoopSound(IdleSound,1.0); }
}
changed(integer change)
{
if((change & CHANGED_LINK) == CHANGED_LINK)
{
sitting = llAvatarOnSitTarget();
if((sitting != NULL_KEY) && !Active)
{
if(sitting != llGetOwner())
{
llWhisper(0, NonOwnerMessage);
llTriggerSound(NonOwnerSound, 1.0);
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);
}
}