Menu Driven Texture Selector

Written by Kitsune

Foun in the Second Life Scripting Library Forum:

integer HANDLE;
integer CHANNEL = -44567;
float INTENSITY = 10.0;
float RADIUS = 6.0;
float FALLOFF = .25;
integer FACE = 5;

list COLOR_LIST = ["white", "red", "green",
                   "blue", "yellow", "orange",
                   "purple", "pink", "cyan", "off", "random"];
list COLOR_VALUE = [<1, 1, 1>, <1, .0, .0>, <0, 1, 0>,
                    <0, 0, 1>, <1, 1, 0>, <1, .05, .0>,
                    <1, 0, 1>, <1, .02, .02>, <0, 1, 1>]; 

pColor(vector color)
{
   llSetPrimitiveParams([PRIM_POINT_LIGHT, TRUE, color, INTENSITY, RADIUS, FALLOFF,
                         PRIM_COLOR, FACE, color, llGetAlpha(FACE),
                         PRIM_GLOW, FACE, 1.0]);
}

default
{
    touch_start(integer total_number)
    {
        HANDLE = llListen(CHANNEL, "", NULL_KEY, "");
        llDialog(llDetectedKey(0), "Color?", COLOR_LIST, CHANNEL);
    }

    listen(integer channel, string name, key id, string message)
    {
       llListenRemove(HANDLE);

       if(message == "off")
       {
           llSetTimerEvent(0.0);
           llSetPrimitiveParams([PRIM_POINT_LIGHT, FALSE, <0, 0, 0>, 0, 0, 0,
                                 PRIM_COLOR, FACE, <.95, .95, .95>, llGetAlpha(FACE),
                                 PRIM_GLOW, FACE, 0.0]);
           llWhisper(0,"Lights out");
       }
       else if(message == "random") llSetTimerEvent(1.0);
       else
       {
           llSetTimerEvent(0.0);
           integer i = llListFindList(COLOR_LIST, [message]);
           vector color = llList2Vector(COLOR_VALUE, i);
           pColor(color);
       }
    }

    timer()
    {
        vector color = llList2Vector(COLOR_VALUE, (integer)(llFrand(llGetListLength(COLOR_VALUE))));
        pColor(color);
    }
}