Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Newbie needs help with a script

Senuka Harbinger
A-Life, one bit at a time
Join date: 24 Oct 2005
Posts: 491
10-29-2005 00:49
I've edited what little I know of scripting to get this vehicle script to run for a bike I made. I only have 1 problem though, the camera is 90 degrees to the right of what should be the front of the vehicle. I've tried all manner of the llSetCamera... variables and the view stays the same no matter what. any help on getting the camera to display correctly? (yes, I'm aware that the script calls function to do much more than simple drive the vehicle, including turning on headlights and changing colors, but that's not what I'm interested in right now)


[edit] one of the main reasons I'm having this problem is that I built the bike on the Y axis instead of the X axis, but there should be a way to compensate for that, since I've got the controls and sitting position oreintated correctly for that [/edit]
CODE

key agent;
vector PUSH_OFF = <0, 10, 10>;
integer gLightsOn = FALSE;
integer iChan = 0;
key owner;

vector startColor = <1,0.5,0.5>;
vector endColor = <1,0,0>;
integer onoff = TRUE;

string last_wheel_direction;
string cur_wheel_direction;


default
{
state_entry()
{
gLightsOn = FALSE;
llMessageLinked(LINK_SET, gLightsOn, "lights_off", "");
llSetSitText("Ride");
llSitTarget(<.24, 0.05, 0.3>, <0.0, .075, 0.0, 1>);
llSetCameraEyeOffset(<-6.0, 0.0, 3.0>);
llSetCameraAtOffset(<3.0, 0.0, 1.0>);
llSetVehicleFlags(-1);
llSetVehicleType(VEHICLE_TYPE_CAR);
llSetVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP |
VEHICLE_FLAG_LIMIT_ROLL_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP);
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.10);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 0.10);

llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.2);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.1);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.5);


llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000.0, 0.50, 1000.0>);
llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <10.0, 5.0, 1000.0>);


llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.75);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 0.25);

llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 1.0);
llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 0.01);

owner = llGetOwner();
llListen(iChan,"",owner,"");
}

//touch_start(integer num)
//{
//if(llDetectedKey(0) != llGetOwner())
//{
//llWhisper(0, "AKIRA bike");

//}
//else
//{
//if(llAvatarOnSitTarget() != llGetOwner()) llWhisper(0, "Right Click and choose 'Ride' from the pie menu.");
//}
//}

listen(integer chan, string name, key id, string msg)
{
list command = llCSV2List(msg);
// Lights
if (chan == iChan & msg == "lights on")
{
gLightsOn = TRUE;
llMessageLinked(LINK_SET, gLightsOn, "lights_on", "");
}
if (chan == iChan & msg == "lights off")
{
gLightsOn = FALSE;
llMessageLinked(LINK_SET, gLightsOn, "lights_off", "");
}
// Colour presets
if(llList2String(command, 0) == "color" | llList2String(command, 0) == "colour")
{
if(llList2String(command, 1) == "red")
{
startColor = <1,0.5,0.5>;
endColor = <1,0,0>;
}
if(llList2String(command, 1) == "green")
{
startColor = <0.5,1,0.5>;
endColor = <0,1,0>;
}
if(llList2String(command, 1) == "blue")
{
startColor = <0,1,1>;
endColor = <0,0.25,1>;
}
if(llList2String(command, 1) == "purple")
{
startColor = <1,0.5,1>;
endColor = <1,0,1>;
}
if(llList2String(command, 1) == "yellow")
{
startColor = <1,1,0.5>;
endColor = <1,1,0>;
}
}
// Colour via RGB values
if(llList2String(command, 0) == "rgb")
{
if(llList2String(command, 1) != "")
{
startColor = <1,0.5,0.5>;
endColor = <1,0,0>;
}
}
}



changed(integer change)
{
if (change & CHANGED_LINK)
{
key agent = llAvatarOnSitTarget();
if (agent)
{
if (agent != llGetOwner())
{
llSay(0, "You aren't the owner");
llUnSit(agent);
llPushObject(agent, <0,0,100>, ZERO_VECTOR, FALSE);
}
else
{
llTriggerSound("bike_start",1);
llSleep(.4);
llSetStatus(STATUS_PHYSICS | STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, TRUE);
llSleep(.1);
llCollisionSound("", 0);
llSetTimerEvent(0.5);
llLoopSound("bike_idle",1);
llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
}
}
else
{
llSetTimerEvent(0);
llStopSound();
llSetStatus(STATUS_PHYSICS | STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, FALSE);
llReleaseControls();
llStopAnimation("motorcycle_sit");
llPushObject(llGetOwner(), PUSH_OFF, <0,0,0>, TRUE);
gLightsOn = FALSE;
llMessageLinked(LINK_SET, gLightsOn, "lights_off", "");
}
}

}

run_time_permissions(integer perm)
{
if (perm)
{
llStartAnimation("motorcycle_sit");
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE);
}
}
control(key id, integer level, integer edge)
{
vector angular_motor;
vector vel = llGetVel();

if(level & CONTROL_FWD)
{
llLoopSound("bike_drive",1);
llMessageLinked(LINK_SET, gLightsOn, "brake_off", "");
if(!llGetStatus(STATUS_PHYSICS))
{
llSetStatus(STATUS_PHYSICS | STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, TRUE);
llCollisionSound("", 0);
}

llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <29.1,0,0>);
}
if(level & CONTROL_BACK)
{
llLoopSound("bike_drive",1);
llMessageLinked(LINK_SET, gLightsOn, "brake_on", "");
//llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0, 0, 1, 0> );
if(!llGetStatus(STATUS_PHYSICS))
{
llSetStatus(STATUS_PHYSICS | STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, TRUE);
llCollisionSound("", 0);
}
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <-10,0,0>);
}

if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
{
llLoopSound("bike_drive",1);
//llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );
angular_motor.x += 25;
angular_motor.z -= 10;
}
if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))
{
llLoopSound("bike_drive",1);
//llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );
angular_motor.x -= 25;
angular_motor.z += 10;
//llWhisper(0,(string)llGround(<0,0,0>) + " -- " + (string)llGetPos());
}
if(level & (CONTROL_UP))
{
//llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );
angular_motor.y -= 75;
}
if(level & (CONTROL_DOWN))
{
//llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );
angular_motor.y += 75;
}
if((edge & CONTROL_FWD) && (level & CONTROL_FWD))
{
// We have a few message links to communicate to the other
// scritps when we start to accelerate and let off the gas.
llMessageLinked(LINK_SET, 0, "burst", "");
}
if((edge & CONTROL_BACK) && !(level & CONTROL_BACK))
{
llMessageLinked(LINK_SET, gLightsOn, "brake_off", "");
}

llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);

}
timer()
{
llLoopSound("bike_idle",1);
}

}
Seagel Neville
Far East User
Join date: 2 Jan 2005
Posts: 1,476
10-29-2005 01:43
You should post this in Scripting Tips forum. And wrap PHP tags around your script.
Anyway, the point you have to tweak is here,
CODE
llSetCameraEyeOffset(<-6.0, 0.0, 3.0>);
llSetCameraAtOffset(<3.0, 0.0, 1.0>);
This means you look from -6.0m along x-axis to 3.0m along x-axis. Although it depens on how to build your vehcle, what about changing like this?
CODE
llSetCameraEyeOffset(<0, -6.0, 3.0>);
llSetCameraAtOffset(<0, 3.0, 1.0>);
_____________________
:) Seagel Neville :)