bon, alors premier set de scripts: juste des mouvements violents et une animation de l'avatar.
L'animation que j'utilise est trouvable à freebie heaven la boîte pour cowboy/girl, et a été nommé " RideCow" pour les besoin du script
premier script: gestion du sit/unsit et animation de l'avatar:
key oldAgent = NULL_KEY;
key agent = NULL_KEY;
integer permAcq = FALSE;
default {
state_entry() {
llSitTarget(<0, 0, 0.5>, ZERO_ROTATION);
llSetSitText( "Get a Ride." ); }
changed(integer change) {
if (change && CHANGED_LINK) {
agent = llAvatarOnSitTarget();
if ( oldAgent == NULL_KEY && agent != NULL_KEY ) {
oldAgent = agent;
llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION); }
else if ( oldAgent != NULL_KEY && agent == NULL_KEY) {
if ( permAcq ) {
llStopAnimation("RideCow");
llMessageLinked(LINK_SET, 0, "ride", NULL_KEY); }
llResetScript(); } } }
run_time_permissions(integer parm) {
if(parm == PERMISSION_TRIGGER_ANIMATION) {
llStopAnimation("sit");
llStartAnimation("RideCow");
permAcq = TRUE;
llMessageLinked(LINK_SET, 0, "ride", NULL_KEY); }
else { llUnSit(agent); } }
on_rez(integer start_param) {
llResetScript(); } }
second script, les déplacements angulaires:
rotation getRot = ZERO_ROTATION;
default {
on_rez (integer num) {
llResetScript (); }
link_message ( integer send, integer num, string mess, key oKey) {
if ((num == 0) && (mess == "ride")) state Anim; } }
state Anim {
state_entry () {
getRot = llGetRot();
llSetTimerEvent(0.25); }
timer () {
float angleX = (llFrand(10) - 5) * DEG_TO_RAD; // supprimer pour un mouvement d'avant en arriere
float angleY = (llFrand(90) - 45) * DEG_TO_RAD;
float angleZ = (llFrand(180) - 90) * DEG_TO_RAD; // supprimer pour un mouvement d'avant en arriere
rotation rot = llEuler2Rot(<angleX, angleY, angleZ>);// mettre 0 à la place d'angleX et angleZ pour un mouvement d'avant en arriere
llSetRot (rot); }
on_rez (integer num) {
llResetScript (); }
link_message ( integer send, integer num, string mess, key oKey) {
if ((num == 0) && (mess == "ride")) {
llSetRot(getRot);
llResetScript(); } } }
troisième script: les déplacements linéaires:
vector getPos = ZERO_VECTOR;
default {
on_rez (integer num) {
llResetScript (); }
link_message ( integer send, integer num, string mess, key oKey) {
if ((num == 0) && (mess == "ride")) state Anim; } }
state Anim {
state_entry () {
getPos = llGetPos();
llSetTimerEvent(0.25); }
timer () {
vector dep = <llFrand(2) - 1, llFrand(2) - 1, llFrand(1)>; // mettre <0, 0, llFrand(1)> pour un deplacement juste de bas en haut
llSetPos (getPos + dep); }
on_rez (integer num) {
llResetScript (); }
link_message ( integer send, integer num, string mess, key oKey) {
if ((num == 0) && (mess == "ride")) {
llSetPos(getPos);
llResetScript(); } } }
là je bosse sur l'interaction, mais c'est pas aussi simple.
tu me dis, si ça te convient pas, et je verrais quoi changer.
|