changer texture par nom des prims- HUD-

Répondre
Partager Rechercher
Bonjour,


Aujourd'hui, j'utilise la fonction llSetLinkPrimitiveParamsFast pour commander (par HUD communiquant à un script enfant dans l'objet) les changements de texture à apporter aux prims/faces de prims, dont j'indique le n° de link:

if(message =="238")//rouge//
{
llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_TEXTURE, 3, "fb02b830-d858-f463-e9fd-c24b9f06946b", <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>, 0.0 ]);


Cependant, comme les prims concernées sont très nombreuses, et qu'elles portent le même nom, j'aimerais créer une seule commande qui dise que pour toutes les primes appelées "nomdeprim", la commande applique la texture "fb02b830-d858-f463-e9fd-c24b9f06946b" sur la face "0"

Pourriez-vous svp m'aider?

D'avance merci
hellow....il faut par exemple faire une liste des prims portant un nom donné et appliquer la texture à chaque élément de cette liste....


Code PHP:

list primsamodif;
list 
prims;

integer i;
integer index;
integer nbprims;
integer links;
integer canal = -123456;
integer ecoute;

string nom_tri "nomdeprim";
string nom;


default
{
    
state_entry()
    {
        
ecoute =llListen(canal,"",NULL_KEY,"");
        
links llGetObjectPrimCount(llGetKey());
        
primsamodif = [];
        
        
ecoute llListen(canal,"",NULL_KEY,"");
        
         do
        {
            
nom llGetLinkName(i);
            if (
nom == nom_tri)
            {
                
primsamodif += [i];
            }
        }
        while(++
<= links);
        
        
nbprims llGetListLength(primsamodif);
    }
    
    
listen(integer chstring namekey idstring msg)
    {
        if(
msg =="238")//rouge//
        
{
             do
            {
                
llSetLinkPrimitiveParamsFast(llList2Integer(primsamodifindex),[PRIM_TEXTURE0"b9ba47b7-802a-f7c3-2226-2e02e24f1597", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
            }
             while(++
index nbprims);
        }
    }
        
    
changed(integer change)
   {
       if (
change CHANGED_LINK)
       {
           
llResetScript();
       }
   }

Thumbs up
merci!!!!
Merci Menthal! Je ne connaissais pas! Ca fonctionne!

mais j'introduis une difficulté: je n'ai pas que des "nomdeprim", mais aussi d'autres prims "nomdautreprims" qui doivent subir le même traitement (en gros le bouton rouge actionne 3 sortes de prims): comment intégrer la 2e liste de "nomdautreprims" dans le script ci-dessous?

Enfin, j'ai des prims single, auxquelles je dois donc appliquer la texture rouge: comment dois-je les intégrer dans ce script? Je suppose que c'est avec la ligne llSetLinkPrimitiveParamsFast classique?

merci d'avance, encore, pour ton aide
Citation :
Publié par MenthalOH
hellow....il faut par exemple faire une liste des prims portant un nom donné et appliquer la texture à chaque élément de cette liste....


Code PHP:

list primsamodif;
list 
prims;

integer i;
integer index;
integer nbprims;
integer links;
integer canal = -123456;
integer ecoute;

string nom_tri "nomdeprim";
string nom;


default
{
    
state_entry()
    {
        
ecoute =llListen(canal,"",NULL_KEY,"");
        
links llGetObjectPrimCount(llGetKey());
        
primsamodif = [];
        
        
ecoute llListen(canal,"",NULL_KEY,"");
        
         do
        {
            
nom llGetLinkName(i);
            if (
nom == nom_tri)
            {
                
primsamodif += [i];
            }
        }
        while(++
<= links);
        
        
nbprims llGetListLength(primsamodif);
    }
    
    
listen(integer chstring namekey idstring msg)
    {
        if(
msg =="238")//rouge//
        
{
             do
            {
                
llSetLinkPrimitiveParamsFast(llList2Integer(primsamodifindex),[PRIM_TEXTURE0"b9ba47b7-802a-f7c3-2226-2e02e24f1597", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
            }
             while(++
index nbprims);
        }
    }
        
    
changed(integer change)
   {
       if (
change CHANGED_LINK)
       {
           
llResetScript();
       }
   }

"single" c 'est le nom des prims ?

pour les prims nommés: "nomdautreprims" qui doivent subir le même traitement, c 'est très simple il suffit de modif

Code:
if (nom == nom_tri) par        if(nom == nom_tri | nom == nom_tri2)
et rajouter
Code:
string nom_tri2 = "nomdautreprims";
en haut du script...


j' ai pas bien saisi, les prims " single".....

Dernière modification par MenthalOH ; 04/03/2023 à 22h19.
petit problème de faces
Menthal,
pour répondre à ta question, "single" est une prim à part, isolée, mais j'ai juste eu rajouter setprimitive pour elle, après ton code, et ça fonctionne

En revanche, j'ai omis de te dire que mes 2 types de prims se texturaient sur 2 faces différentes: :
"nomdeprim"= ALL-SIDES (ou face 0)
"nomdautresprims"= face 3 uniquement
si je laisse le script tel quel (0 en face), seuls mes "nomdeprim" se colorent;
et quand je modifie le "0" en 3, seuls mes "nomdautresprims" se colorent

que me conseilles-tu STP?

encore merci à toi
teste ça....



Code PHP:

list primsamodif;
list 
autreprimsamodif;

integer i;

integer index;
integer index2;

integer nbprims;
integer nbprims2;

integer links;
integer canal = -123456;
integer ecoute;

string nom_tri "nomdeprim";
string nom_tri2 "nomdautreprims";

string nom;

default
{
    
state_entry()
    {
        
links llGetObjectPrimCount(llGetKey());
        
primsamodif = [];
        
autreprimsamodif = [];
        
        
ecoute llListen(canal,"",NULL_KEY,"");
        
        do
        {
           
nom llGetLinkName(i);
            
           if(
nom == nom_tri)
            {
                
primsamodif += [i];
            }
            
            if(
nom == nom_tri2)
            {
                
autreprimsamodif += [i];
            }
        }
        while(++
<= links);
        
        
nbprims llGetListLength(primsamodif);
        
nbprims2 llGetListLength(autreprimsamodif);        
    }
   
    
listen(integer chstring namekey idstring msg)
    {
        if(
msg =="238")//rouge//
        
{
            do
            {
            
llSetLinkPrimitiveParamsFast(llList2Integer(primsamodifindex),[ PRIM_TEXTURE0"b9ba47b7-802a-f7c3-2226-2e02e24f1597", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
            }
             while(++
index nbprims);
         
         
             do
            {
            
llSetLinkPrimitiveParamsFast(llList2Integer(autreprimsamodifindex2),[ PRIM_TEXTURE3"b9ba47b7-802a-f7c3-2226-2e02e24f1597", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
            }
            while(++
index2 nbprims2);
        }
    }
        
    
changed(integer change)
   {
       if (
change CHANGED_LINK|CHANGED_TEXTURE)
       {
           
llResetScript();
       }
   }


Dernière modification par MenthalOH ; 06/03/2023 à 10h38.
ça ne foncitonne pas...
Seule la 2e texture marche;
la première ne s'applique pas aux prims nommées "nomdeprim"; mais elle s'applique en revanche à une prim qu'on ne lui demande pas de changer

mais quand je ré-appuie sur le bouton du hud correspondant à "rouge", les "nomdeprim"; se texturent 1 à 1 (clic par clic)

n'est-ce pas à cause de la fonction appelée, qui est différente de la 2e?

-> llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_LINK_TARGET,index pour les 1ères
->llSetLinkPrimitiveParamsFast(llList2Integer(autreprimsamodif, pour les 2e
?
Citation :
Publié par MenthalOH
teste ça....



Code PHP:

list primsamodif;
list 
autreprimsamodif;

integer i;
integer j;

integer index;
integer index2;

integer nbprims;
integer nbprims2;

integer links;
integer canal = -123456;
integer ecoute;

string nom_tri "nomdeprim";
string nom_tri2 "nomdautreprims";

string nom;
string nom2;

default
{
    
state_entry()
    {
        
links llGetObjectPrimCount(llGetKey());
        
primsamodif = [];
        
autreprimsamodif = [];
        
        
ecoute llListen(canal,"",NULL_KEY,"");
        
         do
        {
            
nom llGetLinkName(i);
           if(
nom == nom_tri)
            {
                
primsamodif += [i];
            }
        }
        while(++
<= links);
        
        
nbprims llGetListLength(primsamodif);
        
        
         do
        {
            
nom2 llGetLinkName(j);
           if(
nom2 == nom_tri2)
            {
                
autreprimsamodif += [j];
            }
        }
        while(++
<= links);
        
        
nbprims2 llGetListLength(autreprimsamodif);        
    }

    
listen(integer chstring namekey idstring msg)
    {
        if(
msg =="238")//rouge//
        
{
             do
            {
                
llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_LINK_TARGET,indexPRIM_TEXTURE0"fb02b830-d858-f463-e9fd-c24b9f06946b", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
            }
             while(++
index nbprims);
             
              do
            {
                
llSetLinkPrimitiveParamsFast(llList2Integer(autreprimsamodifindex2),[ PRIM_TEXTURE3"b9ba47b7-802a-f7c3-2226-2e02e24f1597", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
            }
             while(++
index2 nbprims2);
        }
    }
        
    
changed(integer change)
   {
       if (
change CHANGED_LINK)
       {
           
llResetScript();
       }
   }

ouaip, prob de cop/coll...

Code PHP:

do
        {
            
llSetLinkPrimitiveParamsFast(llList2Integer(primsamodifindex),[ PRIM_TEXTURE0"b9ba47b7-802a-f7c3-2226-2e02e24f1597", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
        }
         while(++
index nbprims);
         
         
          do
        {
            
llSetLinkPrimitiveParamsFast(llList2Integer(autreprimsamodifindex2),[ PRIM_TEXTURE3"b9ba47b7-802a-f7c3-2226-2e02e24f1597", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
        }
         while(++
index2 nbprims2); 
2 prims ne se colorent pas
2 prims de la seconde liste ne se colorent pas OU, elles se colorent (après 2e essai), mais y compris là où il ne faut pas (sur d'autres faces que la 3)

peut-être la longueur de la liste?
Citation :
Publié par MenthalOH
ouaip, prob de cop/coll...

Code PHP:

do
        {
            
llSetLinkPrimitiveParamsFast(llList2Integer(primsamodifindex),[ PRIM_TEXTURE0"b9ba47b7-802a-f7c3-2226-2e02e24f1597", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
        }
         while(++
index nbprims);
         
         
          do
        {
            
llSetLinkPrimitiveParamsFast(llList2Integer(autreprimsamodifindex2),[ PRIM_TEXTURE3"b9ba47b7-802a-f7c3-2226-2e02e24f1597", <1.01.00.0>, <0.00.00.0>, 0.0 ]);
        }
         while(++
index2 nbprims2); 
etrange, ça marche sur mon modèle d' essai.....combien d' éléments dans les listes environs ??.....as-tu pensé à reset le script après des modifs sur l' objet ??

Dernière modification par MenthalOH ; 05/03/2023 à 13h38.
19 prims liste 2

23 prims liste 1

+9 autres prims

oui, j'ai pensé à reset le script (d'ailleurs, l'objet final n'étant pas bon, je le supprime et refait les essais avec un autre objet)

Je pensais aussi à une place de } ou à un reset script manquant entre les 2 fonctions?


Citation :
Publié par MenthalOH
etrange, ça marche sur mon modèle d' essai.....combien d' éléments dans les listes environs ??.....as-tu pensé à reset le script après des modifs sur l' objet ??
la face qui se colorait indument n'était pas due au script donné, mais au mien: corrigé

précision pour le script en cours: quand je clique 1 fois sur le bouton rouge, 2 prims de la liste 2 ne se colorent pas (tjs les mêmes); par contre, quand je reclique, elles se colorent....

Citation :
Publié par Idoine14
19 prims liste 2

23 prims liste 1

+9 autres prims

oui, j'ai pensé à reset le script (d'ailleurs, l'objet final n'étant pas bon, je le supprime et refait les essais avec un autre objet)

Je pensais aussi à une place de } ou à un reset script manquant entre les 2 fonctions?

Dernière modification par Idoine14 ; 05/03/2023 à 16h00. Motif: Auto-fusion
Répondre

Connectés sur ce fil

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