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 proportionnel 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!
Running Sneakers Store | nike air max heritage hybrid cars parts list , Sneaker News / Release Info