Bannière

Derniers messages des forums

  • Je suis ravi de decouvrir ce site , C est impeccab... Lire plus...
  • Bjr Je recherche jeune artiste sur sl qui souhaite... Lire plus...
  • Bonjour, commencer déja par apprendre à utiliser g... Lire plus...
  • Bonjour, depuis quelques temps, je pense à devenir... Lire plus...
  • Nathan J'ai reussi en me connectant sur Svarga! Es... Lire plus...

Qui est online

Nous avons 196 invités et 1 membre en ligne


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