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.
|