[Aide] Problème avec un script de changement de texture

Répondre
Partager Rechercher
Bonjour à tous,

J'ai un script de changement de texture qui fonctionne très bien sur mes objets. Cependant, dès que je veux revendre mes objets qui le comportent, si les textures que je glisse dans le content avec le script ne sont pas en full perms, le nouveau propriétaire ne peut pas les afficher (il se produit alors une erreur de script : "couldn't find texture").
C'est un gros problème pour moi dans la mesure où si je laisse mes textures en full perms, n'importe qui peut les récupérer.
Dans l'idéal, il me faudrait un script équivalent, mais avec lequel je n'aurais pas besoin de glisser mes textures dans le content. Autrement dit, il faudrait que l'on puisse dire au script quelles textures utiliser à partir de leur UUID.
Quelqu'un serait-il en mesure de me changer ce script?
Voici le script que j'utilise :
list MENU1 = [];
list MENU2 = [];
integer listener;
integer MENU_CHANNEL = 4655;
Dialog(key id, list menu)
{
llListenRemove(listener);
listener = llListen(MENU_CHANNEL, "", NULL_KEY, "");
llDialog(id, "Selectionnez une texture : ", menu, MENU_CHANNEL);
}
default
{
on_rez(integer num)
{
llResetScript();
}

touch_start(integer total_number)
{
integer i = 0;
MENU1 = [];
MENU2 = [];
integer c = llGetInventoryNumber(INVENTORY_TEXTURE);
if (c <= 12)
{
for (; i < c; ++i)
MENU1 += llGetInventoryName(INVENTORY_TEXTURE, i);
}
else
{
for (; i < 11; ++i)
MENU1 += llGetInventoryName(INVENTORY_TEXTURE, i);
if(c > 22)
c = 22;
for (; i < c; ++i)
MENU2 += llGetInventoryName(INVENTORY_TEXTURE, i);
MENU1 += ">>";
MENU2 += "<<";
}

Dialog(llDetectedKey(0), MENU1);
}

listen(integer channel, string name, key id, string message)
{
if (channel == MENU_CHANNEL)
{
llListenRemove(listener);
if (message == ">>")
{
Dialog(id, MENU2);
}
else if (message == "<<")
{
Dialog(id, MENU1);
}
else
{
llSetLinkTexture(LINK_SET, message, ALL_SIDES);

}
}
}
}

Merci d'avance à tous ceux qui pourront m'éclairer.
Bon week-end à tous.
Lalibela
Simple : tu ne peux pas faire autrement que de mettre des textures en full perm si tu veux le redonner, le revendre, bref le filer a d'autre personnes, et ça parait logique !
C'est pour éviter que celui qui ai fait la texture et qui la vend ne se fasse pas arnaquer....
Citation :
Publié par Nyctalopian
ça parait logique !
C'est pour éviter que celui qui ai fait la texture et qui la vend ne se fasse pas arnaquer....

heuuu...............incomprehensible et paradoxal ce que tu dis nyc.

Justement, le createur de texture qui vend son objet as justement envie que sa texture sois protégé....c'est bien pour ça que lalibela pose la question.
Je comprend pas que cela ne fonctionne pas: je viens de faire un test entre 2 de mes avatars: j'ai transmis un panneau défilant avec 7 ou 8 textures; les textures sont no copy no modify transfer et le panneau est copy modify no transfer. Tout cela fonctionne impeccable. Le script utilise les mêmes fonctions que le tien il devrait pas y avoir de souci.
J'ai refait le test en mettant le panneau no modify; ça passe aussi très bien.
Citation :
Publié par Elenia Boucher
Je comprend pas que cela ne fonctionne pas: je viens de faire un test entre 2 de mes avatars: j'ai transmis un panneau défilant avec 7 ou 8 textures; les textures sont no copy no modify transfer et le panneau est copy modify no transfer. Tout cela fonctionne impeccable. Le script utilise les mêmes fonctions que le tien il devrait pas y avoir de souci.
J'ai refait le test en mettant le panneau no modify; ça passe aussi très bien.
Attention, vérifie dans ta "friend list" que ton Alt n'ait pas l'autorisation d'éditer tes objets car, si c'est le cas, ça fonctionnera avec lui et pas avec un autre avatar lambda.
Citation :
Publié par Solo Davies
Attention, vérifie dans ta "friend list" que ton Alt n'ait pas l'autorisation d'éditer tes objets car, si c'est le cas, ça fonctionnera avec lui et pas avec un autre avatar lambda.
mdr c'est la 1ére chose que j'ai faite quand même
Citation :
Publié par Elenia Boucher
Je comprend pas que cela ne fonctionne pas: je viens de faire un test entre 2 de mes avatars: j'ai transmis un panneau défilant avec 7 ou 8 textures; les textures sont no copy no modify transfer et le panneau est copy modify no transfer. Tout cela fonctionne impeccable. Le script utilise les mêmes fonctions que le tien il devrait pas y avoir de souci.
J'ai refait le test en mettant le panneau no modify; ça passe aussi très bien.
et ton deuxieme alt ne possedais pas la texture dans son inventaire préalablement...
Je pose la question on ne sais jamais
Citation :
Publié par dareoner
...
Je pose la question on ne sais jamais
Tu as raison de prendre des gants sinon tu auras aussi droit à un !
Boujour,
Tout d'abord, merci à toutes et à tous pour vos réponses.

Lilyta : oui, ça fonctionne si je mets mes textures en copy, seulement, le problème est que je suis obligée de les laisser également en transfert, car les objets que je vends sont en no modif, no copy, trans. Donc, si je mets mes textures en copy, c'est comme si je mettais mes textures en full perms...

Elenia : ta solution me pose également un problème pour la même raison, c'est-à-dire que je vends mes objets en trans...

Je pense toujours qu'un script qui référence les textures par leur UUID et non pas en cherchant dans le content serait la meilleure solution.

Bonne fin de week-end à tous.
Lalibela
@ Lalibela

Tu peux passer par les clés uuid des textures. Tout le monde pourra les afficher, tes clés seront écrites dans le script no-modify donc non accessibles.
Oups, je viens de voir que tu avais déjà l'idée. Bonne chance !
Tableaux
J'ai crée des tableaux avec différentes textures ou photos.
Automatiques ou manuels ..
Si tu veux, contacte moi dans SL : Oliwan Jehangir.
Je te passerai le script ou on l'adaptera en fonction de ce que tu veux.
Ol
Alors c'est un petit script bidouillé maison

Code:
string card;
integer line;
key query;

integer part=0;
integer channel=55000;
integer handle;
integer v;
integer w;

list texturelist = [];
list texturenames = [];
list b;

menu(key id)
{
    if ( v < 13 )
    {
        b = texturenames;
    }
   
    else
    {
        if (part == 0)
        b = llList2List(texturenames, 0, 1) + [">>"] + llList2List(texturenames, 2, 10);
   
        else if (part == w)
        b = llList2List(texturenames, part * 10 + 1, part * 10 + 2) + ["<<"] + llList2List(texturenames, part * 10 + 2, part * 10 + 10);
   
        else if ( 0 < part < w)
        b = llList2List(texturenames, part * 10 + 1, part * 10 + 1) + ["<<"] + [">>"] + llList2List(texturenames, part * 10 + 2, part * 10 + 10);
    }  
    llDialog(id, "Choisissez une texture:", b, 55000);
}

default
{
    state_entry()
    {
        if (llGetInventoryNumber(INVENTORY_NOTECARD) == 0)
        {
            llOwnerSay("N'oubliez pas la notecard ^^");
        }
        else
        {
            card = llGetInventoryName(INVENTORY_NOTECARD, 0);
            query = llGetNotecardLine(card, line = 0);
        }
    }

    changed(integer c)
    {
        if (c & CHANGED_INVENTORY) llResetScript();
    }

    dataserver(key id, string data)
    {
        if (query != id) return;
        if (data == EOF) return;
        integer i = llSubStringIndex(data, "=");
        if (i >= 0) {
            texturenames += [llGetSubString(data, 0, i - 1)];
            texturelist += [llDeleteSubString(data, 0, i)];
        }
        query = llGetNotecardLine(card, ++line);
    }

    touch_start(integer total_number)
    {
            key id = llDetectedKey(0);
            llListenRemove(handle);
            handle = llListen(55000, "", id, "");
            v = llGetListLength(texturenames);
            w = llFloor( (v-3) / 10);
            menu(id);
            llSetTimerEvent(30.0);
    }

    timer()
    {
        llListenRemove(handle);
        llSetTimerEvent(0.0);
    }

    listen(integer channel, string name, key id, string message)
    {
        if (message == ">>")
        {
            part += 1;
            llSetTimerEvent(30.0);
            menu(id);
            return;
        }
       
        if (message == "<<")
        {
            part -= 1;
            llSetTimerEvent(30.0);
            menu(id);
            return;
        }
        
        integer index = llListFindList(texturenames, [message]);
        if (index < 0) return;
        llSetLinkTexture(LINK_SET, llList2Key(texturelist , index), ALL_SIDES);
        llListenRemove(handle);
        llSetTimerEvent(0.0);
    }
}
Cela ne prend pas en charge les décalages ou répétitions par face. Mais c'est une donnée qui peut être éventuellement rajoutée, il faudrait muscler le script un peu plus.
Phli, merci beaucoup pour ton "petit bidouillage maison", c'est vraiment très gentil de ta part. Je viens de trouver une solution et je venais le dire dans le forum quand j'ai vu ton script. Je le testerai malgré tout demain, peut-être que ça sera moins compliqué que le mien.
Bonne soirée à tous.
J'ai oublié de dire qu'il faut que tu ajoutes une note dans l'objet qui contient déjà le script. Et tu écris la liste des textures de cette façon:
Citation :
Testure1=UUID1
Texture2=UUID2...
Bonjour

J'ai testé ce script et il marche vraiment bien. En fait je voulais savoir si il était possible, à la place d'un touch_start, avoir un llListen, afin d'ouvrir le menu avec une commande chat.

Comme CA je tape "/1 color" dans le chat (par exemple) , mon menu s'ouvre et je peux changer la texture.

Ensuite, pour un vêtement, je voudrais changer la texture de tous les attachements qui comportent le script, par le biais de la commande chat.

J'ai essayé d'intégrer la fonction Listen mais CA coince quelque part.

Quelqu'un a la solution?

Merci d'avance
...
Merci Phli , ton script marche super .

Voila, j'ai fait une dialog pour un objet composé de prims lies.

Cette boite de dialogue me permet de changer la texture de certains prims qui composent l'objet (avec un llMessageLinked) et/ou de changer la taille de l'objet.

Mon script créer un tableau a partir du nom des textures presentes (dans le prim root), et appliquera la texture choisi par l'utilisateur grace a ce tableau.
Seulement voila, les textures doivent etre en full perm pour pouvoir etre appliquees par un tiers.

La solution de la notecard de Phli avec le nom de la texture et son uuid est donc genial mais je sais pas comment l'exploiter dans mon script.

voila le script que j'utilise :




integer DEMO=FALSE;



integer MChan;
list BTextures1=[];
list BTextures2=[];
list PTextures1=[];
list PTextures2=[];

key AV;

integer HD1;
integer HD2;
integer HD3;
integer HD4;
integer HD5;




integer rnd_chan() // Get a Random Channel to Chat on
{
float FloatValue;


FloatValue = llFrand(32000*-1);
integer gChannel = llRound(FloatValue);
return gChannel;

}

load_inv_text_main() /// Load Textures into a list ONLY THE MAIN ONES
{
BTextures1=[];
BTextures2=[];
integer n=llGetInventoryNumber(INVENTORY_TEXTURE);
if(n>24)
n=24;
integer n1=0;
string TName;
list temp;
do
{
temp=llParseString2List(llGetInventoryName (INVENTORY_TEXTURE,n1),["-"],[""]);

TName=llStringTrim(llGetSubString(llList2String(temp,1),0,24),STRING_TRIM);// llGetSubString(llGetInventoryName (INVENTORY_TEXTURE,n1),0,12);
if(llStringTrim(llList2String(temp,0),STRING_TRIM)=="Main")
{BTextures1=BTextures1+TName;//Short Name

BTextures2=BTextures2+llGetInventoryName (INVENTORY_TEXTURE,n1);//LongName
}
n1++;
}while (n1<n);

}

load_inv_text_pouch() /// Load Textures into a list ONLY THE POUCH ONES
{
PTextures1=[];
PTextures2=[];
integer n=llGetInventoryNumber(INVENTORY_TEXTURE);
if(n>24)
n=24;
integer n1=0;
string TName;
list temp;
do
{
temp=llParseString2List(llGetInventoryName (INVENTORY_TEXTURE,n1),["-"],[""]);

TName=llStringTrim(llGetSubString(llList2String(temp,1),0,24),STRING_TRIM);// llGetSubString(llGetInventoryName (INVENTORY_TEXTURE,n1),0,12);
if(llStringTrim(llList2String(temp,0),STRING_TRIM)=="Pouch")
{PTextures1=PTextures1+TName;//Short Name

PTextures2=PTextures2+llGetInventoryName (INVENTORY_TEXTURE,n1);//LongName
}
n1++;
}while (n1<n);

}

resize_menu()// COLOR Change MENU (DONT EXCEED 12 COLORS) STRAP
{
llMessageLinked(LINK_THIS,-34676725,"RESIZER",NULL_KEY);
}





//MAIN BODY


default
{
state_entry()
{
if(DEMO==TRUE)
llSetTimerEvent(900);//USED FOR DEMO
MChan=rnd_chan(); //Get A Random Channel for Menu's
HD1=llListen(MChan,"",NULL_KEY,"");
HD2=llListen(MChan+1,"",NULL_KEY,"");
HD3=llListen(MChan+2,"",NULL_KEY,"");
HD4=llListen(MChan+3,"",NULL_KEY,"");
HD5=llListen(MChan+4,"",NULL_KEY,"");
}

touch_start(integer total_number)
{

AV=llDetectedKey(0); // Key of AV

if(AV==llGetOwner()) //Owner Only
{load_inv_text_main();
load_inv_text_pouch();
llDialog(AV," Selection Menu",["Colours","Motif","Resizer"],MChan);
}

}

listen(integer chan,string name,key id,string msg) //Listen For MENU'S
{
if(chan==MChan) ///First Menu
{
if(msg=="Colours")
{ llDialog(AV," Selection Menu",BTextures1,MChan+1);

}

if(msg=="Motif")
{ llDialog(AV," Selection Menu",PTextures1,MChan+3);

}


if(msg=="Resizer")
{
resize_menu();


}

}

if(chan==MChan+1) //Textures
{
string tFound="";
list tList=[];
integer n=llGetListLength(BTextures1);
integer n1=0;
do
{
if(msg==llList2String(BTextures1,n1))
{tFound=llList2String(BTextures2,n1);}
n1++;
} while(n1<n);
llMessageLinked(LINK_SET,1,"",llGetInventoryKey(tFound)); ///SEND OUT MESSAGE TO CHANGE TEXTURES
//llSay(0,tFound);
}
if(chan==MChan+3) //Pouch
{
string tFound="";
list tList=[];
integer n=llGetListLength(PTextures1);
integer n1=0;
do
{
if(msg==llList2String(PTextures1,n1))
{tFound=llList2String(PTextures2,n1);}
n1++;
} while(n1<n);
llMessageLinked(LINK_SET,3,"",llGetInventoryKey(tFound)); //SEND OUT MESSAGE TO CHANGE POUCH

}



}

changed( integer change)
{

}
timer()

{
if(DEMO==TRUE)
llDie();
}
}

Merci d'avance à tous ceux qui pourront m'éclairer.
Citation :
Publié par Magic Cat
Mais la question c'est quoi au juste ?
C'est ça :
Citation :
La solution de la notecard de Phli avec le nom de la texture et son uuid est donc genial mais je sais pas comment l'exploiter dans mon script.
Alors ma question c'est :

Comment je fais pour lire la notecard, stocker le nom des textures et leur uuid dans un tableau dans un premier temps, je pense que ca se passe dans cette partie de code ci :

load_inv_text_main() //// ici il prend le nom de textures commencant par "Main-" dans le prim root
{
BTextures1=[];
BTextures2=[];
integer n=llGetInventoryNumber(INVENTORY_TEXTURE);
if(n>24)
n=24;
integer n1=0;
string TName;
list temp;
do
{
temp=llParseString2List(llGetInventoryName (INVENTORY_TEXTURE,n1),["-"],[""]);

TName=llStringTrim(llGetSubString(llList2String(temp,1),0,24),STRING_TRIM);// llGetSubString(llGetInventoryName (INVENTORY_TEXTURE,n1),0,12);
if(llStringTrim(llList2String(temp,0),STRING_TRIM)=="Main")
{BTextures1=BTextures1+TName;//Short Name

BTextures2=BTextures2+llGetInventoryName (INVENTORY_TEXTURE,n1);//LongName
}
n1++;
}while (n1<n);

}



puis pour afficher le nom des textures ds la dialog (quand on clik sur colours) . je pense que c'est cette partie de code ci :

if(msg=="Colours")
{ llDialog(AV," Selection Menu",BTextures1,MChan+1);

}


puis pour appliquer la texture choisi par l'utilisateur. Je pense que c'est dans cette partie :

if(chan==MChan+1) //Textures
{
string tFound="";
list tList=[];
integer n=llGetListLength(BTextures1);
integer n1=0;
do
{
if(msg==llList2String(BTextures1,n1))
{tFound=llList2String(BTextures2,n1);}
n1++;
} while(n1<n);
llMessageLinked(LINK_SET,1,"",llGetInventoryKey(tFound)); ///SEND OUT MESSAGE TO CHANGE TEXTURES
//llSay(0,tFound);
}

voila je ne suis pas developpeur c'est pourquoi je vous demande de l'aide .
Voila un exemple simple de lecture de notecard
Mais ce que tu voudrais ca serait un truc du genre
moumouttte=1476D-dfD5454565444D-545456
moquette=1476D-dfD5454565444D-545456

et avoir deux liste UUID et nom c'est ca ?

Code PHP:

list lUUID=[];
integer ligne=0;

default
{
    
state_entry()
    {
        
llGetNotecardLine("ma note",ligne++);
    }
    
dataserver(key requestedstring data)
    {
        if(
data!=EOF)
        {
            
lUUID+=data;
            
llGetNotecardLine("ma note",ligne++);
        }
        else
        {
            
llOwnerSay("j'ai tout lu");
        }
    }

PS: quand tu mets du script, penses au balises PHP sinon on ne comprend pas grand chose
Répondre

Connectés sur ce fil

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