Simple Texture Changer (input list)(certain prims & all sides).lsl

Part of Bobbyb's texture changer collection 
https://wiki.secondlife.com/wiki/Simple_Texture_Changer_(input_list)(certain_prims_%26_all_sides).lsl
//***********************************************************************************************************
// *
// --Simple Texture Changer (input list)(certain prims & all sides)-- *
// *
//***********************************************************************************************************
// www.lsleditor.org by Alphons van der Heijden (SL: Alphons Jano)
//Creator: Bobbyb30 Swashbuckler
//Attribution: None required, but it is appreciated.
//Created: November 20, 2008
//Last Modified: November 28, 2009
//Released: Saturday, November 28, 2009
//License: Public Domain
//Status: Fully Working/Production Ready
//Version: 1.0.2
//Name: Simple Texture Changer (input list)(certain prims & all sides).lsl
//Purpose: To change the texture of certain prims on all sides based on the textures in the input list.
//Technical Overview: The script finds how many textures there are in the input list, and uses a timer to change the
// texture on a side based on randomness or order. It changes all sides of the certain prim to the
// specified texture
//Description: A simple texture changer script that changes the texture on all the sides of a certain prims in a linked
// 			 set to those in the input list. It allows for a random order, or a logical "next up" order.
//Directions: Create a prim. Place the script in prim inventory. Modify the script parameters to suit your needs and
// save.
//Compatible: Mono & LSL compatible
//Other items required: None.
//Notes: Uses a timer event. Should be low lag. Commented for easier following. This will change all of the sides
// of certain linked prims to the *same* texture based on the input texture list.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Adjustable global variables...you may change these
//texture list...this list should have 2 or more textures
list textures = [
 "00000000-0000-0000-0000-0000f0000000",
 "00000000-0000-0000-0000-0000d0000000",
 "00000000-0000-0000-0000-0000e0000000"];//put your texture UUIDs/keys in here
//Please note there is a .2 second delay between prims.
list prims = [0,1,5,2];//which prims to change
float frequency = 2.0;//how often to change the texture in seconds. Shouldn't be below 2.0
//please note that the last and first texture will be shown less frequently than those in between
integer random = TRUE;//whether to show the textures randomly, or in order
integer duplicatecheck = TRUE;//if random is true, this will check to make sure the random selection is a new texture
/////////////////////////////////////////////////////////////
//global variables...do not change
integer numberoftextures;//number of textures in inventory
integer currenttexture;//inventory number of current texture
integer primslength;//length of the prims list
changetexture()//user fucntion to change texture;
{
 integer counter;
 string texture = llList2String(textures,currenttexture);
 do
 {
 llSetLinkTexture(llList2Integer(primslength,counter),texture,ALL_SIDES);
 }while(++counter <primslength);
}
default
{
 on_rez(integer start_param)//on rez reset...probably not needed.
 {
 llResetScript();
 }
 state_entry()
 {
 llOwnerSay("Simple Texture Changer (input list)(certain prims & all sides).lsl' (Public Domain 2009)");
 llOwnerSay("Because knowledge is power.");
 numberoftextures = llGetListLength(textures);//speed hack here
 primslength = llGetListLength(prims);//speed hack here
 //assume correct
 llOwnerSay("There are " + (string)numberoftextures + " pictures which I will change every "
 + (string)frequency + " seconds on these prims: " + llList2CSV(prims));
 llOwnerSay("My current free memory is : " + (string)llGetFreeMemory()
 + " bytes. If it is below 2500 bytes, I may not work properly.");
 llSetTimerEvent(frequency);
 }
 timer()
 {
 if(random)//show pics randomly
 {
 integer randomtexture;
 if(duplicatecheck)//whether to make sure random doesn't repeat itself
 {
 do
 {
 randomtexture= llRound(llFrand(numberoftextures - 1));
 //llOwnerSay("r" + (string)randomtexture);//debug
 }while(randomtexture == currenttexture);//make sure the random one isn't the same as the current one
 }
 else//no duplicate check
 randomtexture = llRound(llFrand(numberoftextures - 1));//generate random texture number
 currenttexture = randomtexture;//set the current one to the random one selected
 changetexture();//change the texture
 //llOwnerSay("c" + (string)currenttexture);//debug
 }
 else//not random, go in order
 {
 ++currenttexture;
 if(currenttexture == numberoftextures)//if current texture = number of textures, reset counter
 currenttexture = 0;
 changetexture();//change the texture
 //llOwnerSay("c" + (string)currenttexture);//debug
 }
 }
}