Color script
Jump to navigation
Jump to search
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);
}
}