Un petite recherche dans mes Freebies sur le mot-clé "teleport", et je trouve le script suivant :

reset()
{
    // Coordonnées du prim de destination
    vector targetPos = <113, 121, 22>;

    vector target;
    target = (targetPos- llGetPos()) * (ZERO_ROTATION / llGetRot());

    llSitTarget(target, ZERO_ROTATION);
    llSetSitText("Teleport");
}
default
{
    state_entry()
    {
        reset();
    }
   
    on_rez(integer startup_param)
    {
        reset();
    }
   
    changed(integer change)
    {
        llUnSit(llAvatarOnSitTarget());
        reset();
    }
}

La téléportation sur SL... C'est facile comme dans Star Trek ?

Pour une téléportation réussie, il faut un lieu de départ et un lieu de destination. On va alors fabriquer deux prims : un à placer sur le lieu de départ, et un autre à placer sur le lieu de destination. Il suffit donc de coller le script dans chacun des deux prims, et il ne restera plus qu'à faire un petit paramétrage.

Le principe.

Avec Second Life, il est possible de s'asseoir sur un prim. Mais un prim peut être suffisamment biscornu pour que le moteur de jeu ne puisse pas déduire seul (ou très mal...) comment l'avatar doit être assis dessus. C'est pourquoi il existe l'instruction llSitTarget pour permette de donner au moteur du jeu les informations sur la position et la rotation de l'avatar qui s'assied sur le prim.

L'astuce de la téléportation consiste simplement à donner au prim de départ les coordonnées du prim de destination lorsqu'on s'asseoit dessus, et de le remettre debout illico !

Ici, les coordonnées du prim de destination sont dans la variable targetPos, définie dans la fonction Reset(), qui est donc à modifier.

Il faut écrire les coordonnées du script chaque fois qu'il change de place ?

Oui... C'est embêtant. C'est pourquoi je vous propose cette variante. Il suffira de donner le nom du prim de destination dans la description du prim de départ, et c'est un sensor qui va se charger de détecter les coordonnées de ce dernier.

Le script avec la variante !! Le script avec la variante !!

Alors il suffit de coller ce script dans les deux téléporteurs. Admettons que l'un s'appelle Telepod1 et l'autre Telepod2. Il suffira de mettre "Telepod2" dans le champ Description de Telepod1, et "Telepod1" dans le champ description de Telepod2.

Lorsque vous changerez de place l'un des deux télépod, il faudra bouger l'autre un tout petit peu, puis le remettre à la même place afin qu'il détecte le changement.

DetecteDestination()
{
    llSensor(llGetObjectDesc(), NULL_KEY, PASSIVE | SCRIPTED, 96, TWO_PI);
}

default
{
    state_entry()
    {
        DetecteDestination();
    }

    no_sensor()
    {
        llSetText("Impossible de trouver " + llGetObjectDesc(), <1,0,0>, 1);
    }

    sensor(integer count)
    {
        vector Target = (llDetectedPos(0)- llGetPos());
        llSitTarget(Target, ZERO_ROTATION);
        llSetText("Bouton de droite + Teleport", <1,0,0>, 1);
        llSetSitText("Teleport");
    }
   
    on_rez(integer startup_param)
    {
        DetecteDestination();
    }

    changed(integer change)
    {
        llUnSit(llAvatarOnSitTarget());
        DetecteDestination();
    }
}

Me voici ici dans un téléporteur. La copine a bien apprécié le service rendu, et m'a offert de quoi me relooker de pied en cap ! Visez les boots ! :-)

teleport.png