Scripting Tutorial-08
Appearance
Scripting Lesson #8 - Held August 25th, 2018 at Sandbox Plaza by Fu Barr
<source lang="lsl"> /*
Fu's basic light switch
v0.2 - turn-off-the-lamp timeout - expanded setup
v0.1 - basic on/off toggle
- /
integer DEBUG = TRUE;
integer DIALOG_CHANNEL; integer dialog_listen_id;
float LAMP_TIMEOUT = 5.0; list lamps;
list colours_names = ["red", "blue", "green"]; list colours_rgb = [<1.0, 0, 0>, <0, 0, 1.0>, <0, 1.0, 0>]; float colours_glow = 0.20;
set_lamps(string colour_name) {
vector rgb; float glow;
if(colour_name == "none") {
rgb = <1,1,1>;
glow = 0.0;
} else {
integer id = llListFindList(colours_names, [colour_name]);
if(id > -1) {
rgb = llList2Vector(colours_rgb, id);
glow = colours_glow;
}
}
integer i = 0; integer end = llGetListLength(lamps);
while(i < end) {
llSetLinkPrimitiveParamsFast(llList2Integer(lamps, i),
// the UUID here is the OSgrid specific one for 'Blank Texture'
[ PRIM_FULLBRIGHT, ALL_SIDES, FALSE,
PRIM_TEXTURE, ALL_SIDES, "5748decc-f629-461c-9a36-a35a221fe21f", <1,1,0>, <0,0,0>, 0,
PRIM_COLOR, ALL_SIDES, rgb, 1.0,
PRIM_GLOW, ALL_SIDES, glow ]
);
i++; }
}
default {
state_entry() {
llOwnerSay("running: " + llGetScriptName());
// 0. setup lamps
integer i = 1; // linked prims are numbered from 1
integer end = llGetNumberOfPrims();
while(i <= end) {
if(llGetLinkName(i) == "lamp") {
lamps += i;
}
i++;
}
if(DEBUG){llOwnerSay(llDumpList2String(lamps, ","));}
// 1. generate random DIALOG_CHANNEL
DIALOG_CHANNEL = ((integer) llFrand(10000000)) * -1;
// 2. showtime!
state unlit;
}
}
state unlit {
state_entry() {
set_lamps("none");
}
touch_end(integer num_touches) {
if(llDetectedKey(0) == llGetOwner()) {
llDialog(llGetOwner(), "\npick a colour", colours_names, DIALOG_CHANNEL);
}
dialog_listen_id = llListen(DIALOG_CHANNEL, "", llGetOwner(), "");
}
listen(integer channel, string name, key uuid, string msg) {
set_lamps(msg);
state lit;
}
}
state lit {
state_entry() {
// 1. setup timer event
llSetTimerEvent(LAMP_TIMEOUT);
}
timer() {
set_lamps("none");
state unlit; }
} </source>