Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Innertube that will work on both Linden and prim water

Chaz Longstaff
Registered User
Join date: 11 Oct 2006
Posts: 685
04-26-2009 10:56
I need to make an Innertube that will work on both Linden and prim water.

Started with the script from Ben Linden called "InnertOOb." Catch with it happens in prim water -- as soon as you sit on it, physics kick in, and you sink to the bottom of the pool. If you turn that off, then you can't move -- vehicle stuff seems to stop working. (note: i have never yet touched vehicle stuff.)

Is there a demo script somewhere for a floaty that will worth on both prim and linden water, or if I post the Ben Linden script here, maybe get some help on how to get it to stop sinking?
_____________________
Thread attempting to compile a list of which animations are freebies, and which are not:

http://forums.secondlife.com/showthread.php?t=265609
Chaz Longstaff
Registered User
Join date: 11 Oct 2006
Posts: 685
Ben Linden intertube script
04-26-2009 11:55
This is the code that appears in a script whose creator shows Cory Ondrejka, used in the Ben Linden intertube.

You sink like a rock in prim water when the physics kick in upon sitting.


// by Ben
// Some help from Casval and Dave
rotation rot;
key owner;

reset(){
vector pos = llGetPos();
pos.z = pos.z + 2.0;
llMoveToTarget(pos, 0.3);
llRotLookAt(rot, 0.1, 1.0);
llSleep(1.0);
llStopLookAt();
llStopMoveToTarget();
}


default{


state_entry(){
llSetSoundQueueing(FALSE);
llPassCollisions(TRUE);
llSetSitText("Ride";);
llSitTarget(<-0.0, 0.0, 0.2>, <0.00000, -0.25882, 0.00000, 0.96593>;);
llSetCameraEyeOffset(<-4.0, 0.0, 3.00>;);
llSetCameraAtOffset(<0.0, 0.0, 2.0>;);
llSetVehicleType(VEHICLE_TYPE_CAR);
llRemoveVehicleFlags(-1);
llSetVehicleFlags(VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_NO_DEFLECTION_UP);
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.15);
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 1.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1000.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.1);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.1);

llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <10, 10, 10.0>;);
llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <10.0, 10.0, 10>;);

llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.2);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 0.5);

llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0);
llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.01);
llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.5);

llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 0.1);
llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.1);
llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 0.01);
llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 1.0);

llCollisionSound("", 0.0);
}

on_rez(integer param){
if(owner != llGetOwner()){
owner = llGetOwner();
llGiveInventory(owner, "Innertube Instructions";);
}
}

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{
llSetStatus(STATUS_PHYSICS, TRUE);

llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);

llMessageLinked(LINK_SET, 0, "on", "";);
llSetTimerEvent(1.0);
}
}
else {
llSetStatus(STATUS_PHYSICS, FALSE);
llReleaseControls();
llMessageLinked(LINK_SET, 0, "off", "";);
llSetTimerEvent(0.0);
llStopSound();
}
}

}

run_time_permissions(integer perm){
if (perm)
{
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;

if(level & CONTROL_FWD)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <4, 0, 0>;);
llStartAnimation("falldown";);
}
if(level & CONTROL_BACK)
{

llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <-4,0,0>;);
llStartAnimation("falldown";);
}

if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
{

angular_motor.z = -PI * 0.25;
llStartAnimation("falldown";);

}
if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))
{

angular_motor.z = PI * 0.25;
llStartAnimation("falldown";);

}
if(level & (CONTROL_DOWN))
{
//reset();
}
else if(level == FALSE)
{
llStopAnimation("falldown";);
}
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);
}

timer()
{
vector pos = llGetPos();
if(( pos.z - llGround(ZERO_VECTOR) ) < 0.8)
{
rot = llGetRot();
}
}


}
_____________________
Thread attempting to compile a list of which animations are freebies, and which are not:

http://forums.secondlife.com/showthread.php?t=265609