Difference between revisions of "User:Opensource Obscure/Chromutate"

From Second Life Wiki
Jump to navigation Jump to search
m
m (updated script)
Line 26: Line 26:
<lsl>
<lsl>


key mykey = "eb42408b-5888-42b7-80d6-b00ca2eb9781"; // SL UUID
string name1 = "LOL_color_controller";
string name2 = "Someone at http://open.myartsonline.com/http-in just wrote: ";


string gridurl_key="7d183313-a033-4b21-b5d7-1280d0461ee0";
string risposta = "Thanks! Please use the button in your browser to go back.";
key mykey = "eb42408b-5888-42b7-80d6-b00ca2eb9781"; // my SL UUID - change this!
 
string gridurl_key="4ab936c7-36dc-4444-82f9-62e4bf3a5475"; // change this!
string gridurl_indirizzo = "http://gridurl.appspot.com/go/4ab936c7-36dc-4444-82f9-62e4bf3a5475"; // change this!
string baseurl = "http://gridurl.appspot.com/reg?service=";
string baseurl = "http://gridurl.appspot.com/reg?service=";


integer chan1 = -20241;
integer chan1 = -20241; // you may want to change this as well
integer chan2 = -20242;
integer chan2 = -20242; // you may want to change this as well
integer chan3 = -20243;
integer chan3 = -20243; // you may want to change this as well
integer channel_avvertore = -20247; // you may want to change this as well
 
 
string strReplace(string str, string search, string replace)
{
    return llDumpList2String(llParseStringKeepNulls((str = "") + str, [search], []), replace);
}


list lstHTML = [
        "aliceblue",            0xf0f8ff, "antiquewhite",    0xfaebd7, "aqua",            0x00ffff,
        "aquamarine",          0x7fffd4, "azure",          0xf0ffff, "beige",          0xf5f5dc,
        "bisque",              0xffe4c4, "black",          0x000000, "blanchedalmond",  0xffebcd,
        "blue",                0x0000ff, "blueviolet",      0x8a2be2, "brown",          0xa52a2a,
        "burlywood",            0xdeb887, "cadetblue",      0x5f9ea0, "chartreuse",      0x7fff00,
        "chocolate",            0xd2691e, "coral",          0xff7f50, "cornflowerblue",  0x6495ed,
        "cornsilk",            0xfff8dc, "crimson",        0xdc143c, "cyan",            0x00ffff,
        "darkblue",            0x00008b, "darkcyan",        0x008b8b, "darkgoldenrod",  0xb8860b,
        "darkgray",            0xa9a9a9, "darkgreen",      0x006400, "darkkhaki",      0xbdb76b,
        "darkmagenta",          0x8b008b, "darkolivegreen",  0x556b2f, "darkorange",      0xff8c00,
        "darkorchid",          0x9932cc, "darkred",        0x8b0000, "darksalmon",      0xe9967a,
        "darkseagreen",        0x8fbc8f, "darkslateblue",  0x483d8b, "darkslategray",  0x2f4f4f,
        "darkturquoise",        0x00ced1, "darkviolet",      0x9400d3, "deeppink",        0xff1493,
        "deepskyblue",          0x00bfff, "dimgray",        0x696969, "dodgerblue",      0x1e90ff,
        "firebrick",            0xb22222, "floralwhite",    0xfffaf0, "forestgreen",    0x228b22,
        "fuchsia",              0xff00ff, "gainsboro",      0xdcdcdc, "ghostwhite",      0xf8f8ff,
        "gold",                0xffd700, "goldenrod",      0xdaa520, "gray",            0x808080,
        "green",                0x008000, "greenyellow",    0xadff2f, "honeydew",        0xf0fff0,
        "hotpink",              0xff69b4, "indianred",      0xcd5c5c, "indigo",          0x4b0082,
        "ivory",                0xfffff0, "khaki",          0xf0e68c, "lavender",        0xe6e6fa,
        "lavenderblush",        0xfff0f5, "lawngreen",      0x7cfc00, "lemonchiffon",    0xfffacd,
        "lightblue",            0xadd8e6, "lightcoral",      0xf08080, "lightcyan",      0xe0ffff,
        "lightgoldenrodyellow", 0xfafad2, "lightgrey",      0xd3d3d3, "lightgreen",      0x90ee90,
        "lightpink",            0xffb6c1, "lightsalmon",    0xffa07a, "lightseagreen",  0x20b2aa,
        "lightskyblue",        0x87cefa, "lightslategray",  0x778899, "lightsteelblue",  0xb0c4de,
        "lightyellow",          0xffffe0, "lime",            0x00ff00, "limegreen",      0x32cd32,
        "linen",                0xfaf0e6, "magenta",        0xff00ff, "maroon",          0x800000,
        "mediumaquamarine",    0x66cdaa, "mediumblue",      0x0000cd, "mediumorchid",    0xba55d3,
        "mediumpurple",        0x9370d8, "mediumseagreen",  0x3cb371, "mediumslateblue", 0x7b68ee,
        "mediumspringgreen",    0x00fa9a, "mediumturquoise", 0x48d1cc, "mediumvioletred", 0xc71585,
        "midnightblue",        0x191970, "mintcream",      0xf5fffa, "mistyrose",      0xffe4e1,
        "moccasin",            0xffe4b5, "navajowhite",    0xffdead, "navy",            0x000080,
        "oldlace",              0xfdf5e6, "olive",          0x808000, "olivedrab",      0x6b8e23,
        "orange",              0xffa500, "orangered",      0xff4500, "orchid",          0xda70d6,
        "palegoldenrod",        0xeee8aa, "palegreen",      0x98fb98, "paleturquoise",  0xafeeee,
        "palevioletred",        0xd87093, "papayawhip",      0xffefd5, "peachpuff",      0xffdab9,
        "peru",                0xcd853f, "pink",            0xffc0cb, "plum",            0xdda0dd,
        "powderblue",          0xb0e0e6, "purple",          0x800080, "red",            0xff0000,
        "rosybrown",            0xbc8f8f, "royalblue",      0x4169e1, "saddlebrown",    0x8b4513,
        "salmon",              0xfa8072, "sandybrown",      0xf4a460, "seagreen",        0x2e8b57,
        "seashell",            0xfff5ee, "sienna",          0xa0522d, "silver",          0xc0c0c0,
        "skyblue",              0x87ceeb, "slateblue",      0x6a5acd, "slategray",      0x708090,
        "snow",                0xfffafa, "springgreen",    0x00ff7f, "steelblue",      0x4682b4,
        "tan",                  0xd2b48c, "teal",            0x008080, "thistle",        0xd8bfd8,
        "tomato",              0xff6347, "turquoise",      0x40e0d0, "violet",          0xee82ee,
        "wheat",                0xf5deb3, "white",          0xffffff, "whitesmoke",      0xf5f5f5,
        "yellow",              0xffff00, "yellowgreen",    0x9acd32
    ];
vector  sbColorConvert(string strData) {
vector  sbColorConvert(string strData) {
     integer mode = llListFindList(lstHTML, [llToLower(strData)]);
     integer mode = -1; // llListFindList(lstHTML, [llToLower(strData)]);
     integer intColor = 0;
     integer intColor = 0;
   
   
     if (~mode) {
     {
        intColor = llList2Integer(lstHTML, mode | 1);
 
        mode = 8;
    }
    else {
         string strStart = llGetSubString(strData, 0, 1);
         string strStart = llGetSubString(strData, 0, 1);
         if (strStart != "0x") {
         if (strStart != "0x") {
Line 112: Line 71:
     if (mode == 8) {//RRGGBB
     if (mode == 8) {//RRGGBB
         return <(intColor >> 16) & 0xFF, (intColor >> 8) & 0xFF, (intColor & 0xFF)> / 0xFF;
         return <(intColor >> 16) & 0xFF, (intColor >> 8) & 0xFF, (intColor & 0xFF)> / 0xFF;
    }
    else if (mode == 5) {//RGB (an HTML color format)
        return <(intColor >> 8) & 0xF, (intColor >> 4) & 0xF, (intColor & 0xF)> / 0xF;
     }
     }
     return ZERO_VECTOR;//black
     return ZERO_VECTOR;//black
Line 146: Line 102:
send_response(key id, string body)
send_response(key id, string body)
{
{
     llHTTPResponse(id, 200, body);
     llHTTPResponse(id, 200, risposta);
}
}


Line 165: Line 121:
fa(key id, string asd)
fa(key id, string asd)
{
{
    llSay(0, asd);
     string a = llUnescapeURL(asd);
     string a = llUnescapeURL(asd);
     send_response(id, a);     
     send_response(id, a);     
     list variabili = llParseString2List(asd, ["color1=", "&color2=","&color3=", "&rez=", "&a="], [""]);
     list variabili = llParseString2List(asd, ["rez=", "&color1=", "&color2=","&color3=", "&a="], [""]);
     string color1 = llUnescapeURL(llList2String(variabili, 0));
     integer rez_choice = (integer)llList2String(variabili, 0);
     string color2 = llUnescapeURL(llList2String(variabili, 1));  
     string color1 = llUnescapeURL(llList2String(variabili, 1));
     string color3 = llUnescapeURL(llList2String(variabili, 2));      
     string color2 = llUnescapeURL(llList2String(variabili, 2));  
     integer rez = (integer)llUnescapeURL(llList2String(variabili, 3));
     string color3 = llUnescapeURL(llList2String(variabili, 3));  
     string messaggio = llUnescapeURL(llList2String(variabili, 4));
     string messaggio = llUnescapeURL(llList2String(variabili, 4));      
     llSay(chan1, (string)sbColorConvert(color1));
     llRegionSay(chan1, (string)sbColorConvert(color1));
     llSay(chan2, (string)sbColorConvert(color2));     
     llRegionSay(chan2, (string)sbColorConvert(color2));     
     llSay(chan3, (string)sbColorConvert(color3));      
     llRegionSay(chan3, (string)sbColorConvert(color3));        
     llSetPrimitiveParams([
     //    llOwnerSay("> " + llList2String(variabili, 0));
    PRIM_COLOR, ALL_SIDES, (vector)color1, 1.0
     if(rez_choice == 1)
     ]);
     {
     altro(rez);
        altro();
    }
     if(messaggio)
     if(messaggio)
     {
     {
         llSay(0, messaggio);
         messaggio = strReplace(messaggio, "+", " ");
     }
        llSetObjectName(name2);
        llShout(0, messaggio);
        llSetObjectName(name1);
     }                
    llInstantMessage(mykey, messaggio);               
}
}




altro(integer value)
altro()
{
{
    if(value)
         string obj = llGetInventoryName(INVENTORY_OBJECT,0);
    {
         // llOwnerSay("Da web mi fanno rezzare");
         string a = llGetInventoryName(INVENTORY_OBJECT,0);
         llRezObject(obj, pos_orig + <0,0,2>, <0,0,0>, <0,0,0,0>, 1);
         llSay(0, "rezzo " + a);
        llRegionSay(channel_avvertore,"spara");           
         llRezObject(a, pos_orig + <0,0,1>, <0,0,0>, <0,0,0,0>, 1);
    }
}
}


Line 231: Line 189:
         if (method == URL_REQUEST_GRANTED)
         if (method == URL_REQUEST_GRANTED)
         {
         {
             llSay(0, " nuovo url = " + body);                   
             url = body;
            llOwnerSay(" nuovo url = " + url);                   
             update_gridurl(body);             
             update_gridurl(body);             
         }
         }
Line 244: Line 203:
         {
         {
                 string asd = llGetHTTPHeader(id, "x-query-string");  
                 string asd = llGetHTTPHeader(id, "x-query-string");  
                 llSay(0, " query = " + asd);         
                 //llOwnerSay(" query = " + asd);         
                 fa(id,asd);
                 fa(id,asd);
         }
         }
Line 258: Line 217:
     {
     {
             llInstantMessage(mykey, "Il mio indirizzo attualmente e' "  
             llInstantMessage(mykey, "Il mio indirizzo attualmente e' "  
             + url + "  - il link permanente per utilizzarmi e' " + nome);  
             + url + "  - il link permanente per utilizzarmi e' " + gridurl_indirizzo);  
     }     
     }     




// se tutto va bene, l'indirizzo breve ora punta correttamente
   
// al nuovo indirizzo lungo dello script.
    http_response(key request_id, integer status, list metadata, string body)
    {
        integer i;
        if (request_id == requestid)
        {
            llInstantMessage(mykey, "body: " + body); // debug           
        }
        else
        {
            llInstantMessage(mykey, (string)status+" error");
        }
    }       
}
}


Line 289: Line 235:
     state_entry()
     state_entry()
     {
     {
         llListen(-20241, "", "", "");  
         llListen(-20241, "", "", ""); // you may need to change this, if you changed it in the first script
     }
     }
     listen(integer chan, string name, key id, string msg)   
     listen(integer chan, string name, key id, string msg)   

Revision as of 08:26, 30 October 2009

BACK to User:Opensource_Obscure

Overview

Chromutate is an interactive building/installation I'm working on - an excuse to play around with both Reflexive Architecture and the new HTTP-in LSL features. Feel free to visit it (from the web or in-world): change the colors of the building, rez stuff, send messages.... Take a copy of the scripted objects if you're inclined so, and please warn me if something doesn't work!

Rossoverde.jpg

Ideas that could get into Chromutate

Tech

I use Gridurl to maintain persistent URLs for my LSL scripts. See the code below.
Disclaimer: I'm not a real programmer and your comments and suggestions are welcome.

For the HTML, look the web page source. Here are the LSL scripts.
The main script below receives data from the web page, where you can choose colors and something else through a form. The script then parses those data and does some things with them - it rezzes an object (or not) and it relays the parsed data via chat channels to other objects.

first script - it manages HTTP calls and talks to Gridurl

<lsl>

string name1 = "LOL_color_controller"; string name2 = "Someone at http://open.myartsonline.com/http-in just wrote: ";

string risposta = "Thanks! Please use the button in your browser to go back."; key mykey = "eb42408b-5888-42b7-80d6-b00ca2eb9781"; // my SL UUID - change this!

string gridurl_key="4ab936c7-36dc-4444-82f9-62e4bf3a5475"; // change this! string gridurl_indirizzo = "http://gridurl.appspot.com/go/4ab936c7-36dc-4444-82f9-62e4bf3a5475"; // change this! string baseurl = "http://gridurl.appspot.com/reg?service=";

integer chan1 = -20241; // you may want to change this as well integer chan2 = -20242; // you may want to change this as well integer chan3 = -20243; // you may want to change this as well integer channel_avvertore = -20247; // you may want to change this as well


string strReplace(string str, string search, string replace) {

   return llDumpList2String(llParseStringKeepNulls((str = "") + str, [search], []), replace);

}

vector sbColorConvert(string strData) {

   integer mode = -1; // llListFindList(lstHTML, [llToLower(strData)]);
   integer intColor = 0;

   {
       string strStart = llGetSubString(strData, 0, 1);
       if (strStart != "0x") {
           if (llGetSubString(strStart, 0, 0) == "#") {
               strData = "0x" + llDeleteSubString(strData, 0, 0);
           }
           else {
               vector vecColor = (vector)("<"+strData+">");
               if (vecColor) {
                   return (vector)("<"+strData+">") / 255;
               }
               strData = "0x" + strData;
           }
       }
       intColor = (integer)strData;
       mode = llStringLength(strData);
   }
   if (mode == 8) {//RRGGBB
       return <(intColor >> 16) & 0xFF, (intColor >> 8) & 0xFF, (intColor & 0xFF)> / 0xFF;
   }
   return ZERO_VECTOR;//black

}



string url; string query; string nome; string t1 = "il mio indirizzo e' "; key requestid; integer status = FALSE; list requests; vector pos_orig;

//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

// richiedo un nuovo URL per lo script setup() {

   url = "";
   llRequestURL();

}


// risponde via HTTP send_response(key id, string body) {

   llHTTPResponse(id, 200, risposta);

}



// http://gridurl.appspot.com/ update_gridurl(string testo) {

   query = gridurl_key + "&url=" + llEscapeURL(testo) + "/";
   requestid = llHTTPRequest(baseurl + query,[HTTP_METHOD,"GET", HTTP_MIMETYPE,"application/x-www-form-urlencoded"], "");    

}


// fa qualcosa fa(key id, string asd) {

   string a = llUnescapeURL(asd);
   send_response(id, a);    
   list variabili = llParseString2List(asd, ["rez=", "&color1=", "&color2=","&color3=", "&a="], [""]);
   integer rez_choice = (integer)llList2String(variabili, 0);
   string color1 = llUnescapeURL(llList2String(variabili, 1));
   string color2 = llUnescapeURL(llList2String(variabili, 2));    
   string color3 = llUnescapeURL(llList2String(variabili, 3));   
   string messaggio = llUnescapeURL(llList2String(variabili, 4));        
   llRegionSay(chan1, (string)sbColorConvert(color1));
   llRegionSay(chan2, (string)sbColorConvert(color2));    
   llRegionSay(chan3, (string)sbColorConvert(color3));          
   //    llOwnerSay("> " + llList2String(variabili, 0));
   if(rez_choice == 1)
   {
       altro();
   }
   if(messaggio)
   {
       messaggio = strReplace(messaggio, "+", " ");
       llSetObjectName(name2);
       llShout(0, messaggio);
       llSetObjectName(name1);
   }                  
   llInstantMessage(mykey, messaggio);                

}


altro() {

       string obj = llGetInventoryName(INVENTORY_OBJECT,0);
       // llOwnerSay("Da web mi fanno rezzare");
       llRezObject(obj, pos_orig + <0,0,2>, <0,0,0>, <0,0,0,0>, 1);
       llRegionSay(channel_avvertore,"spara");             

}




default {

   state_entry()
   {
       setup();
       pos_orig = llGetPos();
   }
   
   on_rez(integer n) 
   {
       setup(); 
   }
   changed(integer c)
   {
       if (c & (CHANGED_REGION | CHANGED_REGION_START | CHANGED_TELEPORT) )
       {
           setup();
       }
   }


// scatta in risposta a setup() cioe' alla richiesta di un nuovo URL

   http_request(key id, string method, string body)
   {
       // ci e' stato correttamente assegnato un nuovo URL
       if (method == URL_REQUEST_GRANTED)
       {
           url = body;
           llOwnerSay(" nuovo url = " + url);                   
           update_gridurl(body);            
       }
       
       else if (method == URL_REQUEST_DENIED)
       {
           llInstantMessage(mykey, "Something went wrong, no url. " + body);
       }
       // lo script e' stato richiamato (da un browser, cliccando su un link...)
       // fa qualcosa
       else if (method == "GET")
       {
               string asd = llGetHTTPHeader(id, "x-query-string"); 
               //llOwnerSay(" query = " + asd);         
               fa(id,asd);
       }
       else
       {
           llHTTPResponse(id,405,"Unsupported method.");
       }
   }


// comunico gli URL dello script

   touch_start(integer total_number)
   {
           llInstantMessage(mykey, "Il mio indirizzo attualmente e' " 
           + url + "  - il link permanente per utilizzarmi e' " + gridurl_indirizzo); 
   }    


}


</lsl>

second script - it listens to the first script and it changes the prim color

<lsl> default {

   state_entry()
   {
       llListen(-20241, "", "", "");  // you may need to change this, if you changed it in the first script
   }
   listen(integer chan, string name, key id, string msg)  
   {
       llSetLinkColor(-1, (vector)msg, ALL_SIDES);
   }

} </lsl>

third and fourth script - see second script and change chat channel to 20242 and 20243