Assoir et lever
User Rating: / 1
PoorBest 
Librairie Scripts
Written by Garmin K   
Ce script montre la bse de départ nécessaire pour assoir un avatar sur une prim et le lever. Au moment où l'avatar s'assied, on vérifie que l'on a la permission de changer son animation.
Au moment où l'avatar se relève, on supprime l'animation.


// Dans cet exemple le siège est le cube de base de 0.5 de côté
// On va assoir l'avatar dans la position du motard heureux

// Coordonnées de l'assise de l'avatar ; correspondrait à
// l'emplacement précis des fesses de l'avatar ;
// les valeurs sont en mètres et fractions de mètres
// les nombres négatifs sont admis
float fHauteur = 0.50; // à modifier si l'avatar lévite au-dessus du cube ou à le derrière à l'intérieur du cube
float fLateral = 0.0; // à modifier si l'avatar est trop à droite ou à gauche
float fProfondeur = 0.4; // à modifier si l'avatar est trop en avant ou en arrière
// Toujours les coordonnées, mais maintenant l'orientation ;
// les valeurs sont en degrès et fraction de degrès (on pourrait utiliser
// les minutes et secondes, mais c'est plus compliqué) ; une astuce permet de
// convertir les degrès en radian, voir l'instruction qui utilisent ces variables
float fAxeX = 0.0; // Axe passant par la taille d'un avatar debout d'avant en arrière
float fAxeY = 0.0; // Axe passant par la taille d'un avatar debout de droite à gauche
float fAxeZ = 0.0; // Axe passant verticalement à travers le corps d'un avatar debout

key kAgentAssis; //mémosise la clé unique de l'avatar qui s'est assis
vector vDebout = <0.0, 0.5, 1.0>; // pour que l'avatar, une fois debout, ne reste pas sur le cube
default
{
    state_entry()
    {
        // C'est cette instruction qui change le mot Sit dans le camembert qui apparaît lorsque
        // on clique avec le bouton droit sur l'objet
        llSetSitText("Assis!");
        // C'est cette instruction qui indique à l'objet comment assoir l'avatar
        // DEG_TO_RAD permet de convertir les degrès en radian ; le fait que * * DEG_TO_RAD est
        // à l'extérieur du vecteur veut dire qu'il s'applique à chaque valeur du vecteur ; on
        // aurait aussi pu écrire :
        // llSitTarget(<Profondeur, fLateral, fHauteur>, llEuler2Rot(<fAxeZ * DEG_TO_RAD, fAxeY * DEG_TO_RAD, fAxeX * DEG_TO_RAD>));
        llSitTarget(<fProfondeur, fLateral, fHauteur>, llEuler2Rot(<fAxeZ, fAxeY, fAxeX> * DEG_TO_RAD));
    }

// Evènement "changed" : est déclenché lorsque l'avatar s'assoit ou se lève
    changed(integer iChange)
    {
        if (iChange & CHANGED_LINK)
        {
            // Quelqu'un s'est assis ou levé, on relève sa clé unique
            key kAgent = llAvatarOnSitTarget();
            // * Si cette clé existe c'est qu'un avatar s'est assis
            if (kAgent)
            {
                //**Permissions : C'est la base du système de sécurité Linden
                // On ne peut appliquer une animation sans l'accord de l'avatar
                // Si l'avatar est le propriétaire du script, on ne demande pas la permission
                // Il existe d'autres permissions dont l'une concerne l'argent
                llRequestPermissions(kAgent, PERMISSION_TRIGGER_ANIMATION); // demande de la permission
                // On mémorise la clé unique de l'agent pour s'en servir lorsqu'il se lève
                kAgentAssis = kAgent;
            }
            // * Si cette clé n'existe pas c'est que personne n'est assis
            // on en coclut que l'avatar s'est levé
            else
            {
                // On arrête l'animation pour que l'avatar se redresse
                // On ne demande pas la permission, c'est censé avoir été fait en l'asseyant
                llStopAnimation("motorcycle_sit");
                // Voilà une instruction intéressante
                // On arrête l'exécution du script pendant un temps en seconde(s)
                // Cela permet à l'animation de se terminer avant d'appliquer l'instruction suivante
                llSleep(1.0);
                // On pousse (déplace) l'avatar pour qu'il ne reste pas
                // planté sur le cube ; ceci ne fonctionne pas toujours, dans ou le Push
                // peut être interdit sur le terrain où est posé le cube
                llPushObject(kAgentAssis, vDebout, <0,0,0>, TRUE);
                // et on attend que le déplacement ait eu lieu avant de passer à la suite
                llSleep(1.0);
            }
        }

    }
    // ** Permission (suite) : cet évènement est déclenché quand la demande
    // de permission a reçu une réponse
    run_time_permissions(integer iPerm)
    {
        // On assoit l'avatar si la demande est acceptée ;
        // si elle a été refusée, forcer l'animation donne lieu à une erreur
        if (iPerm)
        {
            // Voici comment appliquer une animation ) l'avatar
            // "motorcycle_sit" est une animation connue par Linden
            // Si vous voulez y mettre votre propre animation, changer le nom
            // dans les 2 endroits du script ; ET N'OUBLIEZ PAS DE RECOPIER
            // L'ANIMATION DANS LE CUBE (au même endroit que ce script)
            llStartAnimation("motorcycle_sit");
        }
    }
}
 


Copier ce script dans un cube de taille 0.5 partout et orienté 0.0 dans tous les sens.

 

 

Add comment

Si vous ne voyez pas vos messages c est que vous n êtes pas enregistré sur Avatars-3d en tant que membre. Ils seront examinés par un administrateur avant d être publié! Si vous désirez publier rapidement vos messages enregistrez vous ici

Security code
Refresh