help!!! rodeo

Répondre
Partager Rechercher
bonjour je cherche a faire un taureau mécanique pour faire du "rodéo".
j'ai pas mal de script dans mon inventaire mais je sais pas trop comment faire . merci
euh, tu veux faire quoi exactement?

Un simulateur de rodéo où le joueur qui l'utilise doit faire quelque chose pour ne pas tomber?
ou juste de la déco, le joueur s'assit dessus, et le taureau mécanique bouge et anime l'avatar?

Parce que les 2 programmes seront très différents, et plutôt complexe pour le premier.
Sinon il existe des taureaux mécaniques en vente aux alentours de 500 L$. C'est moins amusant que de le faire soi-même mais nettement moins fatiguant aussi.
En fait ce que j'aimerais c'est au minimum un taureau qui anime l'avatar mais pas juste un "devant derrière" un peu plus rechercher et c'est vrai que si il faut jouer pour pas tomber ça serais l'idéal mais bon... merci de me répondre, merci
le pb, c'est que pour simuler la violence du mouvement d'un taureau, c'est....
compliqué, et pas facilement synchronisable puisque ce sera très dépendant de la charge serveur.

en multipliant les scripts on peut arriver à faire des mouvements sympas, mais ensuite faire agir le chevaucheur...

ça risque d'être chaud de synchroniser tout ça.

Je regarde ça demain, si ça rame pas trop sur les SandBox.
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:
Citation :
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:
Citation :
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:
Citation :
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.
bon je viens d'essayer tes script alors déjà chapeau parce que c énorme mais le seul mini problème c'est que l'avatar est debout et on pas a "cheval". si tu peu me dire la solution ça serais bien cool. et encore merci parque ta vraiment fait du bon boulot.
l'animation que je t'ai indiquée est ce que j'ai trouvé de plus rapprochant de la chevauchée, et surtout des cowboy en rodéo, mais si tu trouves mieux, tu remplaces, faut juste que le nom soit le bon, y a pas de soucis.

Ensuite faut ajuster la ligne suivante du script de gestion de l'avatar:
  • llSitTarget(<0, 0, 0.5>, ZERO_ROTATION);
C'est là que tu dis où se place l'avatar par rapport à l'objet quand il est assis.
le vecteur <0, 0, 0.5> donne la position centrale de l'avatar par rapport au centre de l'objet, respectivement sur X, Y et Z.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés