[recherche] script texture

Répondre
Partager Rechercher
Bonsoir à tous.
Voilà c'est simple, je build des villas, et je cherche un script tout simple.

Exemple : je pose dans le contenu du sol plusieurs textures, et lorsque l'on click sur le sol, on choisi la texture souhaitée.
Pour faire simple, le script permet de choisir la texture du prim, voir des prims liés.

Merci d'avance..
Bonjour Sony,

Voici un 1er script qui devra être placé dans CHAQUE prims constituant le plancher APRES avoir appliquer la texture sur toutes les faces (répétition, décalage, rotation)
Code PHP:

//[ PRIM_TEXTURE, integer face ]
//[ string texture, vector répétitions, vector décalage, float Rotation en radians ] 



list lParams;
string sPLANCHER "plancher";
integer nbFace;

init()    {
    
lParams = [];
    
integer i;
    
nbFace llGetNumberOfSides();
    for(; 
i<nbFace; ++i)    {
        
lParams += llGetPrimitiveParams([PRIM_TEXTUREi]);
    }
}

AppliqueTexture(key id)        {
    list 
regles;
    
integer i;
    for(; 
inbFacei+=4)    {
        
regles += [PRIM_TEXTUREiid];
        
regles += llList2List(lParamsi+1i+3);
    }
    
llSetPrimitiveParams(regles);
}
default
{
    
state_entry()
    {
        
init();
    }
    
link_message(integer sender_numberinteger numberstring messagekey id)
    {
        if (
message ==    sPLANCHER)    AppliqueTexture(id);
    }

Ensuite, le 2eme script a mettre dans la prim de commande.
Code PHP:

string sNEXT ">>";
string sPREV "<<";
string STOP "STOP";
string sTEXTE "\nChoix de la texture";
float fTIMEOUT 30.0;

///////////////////////////////////////////////////

string sPLANCHER "plancher";
integer iEcoute;
list 
lTextures;
integer iIndexMenu;
integer iNbTexture;
key kOwner;

init()    {
    
kOwner llGetOwner();
    
FaireList();
}
FaireList()    {
    
integer i;
    
iNbTexture llGetInventoryNumber(INVENTORY_TEXTURE);
    
lTextures = [STOP];
    for(; 
i<iNbTexture; ++i)    {
        
string nom llGetInventoryName(INVENTORY_TEXTUREi);
        if (
llStringLength(nom)    < 24)
            
lTextures += [nom];
        else 
llOwnerSay("La texture \"" nom "\"porte un nom trop long et ne sera pas prise en compte");
    }
}
///
navigation(string browse) {
    
// Nombre de boutons
    
integer n llGetListLength(lTextures);
    
// Navigation simple pour deux pages
    
if(23) {
        if(
iIndexMenuiIndexMenu 0;
        else 
iIndexMenu 11;}
    
// Navigation riche pour plus de deux pages
    
else {
        if(
browse == sNEXT) {
            
iIndexMenu += 10;
            if(
iIndexMenu >= niIndexMenu 0;}
        else {
            
iIndexMenu -= 10;
            if(
iIndexMenu 0iIndexMenu 10;}
    }
    
// Envoi du menu
    
Menu();
}

// -- Gestion de l'index des boutons du menu --
// @ param [string] bouton de déplacement
GestIndexBoutons(string browse) {
    
// Nombre de boutons
    
integer n llGetListLength(lTextures);
    
// Navigation simple pour deux pages
    
if(23) {
        if(
iIndexMenuiIndexMenu 0;
        else 
iIndexMenu 11;}
    
// Navigation riche pour plus de deux pages
    
else {
        if(
browse == sNEXT) {
            
iIndexMenu += 10;
            if(
iIndexMenu >= niIndexMenu 0;}
        else {
            
iIndexMenu -= 10;
            if(
iIndexMenu 0iIndexMenu 10;}
    }
    
// Envoi du menu
    
Menu();
}

//    -- Gestion menu --
Menu() {
    
llSetTimerEvent(fTIMEOUT);
    
integer iCanal = (integer)llFrand(-100000);
    
iEcoute llListen(iCanal""kOwner"");
    
// Liste globale des boutons
    
list lBoutons lTextures;
    
// Nombre total de boutons
    
integer n llGetListLength(lTextures);
    
// Si plusieurs pages
    
if(12) {
        
// Que 2 pages -> navigation simple
        
if(23) {
            
// Deuxième page
            
if(iIndexMenu)
                
lBoutons = [sPREV] + llList2List(lTexturesiIndexMenu, -1);
            
// Première page
            
else
                
lBoutons llList2List(lTextures01) + [sNEXT] + llList2List(lTextures210);}
        
// Plus de 2 pages -> navigation riche
        
else {
            list 
= [sPREVllList2String(lTexturesiIndexMenu), sNEXT];
            
// Première page ou page intermédiaire
            
if(iIndexMenu 10)
                
lBoutons llList2List(lTexturesiIndexMenu 1iIndexMenu 9);
            
// Dernière page
            
else {
                if(
iIndexMenu n)
                    
lBoutons llList2List(lTexturesiIndexMenu 1, -1);
                else 
lBoutons l;}
        }
    }
    
// Envoi du menu
    
llDialog(kOwnersTEXTElBoutonsiCanal);
}


cancelMenu()    {
    
llSetTimerEvent(0.0);
    
llListenRemove(iEcoute);
}
finMenu()    {
    
llOwnerSay("trop tard. Menu desactivé");
    
cancelMenu();
}
///
SendTexture(string texture)    {
    
key uuidtexture llGetInventoryKey(texture);
    
llMessageLinked(LINK_SET47sPLANCHERuuidtexture);
}
default
{
    
state_entry()
    {
        
init();
    }
    
touch_start(integer total_number)
    {
        if (
llDetectedKey(0) == kOwner)    Menu();
    }
    
changed(integer c)
    {
        if(
CHANGED_INVENTORYFaireList();
        if(
CHANGED_OWNERkOwner llGetOwner();
    }
    
listen(integer channelstring namekey idstring message)
    {
        if(~
llListFindList([sNEXTsPREV], [message]))    {
            
navigation(message);
        }
        else {
            
cancelMenu();
            
SendTexture(message);
        }
    }
    
timer()
    {
        
finMenu();
    }

Remarque 1 : cette prim de commande peut éventuellement faire partie du plancher. Dans ce cas, la prim contiendra les 2 scripts.
Remarque 2 : cette prim de commande doit contenir les textures
Remarque 3 : cette prim de commande peut ne pas être la root
Remarque 4 : Tout ceci a été rédigé OUT game, dc pas tester. Désolé si y'a un bug.

Bon dimanche
Citation :
Publié par Sony.Whybrow
Pourquoi, les textures ne s'appliquent pas à toutes les fasses ?
Parce que je me suis trompé dans la boucle de ma fonction qui applique la texture choisi
Code PHP:

AppliqueTexture(key id)        {
    list 
regles;
    
integer i;
    for(; 
inbFace*4i+=4)    {
        
regles += [PRIM_TEXTUREi/4id];
        
regles += llList2List(lParamsi+1i+3);
    }
    
llSetPrimitiveParams(regles);

Cette fois ca devrait le faire


XanorK
Super XanorK ca marche très bien.
Je profite encore un peu de ta gentillesse (si tu es d'accord).

Voila ma question : J'expose mes villas (plus facile pour les vendre).
Et le script que tu m'as fait fonctionne très bien, mais seul le owner peu l'utiliser, les visiteurs non pas accès au menu (donc moins vendeur pour moi).
Est-ce qu'il est possible, dans ton script, d'ajouter en option, la possibilité de donner les droits au owner et ou groupe et ou tout le monde ?

Encore merci.....
Bonjour,


je propose :
si l'owner touche, il a un premier llDialog avec 2 boutons : options et texture.
si il clic sur texture, il entre dans le circuit précèdent.
si il clic sur option, il a alors le choix entre Owner, group et all.

Si un non Owner touche, en fonction du choix ci-dessus, il obtient soit un message de restriction, soit le choix des textures.
un non Owner, ne voit pas "Option".

Ca me parait bien.
Si je me trompe pas, ca donne ce nouveau script de commande :
Code PHP:

integer iSecuCode;
// 0 = Owner only
// 1 = Group
// 2 = All

string sTEXTURE "Texture";
string sOPTION "Option";
string sOWNER "Owner only";
string sGROUP "Group";
string sALL "All";

////////////////////////////////////////

string sNEXT ">>";
string sPREV "<<";
string STOP "STOP";
string sTEXTE "\nChoix de la texture";
float fTIMEOUT 30.0;

////////////////////////////////////////

string sPLANCHER "plancher";
integer iEcoute;
list 
lTextures;
integer iIndexMenu;
integer iNbTexture;
key kOwner;
integer iCanal;

init()    {
    
iSecuCode 2;
    
kOwner llGetOwner();
    
FaireList();
}
FaireList()    {
    
integer i;
    
iNbTexture llGetInventoryNumber(INVENTORY_TEXTURE);
    
lTextures = [STOP];
    for(; 
i<iNbTexture; ++i)    {
        
string nom llGetInventoryName(INVENTORY_TEXTUREi);
        if (
llStringLength(nom)    < 24)
            
lTextures += [nom];
        else 
llOwnerSay("La texture \"" nom "\"porte un nom trop long et ne sera pas prise en compte");
    }
}
///
navigation(string browsekey id) {
    
// Nombre de boutons
    
integer n llGetListLength(lTextures);
    
// Navigation simple pour deux pages
    
if(23) {
        if(
iIndexMenuiIndexMenu 0;
        else 
iIndexMenu 11;}
    
// Navigation riche pour plus de deux pages
    
else {
        if(
browse == sNEXT) {
            
iIndexMenu += 10;
            if(
iIndexMenu >= niIndexMenu 0;}
        else {
            
iIndexMenu -= 10;
            if(
iIndexMenu 0iIndexMenu 10;}
    }
    
// Envoi du menu
    
Menu(id);
}

//    -- Gestion menu --
Menu(key id) {
    
startEcoute(id);    // Liste globale des boutons
    
list lBoutons lTextures;
    
// Nombre total de boutons
    
integer n llGetListLength(lTextures);
    
// Si plusieurs pages
    
if(12) {
        
// Que 2 pages -> navigation simple
        
if(23) {
            
// Deuxième page
            
if(iIndexMenu)
                
lBoutons = [sPREV] + llList2List(lTexturesiIndexMenu, -1);
            
// Première page
            
else
                
lBoutons llList2List(lTextures01) + [sNEXT] + llList2List(lTextures210);}
        
// Plus de 2 pages -> navigation riche
        
else {
            list 
= [sPREVllList2String(lTexturesiIndexMenu), sNEXT];
            
// Première page ou page intermédiaire
            
if(iIndexMenu 10)
                
lBoutons llList2List(lTexturesiIndexMenu 1iIndexMenu 9);
            
// Dernière page
            
else {
                if(
iIndexMenu n)
                    
lBoutons llList2List(lTexturesiIndexMenu 1, -1);
                else 
lBoutons l;}
        }
    }
    
// Envoi du menu
    
llDialog(idsTEXTElBoutonsiCanal);
}
MainMenu(key id)    {
    
startEcoute(id);
    
llDialog(id"Votre choix", [sTEXTUREsOPTION], iCanal);
}
startEcoute(key id)    {
    
llSetTimerEvent(fTIMEOUT);
    
iCanal = (integer)llFrand(-100000);
    
iEcoute llListen(iCanal""id"");
}
cancelMenu()    {
    
llSetTimerEvent(0.0);
    
llListenRemove(iEcoute);
}
finMenu()    {
    
llOwnerSay("trop tard. Menu desactivé");
    
cancelMenu();
}
///
SendTexture(string texture)    {
    
key uuidtexture llGetInventoryKey(texture);
    
llMessageLinked(LINK_SET47sPLANCHERuuidtexture);
}
ValidGroup()    {
    list 
llGetObjectDetails(llGetKey(), [OBJECT_GROUP]);
    
key group_maison llList2Key(l,0);
    if(
group_maison != NULL_KEYiSecuCode 1;
    else 
llSay(0"Groupe non defini, réglage annulé");
}
default
{
    
state_entry()
    {
        
init();
    }
    
touch_start(integer total_number)
    {
        
key user llDetectedKey(0);
        if (
user == kOwner)    MainMenu(kOwner);
        else     { 
// pour les autres que le Owner
            
if(!iSecuCode)    {// 0 = Owner only
                
llSay(0"Acces limité a l'Owner");
            }
            else if(
iSecuCode == 1)    {    // 1 = Group
                
if(llSameGroup(user))    { // et group OK
                    
Menu(user);
                }
                else 
llSay(0"Acces limité au group"); // group nok
            
}
            else if(
iSecuCode == 2)    Menu(user); //2 = All
        
}
    }
    
changed(integer c)
    {
        if(
CHANGED_INVENTORYFaireList();
        if(
CHANGED_OWNERkOwner llGetOwner();
    }
    
listen(integer channelstring namekey idstring message)
    {
        
cancelMenu();
        if(~
llListFindList([sNEXTsPREV], [message]))    {
            
navigation(messageid);
        }
        else if(
message == sOPTION)    {
            
llDialog(id"Réglage", [sOWNERsGROUPsALL], iCanal);
        }
        else if(
message == sTEXTURE)    {
            
Menu(kOwner);
        }
        else if (~
llListFindList([sOWNERsGROUPsALL], [message]))    {
            
integer index llListFindList([sOWNERsGROUPsALL], [message]);
            if (
index == 1)        ValidGroup();
            else 
iSecuCode index;
        }
        else {
            
SendTexture(message);
        }
    }
    
timer()
    {
        
finMenu();
    }

NB : j'ai fait le choix de laisser libre accès par défaut. Cf 1ere ligne de init()
pas de problemes ?
Bonjour, je vois que ce sript c'est pour vendre tes maisons, mais n'a tu pas eu des problemes ?
j'ai fait ce script pour changer la texture de drapeaux, autant mon ensemble fonctionne bien, apres un petit temps de rez les texture defilent rapidement, pas de temps d'attente entre la demande .
Par contre si je vend ou si je donne a quelqun mon ensemble, la personne ne voie pas les textures , les drapeaux restent gris, et moi non plus mon ensemble a coté je voie mes texture, mais ces drapeaux restent gris
j'ai m'impression que ca vient de l'uuid des texture, comme si quand je lui donne ca change et ca tranmet plus les bonnes uuid
je cherche hein ?
Voilà un update digne de ce nom....un post de 2010 ce qui fait que le script "date un peu".....ceci dit....es-tu sure que les textures dans ton prim sont toutes en mode copy/modif/transf ? sinon, la fonction qui transmet les uuid envoit NULL_KEY, et l' objet receveur ne sait pas quoi afficher...
Ben non ^^^
cela revient a donner ma/mes textures chèrement uploader a celui qui achète "la maison" dans mon cas mes drapeaux, si comme je l'espère ce sont les drapeaux animés c'est des heures de travail, mon but c'est de pouvoir changer les textures de drapeaux mais sans les donner Oo
Et bien dans ce cas, le script est mal adapté... un peu "lourdingue" pour ce que tu veux faire....mieux vaut passer directos par les uuid des textures dans le script et le mettre no-mod, si tu as des angoisses de vol....là, le script prend la clé des textures dans l' inv. de la prim pour la transmettre....d' où ton prob.
Répondre

Connectés sur ce fil

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