[Aide] Liaison objet scripter partie 2

Répondre
Partager Rechercher
Hello tout le monde,

J'ai creer un objet avec une 30ene de prims .
(jusque ici tout va bien)

chaque prims a un script :

- CMD vocal (on / off )
- timer ( different dans chaque prims )


------------------------------------------------------------------
le but est de faire disparaitre l'objet prims par prims
------------------------------------------------------------------

exemple :

owner say: "ON"

prims 1 disparait
0.2sec
--------------------
prims 2 disparait
0.4sec
--------------------
prims 3 disparait
0.8sec
--------------------
ETC ...

le probleme est que delier tout marche nikel mais une fois lier .... tout disparait d'un coup.

je pense qu'il doit exister un script qui doit empecher que les script ne se melanges les pinceaux .


Merci d'avance pour vos reponses; suggestions; solutions etc ...
ça devrait marcher encore plus facilement une fois les prims liées !
De plus, une seule écoute suffit, placée dans le prim root, les autres prims recevant la commande par message lié.

Ce script, à placer dans chaque prim n'ouvrira une écoute que dans la prim root et distribuera le message reçu du propriétaire sur le canal 101 de prim en prim avec un délai fixé dans la première variable globale.

Code PHP:

float   fDelay 0.2;
integer iCanal 101;
integer iCmd;

default
{
    
on_rezinteger num )
    {
        
llResetScript();
    }

    
state_entry()
    {
        if( 
llGetLinkNumber() < )
            
llListeniCanal""llGetOwner(), "" );
    }

    
listeninteger iChannelstring sNamekey kIdstring sMess )
    {
        if( ( 
iCmd llListFindList( [ "off""on" ], [ llToLowersMess ) ] ) ) >= )
        {
            
llSetAlpha( (float)iCmdALL_SIDES );
            if( 
llGetLinkNumber() )
            {
                
llSleepfDelay );
                
llMessageLinkedllGetLinkNumber() + 1iCmd"COMMANDE"NULL_KEY );
            }
        }
    }

    
link_messageinteger iSenderinteger iNumstring sMesskey kId )
    {
        if( 
sMess == "COMMANDE" )
        {
            
llSetAlpha( (float)iNumALL_SIDES );
            if( 
llGetLinkNumber() < llGetNumberOfPrims() )
            {
                
llSleepfDelay );
                
llMessageLinkedllGetLinkNumber() + 1iNum"COMMANDE"NULL_KEY );
            }
        }
    }

Citation :
Publié par Tha Doggfather
Merci beaucoup.

Je test et je dit si c'est bon.
Laisse moi répondre pour toi ;-)
Sur le principe que tu énonces dans ton premier post ... ça marche !
Quelques petites choses:

-Je laisse mes script deja present ?
-Je doit modifier des partit de ton script ? ( "COMMANDE" par exemple )


Ou je met mes script dans un seul prims + le tien dans chaque ?

et je peu choisir l'ordre de disparaistion des prims ?

(enfet la disparaition est faites par un effet ghost 100% ou 0%)
Si tes scripts déjà présents ne font que ce qui est discuté ici, oui tu les vires.
Sinon, tu dois les retravailler pour qu'ils ne gèrent plus cette partie.

Tu ne modifies RIEN au script que je t'ai donné, tu le place dans toutes les prims.
Tu peux par contre modifier le canal écouté, en changeant 101 en ligne 2 par le numéro de canal que tu souhaites.
Citation :
Publié par Mingyar Ishtari
Si tes scripts déjà présents ne font que ce qui est discuté ici, oui tu les vires.
Sinon, tu dois les retravailler pour qu'ils ne gèrent plus cette partie.

Tu ne modifies RIEN au script que je t'ai donné, tu le place dans toutes les prims.
Tu peux par contre modifier le canal écouté, en changeant 101 en ligne 2 par le numéro de canal que tu souhaites.

Oui mais avec ton script ...
les prims disparaitront (effet ghost)dans nimporte quel orde ?

En gros mon script fait a peu pres sa. (script realiser avec Scratch 4 Sl)


Code PHP:

 
listen1
(string msg){
    if (
msg == "off") {
      
wait(0.2);
      
setGhost(100);
      
playSoundNamed("sound01");
    }

Et pour la second prims qui doit disparaitre je met :

Code PHP:

 
listen1
(string msg){
    if (
msg == "off") {
      
wait(0.4);
      
setGhost(100);
      
playSoundNamed("sound01");
    }


*wait = 0.2 ; 0.4 ; 0.6 ; 0.8 etc ... pour chaque prims
donc pour une CMD (Say ON) toutes les prims entendent mais s'active avec un delais different ... L'effet Ghost s'active mais avec un decalage (prédefinie pour chaque prims)

-J'ai rajouter ton script dans chaque prims .... masi sa ne change rien, tout disparait d'un coup.
Citation :
Publié par BlackAngel Mhia
Je peut me trompé mais si tout disparait, ce n'est pas a cause de ALL_SIDES? ou du fait que tout soit lié?

Je ne sait pas pour le All_Sides mais pour ce qui est de la liason c'est le but rechercher


-j'ai un doute, mais je pense que sa vien de S4SL.

Enfet ce que je recherche exactement a faire avec sa c'est:

Script:

CMD vocal (on/off)

-Set Ghost effet 100% (off)
-Set Ghost effet 0% (on)

Avec soit un delais different pour chaques prims (donc a definir a chaque foi)
soit
un script de numeroratation de prims
(ex:
Say:"on"
/ghost prims 1/wait0.2sec
/ghost prims 2/wait0.2sec etc ...)
Essaie mon script en supprimant TOUS les autres scripts.
Tu n'auras plus les sons, mais c'est pour tester.
Si tout fonctionne on reparle de la gestion des sons ensuite.

Il est clair que tes scripts plus les miens, ce n'est pas judicieux.

Dans ton post initial tu parles de faire disparaître les prims, j'utilise donc la fonction qui met en transparence ou opacité totale. Si ce n'est pas ce que tu souhaites, faudrait mettre ici la fonction setGhost générée par scratch.
Je trouve dommage de mettre des scripts dans tous les prims alors qu'on peut tout piloter du root. Par exemple comme ça :

Code PHP:

float   fDelay 0.2;
integer iCanal 101;
integer iCmd;

default
{
    
state_entry()
    {
        
llListeniCanal""llGetOwner(), "" );
    }

    
listeninteger iChannelstring sNamekey kIdstring sMess )
    {
        if( ( 
iCmd llListFindList( [ "off""on" ], [ llToLowersMess ) ] ) ) >= )
        {
            
integer iNbr llGetNumberOfPrims();
            
integer i;
            for( 
1<= iNbri++ )
            {
                
llSetLinkAlphaiiCmdALL_SIDES );
                
llSleepfDelay );
            }
        }
    }

Arrow
transparence ou opacité totale / setGhost
C'est quoi la difference ?(je cherche un effet invisible)


-J'ai deja testé avec ton script uniquement (dans chaque prims)
Sauf erreur de ma part cela ne marche pas. (CMD = on et off)

-peut etre que cela viens de mon mode operatoire.
j'ai placer le script dans chaques prims quand l'objet etait deja lier.
(option: modifier partit de l'objet)




edit: je viens de retster en metant le script dans chaque prims et en les liant ensuite .

sa fonctionne sauf que le delais doit etre trop court, j'ai l'impression que les objets disparaissent enssemble.

---j'ai peut etre oublier de preciser (je ne sais pas si c'est important) que d'ans l'objet, toutes les prims ne disparaissent pas ....
c'est a dire que seul une partie doit disparaitre, avec un ordre precis et un delais.
[ex: sur 30 prims seul 15 disparaissent]
Le version de bestmomo est biensûr la bonne !
Je me flagelle d'avoir fait si bête !

La version de bestmomo ne nécessite d'être que dans la prim root, mais surtout pas dans les autres prims.

Pour le délai, suffit de modifier la valeur affectée à la variable fDelay.

Pour ce qui est de l'ordre des prims et de la liste de celles qui doivent être affectées, les prims sont numérotées dans l'ordre inverse de leur sélection avant le lien.
une liste te permettrait de gérer celles à impacter.
Citation :
Publié par bestmomo
Je trouve dommage de mettre des scripts dans tous les prims alors qu'on peut tout piloter du root. Par exemple comme ça :
...
Ce n'est pas dommage, c'est vraiment inutile de mettre un script dans chaque prim.

Les 2 solutions :

- Mettre un listen dans chaque prim (c'est vraiment la pire chose à faire) ;
- Mettre un script dans chaque prim pour du setalpha commandé via llMessageLinked est vraiment pas mieux que la première.


Tu devrais plutôt te diriger vers la solution de best selon moi. Ton problème peut etre résolu avec un seul script dans le root en utilisant du llSetLinkAlpha.
Question
Citation :
Publié par BlackShade Nightfire


Tu devrais plutôt te diriger vers la solution de best selon moi. Ton problème peut etre résolu avec un seul script dans le root en utilisant du llSetLinkAlpha.
Citation :
Publié par Mingyar Ishtari
Pour ce qui est de l'ordre des prims et de la liste de celles qui doivent être affectées, les prims sont numérotées dans l'ordre inverse de leur sélection avant le lien.
une liste te permettrait de gérer celles à impacter.


Comment definir l'ordre d'apparition des prims ? en "ON" et "OFF"

car l'ordre d'apparition est inversé selon la commande.

ex:

ON../..OFF
1 ../..6
2 ../..5
3 ../..4
4 ../..3
5 ../..2
6 ../..1
etc...

-Quel genre de script peu lister/ordonné chaque prims bien definie ?
-Faut il nomé chaques prims ?
J'ai pas trop suivi le débat... mais bon pour te répondre rapidement

il faut ordonner et lier tes prims dans un ordre 1 ---> 30 ou de 30 --> 1 la root sera la dernière sélectionnée où devra se trouver ce script

pour le script

Code PHP:

integer iCanal 101;

default
{
    
state_entry()
    {
        
llListeniCanal""llGetOwner(), "" );
    }

    
listeninteger iChannelstring sNamekey kIdstring sMess )
    {

        if( ~
llListFindList( [ "off""on" ], [ llToLowersMess ) ] )) 
        {
            
float   fDelay 0.2// set delay here
            
            
integer iNbr llGetNumberOfPrims();
            
integer i;
            
            if (
sMess == "on"
            {
                for( 
1<= iNbri++ )
                {
                    
llSetLinkAlphaiTRUEALL_SIDES );
                    
llSleepfDelay );
                }
            }
            else
            {
            for( 
iNbr>= 0i-- )
                {
                    
llSetLinkAlphaiFALSEALL_SIDES );
                    
llSleepfDelay );
                }            
            
            }
  
        }
    }

cela devrait coller...

Seb,
Lightbulb
Super,
par contre je place ou dans le script le nom de la prims (numeros 1,2,3,4 etc...)???

et sur ton script je vois la commande "ON" mais pas "OFF"


ex:

si je nome les prims,

1,2,3,4,5,6,7,8,9 -- pour "ON" elle seront dans le meme ordre pour "OFF", non ?
(a moins de mettre 2 script, un On et un OFF avec chacun leur proprieté...)



On:
-Say "on" (canal 101)
-selectione prims 1
-set ghost 0%
-fDelay= 0.2
-seletione prims 2
-set ghost 0%
-etc ...

Off:
-Say "off" (canal 101)
-selectione prims 15
-set ghost effet 100%
-fDelay = 0.2
-selectionne prims 14
-set ghost effet 100%
-etc ...
les noms ne servent à rien...

quand tu lies les prims elles se voient affectée un numéro:

1 la root

2 à x pour les autres.

la x est la premiere prim selectionnée dans tu prépares ton link
1 la dernière.


pour le reste..
Code PHP:


        
if( ~llListFindList( [ "off""on" ], [ llToLowersMess ) ] )) 
veut dire

je prends les lettres (channel 101) je les passe en minuscules ( ToLower)

et je controle qu'elles soient bien dans la liste [ "off", "on" ]

Code PHP:

if (sMess == "on"
            {
                for( 
1<= iNbri++ ) // on incrémente  
                
{
                    
llSetLinkAlphaiTRUEALL_SIDES ); // root à derniere prim
                    
llSleepfDelay );
                }
            }
            else 
// si pas "on" [dans la liste autorisée (on,off)] alors c'est "off" forcement ;)
            
{
            for( 
iNbr>= 0i-- ) // on decremente
                
{
                    
llSetLinkAlphaiFALSEALL_SIDES ); // derniere prim to root
                    
llSleepfDelay );
                } 
donc on traite le on et le off ( dans le sens inverse)

Seb,
Arrow
Citation :
Publié par Seb_01
donc on traite le on et le off ( dans le sens inverse)

Seb,
Génial mais .... le probleme est de definir CHAQUE prims.

pas seulemt la 1et la 2 et dans un ordre precis.


je crois qu'il vaux mieu que j'illustre en image.

-Donc voila mon but est de faire un Mask dans le style de "Perdu dans l'espace",
C'est un mask retractable... Pour ceux qui n'ont pas vu le Film ... regarder a 1min01 de la video, et vous comprendrez ce que j'essais de realiser.


Faire un masque avec ce type de script est parfait...

Oui il faut définir chaque prim dans l'ordre dans lequel tu veux la séquence

c'est très simple à faire et très rapide

tu sélectionnes la 30eme par exemple (menu edit)

Ensuite tu appuies sur SHIFT et tu gardes appuyé cette touche.

Ensuite il te suffit de cliquer sur chaque prim enfants donc 28 clics( dans l'ordre défini).

Tu gardes appuyé SHIFT et tu sélectionnes la root en dernier donc et ensuite CTRL-L ou menu link

That's all.

Seb,

PS: Quand tes prims sont alignées sur un axe quelconque une selection globale ( dessin d'un retangle de selection autours des prims concernées) suffit à numéroter correctement toutes les prims...
Thumbs up
Merci,

Je suis experiementé en build sauf que les termes c'est pas trop sa ...
genre Root , enfants , mere etc ... mais je vais me debrouiller avec sa.

Je test ton script cet aprem et jte dit si c'est opérationnel .



PS: BlackShade Nightfire; bestmomo et Seb_01, ajouté moi dans vos contact IG,
comme sa je vous donnerais un exemplaire du produit fini pour vous remercier de votre aide.
Répondre

Connectés sur ce fil

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