[aide] pour un ascenseur qui repond au doigt et a la voix

Répondre
Partager Rechercher
voila, j'ai fait un ascenseur qui a 2 etages
il ce rezz en bas, memorise ca position.
cet ascenseur a une porte qui s ouvre a l'arret, et ce referme au demarage.
au 1 er etage une porte paliere s ouvre a l'arrivée de l'ascenseur et ce referme a son depart.
tout cela marche parfaitement
on clik sur l ascenseur et il part
la direction ce fait automatiquement
mais je voudrais rajouter un fonction listen de facon a faire un bouton d'apelle
en haut et en bas
je n'arrive pas a faire cohabiter les 2 (fonction touch_start et listen)
merci de m'aider
en piece jointe le script actif a jour
merci d'avance a tous, et grand merci a NIX pour ces grands eclaircissements

Code PHP:

// *********************************************************************************************************************
// * note de routine: cette version est etudiée pour commencer avec la cabine en position basse pour mem ces marques *
// * routine ascenseur traduite et ameliorer par Dave1000 Winkler *
// * Commenter dans le but d'aprentissage dans le maniement des phys *
// * observation: le phys a tendance a ce placer magnetiquement a une distance de quelque centimetre dans toute les *
// * direction, il faut donc en tenir compte lors de la mise en place des paramatres point mort haut. *
// *********************************************************************************************************************
// ************************************************************************************************************
// * dans cette zone , declaration de toutes les variables utilisée dans le script *
// * et eventuelement de toutes les assignations *
// ************************************************************************************************************
vector start_pos;// la variable start_pos est initialisée comme vector a <0,0,0>
vector verif_pos;// la variable verif_pos est initialisée comme vector a <0,0,0>
float point_haut=11.00;// definition de la variable du point le plut haut (1er etage)
vector move_haut;// initialisation de la variable move_haut comme vector
key id ="";
string m;
integer a;
default
{
state_entry()
 
 
{
 
 
 
llSay(0,"1ER Demarage");// blabla
llSetStatus (STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_ZFALSE);// bloke la possibilitée de rotation X,y,z
start_pos=llGetPos();// on assigne a la variable vector start_pos, la position actuel du RDC
//llSay(0,(string) start_pos);// pour verifier la position basse
move_haut=start_pos+<0,0,point_haut>;// definition du point mort haut ici
//llSay(0,(string) move_haut);// blabla pour verifier la pos haute
llSetStatus(STATUS_PHYSICS,TRUE);// le statut du prim de l'ascenseur est passer a phys
llMoveToTarget(start_pos,0.2);// on s'assure que l'ascenseure est bien au RDC
key id "";// la variable ID est initialisée comme variable KEY et de contenu vide
llListen(-100,"",id,m);//definition d une ecoute sur le canal -100, et pour tout le monde
state bas;//jump au state bas
 
 
}

 
state bas // definit que nous somme en zone basse
 
{
 
touch_start(integer total_number)

llSay(-100,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer 
llSetStatus(STATUS_PHYSICS,TRUE);//le statut du prim de l'ascenseur est passer a phys
llSleep(0.2);// dodo scripte 0.2 sec pour bien passé au statut phys
llMoveToTarget(move_haut,2.0);// on monte vers le haut en 2 sec
llSleep(6.0);// dodo scripte 6 sec pour laisser monter
llMoveToTarget(move_haut,0.2);// acceleration et stabilisation en haut
llStopMoveToTarget();// arret du moteur de monter
llSetStatus(STATUS_PHYSICS,FALSE);//changement du statut au fixe "on met les freins"
llSay(-100,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
llSay(-101,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
state haut;// saut a l etat haut
}

state haut // definit que nous somme en zone haute
{
touch_start(integer total_number)// attend que l on touche l'ascenseur

llSay(-100,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
llSay(-101,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
llSetStatus(STATUS_PHYSICS,TRUE);//le statut du prim de l'ascenseur est passer a phys
llSleep(0.2);// dodo scripte 0.2 sec pour bien passé au statut phys
llMoveToTarget(start_pos,2.0);// moteur en route et retour au point mort bas en 2 sec
llSleep(7.0);//dodo scripte 6 sec pour bien laisser decendre
llMoveToTarget(start_pos,0.2);// acceleration et stabilisation en bas
llStopMoveToTarget();// arret du moteur
llSetStatus(STATUS_PHYSICS,FALSE);//changement du statut au fixe "on met les freins"
llSay(-100,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
state bas;
}

Fichiers attachés
ascenseur v1.txt (5,9 Ko, 67 affichages)
Bon un peu vite fait comme d'habitude mais j'ai fait un petit test et ça marche, il faut juste que tu vois ce que tu veux vraiment pour les listen. Il faut savoir que tu perds l'écoute en changeant d'état, donc il faut activer celle-ci à chaque changement d'état

Code PHP:


// *********************************************************************************************************************
// * note de routine: cette version est etudiée pour commencer avec la cabine en position basse pour mem ces marques   *
// * routine ascenseur traduite et ameliorer par Dave1000 Winkler                                                      *
// * Commenter dans le but d'aprentissage dans le maniement des phys                                                   *
// * observation: le phys a tendance a ce placer magnetiquement a une distance de quelque centimetre dans toute les    *
// * direction, il faut donc en tenir compte lors de la mise en place des paramatres point mort haut.                  *
// * Comment faire pour que si un objet dit sur le canal -102 "appelle" l ascenseur ce met en marche ?                 *
// * qu'importe l'etat ou il ce trouve haut ou bat                                                                     *
// *********************************************************************************************************************
// ************************************************************************************************************
// * dans cette zone , declaration de toutes les variables utilisée dans le script                            *
// * et eventuelement de toutes les assignations                                                              *
// ************************************************************************************************************
vector start_pos;// la variable start_pos est initialisée comme vector a <0,0,0>
//vector verif_pos;// la variable verif_pos est initialisée comme vector a <0,0,0>
float point_haut=11.00;// definition de la variable du point le plut haut (1er etage)
vector move_haut;// initialisation de la variable move_haut comme vector
//key id ="";
string m "";
integer a 0;

// Canal du Chat
integer iCanal = -100;

// Fonction mour monter
monte()
{
    
llSay(-100,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
    
llSetStatus(STATUS_PHYSICS,TRUE);//le statut du prim de l'ascenseur est passer a phys
    
llSleep(0.2);// dodo scripte 0.2 sec pour bien passé au statut phys
    
llMoveToTarget(move_haut,2.0);// on monte vers le haut en 2 sec
    
llSleep(6.0);// dodo scripte 6 sec pour laisser monter
    
llMoveToTarget(move_haut,0.2);// acceleration et stabilisation en haut
    
llStopMoveToTarget();// arret du moteur de monter
    
llSetStatus(STATUS_PHYSICS,FALSE);//changement du statut au fixe "on met les freins"
    
llSay(-100,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
    
llSay(-101,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
}

// Fonction pour descendre
descend()
{
    
llSay(-100,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
    
llSay(-101,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
    
llSetStatus(STATUS_PHYSICS,TRUE);//le statut du prim de l'ascenseur est passer a phys
    
llSleep(0.2);// dodo scripte 0.2 sec pour bien passé au statut phys
    
llMoveToTarget(start_pos,2.0);// moteur en route et retour au point mort bas en 2 sec
    
llSleep(7.0);//dodo scripte 6 sec pour bien laisser decendre
    
llMoveToTarget(start_pos,0.2);// acceleration et stabilisation en bas
    
llStopMoveToTarget();// arret du moteur
    
llSetStatus(STATUS_PHYSICS,FALSE);//changement du statut au fixe "on met les freins"
    
llSay(-100,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
}

default
{
    
state_entry()


    {

        
llSay(0,"1ER Demarage");// blabla
        
llSetStatus (STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_ZFALSE);// bloke la possibilitée de rotation X,y,z
        
start_pos=llGetPos();// on assigne a la variable vector start_pos, la position actuel du RDC
        //llSay(0,(string) start_pos);// pour verifier la position basse
        
move_haut=start_pos+<0,0,point_haut>;// definition du point mort haut ici
        //llSay(0,(string) move_haut);// blabla pour verifier la pos haute
        
llSetStatus(STATUS_PHYSICS,TRUE);// le statut du prim de l'ascenseur est passer a phys
        
llMoveToTarget(start_pos,0.2);// on s'assure que l'ascenseure est bien au RDC
        
key id "";// la variable ID est initialisée comme variable KEY et de contenu vide
        //llListen(-100,"",id,m);//definition d une ecoute sur le canal -100, et pour tout le monde
        
state bas;//jump au state bas


    
}
}


state bas // definit que nous somme en zone basse

{

    
state_entry()
    {
        
llListen(-100,""NULL_KEY"");//definition d une ecoute sur le canal -100, et pour tout le monde
    
}

    
listen(integer channelstring namekey idstring message)
    {
        if(
message == "GO")
        {
            
monte();
            
state haut;
        }
    }

    
touch_start(integer total_number)
    {
        
monte();
        
state haut;
    }
}
state haut // definit que nous somme en zone haute
{
    
state_entry()
    {
        
// Mise en place de l'écoute du Chat
        
llListen(iCanal""NULL_KEY"");
    }

    
listen(integer channelstring namekey idstring message)
    {
        if(
message == "GO")
        {
            
descend();
            
state bas;
        }
    }

    
touch_start(integer total_number)// attend que l on touche l'ascenseur
    
{
        
descend();
        
state bas;
    }

D'ailleurs au niveau de la structure de ton programme l'utilisation d'état est à méditer parce qu'elle impose des redondances...
a part une variable, tout marche
a part que tu a oublier de repercuter ta variable iCanal dans l un des etat, tout marche a merveille, aussi je te remercie du fond du coeur, et en effet je pensse que l on peut avec une variable etat haut, etat bas optimiser, et ce passer completement des "STATE",je vais my atteler de suite.
autre chose desormais je voudrais comprendre comment le programe suit les chose et fait ces saut, en effet je ne comprend pas trop la logique des chose, et pourquoi justement dans les "state" pourquoi certaine chose ne sont plus en compte, comme certaine variable etc etc, je ne regrette qu une chose c'est que yeuze qui avait bien commencer sont tutorial en fr, ne l'est jamais finis
C'est très simple Dave : tu ne peux avoir qu'un seul état actif à la fois, et tout ce qui est dans les états inactifs est inopérant.
Alors c'est très pratique si tu veux par exemple que durant le mouvement ton ascenseur ne réagisse pas au touch_start.
Et puis dans d'autres cas c'est moins pratique car cela oblige à recopier des portions de code d'état en état, en particulier des événements comne le listen dans ce cas là et que ça alourdit donc le script. Mais ça peut aussi le rendre plus clair.
Quand à la portée des variables, elle est limité entre les parenthéses. Ainsi, une variable déclarée dans un événement ne sera accessible que dans cet événement. Les variables déclarées en tête du script (donc hors toute parenthése) sont accessibles partout : on les dit variables globales.
Mais a défaut du tutorial de yeuse prend l'excellent guide de Bestmomo http://script.lsl.free.fr/telechar.htm : il est trop modeste pour faire sa pub.
J'ai un peu réorganisé ton script. Il n'y a que la commande des portes qui m'intrigue avec ces deux canaux croisés

Code PHP:


vector start_pos
;// la variable start_pos est initialisée comme vector a <0,0,0>
float point_haut 11.0;// definition de la variable du point le plut haut (1er etage)
vector move_haut;// initialisation de la variable move_haut comme vector
integer iHaut FALSE;


// Canal du Chat
integer iCanal = -1000;

// Fonction pour monter
monte()
{
    
llSay(-100,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
    
bouge(move_haut);
    
llSay(-100,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
    
llSay(-101,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
}

// Fonction pour descendre
descend()
{
    
llSay(-100,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
    
llSay(-101,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
    
bouge(start_pos);
    
llSay(-100,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
}

action()
{
    if(
iHautdescend();
    else 
monte();
    
iHaut = !iHaut;
}

bouge(vector pos)
{
    
llSetStatus(STATUS_PHYSICS,TRUE);//le statut du prim de l'ascenseur est passer a phys
    
llSleep(0.2);// dodo scripte 0.2 sec pour bien passé au statut phys
    
llMoveToTarget(pos,2.0);// on monte vers le haut en 2 sec
    
llSleep(6.0);// dodo scripte 6 sec pour laisser monter
    
llMoveToTarget(pos,0.2);// acceleration et stabilisation en haut
    
llStopMoveToTarget();// arret du moteur de monter
    
llSetStatus(STATUS_PHYSICS,FALSE);//changement du statut au fixe "on met les freins"
}

default
{
    
state_entry()
    {
        
llSay(0,"1ER Demarage");// blabla
        
llSetStatus (STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_ZFALSE);// bloke la possibilitée de rotation X,y,z
        
start_pos=llGetPos();// on assigne a la variable vector start_pos, la position actuel du RDC
        
move_haut=start_pos + <.0.0point_haut>;// definition du point mort haut ici
        
bouge(start_pos);
        
llListen(iCanal""NULL_KEY"");// Mise en place de l'écoute du Chat
    
}

    
listen(integer channelstring namekey idstring message)
    {
        if(
message == "GO"action();
    }

    
touch_start(integer total_number)// attend que l on touche l'ascenseur
    
{
        
action();
    }

[aide]pourquoi tous ces canaux ? croiser ?
au rdc l'ascenseur a de lui meme une petite planche qui passe de l'horizontal a la vertical je n est pas utiliser linkmessage mais un say sur le canal 100 pour donner l ordre de fermer ou ouvrir
arriver au 1 er etage il ya une porte palierequi est placée sur un balcon, en effet une fois l ascenseur partit il il ya un trou dangereux.
donc en meme temp que s ouvre la porte paliere ordre donner sur le canal -101 s ouvre la porte de l ascenseur, le canal -102 est utiliser pour les appelle de l'ascenseur aussi bien en haut qu en bas.
maintenand il se produit un autre probleme que j ai decouvert que helas, si on rezz ailleur et sous un autre angle mon ascenseur, mes rotations ne sont plus pareille, en effet j ai utiliser des coodonée directe a 4 zones de type <x,y,z,s>
je te donne le script utiliser pour les ouverture de porte:
cet ascenseur est prevu pour etre vendu avec un accompagnemet etc et donc je crois qu il me faut placer un onrez dans tout les script je crois, mais pareil je n arrive pas a le placer la ou il doit etre
merci de tes reponce


Code PHP:

rotation rotInitial;

default
{
 
     
state_entry()
    {
     
rotInitial llGetRot();
     
key id ="";
     
llListen(-100,"",id,"");
    }
    
    
    
       
listen(integer astring nkey idstring m)
       {
          if (
m=="ouvre la porte")
            {
             
llSetRot(<-0.60931, -0.35887, -0.358930.60920>);
             
//llSay(0,"ouvert");
            
}
       
          if (
m=="ferme la porte")
            {
             
llSetRot(rotInitial);
             
//llSay(0,"fermer");
            
}
      }

On a toujours du mal à visualiser un truc comme ça. Je suppose que les portes de ton ascenseur sont liés à lui. Quand tu écris :

Code PHP:

rotInitial llGetRot(); 

Tu prends la rotation régionale de ta primitive liée. Je suppose que ça marche quand même parce que ton ascenseur n'a pas de rotation initiale. Mais évidemment lorsque tu tournes ton ascenseur ça ne peut plus marcher.
Tu ne t'en sortiras pas avec un traitement sur on_rez non plus.

Il faut rester en coordonnées locales :

Code PHP:

rotInitial llGetLocalRot(); 

Il faut aussi utiliser la fonction llSetLocalRot à la place de llSetRot.

D'autre part pourquoi utiliser un message du Chat dans ce cas puisqu'avec un messagelink tu aurais moins de lag...

En plus un deuxième script ne me paraît pas nécessaire, tu peux tout gérer avec un seul et commander tes portes avec la fonction llSetLinkPrimitiveParams.
effectivement
j'ai changer comme tu la dit les composant en composant local, et apres avoir regarder ton tutorial j ai pris l initiative de modifier le code qui est devenus celui ci, apres les teste de rzz a un autre angle tout a l air de bien suivre mais je desire quand meme faire une reinitialisation en cas de rezz, car actuelement une fois mis dans la boite rezz puis derezzer, le programme ne redemare pas depuis le debut et donc n enregistre pas les nouvelles coordonées de depard
Code PHP:

rotation Rot_bas;//variable Rot_initial
rotation Rot_haut;//variable Rot_initial
default
{
 
     
state_entry()
    {
     
Rot_bas llGetLocalRot();//Rot_initial enregistre le quaternion de la pos de rezz
     
vector eulerRot = <0,-117,0>;//la var eulerRot prend la valeur rotation en degrer, ici -117 degre
     
eulerRot *= DEG_TO_RAD;//la var eulerRot subit une transformation qui la transforme en radian
     
rotation rot llEuler2Rot(eulerRot);//la variable rot rescois le quaternion equivalent a <0,0,-117>
     
Rot_haut=(Rot_bas*rot);//calcul de la position haute en additionant le decalaga a la position de base
 
     
key id ="";
     
llListen(-100,"",id,"");
    }
 
 
 
       
listen(integer astring nkey idstring m)
       {
          if (
m=="ouvre la porte")
            {
             
llSetLocalRot(Rot_bas);
             
//llSay(0,"ouvert");
            
}
 
          if (
m=="ferme la porte")
            {
             
llSetLocalRot(Rot_haut);
             
//llSay(0,"fermer");
            
}
      }

Citation :
Publié par Dave1000 winkler
je desire quand meme faire une reinitialisation en cas de rezz, car actuelement une fois mis dans la boite rezz puis derezzer, le programme ne redemare pas depuis le debut et donc n enregistre pas les nouvelles coordonées de depard
En effet l'événement state_entry ne se déclenche qu'en cas de reset du script, donc il faut passer par l'événement on_rez pour actualiser des variables dépendante de la position. Mais... comme la rotation de ta porte est locale elle ne dépend jamais de celle de l'ascenseur et donc ton code n'est pas correct.

C'est plus simple à réaliser : tu positionnes ta porte ouverte et tu relèves la rotation, et tu fais de même en position fermeture. Ensuite tu utilises ce script en mettant tes valeurs :

Code PHP:

// Valeur relevées
vector vOuverture = <.0,-117.0,.0>;
vector vFermeture = <.0,.0,.0>;

rotation convert_rotation(vector v)
{
    return 
llEuler2Rot(DEG_TO_RAD);
}

default
{

    
state_entry()
    {
        
llListen(-100""NULL_KEY"");
    }

    
listen(integer astring nkey idstring m)
    {
        if (
== "ouvre la porte")
        {
            
llSetLocalRot(convert_rotation(vOuverture));
        }

        if (
== "ferme la porte")
        {
            
llSetLocalRot(convert_rotation(vFermeture));
        }
    }

Mais... je persiste à dire que tu dois économiser ce script
incroyable en effet
ca marche, en entrant purement est simplement tou ce que me donne le viewer dans les varibles , quelque soit l angle de debut ca marche.
personelement je suis pour que l on evite au maximum les lag, et doncsi on peut encore amelioré les choses, comment par exemple, utiliser linkmessage ?
Citation :
Publié par Dave1000 winkler
personelement je suis pour que l on evite au maximum les lag, et doncsi on peut encore amelioré les choses, comment par exemple, utiliser linkmessage ?
Voilà ce que je veux dire :

Code PHP:


vector start_pos
;// la variable start_pos est initialisée comme vector a <0,0,0>
float point_haut 11.0;// definition de la variable du point le plut haut (1er etage)
integer iHaut FALSE;


// Canal du Chat
integer iCanal = -1000;

// Valeur relevées
vector vOuverture = <.0,-117.0,.0>;
vector vFermeture = <.0,.0,.0>;

// Numéro de la prim liée qui constitue la porte (à renseigner)
integer iPorte 2;

rotation convert_rotation(vector v)
{
    return 
llEuler2Rot(DEG_TO_RAD) / llGetRootRotation();
}

ouverture_porte()
{
    
llSetLinkPrimitiveParams(iPorte, [PRIM_ROTATIONconvert_rotation(vOuverture)]);
}

fermeture_porte()
{
    
llSetLinkPrimitiveParams(iPorte, [PRIM_ROTATIONconvert_rotation(vFermeture)]);
}

// Fonction pour monter
monte()
{
    
start_pos llGetPos(); // Sauvegarde position du rdc
    
fermeture_porte();
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
    
bouge(start_pos + <.0.0point_haut>);
    
ouverture_porte();
    
llSay(-101,"ouvre la porte");// blablaet donne ordre d ouvrire la porte
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
}

// Fonction pour descendre
descend()
{
    
fermeture_porte();
    
llSay(-101,"ferme la porte");// blabla et donne l ordre a la porte de ce fermer
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
    
bouge(start_pos);
    
ouverture_porte();
    
llSleep(1.0);// dodo scripte 1.0 sec pour bien laisser la porte ce fermer
}

action()
{
    if(
iHautdescend();
    else 
monte();
    
iHaut = !iHaut;
}

bouge(vector pos)
{
    
llSetStatus(STATUS_PHYSICS,TRUE);//le statut du prim de l'ascenseur est passer a phys
    
llSleep(0.2);// dodo scripte 0.2 sec pour bien passé au statut phys
    
llMoveToTarget(pos,2.0);// on monte vers le haut en 2 sec
    
llSleep(6.0);// dodo scripte 6 sec pour laisser monter
    
llMoveToTarget(pos,0.2);// acceleration et stabilisation en haut
    
llStopMoveToTarget();// arret du moteur de monter
    
llSetStatus(STATUS_PHYSICS,FALSE);//changement du statut au fixe "on met les freins"
}

default
{
    
state_entry()
    {
        
llSay(0,"1ER Demarage");// blabla
        
llSetStatus (STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_ZFALSE);// bloke la possibilitée de rotation X,y,z
        //start_pos=llGetPos();// on assigne a la variable vector start_pos, la position actuel du RDC
        //move_haut=start_pos + <.0, .0, point_haut>;// definition du point mort haut ici
        
bouge(start_pos);
        
llListen(iCanal""NULL_KEY"");// Mise en place de l'écoute du Chat
    
}

    
listen(integer channelstring namekey idstring message)
    {
        if(
message == "GO"action();
    }

    
touch_start(integer total_number)// attend que l on touche l'ascenseur
    
{
        
action();
    }

[aide]dernier petit probleme
Et c'est finis, j'ai utiliser ta routine de vecteur pour la porte palière de l'étage,
mais finalement ce sont des coordonnée fixe, même si ça marchais bien pour l'ascenseur, par conte la si on rez sous un autre angle ou endroit, la porte ne ce ferme plus comme elle le devrais, car finalement on met dans les variable des vecteur fixe, au lieu de prendre la position de rez et d additionner ou soustraire les degré nécessaire pour ouvrir ou fermer la barrière ou porte

Code PHP:

// Valeur relevées
vector vOuverture = <270.0,0.0,180.0>;
vector vFermeture = <0.0,0.0,180.0>;
rotation convert_rotation(vector v)
{
    return 
llEuler2Rot(DEG_TO_RAD);
}
default
{
on_rez(integer param)
    {
        
llResetScript();
    }
    
state_entry()
    {
        
llListen(-101""NULL_KEY"");
    }
    
listen(integer astring nkey idstring m)
    {
        if (
== "ouvre la porte")
        {
            
llSetLocalRot(convert_rotation(vOuverture));
        }
        if (
== "ferme la porte")
        {
            
llSetLocalRot(convert_rotation(vFermeture));
        }
    }

Répondre

Connectés sur ce fil

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