plz dontresell/give away this script took me all week basicly to get this far
CODE
///////////////\\\\\\\\\\\\\\\\\\\\
//Created by Mrc Homewood\\
///////////////\\\\\\\\\\\\\\\\\\\\
vector fwd_vel = <14,0,0>;
vector roam_around;
float roam_range = 1;
float roam_delay = .6;
default
{
state_entry()
{
llSetText("FreeSwiming Fish Test",<1,1,1>,1);
roam_around = llGetPos();
llSensorRepeat("", NULL_KEY, PASSIVE, roam_range, TWO_PI, roam_delay - llFrand(roam_delay / 60));
llSetVehicleType(VEHICLE_TYPE_BOAT);
llSetVehicleFlags(VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_HOVER_WATER_ONLY);
// remove these flags
llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_TERRAIN_ONLY
| VEHICLE_FLAG_LIMIT_ROLL_ONLY
| VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
// least for forward-back, most friction for up-down
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <2, 3, 2> );
// uniform angular friction (setting it as a scalar rather than a vector)
llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 2 );
// linear motor wins after about five seconds, decays after about a minute
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 5 );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 60 );
// agular motor wins after four seconds, decays in same amount of time
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 2 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 5 );
// hover / float
llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, .1);
llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY,.5 );
llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 2.0 );
llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0.5 );
// halfway linear deflection with timescale of 3 seconds
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.5 );
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 3 );
// angular deflection
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.5 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10 );
// somewhat bounscy vertical attractor
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 );
// weak negative damped banking
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 1 );
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.1 );
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .75 );
// default rotation of local frame
llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );
}
sensor(integer count)
{
vector facing;
vector dir;
float dist;
integer n;
integer selected;
dist = roam_range + 1;
for(n=0; n<count; ++n)
{
dir = roam_around - llDetectedPos(n);
if (llVecMag(dir) < dist)
{
dist = llVecMag(dir);
selected = n;
}
dir = dir % llRot2Up(llGetRot()) + roam_around;
facing = llRot2Euler(llRotBetween(llRot2Fwd(llGetRot()), dir));
facing.x = 0.0;
facing.y = 0.0;
llRotLookAt(llGetRot() * llEuler2Rot(facing), 1.0, 0.2);
llSleep(0.2);
dist = llVecMag(dir);
if (dist < 1.0)
{
dir = llGetPos() - roam_around;
}
llSetStatus(STATUS_PHYSICS, TRUE);
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, 0.6 * fwd_vel);
for (selected = llFloor(dist); selected > 1; --selected)
{
llSleep(0.25);
}
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, ZERO_VECTOR);
llSetStatus(STATUS_PHYSICS, FALSE);
llStopLookAt();
}
}
no_sensor()
{
vector facing;
vector dir;
float dist;
integer selected;
{
facing.x = 0.0;
facing.y = 0.0;
facing.z = llFrand(TWO_PI) - PI;
dir = ((((integer)llGetTime() % (integer)roam_range) + 1) * facing) * llGetRot();
llRotLookAt(llGetRot() * llEuler2Rot(facing), 1.0, 0.2);
llSleep(0.2);
dist = llVecMag(dir);
if (dist < 1.0)
{
dir = roam_around - llGetPos();
}
llSetStatus(STATUS_PHYSICS, TRUE);
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, 0.6 * fwd_vel);
for (selected = llFloor(dist); selected > 1; --selected)
{
llSleep(0.1);
}
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, ZERO_VECTOR);
llSetStatus(STATUS_PHYSICS, FALSE);
llStopLookAt();
}
}
}
