llDialog pour plusieurs Prims à la fois

Répondre
Partager Rechercher
Bonjour a tous,

Voila j'aimerais appliquer une couleur (parmi une liste) sur plusieurs prims en même temps, en utilisant la fonction llDialog.

Mon probleme est que je ne sais pas comment faire pour que plusieurs prims sioent affectés par le meme script ( et on pas un par script....)
Merci d'avance!
Tu devras utiliser la fonction llSetLinkColor. SPour ça, il te faut connaitre le numéro de link de chaque prim dans ton objet.

Si le changement affecte toutes les prims dans ton objet, utilises llSetLinkColor(LINK_SET, color, ALL_SIDES).

Si c'est seulement quelques prims, il te faut connaitre le numéro de link des prims concernés. Pour ça, j'utilise le petit script temporaire suivant:

Code:
default
{
    touch_start(integer total_number)
    {
        llOwnerSay((string)llDetectedLinkNumber(0));
    }
}
Une fois que tu as noté tous les numéros, tu peux effacer le script. Tu mets tous les numéros dans une liste, et ensuite, tu fais une boucle pour parcourir la liste en changeant chaque prim de l'objet un par un.

Attention, si tu délink et relink l'objet, ou si tu rajoutes ou enleves des prims, les numéros de link sont modifiés, et il faut recommencer.
bon pour tout les prims liées,ok pas de probs.
par contre, j'ai pas bien compris pour juste que la couleur s'appilqie a certains prims. Mon porbleme est que en fait, une fois ma liste de prims a colorés est faite, je ne sais pas oû la placer dans le script.

Code PHP:

 list bouton=["rouge","orange","rose","bleu","jaune","blanc","violet","vert","noir","gris"];

default
{
    
state_entry()
    {
          
        
integer channel=1;

        
llListen(channel,"",llGetOwner(),"");
    }

    
touch_start(integer total_number)
    {
        
integer channel=1;

        
llDialog(llGetOwner(),"Choisissez la couleur du Vaisseau",boutonchannel);

    }
    
listen(integer channelstring namekey idstring message)
    {

       
        
        if(
message=="rouge"llSetLinkColor(LINK_SET,<255,0,0>,ALL_SIDES);
        
        if(
message=="vert"llSetLinkColor(LINK_SET,<0,255,0>,ALL_SIDES);
        
        if(
message=="bleu"llSetLinkColor(LINK_SET,<0,0,255>,ALL_SIDES);
        
        if(
message=="orange"llSetLinkColor(LINK_SET,<255,128,0>,ALL_SIDES);
        
        if(
message=="rose"llSetLinkColor(LINK_SET,<255,102,102>,ALL_SIDES);
        
        if(
message=="jaune"llSetLinkColor(LINK_SET,<255,102,102>,ALL_SIDES);
        
        if(
message=="blanc"llSetLinkColor(LINK_SET,<255,255,255>,ALL_SIDES);
        
        if(
message=="violet"llSetLinkColor(LINK_SET,<128,0,128>,ALL_SIDES);
        
        if(
message=="noir"llSetLinkColor(LINK_SET,<0,0,0>,ALL_SIDES);
        
        if(
message=="gris"llSetLinkColor(LINK_SET,<102,102,102>,ALL_SIDES);
        
        
             
        
    
    }

Tu dois faire une boucle. Par exemple, tu déclares une fonction personnelle que tu vas mettre en début de ton script (apres la déclaration des variables et avant le default):

Code:
list prims=[1,3,6,7,10]; // liste des numeros de prims dont la couleur va changer

ChangerCouleur(vector color)  // cette fonction change la couleur des prims de la liste
{
       integer count;
       for(count=0;count<llGetListLength(prims);count++)
       {
            llSetLinkColor(llList2Integer(prims,count),color,ALL_SIDES);
       }    
}
Ensuite, dans ton code, tu pourras appeler cette fonction dans ta liste de if:


Code:
if(message=="bleu") ChangerCouleur(<0,0,1>);
if(message=="rouge") ChangerCouleur(<1,0,0>);
...
PS. Les couleurs dans SL sont codés de 0 à 1 en flottant, et non de 0 à 255 en entier. Le blanc, c'est <1,1,1> et non <255,255,255> et le gris moyen sera <0.5, 0.5, 0.5>, etc...

PS2. Ta variable channel, déclare la une seule fois en global, au début du script, comme boutons et prims.
Bonjour

Tu peux simplifier le tout en mettant deux listes en correspondance, cela évitera la profusion des "if":

Code:
list boutons = ["rouge", "orange", "rose", "bleu", "jaune","blanc", "violet", "vert", "noir", "gris"];
list couleurs = [<1.0,0.0,0.0>, <1.0, 0.4, 0.0>, <1.0, 0.0, 0.8>, <0.0, 0.0, 1.0>, <1.0, 1.0, 0.0>, <1.0, 1.0, 1.0>, <0.8, 0.0, 1.0>, <0.0, 1.0, 0.0>, <0.0, 0.0, 0.0>, <0.4, 0.4, 0.4>];
integer jecouuute;

default {
    touch_start(integer total_number) {
        integer channel = 1;
        llDialog (llGetOwner(), "Choisissez la couleur du Vaisseau", boutons, channel);
        jecouuute = llListen(channel, "", llGetOwner(), "");
    }

    listen(integer channel, string name, key id, string message) {
        integer index = llListFindList (boutons, [message]);
        if ( index == -1)
            return;

        else {
            llSetLinkColor(LINK_SET, llList2Vector (couleurs, index), ALL_SIDES);
            llListenRemove(jecouuute);
        }
    }
}
Bon script !
Bonjour,
Pardonnez mon intrusion mais pour les textures c'est pareil au niveau du link par numéro de prim ?
Parce que je bataille sur mon script texture et je me dis en lisant cela que mon soucis doit venir d'un truc dans le genre. Sinon, merci pour les éclaircissements, cela me retire un peu d'ombre
Citation :
Publié par Amberline
Bonjour,
Pardonnez mon intrusion mais pour les textures c'est pareil au niveau du link par numéro de prim ?
Parce que je bataille sur mon script texture et je me dis en lisant cela que mon soucis doit venir d'un truc dans le genre. Sinon, merci pour les éclaircissements, cela me retire un peu d'ombre
Oui c'est pareil !
Glurgue !!! Ou le crie de bonheur de l'avatar qui a pu "presque" enfin finir son bidouillage.
Merci à vous, c'était le chainon manquant, je devrais pouvoir finir si SL me charge mon inventaire
Répondre

Connectés sur ce fil

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