Color script
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Color script
Compare:
Color lists:
// Created by: Masakazu Kojima
// Reposted by: ALicia Sautereau
integer CHANNEL = PUBLIC_CHANNEL; // channel to listen for commands on
integer OWNER_ONLY = FALSE; // only owner can control
integer USE_IMS = TRUE; // send IMs instead of using chat
string COMMAND_CHANGE_COLOR = "change"; // command to change color
string COMMAND_LIST_COLORS = "listcolors"; // command to list colors
integer MAX_CHAT_LENGTH = 255; // max size for one message
string PREFIX_HEX = "#"; // prefix to specify hex code
string PREFIX_VECTOR = "<"; // prefix to specify vector code
list LINKS_TO_SET = [LINK_SET, ALL_SIDES]; // [link number, link face, ...]
list COLORS;
set_colors() {
COLORS = [
"navy", "#001f3f",
"blue", "#0074d9",
"aqua", "#7fdbff",
"teal", "#39cccc",
"olive", "#3d9970",
"green", "#2ecc40",
"lime", "#01ff70",
"yellow", "#ffdc00",
"orange", "#ff851b",
"red", "#ff4136",
"maroon", "#85144b",
"fuchsia", "#f012be",
"purple", "#b10dc9",
"white", "#ffffff",
"silver", "#dddddd",
"gray", "#aaaaaa",
"black", "#111111"
];
}
say(key id, string str) {
if (USE_IMS)
llInstantMessage(id, str);
else
llWhisper(PUBLIC_CHANNEL, str);
}
vector color_from_hex(string str) {
return <(integer)("0x" + llGetSubString(str,1,2)),
(integer)("0x" + llGetSubString(str,3,4)),
(integer)("0x" + llGetSubString(str,5,6))> / 255;
}
vector color_from_vector(string vec) {
// caveat: 1,1,1 will be treated as #ffffff, not #010101
list l = llParseString2List(vec, [" ", ",", "<", ">"], []);
vector v;
v.x = (float)llList2String(l, 0);
v.y = (float)llList2String(l, 1);
v.z = (float)llList2String(l, 2);
if (v.x > 1 || v.y > 1 || v.z > 1)
v /= 255;
return v;
}
vector color_from_name(string name) {
// vv strip spaces and force lowercase vv
integer x = llListFindList(COLORS, [ llToLower(llDumpList2String(llParseString2List(name, [" "], []), "")) ]);
if (x == -1)
return <-1, -1, -1>;
return color_from_hex(llList2String(COLORS, x+1));
}
set_color(key id, string str) {
vector color;
integer i;
if (llGetSubString(str, 0, 0) == PREFIX_HEX) // hex code
color = color_from_hex(str);
else if (llGetSubString(str, 0, 0) == PREFIX_VECTOR) // vector
color = color_from_vector(str);
else
color = color_from_name(str);
if (color.x < 0 || color.x > 1 || color.y < 0 || color.y > 1 || color.z < 0 || color.z > 1) {
say(id, "Invalid color specified: " + str);
return;
}
llSetColor(color, ALL_SIDES);
}
list_colors(key id) {
string str = "";
string nstr = "";
integer i;
for (i = 0; i < llGetListLength(COLORS); i += 2) {
nstr = str + llList2String(COLORS, i) + ", ";
if (llStringLength(nstr) > MAX_CHAT_LENGTH) {
say(id, str);
str = llList2String(COLORS, i);
} else {
str = nstr;
}
}
if (str != "") say(id, str);
}
default {
on_rez(integer bla)
{
llResetScript();
}
changed(integer change)
{
if ((OWNER_ONLY) && (change & CHANGED_OWNER))
llResetScript();
}
state_entry()
{
set_colors();
if (OWNER_ONLY)
llListen(CHANNEL, "", llGetOwner(), "");
else
llListen(CHANNEL, "", "", "");
}
listen(integer channel, string name, key id, string msg)
{
string command;
string argument;
list l;
l = llParseStringKeepNulls(msg, [" "], []);
command = llList2String(l, 0);
argument = llDumpList2String(llList2List(l, 1, -1), " ");
if (command == COMMAND_CHANGE_COLOR)
set_color(id, argument);
else if (command == COMMAND_LIST_COLORS)
list_colors(id);
}
}