Comment mettre une "pose" dans une ball?

Répondre
Partager Rechercher
novice en la matière, j'ai créée des petits coussins sur lesquels l'ont devraient pouvoir s'asseoir en tailleur...
Or donc j'ai trouvée chez Wharehouse une superbe pose gratuite (sans restrictions au niveau copy ou modify) et je voulais l'intégrer à une ball situé juste au dessus de mes coussins afin qu'on ai réellement l'impression d'être assis en tailleur...
J'ai mis naïvement la pose dans une boule... j'ai fait "sit" et je me suis retrouvée bêtement les pieds dans le sol sans que la pose soit prise en compte...
Il s'agit donc d'une formule magique dont je ne connais pas la teneur... si quelqu'un voulait bien me donner la recette... ce serait vraiment choux.

Kissous
-Isabelle-
Euh, tu n'as pas besoin de poseball en fait pour ton coussin.
ça te fera gagner un prim, ce qui n'est jamais inutile.

tu ouvres ton coussin dans l'éditeur, tu crées un script, et tu colles le code suivant:
Code:
// position de l'avatar par rapport a la prim ou est le code, les distances sont codees sur <x,y,z>.
// eviter de mettre <0.0, 0.0, 0.0>
vector pos = <0.0, 0.0, 0.5>;
// orientation de l'avatar par rapport aux axes du prim ou est le script, les angles sont donnes en degres autour des axes <x, y, z>.
vector var = <0.0, 90.0, 0.0>;
// le nom de l'animation dans l'inventaire du script.
string nom = "NomAnimation";

// code du script: ON NE TOUCHE A RIEN.
key mkLoungingAgentKey = NULL_KEY;
key agent = NULL_KEY;
integer miPermissionsAcquired = FALSE;
vector getpos;
rotation rX;
rotation rY;
rotation rZ;
rotation r;

default {
    state_entry() {
        rX = llAxisAngle2Rot( <1,0,0>, var.x * DEG_TO_RAD);
        rY = llAxisAngle2Rot( <0,1,0>, var.y * DEG_TO_RAD);
        rZ = llAxisAngle2Rot( <0,0,1>, var.z * DEG_TO_RAD);
        r = rX * rY * rZ;
        llSitTarget(pos, r);
        llSetSitText( "Pose." ); }

    changed(integer change) {
        if (change & CHANGED_LINK) {
            agent = llAvatarOnSitTarget();
            if ( mkLoungingAgentKey == NULL_KEY && agent != NULL_KEY ) {
                mkLoungingAgentKey = agent;
                llRequestPermissions(mkLoungingAgentKey,PERMISSION_TRIGGER_ANIMATION); }
            else if ( mkLoungingAgentKey != NULL_KEY && agent == NULL_KEY) {
                if ( miPermissionsAcquired ) {
                    llStopAnimation(nom); }
                llResetScript(); } } }

    run_time_permissions(integer parm) {
        if(parm == PERMISSION_TRIGGER_ANIMATION) {
            miPermissionsAcquired = TRUE;
            llStopAnimation("sit");
            llStartAnimation(nom); } }

    on_rez(integer start_param) {
        llResetScript(); } }
En mettant que ton animation ait pour nom dans ton coussin: NomAnimation, et tu modifies donc nom en conséquence dans ce script.

Tu vas devoir modifier les valeur de pos, qui positionne la personne assise, par rapport au centre du prim 0 de l'objet où tu as collé le code, c'est un vecteur qui donne les déplacements sur <x, y, z>.

Tu vas devoir enfin modifier, si tu veux et si besoin, var qui est l'orientation de la personne assise, ce qui peut être utile pour allonger un avatar avec une pose debout, par exemple, c'est un vecteur qui donne les rotation en degrés autour des axes <x, y, z>.

bon bricolage

Edit: un bug qui traînait.
Après essayage
Maître... encore merci pour votre script... je l'ai moi-même essayée. Je résume pour faire simple car cela n'a pas marché:
J'ai donc modifiée dans le script l'intitulé "NomAnimation" dans la 3ème ligne par "AssisTailleur" (qui est le nom que j'ai donnée à la pose par modif... le nom original était en anglais!).
à la ligne 28 "llStopAnimation(nom);" j'ai donc modifiée aussi le mot "nom" par "AssisTailleur"... idem à la ligne 34.
alors ca ne marche pas pour les raisons suivantes:
- à la ligne 3 faut il modifié le nom "NomAnimation" complètement soit uniquement le mot "Nom" ce qui donnerai "AssisTailleurAnimation"?
- ai-je bien fait de modifier le nom de l'animation de l'anglais au français?

je précise que j'ai ajouter après le premier essai infructeux la pose dans le dossier "contents" a côté du script... ca ne marchais toujours pas... avec ou sans.

où se trouve le binz?
Kissous encore... à vous lire...
-Isabelle-
Je me permets de répondre.

A la ligne 3 tu dois mettre le nom de ton animation que tu as mis dans le contenu de ton objet.

Donc si ton animation se nomme AssisTailleur, alors à la ligne 3 tu mets:

string nom = "AssisTailleur";

Et c'est tout, le reste tu ne dois pas le changer normalement.
bah il a répondu
Il me semblait évident que seules les 3 premières lignes étaient à toucher pour définir ce qui te convenait.

PS: je modifie le code pour que ce soit plus clair.
Mais bon sang! mais c'est bien sûr!
Merci Maître de votre célérité et de votre gentillesse à l'égars d'une drôlesse comme moi!
Je vais de ce pas voir si ca fonctionne comme que ca doit!

En espérant que Saint Axairor me soutienne (enfin pas trop quand même).

Kissous
-Isabelle-
Derniers développements
Alors, Merci Seb et encore merci à Maître71... je veux pas embêter... mais ca marche toujours pas...
cependant il est à noter que c'est une "pose" (de chez Freebies Warehouse) et non une "animation" mais est-ce que ca a une importance?
je vous joins 2 images:
- la première montre la pose telle quelle est quand on l'effectue
- la deuxième me montre ce que ca donne quand j'ai fais le script (sans autre modif qu'indiquées, mis à part ma position en hauteur par rapport à l'objet "coussin" -sinon je me retrouvais dans le sol !-)
Il est a noter que lorsque le camembert propose le choix "pose" en lieu et place du choix "sit"...
Encore toutes mes excuzes pour vous faire "tourner en bourrique"... mais j'aimerai tellement faire ça... pour moi et mon p'tit frère.
Kissous très très humble
-Isabelle-
Miniatures attachées
Cliquez sur l'image pour la voir en taille réelle

Nom : Pose1.jpg
Taille : 438x357
Poids : 161,8 Ko
ID : 12417   Cliquez sur l'image pour la voir en taille réelle

Nom : Pose2.jpg
Taille : 527x431
Poids : 182,1 Ko
ID : 12418  
"Merci Maître de votre célérité et de votre gentillesse à l'égars d'une drôlesse comme moi!" "Kissous très très humble" "Kissous encore... à vous lire..."

Pfff mais pourquoi je n'y connais rien moi.
non, animation et pose même combat.

euh, un test, tu peux monter ton coussin en l'air? à 3/4 m du sol avant de t'asseoir dessus?
Histoire de calculer la position et surtout l'orientation qu'il faut.

Parce que là, je pense que les axes de ton coussin ne sont pas du tout les mêmes que ceux du sol, d'où ton écrasement de la face contre le sol

une petite photo de l'onglet objet de ta fenêtre de construction de ton coussin devrait le confirmer (les chiffres X,Y,Z de rotation, en bas de l'onglet)...

au fait... faut pas oublier de mettre l'animation dans le coussin avec le script... juste au cas où tu aurais oublié
Avant tout
Oui Master... but... pourquoi ma pose ne correspond pas à la pose défini par le script... je pose cette question sans doute bêtasse... mais tout de même... c'est qu'une machine tout de même! alors pourquoi ferait-elle quelque chose qu'on lui demande pas!
cependant, cela ne m'empêchera pas de faire mes essais afin de bien répondre à vos questions (c'est la moindre des choses)... tout de même j'ai un tantinet d'éducation! palsembleu!

Kissous
-Isabelle-
y a cette portion de code à modifier:
Code:
            miPermissionsAcquired = TRUE;
            llStopAnimation("sit");
            llStartAnimation(nom);
Je sais pas comment le llStart est devenu llStop, mais bon, y a pire.

llAvatarOnSitTarget() renvoie NULL_KEY chez moi, quand on s'assoit dessus, ce qui rend le script inactif, puisque on ne peut plus demander les permissions d'animation, ce qui expliquerait que tu aies la pose debout.

Est-ce que tu peux mettre ce code:
Code:
        llOwnerSay("plep");
            agent = llAvatarOnSitTarget();
        llOwnerSay((string)agent + " : " + (string)mkLoungingAgentKey);
et me dire ce que tu reçois après que le script t'ai dit 'plep'

PS: en gras, ce que tu ajoutes, le reste c'est ce qu'il y a dans le code et que tu ne touches pas.
Bon, donc si la position et l'orientation choisies pour llSitTarget() font que l'avatar est dans le sol ou assis dans le prim, le comportement est erratique, et la position/orientation aléatoire.

surtout à la position <0, 0, 0> qui fait planter llSitTarget() qui rend inopérant llAvatarOnSitTarge() ouf.

enfin bref, le script fonctionne, faut bien choisir sa position et son orientation.
Répondre

Connectés sur ce fil

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