Teleport

Répondre
Partager Rechercher
Bonjour,

j'ai bien trouvé le script qui se trouve sur le forum de téléport (voir ci-dessous), qui fonctionne très bien mais que dois-je faire pour qu'une personne en particulier soit téléportée en appuyant sur un bouton (je m'explique : je voudrais personnaliser la téléportation : 1 bouton pour 1 locataire qui mène à son étage dont il a seul l'accès).
Merci à vous pour votre aide

vector target = <245.0, 245.0, 30.0>; // Les coordonnées <x, y, z> de la destination/
string Text = "Move to"; // Le text qui s'affiche au dessus du prim

// on ne touche plus a rien.
default {
state_entry(){
rotation rot = ZERO_ROTATION / llGetRot();
vector dep = (target- llGetPos()) * rot;
llSitTarget(dep, rot);
llSetSitText("T-Port");
llSetText(Text + "\n" + (string)target, <1,1,1>, 1); }

on_rez(integer num) {
llResetScript(); }

moving_end() {
llSleep(0.2);
llResetScript(); }

changed(integer change) {
if (change != CHANGED_LINK) llResetScript();
else {
llSleep(0.15);
llUnSit(llAvatarOnSitTarget()); } } }
Bon, ça m'a pris plus de temps, puisqu'on ne peut pas modifier le SitTarget au cours d'un sit.
Donc on le fait en deux fois, on touche pour activer le TP, puis on s'assied pour se TP.
le code, assez documenté j'espère.
Code:
string Text = "Individual move";// Le text qui s'affiche au dessus du prim
list target = [];               // la liste des usagers - teleport, initialisation plus loin dans le script
rotation rot = ZERO_ROTATION;   // pas touche
integer lLen = 0;               // pas touche
vector dep = ZERO_VECTOR;       // pas touche
key kSit = NULL_KEY;            // pas touche

default {
    state_entry(){
        // partie initialisation de la liste des usagers. format:
        // target += ["nom", (key)"key", <166.0, 217.0, 30.0>];
        // nom = nom, ou partie de nom qui correspond a la personne, si on veut que tous les DeCuir aillent dans une piece, on met "DeCuir"
        // key = la key de l'utilisateur, mettre a NULL_KEY si elle n'est pas utilisee, ne pas mettre de nom et uniquement la key pour plus de securite
        // pour entrer une key mettre (key)"valeur de key"
        // vecteur = le point d'arrivee dans la SIM
        // mettre une ligne avec tous les arguments dans le bon ordre par utilisateur
        // une ligne avec la key a NULL_KEY et avec le nom a "" sera le TP par defaut pour tous ceux qui ne sont pas dans la liste
        target += ["DeCuir", NULL_KEY, <166.0, 217.0, 30.0>];
        target += ["", NULL_KEY, <166.0, 217.0, 30.0>];
        // on touche plus
        lLen = (llGetListLength(target) / 3) - 1;
        rot = ZERO_ROTATION / llGetRot();
        dep = <0.0, 0.0, 0.5> * rot;
        llSitTarget(dep, rot);
        llSetSitText("");
        llSetTouchText("activate TP");
        llSetText(Text, <1,1,1>, 1); }
    
    on_rez(integer num) {
        llResetScript(); }

    moving_end() {
        llSleep(0.2);
        llResetScript(); }

    touch(integer numb) {
        kSit = llDetectedKey(0);
        integer res = llListFindList(target, [kSit]);
        string sTmp = llDetectedName(0);
        integer ind = 0;
        if (res > -1)
            dep = (llList2Vector(target, res + 1) - llGetPos()) * rot;
        else {
            res = -1;
            for (ind = 0; ind < lLen; ind++)
                if (llSubStringIndex(sTmp, llList2String(target, 3 * ind)) > -1) res = ind;
            if (res > -1) 
                dep = (llList2Vector(target, res + 2) - llGetPos()) * rot;
            else {
                res = llListFindList(target, ["", NULL_KEY]);
                if (res > -1)
                    dep = (llList2Vector(target, res + 2) - llGetPos()) * rot; } }
        llSetText("movin' " + sTmp + "\n" + (string)dep, <1,1,1>, 1);
        llSetTouchText("TP for " + sTmp);
        llSetSitText("T-Port");
        llSitTarget(dep, rot);
        state TP; } }

state TP {
    state_entry() {
        llSetTimerEvent(30); }

    timer () {
        llResetScript(); }

    changed (integer change) {
        if (change != CHANGED_LINK) llResetScript();
        else if (llAvatarOnSitTarget() == kSit) {
            llUnSit(kSit); }
        else llResetScript(); } }
hum, si tu lis la tonne de commentaires qui est dans state_entry, tu vois qu'il faut que tu fasses:
target += ["nom avatar", (key)"key avatar", <102.0, 102.0, 10.0>];
à la suite des commentaires.
si tu n'as que le nom complet (faire gaffe aux majuscules), tu fais:
target += ["Nom AvaTar", NULL_KEY, <102.0, 102.0, 10.0>];
et pour le télé-port par défaut:
target += ["", NULL_KEY, <102.0, 102.0, 10.0>];
Répondre

Connectés sur ce fil

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