Color script
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Color script
Compare:
Color lists:
<lsl> // 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);
}
} </lsl>