Bonjour,
C'est encore moi avec mes bidouillages de scripts ^^.
Je voudrais réaliser un objet qui permet de porter quelqu'un sur son dos, comme celui de chez Abranimation. Donc j'ai les anims, les prims (le plus facile à avoir) et le script, enfin presque.
Je prend un script freebie, le Simple Vehicle 10.0 by Cory Linden.
Voila le script (j'ai effacé les commentaires de Ben Linden qui prenaient pas mal de place) :
//Basic Motorcycle Script
//
// by Cory
// Last edited by Nada Epoch on 01-01-2004 at 08:51 PM
//The new vehicle action allows us to make any physical object in Second
//Life a vehicle. This script is a good example of a
// very basic vehicle that is done very well.
// Very well c'est toi qui le dis.
default
{
state_entry()
{
llPassCollisions(TRUE);
llSetSitText("Ride");
llSitTarget(<0.6, 0.03, 0.20>, ZERO_ROTATION);
llSetCameraEyeOffset(<-5.0, -0.00, 2.0> );
llSetCameraAtOffset(<3.0, 0.0, 2.0> );
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, <10.0, 0.5, 1000.0> );
llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <10.0, 10.0, 0.5> );
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.50);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 0.40);
llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 1.0);
llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 0.01);
llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 1.0);
llCollisionSound("", 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
{
llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
llPlaySound("SUZ_start (2).wav", 0.7);
llMessageLinked(LINK_SET, 0, "get_on", "");
}
}
else
{
llSetStatus(STATUS_PHYSICS, FALSE);
llReleaseControls();
llStopAnimation("motorcycle_sit");
llMessageLinked(LINK_SET, 0, "idle", "");
}
}
}
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, TRUE, FALSE);
}
}
{
vector angular_motor;
if(level & CONTROL_FWD)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <50,0,0> );
}
if(level & CONTROL_BACK)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <-20,0,0> );
}
if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
{
angular_motor.x += PI*4;
angular_motor.z -= PI*4;
}
if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))
{
angular_motor.x -= PI*4;
angular_motor.z += PI*4;
}
if(level & (CONTROL_UP))
{
angular_motor.y -= 50;
}
if((edge & CONTROL_FWD) && (level & CONTROL_FWD))
{
llMessageLinked(LINK_SET, 0, "burst", "");
}
if((edge & CONTROL_FWD) && !(level & CONTROL_FWD))
{
llMessageLinked(LINK_SET, 0, "stop", "");
}
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION,angular_motor);
}
}
Donc dans tous sa, il y a des trucs qui me plaisent pas, donc je réécris entièrement le script avec le LSL Editor, supprime et modifie quelques lignes.
Voila le script après modification à l'aveugle :
//Basic Car Script
//
// by Cory
// Last edited by Nada Epoch on 01-01-2004 at 08:51 PM
default
{
state_entry()
{
llPassCollisions(TRUE);
llSetSitText("Ride")
llSitTarget(<0.6, 0.03, 0.20>, ZERO_ROTATION);
llSetCameraEyeOffset(<-5.0, -0.00, 2.0> );
llSetCameraAtOffset(<3.0, 0.0, 2.0> );
llSetVehicleType(VEHICLE_TYPE_CAR);
llSetVehicleFlags(VEHICLE_FLAG_MOUSELOOK_STEER | VEHICLE_FLAG_LIMIT_ROLL_ONLY);
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, <10.0, 0.5, 1000.0>);
llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <10.0, 10.0, 0.5>);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.50);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 0.40);
llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 1.0);
llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 0.01);
llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 1.0);
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
// Detection key avatar
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);
}
}
llSetStatus(STATUS_PHYSICS, FALSE);
llReleaseControls();
llStopAnimation("msmale16b");
}
}
run_time_permissions(integer perm)
{
if (perm)
{
llStartAnimation("anim1");
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
}
}
vector angular_motor;
if(level & CONTROL_FWD)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <50,0,0 );
}
if(level & CONTROL_BACK)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <-20,0,0> );
{
if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
{
angular_motor.x += PI*4;
angular_motor.x -= PI*4;
}
if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))
{
angular_motor.x -= PI*4;
angular_motor.z += PI*4;
}
if(level & (CONTROL_UP))
angular_motor.y -= 50;
}
if((edge & CONTROL_FWD) && (level & CONTROL_FWD))
{
if((edge & CONTROL_FWD) && !(level & CONTROL_FWD))
}
}
Petit test debug avec le LSL Editor et comme on pouvait s'en douter, c'est pas bon.
Voila le rapport :
Line 82 Character 5: Class, struct, or interface method must have a return type
Line 82 Character 31: Identifier expected
Line 82 Character 38: Identifier expected
Line 83 Character 2: Class, struct, or interface method must have a return type
Line 84 Character 2: Class, struct, or interface method must have a return type
Line 84 Character 18: Type expected
Line 89 Character 17: Expected class, delegate, enum, interface, or struct
Line 105 Character 62: Expected class, delegate, enum, interface, or struct
Line 124 Character 1: Type or namespace definition, or end-of-file expected
Il me dit sa, j'arrive à régler quelques erreurs mais malheureusement pas toutes.
Avec sa je suis bloqué mais pas seulement avec sa car il y a d'autres choses que j'aurais voulu modifier dans ce script, mais avec mon peu de connaissance, je n'ai pas pu réussir à modifier.
Comme par exemple pour enlever la fonction qui dit "You aren't the owner" quand une autre personne que moi clique droit sur la ball.
Aussi rajouter dans ce script un système comme la poseball avec l'anim et la prim qui disparaît.
Après c'est tout parce que là c'est déja trop.
Voila si quelqu'un pouvait m'aider à finir ce script sa serait très sympa de sa part parce que là je galère avec sa.
Merci d'avance