Difference between revisions of "User:Ama Omega/archive/lsl hacks"

From Second Life Wiki
Jump to navigation Jump to search
Line 26: Line 26:
=== llSetPrimMediaParams for data: urls ===
=== llSetPrimMediaParams for data: urls ===
* Thus you can build arbitrary html in your LSL script and display it on the face of the prim
* Thus you can build arbitrary html in your LSL script and display it on the face of the prim
// example LSL
<lsl>
show(string html)
{
    html = "data:text/html," + llEscapeURL(html);
    llSetPrimMediaParams(0,                                // Side to display the media on.
            [PRIM_MEDIA_AUTO_PLAY,TRUE,      // Show this page immediately
            PRIM_MEDIA_CURRENT_URL,html,    // The url if they hit 'home'
            PRIM_MEDIA_HOME_URL,html,      // The url currently showing
            PRIM_MEDIA_HEIGHT_PIXELS,512,  // Height/width of media texture will be
            PRIM_MEDIA_WIDTH_PIXELS,512]);  //  rounded up to nearest power of 2.
}
default
{
    state_entry()
    {
        show("<h1>This is a test</h1><h2>This is a test</h2><h3>This is a test</h3>");
    }
}
</lsl>
 
=== HTTP-In ===
=== HTTP-In ===
* Scripts can become web servers via HTTP-In(link)
* Scripts can become web servers via HTTP-In(link)

Revision as of 16:52, 26 February 2010

Shared Media and HTTP-In

One step at a time .......

llSetPrimMediaParams

  • Use llSetPrimMediaParams to set the url and various parameters on the face of a prim via LSL.

<lsl> default {

   state_entry()
   {
       llSetPrimMediaParams(0,                             // Side to display the media on.
           [PRIM_MEDIA_AUTO_PLAY,TRUE,      // Show this page immediately
            PRIM_MEDIA_CURRENT_URL,"http://google.com",    // The url if they hit 'home'
            PRIM_MEDIA_HOME_URL,"http://google.com",       // The url currently showing
            PRIM_MEDIA_HEIGHT_PIXELS,512,                  // Height/width of media texture will be
            PRIM_MEDIA_WIDTH_PIXELS,512]);                 //   rounded up to nearest power of 2.
   }

} </lsl>

data: urls

There is a special url type: "data:" that lets you send the html *in the url*. Paste the below into your browser's address bar.

data:text/html,<h1>This is a test</h1><h2>This is a test</h2><h3>This is a test</h3>

llSetPrimMediaParams for data: urls

  • Thus you can build arbitrary html in your LSL script and display it on the face of the prim

<lsl> show(string html) {

   html = "data:text/html," + llEscapeURL(html);
   llSetPrimMediaParams(0,                                 // Side to display the media on.
           [PRIM_MEDIA_AUTO_PLAY,TRUE,      // Show this page immediately
            PRIM_MEDIA_CURRENT_URL,html,    // The url if they hit 'home'
            PRIM_MEDIA_HOME_URL,html,       // The url currently showing
            PRIM_MEDIA_HEIGHT_PIXELS,512,   // Height/width of media texture will be
            PRIM_MEDIA_WIDTH_PIXELS,512]);  //   rounded up to nearest power of 2.

} default {

   state_entry()
   {

show("

This is a test

This is a test

This is a test

");

   }

} </lsl>

HTTP-In

  • Scripts can become web servers via HTTP-In(link)

llSetPrimMediaParams for data: urls that link back to HTTP-In

  • Which means you can make web pages that trigger other page views via http-in links

// example LSL

Forms

  • You can put forms in data: urls

// data:text/html,<form action="http://google.com" method="GET">Search:<input type="text" name="search"><input type="submit" value="Submit"></form>

The Magic

  • You can set the script HTTP-In url as the form action to get the results of the form sent back to the script

// example LSL

The Limits

  • 1024 bytes per url
  • llEscapeURLs means non-alphanumeric characters are 3 bytes (ouch)
  • Must force another page view after form submission since HTTP-In can't generate HTML

The Tricks

  • <base href="<http-in-url>/">
  • Tiny urls