Difference between revisions of "Color script"

From Second Life Wiki
Jump to navigation Jump to search
m (removed useless variable)
m (<lsl> tag to <source>)
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{LSL Header}}
{{LSL Header}}
==Color script==
==Color script==
Created by: Masakazu Kojima
Compare:
Reposted by: ALicia Sautereau
* [[ColorConvert]]
* {{LSLGC|Color}}
Color lists:
* [http://www.w3schools.com/HTML/html_colornames.asp common HTML color names]
* [http://en.wikipedia.org/wiki/Web_colors#Web-safe_colors web safe colors]


<lsl>
<source lang="lsl2">
// This code is public domain.
// Created by:  Masakazu Kojima
// masa was here 20050302
// Reposted by: ALicia Sautereau
 
integer CHANNEL                = 0;           // channel to listen for commands on
integer CHANNEL                = PUBLIC_CHANNEL;       // channel to listen for commands on
integer OWNER_ONLY              = FALSE;         // only owner can control
integer OWNER_ONLY              = FALSE;                 // only owner can control
integer USE_IMS                = TRUE;         // send IMs instead of using chat
integer USE_IMS                = TRUE;                 // send IMs instead of using chat
string  COMMAND_CHANGE_COLOR    = "change";     // command to change color
string  COMMAND_CHANGE_COLOR    = "change";             // command to change color
string  COMMAND_LIST_COLORS    = "listcolors"; // command to list colors
string  COMMAND_LIST_COLORS    = "listcolors";         // command to list colors
integer MAX_CHAT_LENGTH        = 255;         // max size for one message
integer MAX_CHAT_LENGTH        = 255;                   // max size for one message
string  PREFIX_HEX              = "#";         // prefix to specify hex code
string  PREFIX_HEX              = "#";                   // prefix to specify hex code
string  PREFIX_VECTOR          = "<";         // prefix to specify vector code
string  PREFIX_VECTOR          = "<";                   // prefix to specify vector code
list    LINKS_TO_SET            = [LINK_SET, ALL_SIDES]; // [link number, link face, ...]
list    LINKS_TO_SET            = [LINK_SET, ALL_SIDES]; // [link number, link face, ...]
 
list    COLORS;
list    COLORS;
 
// the list is too big to set at once :o
// note that you may get syntax errors and need to rearrange this list
// if you change the script much.
set_colors() {
set_colors() {
     COLORS = [
     COLORS = [
         // http://halflife.ukrpack.net/csfiles/help/colors.shtml
         "navy",   "#001f3f",
        "steelblue", "#4682B4", "royalblue", "#041690", "cornflowerblue", "#6495ED",
         "blue",   "#0074d9",
        "lightsteelblue", "#B0C4DE", "mediumslateblue", "#7B68EE", "slateblue", "#6A5ACD",
         "aqua",   "#7fdbff",
        "darkslateblue", "#483D8B", "midnightblue", "#191970", "navy", "#000080",
         "teal",   "#39cccc",
         "darkblue", "#00008B", "mediumblue", "#0000CD", "blue", "#0000FF",
         "olive",   "#3d9970",
         "dodgerblue", "#1E90FF", "deepskyblue", "#00BFFF", "lightskyblue", "#87CEFA",
         "green",   "#2ecc40",
        "skyblue", "#87CEEB", "lightblue", "#ADD8E6", "powderblue", "#B0E0E6",
         "lime",   "#01ff70",
        "azure", "#F0FFFF", "lightcyan", "#E0FFFF", "paleturquoise", "#AFEEEE",
         "yellow", "#ffdc00",
        "mediumturquoise", "#48D1CC", "lightseagreen", "#20B2AA", "darkcyan", "#008B8B",
         "orange", "#ff851b",
         "teal", "#008080", "cadetblue", "#5F9EA0", "darkturquoise", "#00CED1",
         "red",    "#ff4136",
         "aqua", "#00FFFF", "cyan", "#00FFFF", "turquoise", "#40E0D0",
         "maroon", "#85144b",
        "aquamarine", "#7FFFD4", "mediumaquamarine", "#66CDAA", "darkseagreen", "#8FBC8F"
         "fuchsia", "#f012be",
    ] + [
         "purple", "#b10dc9",
        "mediumseagreen", "#3CB371", "seagreen", "#2E8B57", "darkgreen", "#006400",
         "white",   "#ffffff",
         "green", "#008000", "forestgreen", "#228B22", "limegreen", "#32CD32",
         "silver", "#dddddd",
         "lime", "#00FF00", "chartreuse", "#7FFF00", "lawngreen", "#7CFC00",
         "gray",    "#aaaaaa",
        "greenyellow", "#ADFF2F", "yellowgreen", "#9ACD32", "palegreen", "#98FB98",
         "black",   "#111111"
        "lightgreen", "#90EE90", "springgreen", "#00FF7F", "mediumspringgreen", "#00FA9A",
        "darkolivegreen", "#556B2F", "olivedrab", "#6B8E23", "olive", "#808000",
        "darkkhaki", "#BDB76B", "darkgoldenrod", "#B8860B", "goldenrod", "#DAA520",
         "gold", "#FFD700", "yellow", "#FFFF00", "khaki", "#F0E68C", "palegoldenrod", "#EEE8AA",
         "blanchedalmond", "#FFEBCD", "moccasin", "#FFE4B5", "wheat", "#F5DEB3",
         "navajowhite", "#FFDEAD", "burlywood", "#DEB887", "tan", "#D2B48C"
     ] + [
        "rosybrown", "#BC8F8F", "sienna", "#A0522D", "saddlebrown", "#8B4513",
         "chocolate", "#D2691E", "peru", "#CD853F", "sandybrown", "#F4A460",
        "darkred", "#8B0000", "maroon", "#800000", "brown", "#A52A2A",
         "firebrick", "#B22222", "indianred", "#CD5C5C", "lightcoral", "#F08080",
        "salmon", "#FA8072", "darksalmon", "#E9967A",    "lightsalmon", "#FFA07A",
        "coral", "#FF7F50",    "tomato", "#FF6347",    "darkorange", "#FF8C00",
        "orange", "#FFA500",    "orangered", "#FF4500",    "crimson", "#DC143C",
        "red", "#FF0000",    "deeppink", "#FF1493",    "fuchsia", "#FF00FF",
        "magenta", "#FF00FF",    "hotpink", "#FF69B4",    "lightpink", "#FFB6C1",
        "pink", "#FFC0CB",    "palevioletred", "#DB7093",    "mediumvioletred", "#C71585"
    ] + [
         "purple", "#800080",    "darkmagenta", "#8B008B",    "mediumpurple", "#9370DB",
        "blueviolet", "#8A2BE2",    "indigo", "#4B0082",    "darkviolet", "#9400D3",
        "darkorchid", "#9932CC",    "mediumorchid", "#BA55D3",    "orchid", "#DA70D6",
        "violet", "#EE82EE",    "plum", "#DDA0DD",    "thistle", "#D8BFD8",
         "lavender", "#E6E6FA",    "ghostwhite", "#F8F8FF",    "aliceblue", "#F0F8FF",
        "mintcream", "#F5FFFA",    "honeydew", "#F0FFF0",    "lightgoldenrodyellow", "#FAFAD2",
        "lemonchiffon", "#FFFACD",    "cornsilk", "#FFF8DC",    "lightyellow", "#FFFFE0",
        "ivory", "#FFFFF0",    "floralwhite", "#FFFAF0",    "linen", "#FAF0E6",
        "oldlace", "#FDF5E6",    "antiquewhite", "#FAEBD7",    "bisque", "#FFE4C4 ",
        "peachpuff", "#FFDAB9",    "papayawhip", "#FFEFD5",    "beige", "#F5F5DC"
    ] + [
        "seashell", "#FFF5EE",    "lavenderblush", "#FFF0F5",    "mistyrose", "#FFE4E1",
        "snow", "#FFFAFA",    "white", "#FFFFFF",    "whitesmoke", "#F5F5F5",
         "gainsboro", "#DCDCDC",    "lightgrey", "#D3D3D3",    "silver", "#C0C0C0",
         "darkgray", "#A9A9A9",    "gray", "#808080",    "lightslategray", "#778899",
        "slategray", "#708090",    "dimgray", "#696969",    "darkslategray", "#2F4F4F",
         "black", "#000000"
    ] + [       
        // :o
        "carnationpink", "#FA7FC1"
     ];
     ];
}
}
 
say(key id, string str) {
say(key id, string str) {
     if ( USE_IMS ) llInstantMessage( id, str );
     if (USE_IMS)
     else llWhisper(0, str);
        llInstantMessage(id, str);
     else
        llWhisper(PUBLIC_CHANNEL, str);
}
}
 
vector color_from_hex(string str) {
vector color_from_hex(string str) {
     return <(integer)("0x" + llGetSubString(str,1,2)),
     return <(integer)("0x" + llGetSubString(str,1,2)),
Line 93: Line 58:
             (integer)("0x" + llGetSubString(str,5,6))> / 255;
             (integer)("0x" + llGetSubString(str,5,6))> / 255;
}
}
 
vector color_from_vector(string vec) {
vector color_from_vector(string vec) {
     // caveat: 1,1,1 will be treated as #ffffff, not #010101
     // caveat: 1,1,1 will be treated as #ffffff, not #010101
     list  l = llParseString2List(vec, [" ", ",", "<", ">"], []);
     list  l = llParseString2List(vec, [" ", ",", "<", ">"], []);
     vector v;
     vector v;
 
     v.x = (float)llList2String(l, 0);
     v.x = (float)llList2String(l, 0);
     v.y = (float)llList2String(l, 1);
     v.y = (float)llList2String(l, 1);
     v.z = (float)llList2String(l, 2);
     v.z = (float)llList2String(l, 2);
 
     if ( v.x > 1 || v.y > 1 || v.z > 1 ) v /= 255;
     if (v.x > 1 || v.y > 1 || v.z > 1)
        v /= 255;
 
     return v;
     return v;
}
}
 
vector color_from_name(string name) {
vector color_from_name(string name) {
     //                                  vv strip spaces and force lowercase                                vv
     //                                  vv strip spaces and force lowercase                                vv
     integer x = llListFindList(COLORS, [ llToLower(llDumpList2String(llParseString2List(name, [" "], []), "")) ]);
     integer x = llListFindList(COLORS, [ llToLower(llDumpList2String(llParseString2List(name, [" "], []), "")) ]);
     if ( x == -1 ) return <-1,-1,-1>;
 
     return color_from_hex( llList2String(COLORS, x+1) );
     if (x == -1)
        return <-1, -1, -1>;
 
     return color_from_hex(llList2String(COLORS, x+1));
}
}
 
set_color(key id, string str) {
set_color(key id, string str) {
     vector color;
     vector color;
     integer i;
     integer i;
     if ( llGetSubString(str, 0, 0) == PREFIX_HEX ) // hex code
     if (llGetSubString(str, 0, 0) == PREFIX_HEX) // hex code
         color = color_from_hex( str );
         color = color_from_hex(str);
     else if ( llGetSubString(str, 0, 0) == PREFIX_VECTOR ) // vector
     else if (llGetSubString(str, 0, 0) == PREFIX_VECTOR) // vector
         color = color_from_vector( str );
         color = color_from_vector(str);
     else
     else
         color = color_from_name( str );
         color = color_from_name(str);
 
     if ( color.x < 0 || color.x > 1 || color.y < 0 || color.y > 1 || color.z < 0 || color.z > 1 ) {
     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 );
         say(id, "Invalid color specified: " + str);
         return;
         return;
     }
     }
 
     llSetColor(color,ALL_SIDES);
     llSetColor(color, ALL_SIDES);
}
}
 
list_colors(key id) {
list_colors(key id) {
     string str  = "";
     string str  = "";
     string nstr = "";
     string nstr = "";
     integer i;
     integer i;
 
     for ( i = 0; i < llGetListLength( COLORS ); i += 2 ) {
     for (i = 0; i < llGetListLength(COLORS); i += 2) {
         nstr = str + llList2String(COLORS, i) + ", ";
         nstr = str + llList2String(COLORS, i) + ", ";
 
         if ( llStringLength(nstr) > MAX_CHAT_LENGTH ) {
         if (llStringLength(nstr) > MAX_CHAT_LENGTH) {
             say(id, str);
             say(id, str);
             str = llList2String(COLORS, i);
             str = llList2String(COLORS, i);
Line 148: Line 117:
         }
         }
     }
     }
     if ( str != "" ) say(id, str);
     if (str != "") say(id, str);
}
}
 
default {
default {
 
     on_rez(integer bla)
     on_rez(integer bla)
     {
     {
         llResetScript();
         llResetScript();
     }
     }
 
     state_entry()  
    changed(integer change)
    {
        if ((OWNER_ONLY) && (change & CHANGED_OWNER))
            llResetScript();
    }
 
     state_entry()
     {
     {
         set_colors();
         set_colors();
         llListen( CHANNEL, "", NULL_KEY, "" );
 
         if (OWNER_ONLY)
            llListen(CHANNEL, "", llGetOwner(), "");
        else
            llListen(CHANNEL, "", "", "");
     }
     }
 
     listen(integer channel, string name, key id, string msg) {
     listen(integer channel, string name, key id, string msg)
    {
         string command;
         string command;
         string argument;
         string argument;
         list l;
         list l;
 
        if (OWNER_ONLY && id != llGetOwner()) return;
         l = llParseStringKeepNulls(msg, [" "], []);
         l = llParseStringKeepNulls( msg, [" "], [] );
         command = llList2String(l, 0);
         command = llList2String(l, 0);
         argument = llDumpList2String( llList2List(l, 1, -1), " " );
         argument = llDumpList2String(llList2List(l, 1, -1), " ");
 
         if ( command == COMMAND_CHANGE_COLOR )
         if (command == COMMAND_CHANGE_COLOR)
             set_color(id, argument);
             set_color(id, argument);
         else if ( command == COMMAND_LIST_COLORS )
         else if (command == COMMAND_LIST_COLORS)
             list_colors(id);
             list_colors(id);
 
     }
     }
}
}
</lsl>
</source>

Latest revision as of 19:39, 24 January 2015

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);

    }
}