Forums

Help login failed by Plash on Jeudi, 26.Avril 2012 18:22
Second Life connection impossible by Doggy on Jeudi, 26.Avril 2012 17:25
Breedable pets et animals Second Life by aden on Samedi, 31.Mars 2012 19:13
Shapes Mesh by born Resident on Lundi, 20.Février 2012 11:20
Tuto Puppeteer by Josiane on Mercredi, 01.Février 2012 13:34
Transparence de la tenue by hani amaterasu on Vendredi, 27.Janvier 2012 22:50
Ajouter des faces, où des arêtes by brucie on Jeudi, 26.Janvier 2012 16:02

Qui est online

Nous avons 357 invités en ligne

Publicité SL

Second Life avatars 3d>>

Social



Eliminer doublons des textures
Note des utilisateurs: / 0
MauvaisTrès bien 
Librairie Scripts
Écrit par Garmin Kawaguichi   
Voilà un script qui est plutôt un utilitaire ; vous créez juste un cube en bois SL, vous glissez le script dedans, puis vous y mettez un tas de textures pour lesquelles vous soupçonnez qu'il y en a en double même si elles n'ont pas le même nom ; vous cliquez, vous patientez en surveillant le Chat Local et quand le contrôle est terminé, le programme vous dit combien de textures ont été effacées.

 

// d'après une question de Lyamme Jewell dans le groupe C&S
// Je cherche un script qui effacerait toutes les textures en  double dans le contenu de l'objet

// Avec l'aide de Lalwende Leakey qui a remis les choses à l'endroit!!!

list lListUUID;  //liste de toutes les clés des textures
list lTextEffac; //liste des noms de texture à enlever
integer iNumbTextures; //Nombre de textures au démarrage du script
integer iNumbEffac; //Nombre de textures à effacer
integer iMemoLibre; //taille mémoire libre au départ
integer i; integer j; integer k;// itérateurs pour boucles et listes

default
{
    state_entry()
    {
        llSay(0, "/me est prêt ; toucher l'objet pour commencer le contrôle");
    }

    touch_start(integer total_number)
    {
        iNumbTextures = llGetInventoryNumber(INVENTORY_TEXTURE); // on compte les textures
        iNumbEffac = 0; //initialisation du compteur de textures effacées
        llSay(0, "Début des opérations de comparaison, veuillez patienter! Il y a " + (string)iNumbTextures + " texture(s)dans la prim");
        //Remplissage de la liste des textures
        for(i = iNumbTextures - 1; i >= 1; i--) //i fait l'itération dans les textures du contenu de la fin vers le début plus exactement vers la 2ème texture puisque la 1ère texture ne peut être comparée à aucune autre
        {
            for(j = i - 1; j >= 0; j--) //j fait l'itération dans les textures du contenu de la texture qui précède i vers le début
            {
                if(
                llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, j))
                 ==
                llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, i))
                )  //on compare les clés des 2 textures
                {
                    //llOwnerSay((string)i + " (" + llGetInventoryName(INVENTORY_TEXTURE, j) + ") = " + (string)j + " (" + llGetInventoryName(INVENTORY_TEXTURE, j) + ")");
                    llRemoveInventory(llGetInventoryName(INVENTORY_TEXTURE, i)); //on supprime la texture pointée par i dans le contenu
                    iNumbEffac++; //incrémzentation du compteur des effacés
                    j = -1; //Comme i n'est plus consistant on interrompt la boucle de J
                }
            }
        }
       
        //Le balayage du contenu est fait
        if(iNumbEffac) // y at'il eu des supprimés?
        {               //oui
            if(iNumbEffac == 1)llSay(0, "/me a effacé " + (string)iNumbEffac + " texture.");
            else llSay(0, "/me a effacé " + (string)iNumbEffac + " textures.");;
        }
        else    //la liste est vide ! rien à effacer
        {
            llSay(0, "/me n'a trouvé aucune texture à effacer");
        }
    }
}

 

 


C'est sûr que le temps de calcul est prportionnel aux nombres de textures à vérifier, disons que pour 150 textures vous comptez sur 1 ou 2 minutes et pour 8 000 ça fsera à lancer le soir avant d'aller dodoter! 

Garmin Kawaguichi

 

 

Ajouter un Message

Si vous ne voyez pas vos messages c est que vous n êtes pas enregistré sur Avatars-3d en tant que membre. Ils seront examinés par un administrateur avant d être publié! Si vous désirez publier rapidement vos messages enregistrez vous ici

Code de sécurité
Rafraîchir