Simple Texture Changer (input list)(more than one side).lsl

From Second Life Wiki
Revision as of 07:59, 28 November 2009 by Bobbyb30 Swashbuckler (talk | contribs) (added script)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

<lsl> //*********************************************************************************************************** // * // --Simple Texture Changer (input list)(more than one side)-- * // * //*********************************************************************************************************** // www.lsleditor.org by Alphons van der Heijden (SL: Alphons Jano) //Creator: Bobbyb30 Swashbuckler //Attribution: None required, but it is appreciated. //Created: November 5, 2009 //Last Modified: November 26, 2009 //Released: Saturday, November 28, 2009 //License: Public Domain

//Status: Fully Working/Production Ready //Version: 1.0.1

//Name: Simple Texture Changer (input list)(more than one side).lsl //Purpose: To change the texture on certain sides of a prim. //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 certain sides of a prim based on 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. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//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. //For all sides or only 1 side, use the <<<<<insert script here>>>>> list sides = [0,1,2,5];//put in which sides you want the texture to be changed on. 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 numberofsidestochange;//the length of the sides list

changetexture()//user function to change texture {

   integer counter;
   string texture = llList2String(textures,currenttexture);//gets texture key
   do
   {
       llSetTexture(texture,llList2Integer(sides,counter));
       //llOwnerSay("side:" + (string)llList2Integer(sides,counter) + " for: " + (string)texture);//debug
   }while(++counter <numberofsidestochange);

}

default {

   on_rez(integer start_param)//on rez reset...probably not needed.
   {
       llResetScript();
   }
   state_entry()
   {
       llOwnerSay("Bobbyb's 'Simple Texture Changer (input list)(more than one side).lsl' (Public Domain 2009)");
       llOwnerSay("Because knowledge should be free.");
       numberoftextures = llGetListLength(textures);//speed hack here
       numberofsidestochange = llGetListLength(sides);//length of the sides list...possible speed hack goes here
       //assume correct
       llOwnerSay("There are " + (string)numberoftextures + " pictures which I will change every "
           + (string)frequency  + " seconds on " + (string)numberofsidestochange + " sides which are"
           + llList2CSV(sides));
       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
       }
   }

} </lsl>