
Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385
<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://live.spdns.org/wiki/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>move IT Home Base</title>
        <description></description>
        <link>http://live.spdns.org/wiki/</link>
        <lastBuildDate>Sat, 04 Apr 2026 10:54:57 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>http://live.spdns.org/wiki/lib/tpl/peanutbutter2/images/favicon.ico</url>
            <title>move IT Home Base</title>
            <link>http://live.spdns.org/wiki/</link>
        </image>
        <item>
            <title>Freeview Media Screen</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/freeview_media_screen?do=revisions&amp;rev=1575021520</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;freeview_media_screen&quot;&gt;Freeview Media Screen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;//XEngine:
//FreeView 1.2 WebGuide (revision 3) - By CrystalShard Foo
//Multifunctional Picture viewer and Video control script with webguide support
//This script is distributed for free and must stay that way. 

//              *** DO NOT SELL THIS SCRIPT UNDER ANY CIRCUMSTANCE. ***

//Help for using this script can be obtained at: http://www.slguide.com/help

//Feel free to modify this script and post your improvement. Leave the credits intact but feel free to add your name at its bottom.
 
//Whats new:
//- Now using FULL_BRIGHT instead of PRIM_MATERIAL_LIGHT for the screen display
//- Added an ownership-change code to handle cases where FreeView gets deeded to group post Video Init.
//- Renamed WebGuide to TV-Guide to reflect what this thing does better.
//- Added a &amp;#039;Fix Scale&amp;#039; button to Picture mode to help against user texture-scale changes.
//- Additional minor help-tips and code improvements

//Enjoy!


//Constants
integer PICTURE_ROTATION_TIMER = 60;   //In whole seconds

integer DISPLAY_ON_SIDE = ALL_SIDES; //Change this to change where the image will be displayed

key VIDEO_DEFAULT = &amp;quot;71b8ff26-087d-5f44-285b-d38df2e11a81&amp;quot;;  //Test pattern - Used as default video texture when one is missing in parcel media
key BLANK = &amp;quot;5748decc-f629-461c-9a36-a35a221fe21f&amp;quot;; //Blank texture - Used when there are no textures to display in Picture mode
string NOTECARD = &amp;quot;bookmarks&amp;quot;;  //Used to host URL bookmarks for video streams

integer VIDEO_BRIGHT = TRUE;    //FULL_BRIGHT status for Video
integer PICTURE_BRIGHT = TRUE;  //FULL_BRIGHT status for Picture

integer REMOTE_CHANNEL = 9238742;

integer mode = 0;           //Freeview mode.
                            //Mode 0 - Power off
                            //Mode 1 - Picture viewer
                            //Mode 2 - Video

integer listenHandle = -1;      //Dialog menu listen handler
integer listenUrl = -1;         //listen handler for channel 1 for when a URL is being added
integer listenTimer = -1;       //Timer variable for removing all listeners after 2 minutes of listener inactivity
integer listenRemote = -1;      //listen handler for the remote during initial setup
integer encryption = 0;
integer numberofnotecardlines = 0;  //Stores the current number of detected notecard lines.
integer notecardline = 0;       //Current notecard line

integer loop_image = FALSE;     //Are we looping pictures with a timer? (picture mode)
integer current_texture = 0;    //Current texture number in inventory being displayed (picture mode)
integer chan;                   //llDialog listen channel
integer notecardcheck = 0;
key video_texture;              //Currently used video display texture for parcel media stream

string moviename;
string tempmoviename;
key notecardkey = NULL_KEY;
key tempuser;                   //Temp key storge variable
string tempurl;                 //Temp string storge variable

integer isGroup = TRUE;
key groupcheck = NULL_KEY;
key last_owner;
key XML_channel;

pictures()      //Change mode to Picture Viewer
{
    //Initilize variables
    
    //Change prim to Light material while coloring face 0 black to prevent light-lag generation.
    llSetPrimitiveParams([PRIM_BUMP_SHINY, DISPLAY_ON_SIDE, PRIM_SHINY_NONE, PRIM_BUMP_NONE, PRIM_COLOR, DISPLAY_ON_SIDE, &amp;lt;1,1,1&amp;gt;, 1.0, PRIM_MATERIAL, PRIM_MATERIAL_PLASTIC, PRIM_FULLBRIGHT, DISPLAY_ON_SIDE, PICTURE_BRIGHT]);

    integer check = llGetInventoryNumber(INVENTORY_TEXTURE);
     
    if(check == 0)
    {
        report(&amp;quot;No pictures found.&amp;quot;);
        llSetTexture(BLANK,DISPLAY_ON_SIDE);
        return;
    }
    else    
        if(current_texture &amp;gt; check)
            //Set to first texture if available
            current_texture = 0;
            
    display_texture(current_texture);
}

video()         //Change mode to Video
{
    //Change prim to Light material while coloring face 0 black to prevent light-lag generation.
    llSetPrimitiveParams([PRIM_BUMP_SHINY, DISPLAY_ON_SIDE, PRIM_SHINY_NONE, PRIM_BUMP_NONE, PRIM_COLOR, DISPLAY_ON_SIDE, &amp;lt;1,1,1&amp;gt;, 1.0, PRIM_MATERIAL, PRIM_MATERIAL_PLASTIC, PRIM_FULLBRIGHT, DISPLAY_ON_SIDE, VIDEO_BRIGHT, PRIM_TEXTURE, DISPLAY_ON_SIDE, &amp;quot;62dc73ca-265f-7ca0-0453-e2a6aa60bb6f&amp;quot;, llGetTextureScale(DISPLAY_ON_SIDE), llGetTextureOffset(DISPLAY_ON_SIDE), llGetTextureRot(DISPLAY_ON_SIDE)]);
    
    report(&amp;quot;Video mode&amp;quot;+moviename+&amp;quot;: Stopped&amp;quot;);
    if(finditem(NOTECARD) != -1)
        tempuser = llGetNumberOfNotecardLines(NOTECARD);
    video_texture = llList2Key(llParcelMediaQuery([PARCEL_MEDIA_COMMAND_TEXTURE]),0);
    if(video_texture == NULL_KEY)
    {
        video_texture = VIDEO_DEFAULT;
        llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_TEXTURE,VIDEO_DEFAULT]);
        llSay(0,&amp;quot;No parcel media texture found. Setting texture to default: &amp;quot;+(string)VIDEO_DEFAULT);
        if(llGetLandOwnerAt(llGetPos()) != llGetOwner())
            llSay(0,&amp;quot;Error: Cannot modify parcel media settings. &amp;quot;+llGetObjectName()+&amp;quot; is not owned by parcel owner.&amp;quot;);
    }
    
    llSetTexture(video_texture,DISPLAY_ON_SIDE);
}

off()
{
    report(&amp;quot;Click to power on.&amp;quot;);
    llSetPrimitiveParams([PRIM_BUMP_SHINY, DISPLAY_ON_SIDE, PRIM_SHINY_LOW, PRIM_BUMP_NONE, PRIM_COLOR, DISPLAY_ON_SIDE, &amp;lt;0.1,0.1,0.1&amp;gt;, 1.0,PRIM_MATERIAL, PRIM_MATERIAL_PLASTIC, PRIM_FULLBRIGHT, DISPLAY_ON_SIDE, FALSE, PRIM_TEXTURE, DISPLAY_ON_SIDE, BLANK, llGetTextureScale(DISPLAY_ON_SIDE), llGetTextureOffset(DISPLAY_ON_SIDE), llGetTextureRot(DISPLAY_ON_SIDE)]);
}

integer finditem(string name)   //Finds and returns an item&amp;#039;s inventory number
{
    integer i;
    for(i=0;i&amp;lt;llGetInventoryNumber(INVENTORY_NOTECARD);i++)
        if(llGetInventoryName(INVENTORY_NOTECARD,i) == NOTECARD)
            return i;
    return -1;
}

seturl(string url, key id)  //Set parcel media URL
{
    if(mode != 2)
    {
        video();
        mode = 2;
    }
    moviename = tempmoviename;
    if(moviename)
        moviename = &amp;quot; [&amp;quot;+moviename+&amp;quot;]&amp;quot;;
    tempmoviename = &amp;quot;&amp;quot;;
    string oldurl = llList2String(llParcelMediaQuery([PARCEL_MEDIA_COMMAND_URL]),0);
    if(oldurl != &amp;quot;&amp;quot;)
        llOwnerSay(&amp;quot;Setting new media URL. The old URL was: &amp;quot;+oldurl);

    llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_URL,url]);
    if(id!=NULL_KEY)
        menu(id);
    else
    {
        report(&amp;quot;Video mode&amp;quot;+moviename+&amp;quot;: Playing&amp;quot;);
        llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_PLAY]);
    }
       
    if(isGroup)
        llSay(0,&amp;quot;New media URL set.&amp;quot;);
    else
        llOwnerSay(&amp;quot;New media URL set: &amp;quot;+url);
}

string mediatype(string ext)    //Returns a string stating the filetype of a file based on file extension
{
    ext = llToLower(ext);
    if(ext == &amp;quot;swf&amp;quot;)
        return &amp;quot;Flash&amp;quot;;
    if(ext == &amp;quot;mov&amp;quot; || ext == &amp;quot;avi&amp;quot; || ext == &amp;quot;mpg&amp;quot; || ext == &amp;quot;mpeg&amp;quot; || ext == &amp;quot;smil&amp;quot;)
        return &amp;quot;Video&amp;quot;;
    if(ext == &amp;quot;jpg&amp;quot; || ext == &amp;quot;mpeg&amp;quot; || ext == &amp;quot;gif&amp;quot; || ext == &amp;quot;png&amp;quot; || ext == &amp;quot;pict&amp;quot; || ext == &amp;quot;tga&amp;quot; || ext == &amp;quot;tiff&amp;quot; || ext == &amp;quot;sgi&amp;quot; || ext == &amp;quot;bmp&amp;quot;)
        return &amp;quot;Image&amp;quot;;
    if(ext == &amp;quot;txt&amp;quot;)
        return &amp;quot;Text&amp;quot;;
    if(ext == &amp;quot;mp3&amp;quot; || ext == &amp;quot;wav&amp;quot;)
        return &amp;quot;Audio&amp;quot;;
    return &amp;quot;Unknown&amp;quot;;
}

browse(key id)      //Image browser function for picture viewer mode
{
    integer check = llGetInventoryNumber(INVENTORY_TEXTURE);
    string header;
    if(check &amp;gt; 0)
        header = &amp;quot;(&amp;quot;+(string)(current_texture+1)+&amp;quot;/&amp;quot;+(string)check+&amp;quot;) &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE,current_texture);
    else
        header = &amp;quot;No pictures found.&amp;quot;;
    llDialog(id,&amp;quot;** Monitor Control **\n Picture Viewer mode\n- Image browser\n- &amp;quot;+header,[&amp;quot;Back&amp;quot;,&amp;quot;Next&amp;quot;,&amp;quot;Menu&amp;quot;],chan);
    extendtimer();
}

report(string str)
{
    llSetObjectDesc(str);
}

extendtimer()       //Add another 2 minute to the Listen Removal timer (use when a Listen event is triggered)
{
    if(listenHandle == -1)
        listenHandle = llListen(chan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);
    listenTimer = (integer)llGetTime() + 120;
    if(loop_image == FALSE)
        llSetTimerEvent(45);
}

config(key id)      //Configuration menu
{
    extendtimer();
    llDialog(id,&amp;quot;Current media URL:\n&amp;quot;+llList2String(llParcelMediaQuery([PARCEL_MEDIA_COMMAND_URL]),0)+&amp;quot;\nTip: If the picture is abit off, try &amp;#039;Align ON&amp;#039;&amp;quot;,[&amp;quot;Set URL&amp;quot;,&amp;quot;Align ON&amp;quot;,&amp;quot;Align OFF&amp;quot;,&amp;quot;Menu&amp;quot;,&amp;quot;Set Remote&amp;quot;],chan);
}

tell_remote(string str)
{
    llShout(REMOTE_CHANNEL,llXorBase64Strings(llStringToBase64((string)encryption + str), llStringToBase64((string)encryption)));
}

menu(key id)        //Dialog menus for all 3 modes
{
    list buttons = [];
    string title = &amp;quot;** Monitor control **&amp;quot;;
    
    extendtimer();

    if(mode != 0)
    {
        if(mode == 1)       //Pictures menu
        {
            title+=&amp;quot;\n  Picture Viewer mode&amp;quot;;
            buttons+=[&amp;quot;Browse&amp;quot;];
            if(loop_image == FALSE)
                buttons+=[&amp;quot;Loop&amp;quot;];
            else
                buttons+=[&amp;quot;Unloop&amp;quot;];
            buttons+=[&amp;quot;Video&amp;quot;,&amp;quot;Power off&amp;quot;,&amp;quot;Help&amp;quot;,&amp;quot;Fix scale&amp;quot;];
        }
        else                //Video menu
        {
            title+=&amp;quot;\n Video display mode\n&amp;quot;+moviename+&amp;quot;\nTip:\nClick &amp;#039;TV Guide&amp;#039; to view the Online bookmarks.&amp;quot;;
            buttons+=[&amp;quot;Pictures&amp;quot;,&amp;quot;Configure&amp;quot;,&amp;quot;Power off&amp;quot;,&amp;quot;Loop&amp;quot;,&amp;quot;Unload&amp;quot;,&amp;quot;Help&amp;quot;,&amp;quot;Play&amp;quot;,&amp;quot;Stop&amp;quot;,&amp;quot;Pause&amp;quot;,&amp;quot;TV Guide&amp;quot;,&amp;quot;Bookmarks&amp;quot;,&amp;quot;Set URL&amp;quot;];
        }
    }
    else
        buttons += [&amp;quot;Pictures&amp;quot;,&amp;quot;Video&amp;quot;,&amp;quot;Help&amp;quot;];
    
    llDialog(id,title,buttons,chan);
}

display_texture(integer check)  //Display texture and set name in description (picture mode)
{                               //&amp;quot;Check&amp;quot; holds the number of textures in contents. The function uses &amp;quot;current_texture&amp;quot; to display.
    string name = llGetInventoryName(INVENTORY_TEXTURE,current_texture);
    llSetTexture(name,DISPLAY_ON_SIDE);
    report(&amp;quot;Showing picture: &amp;quot;+name+&amp;quot; (&amp;quot;+(string)(current_texture+1)+&amp;quot;/&amp;quot;+(string)check+&amp;quot;)&amp;quot;);
}
    

next()  //Change to next texture (picture mode)
{       //This function is used twice - by the menu and timer. Therefor, it is a dedicated function.
    current_texture++;
    integer check = llGetInventoryNumber(INVENTORY_TEXTURE);
    if(check == 0)
    {
        llSetTexture(BLANK,DISPLAY_ON_SIDE);
        current_texture = 0;
        report(&amp;quot;No pictures found.&amp;quot;);
        return;
    }
    if(check == current_texture)
        current_texture = 0;
    
    display_texture(check);
    return;
}

default
{
    state_entry()
    {
        chan = (integer)llFrand(1000) + 1000;   //Pick a random listen channel for the listener
        if(PICTURE_ROTATION_TIMER &amp;lt;= 0)         //Ensure the value is no less or equal 0
            PICTURE_ROTATION_TIMER = 1;
        llListenRemove(listenHandle);
        listenHandle = -1;
        last_owner = llGetOwner();
        groupcheck = llRequestAgentData(llGetOwner(),DATA_NAME);
        off();
        llOpenRemoteDataChannel();
    }
    
    on_rez(integer i)
    {
        llResetScript();
    }

    touch_start(integer total_number)
    {
        //-------------------------------------------------------------------------------
        //Listen only to owner or group member. Edit this code to change access controls.
        if(llDetectedKey(0) != llGetOwner() &amp;amp;&amp;amp; llDetectedGroup(0) == FALSE)
            return;
        //-------------------------------------------------------------------------------

        if(llGetOwnerKey(llGetKey()) != last_owner)  //Sense if object has been deeded to group for Web Guide function
        {
            isGroup = TRUE;
            last_owner = llGetOwner();
            groupcheck = llRequestAgentData(llGetOwner(),DATA_NAME);
            
            if(mode == 2)
            {
                llSay(0,&amp;quot;Detected change in ownership. Attempting to obtain current parcel media texture...&amp;quot;);
                video();
            }
        }

        menu(llDetectedKey(0));
    }
    
    changed(integer change)
    {
        if(change == CHANGED_INVENTORY) //If inventory change
            if(mode == 1)   //If picture mode
            {
                integer check = llGetInventoryNumber(INVENTORY_TEXTURE);
                if(check != 0)
                {
                    current_texture = 0;
                    display_texture(check);
                }
                else
                {
                    llSetTexture(BLANK,DISPLAY_ON_SIDE);
                    report(&amp;quot;No pictures found.&amp;quot;);
                }
            }
            else
                if(mode == 2)   //If video mode
                    if(finditem(NOTECARD) != -1)    //And bookmarks notecard present
                        if(notecardkey != llGetInventoryKey(NOTECARD))
                            tempuser = llGetNumberOfNotecardLines(NOTECARD);    //Reload number of lines
    }
    
    listen(integer channel, string name, key id, string message)
    {
        if(message == &amp;quot;Pictures&amp;quot;)
        {
            if(mode == 2)
                llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_STOP]);
            pictures();
            mode = 1;
            menu(id);
            return;
        }
        if(message == &amp;quot;Video&amp;quot;)
        {
            video();
            mode = 2;
            menu(id);
            return;
        }
        if(message == &amp;quot;Power off&amp;quot;)
        {
            if(mode == 2)
                llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_UNLOAD]);
            off();
            mode = 0;
            return;
        }
        if(message == &amp;quot;Help&amp;quot;)
        {
            llSay(0,&amp;quot;Help documentation is available at: http://www.slguide.com/help&amp;quot;);
            if(isGroup)
            {
                if(id == NULL_KEY)
                {
                    llSay(0,&amp;quot;FreeView cannot load help pages while set to group without the remote.&amp;quot;);
                    llSay(0,&amp;quot;For further assistance, please consult: http://slguide.com/help&amp;quot;);
                }
                else
                    tell_remote(&amp;quot;HELP&amp;quot;+(string)id+(string)XML_channel);
            }
            else
                llLoadURL(id,&amp;quot;Help pages for FreeView&amp;quot;,&amp;quot;http://www.slguide.com?c=&amp;quot;+(string)XML_channel+&amp;quot;&amp;amp;help=1&amp;quot;);
        }
        if(mode == 1)
        {
            if(message == &amp;quot;Browse&amp;quot;)
            {
                loop_image = FALSE;
                browse(id);
                return;
            }
            if(message == &amp;quot;Next&amp;quot;)
            {
                extendtimer();
                next();
                browse(id);
            }
            if(message == &amp;quot;Back&amp;quot;)
            {
                extendtimer();
                current_texture--;
                integer check = llGetInventoryNumber(INVENTORY_TEXTURE);
                if(check == 0)
                {
                    llSetTexture(BLANK,DISPLAY_ON_SIDE);
                    current_texture = 0;
                    report(&amp;quot;No pictures found.&amp;quot;);
                    return;
                }
                if(current_texture &amp;lt; 0)
                    current_texture = check - 1;
                
                display_texture(check);
                
                browse(id);
                return;
            }
            if(message == &amp;quot;Menu&amp;quot;)
            {
                menu(id);
                return;
            }
            if(message == &amp;quot;Loop&amp;quot;)
            {
                llSetTimerEvent(PICTURE_ROTATION_TIMER);
                loop_image = TRUE;
                llOwnerSay(&amp;quot;Picture will change every &amp;quot;+(string)PICTURE_ROTATION_TIMER+&amp;quot; seconds.&amp;quot;);
                return;
            }
            if(message == &amp;quot;Unloop&amp;quot;)
            {
                loop_image = FALSE;
                llOwnerSay(&amp;quot;Picture loop disabled.&amp;quot;);
                return;
            }
            if(message == &amp;quot;Fix scale&amp;quot;)
            {
                llSay(0,&amp;quot;Setting display texture to 1,1 repeats and 0,0 offset.&amp;quot;);
                llScaleTexture(1, 1, DISPLAY_ON_SIDE);
                llOffsetTexture(0, 0, DISPLAY_ON_SIDE);
                return;
            }
        }
        if(mode == 2)
        {
            if(channel == REMOTE_CHANNEL)
            {
                if(encryption == 0)
                    encryption = (integer)message;
                llListenRemove(listenRemote);
                listenRemote = -1;
                llSay(0,&amp;quot;Remote configured (&amp;quot;+(string)id+&amp;quot;)&amp;quot;);
            }
                
            if(message == &amp;quot;TV Guide&amp;quot;)
            {
                if(isGroup)
                {
                    if(!encryption)
                    {
                        llSay(0,&amp;quot;** Error - This FreeView object has been deeded to group. You must use a Remote control to open the TV Guide.&amp;quot;);
                        llSay(0,&amp;quot;You can set up the remote control from the Video -&amp;gt; Configuration menu. Please refer to the notecard for further assistance.&amp;quot;);
                        return;
                    }
                    tell_remote((string)id+(string)XML_channel+(string)llGetOwner());
                }
                else
                    llLoadURL(id, &amp;quot;Come to the Guide to Start Your Viewer Playing!&amp;quot;, &amp;quot;http://slguide.com/index.php?v=&amp;quot; + (string)llGetKey() + &amp;quot;&amp;amp;c=&amp;quot; + (string)XML_channel + &amp;quot;&amp;amp;o=&amp;quot; + (string)llGetOwner() + &amp;quot;&amp;amp;&amp;quot;);
                return;
            }

            string header = &amp;quot;Video mode&amp;quot;+moviename+&amp;quot;: &amp;quot;;
            
            if(message == &amp;quot;&amp;lt;&amp;lt; Prev&amp;quot;)
            {
                notecardline--;
                if(notecardline &amp;lt; 0)
                    notecardline = numberofnotecardlines - 1;
                tempuser = id;
                llGetNotecardLine(NOTECARD,notecardline);
                return;
            }
            if(message == &amp;quot;Next &amp;gt;&amp;gt;&amp;quot;)
            {
                notecardline++;
                if(notecardline &amp;gt;= numberofnotecardlines)
                    notecardline = 0;
                tempuser = id;
                llGetNotecardLine(NOTECARD,notecardline);
                return;
            }
            if(message == &amp;quot;Use&amp;quot;)
            {
                if(tempurl == &amp;quot;** No URL specified! **&amp;quot;)
                    tempurl = &amp;quot;&amp;quot;;
                seturl(tempurl,id);
                return;
            }
                    
            if(message == &amp;quot;Menu&amp;quot;)
            {
                menu(id);
                return;
            }
            if(message == &amp;quot;Configure&amp;quot;)
            {
                config(id);
                return;
            }
            if(message == &amp;quot;Bookmarks&amp;quot;)
            {
                if(notecardcheck != -1)
                {
                    llDialog(id,&amp;quot;Error: No valid bookmark data found in notecard &amp;#039;&amp;quot;+NOTECARD+&amp;quot;&amp;#039;.&amp;quot;,[&amp;quot;Menu&amp;quot;],chan);
                    return;
                }
                if(finditem(NOTECARD) != -1)                
                {
                    tempuser = id;
                    if(numberofnotecardlines &amp;lt; notecardline)
                        notecardline = 0;
                    llGetNotecardLine(NOTECARD,notecardline);
                }
                else
                    llDialog(id,&amp;quot;Error: No notecard named &amp;quot;+NOTECARD+&amp;quot; found in contents.&amp;quot;,[&amp;quot;Menu&amp;quot;],chan);
                return;
            }
            
            if(llGetLandOwnerAt(llGetPos()) != llGetOwner())    //If we do not have permissions to actually do the following functions
            {
                llSay(0,&amp;quot;Error: Cannot modify parcel media settings. &amp;quot;+llGetObjectName()+&amp;quot; is not owned by parcel owner.&amp;quot;);
                menu(id);
                return; //Abort
            }
            
            if(listenUrl != -1 &amp;amp;&amp;amp; channel == 1) //Incoming data from &amp;quot;Set URL&amp;quot; command (user spoke on channel 1)
            {
                llListenRemove(listenUrl);
                listenUrl = -1;
                tempmoviename = &amp;quot;&amp;quot;;
                seturl(message,id);
            }
            if(message == &amp;quot;Play&amp;quot;)
            {
                report(header+&amp;quot;Playing&amp;quot;);
                llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_PLAY]);
                return;
            }
            if(message == &amp;quot;Stop&amp;quot;)
            {
                report(header+&amp;quot;Stopped&amp;quot;);
                llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_STOP]);
                return;
            }
            if(message == &amp;quot;Pause&amp;quot;)
            {
                report(header+&amp;quot;Paused&amp;quot;);
                llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_PAUSE]);
                return;
            }
            if(message == &amp;quot;Unload&amp;quot;)
            {
                report(header+&amp;quot;Stopped&amp;quot;);
                llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_UNLOAD]);
                return;
            }
            if(message == &amp;quot;Loop&amp;quot;)
            {
                llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_LOOP]);
                return;
            }
            //URL , Auto-Scale, 
            if(message == &amp;quot;Set URL&amp;quot;)
            {
                report(header+&amp;quot;Stopped&amp;quot;);
                listenUrl = llListen(1,&amp;quot;&amp;quot;,id,&amp;quot;&amp;quot;);
                llDialog(id,&amp;quot;Please type the URL of your choice with /1 in thebegining. For example, /1 www.google.com&amp;quot;,[&amp;quot;Ok&amp;quot;],938);
                return;
            }
            if(message == &amp;quot;Align ON&amp;quot;)
            {
                report(header+&amp;quot;Stopped&amp;quot;);
                llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_AUTO_ALIGN,TRUE]);
                menu(id);
                return;
            }
            if(message == &amp;quot;Align OFF&amp;quot;)
            {
                report(header+&amp;quot;Stopped&amp;quot;);
                llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_AUTO_ALIGN,FALSE]);
                menu(id);
                return;
            }
            if(message == &amp;quot;Set Remote&amp;quot;)
            {
                llSay(0,&amp;quot;Configuring remote...&amp;quot;);
                encryption = 0;
                llListenRemove(listenRemote);
                listenRemote = llListen(REMOTE_CHANNEL,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);
                llSay(REMOTE_CHANNEL,&amp;quot;SETUP&amp;quot;);
            }
        }
    }
    
    dataserver(key queryid, string data)
    {
        if(queryid == groupcheck)       //Test if object is deeded to group
        {
            groupcheck = NULL_KEY;
            isGroup = FALSE;
            return;
        }
        
        if(queryid == tempuser) //If just checking number of notecard lines
        {
            numberofnotecardlines = (integer)data;
            notecardkey = llGetInventoryKey(NOTECARD);
            notecardcheck = 0;
            llGetNotecardLine(NOTECARD,notecardcheck);
            return;
        }
        if(notecardcheck != -1)
        {
            if(data != EOF)
            {
                if(data == &amp;quot;&amp;quot;)
                {
                    notecardcheck++;
                    llGetNotecardLine(NOTECARD,notecardcheck);
                }
                else
                {
                    notecardcheck = -1;
                    return;
                }
            }
            else
                return;
        }

        if(data == &amp;quot;&amp;quot; &amp;amp;&amp;amp; notecardline &amp;lt; numberofnotecardlines)    //If user just pressed &amp;quot;enter&amp;quot; in bookmarks, skip
        {
            notecardline++;
            llGetNotecardLine(NOTECARD,notecardline);
            return;
        }
        
        if(data == EOF)
        {
            notecardline = 0;
            llGetNotecardLine(NOTECARD,notecardline);
            return;
        }
        list parsed = llParseString2List(data,[&amp;quot;|&amp;quot;,&amp;quot;| &amp;quot;,&amp;quot; |&amp;quot;,&amp;quot; | &amp;quot;],[]);    //Ensure no blank spaces before &amp;quot;http://&amp;quot;.
        string name = llList2String(parsed,0);
        tempurl = llList2String(parsed,1);
        if(tempurl == &amp;quot;&amp;quot;)
            tempurl = &amp;quot;** No URL specified! **&amp;quot;;
            
        tempmoviename = name;
                
        llDialog(tempuser,&amp;quot;Bookmarks notecard (&amp;quot;+(string)(notecardline+1)+&amp;quot;/&amp;quot;+(string)numberofnotecardlines+&amp;quot;)\n&amp;quot;+name+&amp;quot; (&amp;quot;+mediatype(llList2String(llParseString2List(tempurl,[&amp;quot;.&amp;quot;],[]),-1))+&amp;quot;)\n&amp;quot;+tempurl,[&amp;quot;&amp;lt;&amp;lt; Prev&amp;quot;,&amp;quot;Use&amp;quot;,&amp;quot;Next &amp;gt;&amp;gt;&amp;quot;,&amp;quot;Menu&amp;quot;],chan);
    }
    
    remote_data(integer type, key channel, key message_id, string sender, integer ival, string sval)
    {
        if (type == REMOTE_DATA_CHANNEL)
        {
            XML_channel = channel;
        } 
        else if(type == REMOTE_DATA_REQUEST)
        {
            list media_info = llParseString2List(sval, [&amp;quot;|&amp;quot;], []);
            tempmoviename = llList2String(media_info,0);
            seturl(llList2String(media_info,1),NULL_KEY);
            llRemoteDataReply(channel, message_id, sval, 1);
        }
    }
    
    timer()
    {
        if(llGetTime() &amp;gt; listenTimer)       //If listener time expired...
        {
            llListenRemove(listenHandle);   //Remove listeneres.
            llListenRemove(listenUrl);
            llListenRemove(listenRemote);
            listenHandle = -1;
            listenUrl = -1;
            listenRemote = -1;
            listenTimer = -1;
            if(loop_image == FALSE || mode != 1) //If we&amp;#039;re not looping pictures or are in picture mode at all
                llSetTimerEvent(0.0);   //Remove timer
        }
        
        if(loop_image == TRUE &amp;amp;&amp;amp; mode == 1) //If we&amp;#039;re looping pictures and and we&amp;#039;re in picture mode...
            next(); //Next picture
    }
}&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:40 +0000</pubDate>
        </item>
        <item>
            <title>Online Indicator</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/online_indicator?do=revisions&amp;rev=1575021521</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;online_indicator&quot;&gt;Online Indicator&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;////////////////////////////////////////////////////////////////////////////////////////////////
//    Copyright (c) 2008 by Kristy Fanshaw                                                    //
////////////////////////////////////////////////////////////////////////////////////////////////
//   This program is free software: you can redistribute it and/or modify                     //
//    it under the terms of the GNU General Public License as published by                    //
//    the Free Software Foundation, either version 3 of the License, or                       //
//    (at your option) any later version.                                                     //
//                                                                                            //
//    Vendor System is distributed in the hope that it will be useful,                        //
//    but WITHOUT ANY WARRANTY; without even the implied warranty of                          //
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                           //
//    GNU General Public License for more details.                                            //
//                                                                                            //
//    To get a copy of the GNU General Public License, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.    //
////////////////////////////////////////////////////////////////////////////////////////////////
 
key user_key = &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot;;       // must be agent UUID whose status it will indicate
integer time = 30;                                           // time within the message should be written.
string url = &amp;quot;http://world.secondlife.com/resident/&amp;quot;;
key blank = &amp;quot;5748decc-f629-461c-9a36-a35a221fe21f&amp;quot;;
string name;
key toucher;
string status;
 
default
{
    state_entry()
    {
        llSetText(&amp;quot;&amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);
        llSetTexture(blank, ALL_SIDES);
        llRequestAgentData( user_key, DATA_NAME);   
    }
    dataserver(key queryid, string data)
    {
        name = data;
        llSetObjectName(name + &amp;quot;&amp;#039;s Online Detector&amp;quot;);
        state show;
    }
}
state show
{   
    state_entry()
    {
        llSetTimerEvent(10);
    } 
    timer()
    {
        llHTTPRequest( url + (string)user_key,[HTTP_METHOD,&amp;quot;GET&amp;quot;],&amp;quot;&amp;quot;);
        llRequestAgentData( user_key, DATA_ONLINE);   
    } 
    on_rez(integer start_param)
    {
        llSetText(&amp;quot;&amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);
        llSetTexture(blank, ALL_SIDES);
    } 
    http_response(key request_id,integer status, list metadata, string body)
    { 
        if (llSubStringIndex(body, &amp;quot;blank.jpg&amp;quot;) == -1)
                {
                        integer start_UUID = llSubStringIndex(body,&amp;quot;&amp;lt;img alt=\&amp;quot;profile image\&amp;quot; src=\&amp;quot;http://secondlife.com/app/image/&amp;quot;) + llStringLength(&amp;quot;&amp;lt;img alt=\&amp;quot;profile image\&amp;quot; src=\&amp;quot;http://secondlife.com/app/image/&amp;quot;);
                        integer end_UUID = llSubStringIndex(body,&amp;quot;\&amp;quot; class=\&amp;quot;parcelimg\&amp;quot; /&amp;gt;&amp;quot;) - 3;
                        string profile_pic = llGetSubString(body, start_UUID, end_UUID);
                        llSetTexture((key)profile_pic, ALL_SIDES);
                }
        else
        {
            llSetTexture(blank, ALL_SIDES);
        }
    }
    dataserver(key queryid, string data)
    {
        if ( data == &amp;quot;1&amp;quot; ) 
        {
            status = &amp;quot; is online&amp;quot;;
 
            llSetText(name + status, &amp;lt;0,1,0&amp;gt;, 1.0);
        }
        else if (data == &amp;quot;0&amp;quot;)
        {
            status = &amp;quot; is offline&amp;quot;;
 
            llSetText(name + status, &amp;lt;1,0,0&amp;gt;, 1.0);
        }
 
    }
    touch_start(integer num_detected)
    {
        toucher = llDetectedKey(0);
        state msg;
    }
}
state msg
{
     state_entry()
    {
        llListen(0,&amp;quot;&amp;quot;,toucher,&amp;quot;&amp;quot;);
        llInstantMessage(toucher, &amp;quot;write your message to &amp;quot; + name +&amp;quot; - you have &amp;quot; +(string)time + &amp;quot; seconds&amp;quot;);
        llInstantMessage(toucher, &amp;quot;to see &amp;quot; + name +&amp;quot;&amp;#039;s profile, click this link here: secondlife:///app/agent/&amp;quot; + (string)user_key + &amp;quot;/about&amp;quot;);
        llSetTimerEvent(time);   
    }
    listen(integer ch, string name, key id, string msg)
    {
        llInstantMessage(user_key, llKey2Name(toucher) + &amp;quot; sent you a message from &amp;quot; + llGetRegionName() + &amp;quot;: &amp;quot; + msg);
        llInstantMessage(toucher, &amp;quot;message is sent.&amp;quot;);
        llListenRemove(0);
        state show;
    }
    timer()
    {
        llInstantMessage(toucher, &amp;quot;time is up - touch again to write a message&amp;quot;);
        llListenRemove(0); 
        state show;
    }
}&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:41 +0000</pubDate>
        </item>
        <item>
            <title>Terrains</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/terrains?do=revisions&amp;rev=1575021526</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;terrains&quot;&gt;Terrains&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Die Downloads auf dieser Seite enthalten sowohl reine Terrains, also nur Bodenstrukturen (Land, Wasser, Berge), als auch komplette Regionen mitsamt auf den Terrains enthaltene Gebäude. Die angebotenen Downloads sind zu Demonstrationszwecken gedacht und lassen sich nach dem Importieren auf der eigenen Sim individuell nach den eigenen Vorstellungen verändern und erweitern.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Terrains&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;terrains&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-399&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;regionen&quot;&gt;Regionen&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Komplette Regionen mitsamt allen Inhalten lassen sich von OpenSIM-Betreibern über die Serverkonsole von OpenSIM importieren. Dabei werden alle Terrainstrukturen und alle Prims auf der Region durch die importierten Region ersetzt. Zunächst muß die gedownloadete Datei *.oar in das OpenSIM Verzeichnis kopiert werden. Dann wählt man über die Serverkonsole von OpenSIM mit dem Kommando 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;change region regionname&lt;/pre&gt;

&lt;p&gt;
 aus auf welcher Region die importierte Region eingesetzt werden soll (falls man mehr als 1 Region hat).
&lt;/p&gt;

&lt;p&gt;
Die Serverkonsole zeigt den Namen der aktuell ausgewählten Region stets an (Root ist die ersterstellte Region). Dann importiert man die neue Region mit dem Kommando 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;load oar dateiname.oar&lt;/pre&gt;

&lt;p&gt;
 Es wird nun der Inhalt der Region komplett gegen den Inhalt der importierten Region ersetzt. Die Serverkonsole zeigt eine Reihe schnell ablaufender Vorgänge, je nachdem wieviel Inhalte die importierte Region hat. Dies kann einen Moment dauern. Nachdem OpenSIM mit dem Import fertig ist wird die neue Region angezeigt und kann sofort genutzt werden.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;flache_1x1_region_mit_einem_wohn-_und_einem_buerogebaeude&quot;&gt;Flache 1x1 Region mit einem Wohn- und einem Bürogebäude&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;http://live.spdns.org/wiki/_detail/downloads/demo-region.jpg?id=archiv%3Aopensim%3Adownloads%3Aterrains&quot; class=&quot;media wikilink2&quot; title=&quot;downloads:demo-region.jpg&quot;&gt;&lt;img src=&quot;http://live.spdns.org/wiki/_media/downloads/demo-region.jpg&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot;demo-region.jpg&quot; alt=&quot;demo-region.jpg&quot; /&gt;&lt;/a&gt; Eine sehr flache, gut bebaubare Region die jeweils ein Wohnhaus und ein Bürogebäude enthält. Das Wohnhaus ist rustikal aufgebaut, enthält einen Kamin mit flackerndem Feuer, öffnungsbare Doppelflügeltüren und eine Dachkammer. Das moderne Bürogebäude kann auch als Wohnhaus benutzt werden, enthält eine große Dachterrasse, ausladend breite Treppen und einen integrierten Pool.
&lt;/p&gt;

&lt;p&gt;
Leider enthalten die beiden Freebie-Häuser einen kleinen Schönheitsfehler: man kann ohne Anpassung nicht durch die Türen gehen, denn der Ersteller der Häuser hat den Türrahmen „hollow“ gemacht und bisher ist es in OpenSIM noch nicht möglich durch ein Loch eines Prims hindurchzugehen. Man muss entweder die Türrrahmen gegen einzelne Balken austauschen (korrekte Lösung), oder den Türrahmen auf „Phantom“ setzen (Notlösung die aber schneller geht).
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://live.spdns.org/wiki/_media/downloads/opensim-region-flat-with-2-buildings.oar&quot; class=&quot;media mediafile mf_oar wikilink2&quot; title=&quot;downloads:opensim-region-flat-with-2-buildings.oar&quot;&gt;Download&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Regionen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;regionen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;400-2514&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;terrains1&quot;&gt;Terrains&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Komplette Terrains (Bodenstrukturen mit Wasser, Land und Berge) lassen sich von OpenSIM-Betreibern über die Serverkonsole von OpenSIM importieren. Dabei werden alle Terrainstrukturen auf der Region durch das importierte Terrain ersetzt. Zunächst muß die gedownloadete Terrain-Datei (*.f32 oder *.raw) in das OpenSIM Verzeichnis kopiert werden. Dann wählt man über die Serverkonsole von OpenSIM mit dem Kommando 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;change region regionname&lt;/pre&gt;

&lt;p&gt;
 aus auf welcher Region das importierte Terrain eingesetzt werden soll (falls man mehr als 1 Region hat).
&lt;/p&gt;

&lt;p&gt;
Die Serverkonsole zeigt den Namen der aktuell ausgewählten Region stets an (Root ist die ersterstellte Region). Dann importiert man das neue Terrain mit dem Kommando 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;terrain load dateiname.raw&lt;/pre&gt;

&lt;p&gt;
 Es wird nun das Terrain der Region komplett gegen das neue Terrain der ausgewählten Region ersetzt. Die Serverkonsole zeigt eine Reihe schnell ablaufender Vorgänge, je nachdem wieviel verschiedene Strukturen das importierte Terrain hat. Dies geht normalerweise sehr schnell. Nachdem OpenSIM mit dem Import fertig ist wird das neue Terrain angezeigt und kann sofort genutzt werden.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;x1_terrains&quot;&gt;1x1 Terrains&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;http://live.spdns.org/wiki/_detail/downloads/flaches-terrain.jpg?id=archiv%3Aopensim%3Adownloads%3Aterrains&quot; class=&quot;media wikilink2&quot; title=&quot;downloads:flaches-terrain.jpg&quot;&gt;&lt;img src=&quot;http://live.spdns.org/wiki/_media/downloads/flaches-terrain.jpg&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot;flaches-terrain.jpg&quot; alt=&quot;flaches-terrain.jpg&quot; /&gt;&lt;/a&gt; Ein einfaches, superflaches Terrain ohne Wasser das gut zu bebauen ist und sich als Ausgangsbasis eignet wenn man einfach nur eine möglichst große Fläche haben möchte. Die Größe ist bewusst so gewählt damit man dieses Terrain aneinander kacheln kann. Nebeneinanderliegende Terrains ergeben somit eine grösser werdende, zusammenhängende Fläche ohne Lücken (übergangslos).
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://live.spdns.org/wiki/_media/downloads/terrain-flaches-land.raw&quot; class=&quot;media mediafile mf_raw wikilink2&quot; title=&quot;downloads:terrain-flaches-land.raw&quot;&gt;Download&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Terrains&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;terrains1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2515-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads</category>
            <pubDate>Fri, 29 Nov 2019 10:58:46 +0000</pubDate>
        </item>
        <item>
            <title>Häuser / Gebäude / Möbel / Einrichtungsgegenstände</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/haeuser?do=revisions&amp;rev=1575021526</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;haeusergebaeudemoebeleinrichtungsgegenstaende&quot;&gt;Häuser / Gebäude / Möbel / Einrichtungsgegenstände&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;http://live.spdns.org/wiki/_detail/downloads/modern_building.jpg?id=archiv%3Aopensim%3Adownloads%3Ahaeuser&quot; class=&quot;media wikilink2&quot; title=&quot;downloads:modern_building.jpg&quot;&gt;&lt;img src=&quot;http://live.spdns.org/wiki/_media/downloads/modern_building.jpg&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot;modern_building.jpg&quot; alt=&quot;modern_building.jpg&quot; /&gt;&lt;/a&gt; Nur für Sim-Owner !
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;H\u00e4user \/ Geb\u00e4ude \/ M\u00f6bel \/ Einrichtungsgegenst\u00e4nde&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;haeusergebaeudemoebeleinrichtungsgegenstaende&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-126&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;sammlung&quot;&gt;Sammlung&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://opensimulator.org/wiki/Free_Assets#Buildings&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;http://opensimulator.org/wiki/Free_Assets#Buildings&quot; rel=&quot;ugc nofollow noopener&quot;&gt;http://opensimulator.org/wiki/Free_Assets#Buildings&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Sammlung&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sammlung&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;127-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads</category>
            <pubDate>Fri, 29 Nov 2019 10:58:46 +0000</pubDate>
        </item>
        <item>
            <title>Basic Dialog</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/basic_dialog?do=revisions&amp;rev=1575021518</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;basic_dialog&quot;&gt;Basic Dialog&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;// Basic dialog script

integer CHANNEL = 42; // dialog channel
list MENU_MAIN = [&amp;quot;Color&amp;quot;, &amp;quot;Alpha&amp;quot;]; // the main menu
list MENU_OPTIONS = [&amp;quot;Red&amp;quot;, &amp;quot;Green&amp;quot;, &amp;quot;Blue&amp;quot;, &amp;quot;...Back&amp;quot;]; // a submenu
list MENU_ALPHA = [&amp;quot;Clear&amp;quot;, &amp;quot;Translucent&amp;quot;, &amp;quot;Opaque&amp;quot;, &amp;quot;...Back&amp;quot;];

default
{
    state_entry()
    {
        llListen(CHANNEL, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;); // listen for dialog answers (from multiple users)
        llSetText(&amp;quot;Dialog Test&amp;quot;,&amp;lt;1,1,1&amp;gt;,1.0);
    }
    touch_start(integer total_number)
    {
        llDialog(llDetectedKey(0), &amp;quot;What do you want to do?&amp;quot;, MENU_MAIN, CHANNEL); // present dialog on click
    }
    listen(integer channel, string name, key id, string message)
    {
        if (message == &amp;quot;Color&amp;quot;)
        {
            llDialog(id, &amp;quot;Pick a color&amp;quot;, MENU_OPTIONS, CHANNEL); // present submenu on request
        }
        else if (message == &amp;quot;Alpha&amp;quot;)
        {
            llDialog(id, &amp;quot;Pick alpha&amp;quot;, MENU_ALPHA, CHANNEL);
        }
        else if (message == &amp;quot;...Back&amp;quot;)
        {
            llDialog(id, &amp;quot;Select option&amp;quot;, MENU_MAIN, CHANNEL); // present main menu on request to go back
        }
        else if (message == &amp;quot;Red&amp;quot;)
        {
            llSetColor(&amp;lt;1,0,0&amp;gt;,ALL_SIDES);
        }
        else if (message == &amp;quot;Green&amp;quot;)
        {
            llSetColor(&amp;lt;0,1,0&amp;gt;,ALL_SIDES);
        }
        else if (message == &amp;quot;Blue&amp;quot;)
        {
            llSetColor(&amp;lt;0,0,1&amp;gt;,ALL_SIDES);
        }
        else if (message == &amp;quot;Clear&amp;quot;)
        {
            llSetAlpha(0.0, ALL_SIDES);
        }
        else if (message == &amp;quot;Translucent&amp;quot;)
        {
            llSetAlpha(0.5, ALL_SIDES);
        }
        else if (message == &amp;quot;Opaque&amp;quot;)
        {
            llSetAlpha(1.0, ALL_SIDES);
        }
    }
}&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:38 +0000</pubDate>
        </item>
        <item>
            <title>Dimmen</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/dimmen?do=revisions&amp;rev=1575021519</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;dimmen&quot;&gt;Dimmen&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Mit dem diesem Script kann ein Objekt generiert werden dass bei Berührung ein Menü öffnet und mit dem dann die Transparanz anderer Objekte kontrolliert werden kann.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Dimmen&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dimmen&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-189&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;kontrollobjekt&quot;&gt;Kontrollobjekt&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Dieses Script muss in das Objekt, das quasi als Fernbedienung dienen soll. Die Namen werden dabei im Array WALL_OPTIONS festgelegt.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// (C) 2007 Abba Thiebaud&amp;gt;SecondLifer  
// Please remember, I do not offer support for this script; your use of
// this script is your acknowledgement and agreement to the above
// terms.
//
// DO NOT REMOVE THE ABOVE HEADER FOR ANY REASON WHATSOEVER.
 
// Window Controller Script (put into controller prim)
list TINT_OPTIONS = [&amp;quot;40%&amp;quot;, &amp;quot;20%&amp;quot;, &amp;quot;None&amp;quot;, &amp;quot;100%&amp;quot;, &amp;quot;80%&amp;quot;, &amp;quot;60%&amp;quot;];
list WALL_OPTIONS = [&amp;quot;Lower Front&amp;quot;, &amp;quot;Lower Back&amp;quot;, &amp;quot;Lower Sides&amp;quot;, &amp;quot;Upper Front&amp;quot;, &amp;quot;Upper Back&amp;quot;, &amp;quot;Upper Sides&amp;quot;, &amp;quot;Ceiling&amp;quot;, &amp;quot;All&amp;quot;];
integer UPPER_FRONT = -28394;
integer LOWER_FRONT = -28395;
integer UPPER_BACK  = -28396;
integer LOWER_BACK  = -28397;
integer UPPER_SIDE  = -28398;
integer LOWER_SIDE  = -28399;
integer CEILING     = -28400;
integer CHANNEL     = -28393;
integer wallChannel;
integer allWalls;
 
PaintAllWalls(string tintLevel)
{
    integer i;
    integer j;
    
    j = -28394;
 
    for (i = 0; i &amp;lt; 7; i++)
    {
        llSay(j, tintLevel);
        j--;
    } // end for
} // end PaintAllWalls
   
default {
    state_entry()
    {
        llListen(CHANNEL, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;); // listen for dialog answers (from multiple users)
    } // end state_entry()
 
    touch_start(integer total_number)
    {
        llDialog(llDetectedKey(0), &amp;quot;Which wall would you like to tint?&amp;quot;, WALL_OPTIONS, CHANNEL); // present dialog on click
        allWalls = 0;
    } // end touch_start()
 
    listen(integer channel, string name, key id, string message)
    {
        if (llListFindList(TINT_OPTIONS + WALL_OPTIONS, [message]) != -1)  // verify dialog choice
        {
            if (message == &amp;quot;Upper Front&amp;quot;)
            {
                llDialog(id, &amp;quot;How much tint would you like?&amp;quot;, TINT_OPTIONS, CHANNEL);
                wallChannel = UPPER_FRONT;
            }
            else if (message == &amp;quot;Upper Back&amp;quot;)
            {
                llDialog(id, &amp;quot;How much tint would you like?&amp;quot;, TINT_OPTIONS, CHANNEL);
                wallChannel = UPPER_BACK;
            }
            else if (message == &amp;quot;Upper Sides&amp;quot;)
            {
                llDialog(id, &amp;quot;How much tint would you like?&amp;quot;, TINT_OPTIONS, CHANNEL);
                wallChannel = UPPER_SIDE;
            }
            else if (message == &amp;quot;Lower Front&amp;quot;)
            {
                llDialog(id, &amp;quot;How much tint would you like?&amp;quot;, TINT_OPTIONS, CHANNEL);
                wallChannel = LOWER_FRONT;
            }
            else if (message == &amp;quot;Lower Back&amp;quot;)
            {
                llDialog(id, &amp;quot;How much tint would you like?&amp;quot;, TINT_OPTIONS, CHANNEL);
                wallChannel = LOWER_BACK;
            }
            else if (message == &amp;quot;Lower Sides&amp;quot;)
            {
                llDialog(id, &amp;quot;How much tint would you like?&amp;quot;, TINT_OPTIONS, CHANNEL);
                wallChannel = LOWER_SIDE;
            }
            else if (message == &amp;quot;Ceiling&amp;quot;)
            {
                llDialog(id, &amp;quot;How much tint would you like?&amp;quot;, TINT_OPTIONS, CHANNEL);
                wallChannel = CEILING;
            }
            else if(message == &amp;quot;All&amp;quot;)
            {
                llDialog(id, &amp;quot;How much tint would you like?&amp;quot;, TINT_OPTIONS, CHANNEL);
                allWalls = 1;
             }
 
            if (message == &amp;quot;100%&amp;quot;)
            {
                if(allWalls == 1)
                {
                    PaintAllWalls(&amp;quot;100&amp;quot;);
                }
                else
                {
                    llSay(wallChannel, &amp;quot;100&amp;quot;);
                }
             }
            else if (message == &amp;quot;80%&amp;quot;)
            {
                if(allWalls == 1)
                {
                    PaintAllWalls(&amp;quot;80&amp;quot;);
                }
                else
                {
                    llSay(wallChannel, &amp;quot;80&amp;quot;);
                }
             }
            else if (message == &amp;quot;60%&amp;quot;)
            {
                if(allWalls == 1)
                {
                    PaintAllWalls(&amp;quot;60&amp;quot;);
                }
                else
                {
                    llSay(wallChannel, &amp;quot;60&amp;quot;);
                }
             }
            else if (message == &amp;quot;40%&amp;quot;)
            {
                if(allWalls == 1)
                {
                    PaintAllWalls(&amp;quot;40&amp;quot;);
                }
                else
                {
                    llSay(wallChannel, &amp;quot;40&amp;quot;);
                }
             }
            else if (message == &amp;quot;20%&amp;quot;)
            {
                if(allWalls == 1)
                {
                    PaintAllWalls(&amp;quot;20&amp;quot;);
                }
                else
                {
                    llSay(wallChannel, &amp;quot;20&amp;quot;);
                }
             }
            else if (message == &amp;quot;None&amp;quot;)
            {
                if(allWalls == 1)
                {
                    PaintAllWalls(&amp;quot;0&amp;quot;);
                }
                else
                {
                    llSay(wallChannel, &amp;quot;0&amp;quot;);
                }
             }
          } // end if (valid message)
    }  // end listen
} // end default&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Kontrollobjekt&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;kontrollobjekt&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;190-5776&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;dimm-objekt&quot;&gt;Dimm-Objekt&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Dieses Script muss in alle wählbaren Objekte. Dabei muss ein Channel durch Entfernen des Platzhalters aktiviert werden, wodurch das Objekt durch das Kontrollscript ansprechbar wird.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;//Here the target aka Windows, put this script into them.
//integer chan = -28394; // uncomment for UPPER_FRONT
//integer chan = -28395; // uncomment for LOWER_FRONT
//integer chan = -28396; // uncomment for UPPER_BACK
//integer chan = -28397; // uncomment for LOWER_BACK
//integer chan = -28398; // uncomment for UPPER_SIDE
//integer chan = -28399; // uncomment for LOWER_SIDE
//integer chan = -28400; // uncomment for CEILING
 
default
{
        state_entry()
        {
                llListen(chan, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot; );
        }
 
        listen( integer channel, string name, key id, string message )
        {
                if ( message == &amp;quot;100&amp;quot; )
                {
                        llSetAlpha(1.0, ALL_SIDES);
                }
                else if ( message == &amp;quot;80&amp;quot; )
                {
                        llSetAlpha(0.8, ALL_SIDES);
                }
                else if ( message == &amp;quot;60&amp;quot; )
                {
                        llSetAlpha(0.6, ALL_SIDES);
                }
                else if ( message == &amp;quot;40&amp;quot; )
                {
                        llSetAlpha(0.4, ALL_SIDES);
                }
                else if ( message == &amp;quot;20&amp;quot; )
                {
                        llSetAlpha(0.2, ALL_SIDES);
                }
                else if ( message == &amp;quot;0&amp;quot; )
                {
                        llSetAlpha(0.0, ALL_SIDES);
                }
        }
}&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Dimm-Objekt&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dimm-objekt&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;5777-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:39 +0000</pubDate>
        </item>
        <item>
            <title>E-Mail</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/e-mail?do=revisions&amp;rev=1575021519</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;e-mail&quot;&gt;E-Mail&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Damit dieses Script funktionieren kann muss zuvor die E-Mail Funktion in der Konfigurationsdatei opensim.ini eingeschaltet und konfiguriert werden.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;string email_address = &amp;quot;adresse@domain.xyz&amp;quot;; // who will receive the messages
string hname = &amp;quot;User Name&amp;quot;; // name that will be displayed in hover text as receiver of mail
string date;
string name;
string sim;
default
{
    state_entry() {

        //Send an email to a normal email account
        llSetText(&amp;quot;click to send &amp;quot; + hname + &amp;quot; an email&amp;quot;,&amp;lt;1,1,1&amp;gt;,1);
        llEmail( email_address, &amp;quot;Initializing Email Module&amp;quot;, &amp;quot;[STARTUP COMPLETE]&amp;quot;);
    }

    touch_start( integer num_detected ) {
        integer i = 0;
        date = llGetDate();
        name = llDetectedName(i);
        sim = llGetRegionName();

        // Send another email, telling who touched the prim.
        do
            llEmail( email_address, &amp;quot;Prim Touched&amp;quot;, &amp;quot;I was touched by: &amp;quot; + llDetectedName(i) + &amp;quot;\nKey: &amp;quot; + (string) llDetectedKey(i) + &amp;quot;\n On the Following Date: &amp;quot; + date);
        while(++i &amp;lt; num_detected);
        llSay(0,&amp;quot;------------------------&amp;gt;&amp;quot;);
        llSay(0,&amp;quot;E-Mail sent from &amp;quot; + name + &amp;quot;@&amp;quot; + sim + &amp;quot;.DOMAIN&amp;quot;);
        llSay(0,&amp;quot;------------------------&amp;gt;&amp;quot;);
        llPlaySound(&amp;quot;Boing&amp;quot;, 1.0);
    }
}&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:39 +0000</pubDate>
        </item>
        <item>
            <title>Elevator</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/elevator?do=revisions&amp;rev=1575021519</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;elevator&quot;&gt;Elevator&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Elevator&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;elevator&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-22&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;elevator_main_script&quot;&gt;Elevator Main Script&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;// From the book:
//
// Scripting Recipes for Second Life
// by Jeff Heaton (Encog Dod in SL)
// ISBN: 160439000X
// Copyright 2007 by Heaton Research, Inc.
//
// This script may be freely copied and modified so long as this header
// remains unmodified.
//
// For more information about this book visit the following web site:
//
// http://www.heatonresearch.com/articles/series/22/

integer CHANNEL = 42; // dialog channel
list MENU_MAIN = [&amp;quot;Floor 1&amp;quot;, &amp;quot;Floor 2&amp;quot;, &amp;quot;Floor 3&amp;quot;, &amp;quot;Floor 4&amp;quot;, &amp;quot;Floor 5&amp;quot;, &amp;quot;Floor 6&amp;quot;, &amp;quot;Floor 7&amp;quot;, &amp;quot;Floor 8&amp;quot;, &amp;quot;Floor 9&amp;quot;, &amp;quot;Floor 10&amp;quot;,&amp;quot;Roof&amp;quot;]; // the main menu

float BOTTOM = 22.260;
float FLOOR_HEIGHT = 10;
float SPEED = 2;
float target;


default
{
    state_entry()
    {
        llListen(CHANNEL, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;); // listen for dialog answers (from multiple users)
        llSitTarget(&amp;lt;0,-0.5,0.5&amp;gt;, llEuler2Rot(&amp;lt;0,0,-90&amp;gt;) );
        llSetText(&amp;quot;Sit Here to Ride Elevator&amp;quot;,&amp;lt;0,0,0&amp;gt;,1.0);
        target = BOTTOM;
    }
   
    listen(integer channel, string name, key id, string message)
    {
        integer idx = llListFindList(MENU_MAIN, [message]);
        if( idx!=-1 )
        {
            llSay(0,&amp;quot;Elevator heading to &amp;quot; + message + &amp;quot;.&amp;quot; );
            target = BOTTOM + (idx*10);
            state moving;
        }
    }

    changed(integer Change)
    {
        llDialog(llAvatarOnSitTarget(), &amp;quot;Where to?&amp;quot;, MENU_MAIN, CHANNEL);
    }
   
}

state moving
{
   
   
    state_entry()
    {
        llSetTimerEvent(0.1);
    }
   
    timer()
    {
        vector pos = llGetPos();
       
        if( pos.z!=target )
        {
            if( pos.z&amp;gt;target )
            {
                pos.z = pos.z - SPEED;
            }
            else
            {
                pos.z = pos.z + SPEED;
            }
        }
       
        if(  llFabs(pos.z - target) &amp;lt; SPEED )
        {
            pos.z = target;
            llSetTimerEvent(0);
            llSetPos(pos);
            llSay(0,&amp;quot;Elevator has reached its target.&amp;quot; );
            state default;
        }   
       
        llSetPos(pos);
       
    }
}&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Elevator Main Script&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;elevator_main_script&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;23-2117&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;elevator_call_button&quot;&gt;Elevator Call Button&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;integer CHANNEL = 42; // dialog channel

default
{
    state_entry()
    {
        llSetText(&amp;quot;Touch to Call Elevator&amp;quot;,&amp;lt;0,0,0&amp;gt;,1.0);
    }

    touch_start(integer total_number)
    {
               
        llRegionSay(42, &amp;quot;Floor 1&amp;quot;);
    }
}&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Elevator Call Button&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;elevator_call_button&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2118-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:39 +0000</pubDate>
        </item>
        <item>
            <title>Give all Content</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/give_all_content?do=revisions&amp;rev=1575021520</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;give_all_content&quot;&gt;Give all Content&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;// Copyright 2004, Trimming Hedges.  Released to the public domain.

// This is a simple script that gives everything in a box to the person who clicked. 
// By default, it will only give items to the owner of the box.

// I wrote this because of all the texture bundles that are given out.  It&amp;#039;s really a PAIN
// to move a lot of textures or other contents out of a box.  This speeds that up.

// This is NOT a vending script.  You can use this script to give everything in a box to someone, by changing &amp;#039;owneronly&amp;#039; to be 0.  BUT:
//
//  I suggest not using this script in an area where several people are going to touch it at once, because giving inventory is slow.
//  Version 2.0 of this script now detects multiple simultaneous touches: it is still slow, but it should work better at classes or events.

//  THIS IS NOT A VENDING SCRIPT.  It gives items away, it does NOT SELL THEM.  (You don&amp;#039;t need a script for most vending anyway.)
//  This script doesn&amp;#039;t give itself away.  If you want it to, put it in the box, and set it to not running.
//  Then rename a copy and put that in the box too.  The renamed copy should be the running one. 
//  Rename it FIRST, I had weird issues with renaming it when it was already in
//  the box. (version 1.2.12 of SL.)

integer owneronly = 0;
key owner;

default
{
    state_entry()
    {
        owner = llGetOwner();       
    }

    touch_start(integer total_number)
    {
        integer i;
        for (i=0;i&amp;lt;total_number;i++)
        {
            key target = llDetectedKey(i);
       
            if ( (target != owner) &amp;amp;&amp;amp; (owneronly == 1) )  // person clicking isn&amp;#039;t owner and owneronly is set;
            {
                llInstantMessage(target,&amp;quot;Sorry, only the owner is allowed to get my contents.&amp;quot;);
                return;
            }
            list inventory_types = [INVENTORY_BODYPART,INVENTORY_CLOTHING,INVENTORY_LANDMARK,INVENTORY_NOTECARD,INVENTORY_OBJECT,INVENTORY_SCRIPT,INVENTORY_SOUND,INVENTORY_TEXTURE];
            integer inventory_count = llGetListLength(inventory_types);
            integer j;
            integer k;
            integer type;
            integer typecount;
            string myname = llGetScriptName();
            string objectname;

            for (j=0; j&amp;lt;inventory_count;j++)
            {
                type = llList2Integer(inventory_types,j); // get the next inventory type from the list
                typecount = llGetInventoryNumber(type);  // how many of that kind of inventory is in the box?
                if (typecount &amp;gt; 0)
                {
                    for (k=0; k&amp;lt;typecount;k++)
                    {
                        objectname = llGetInventoryName(type,k);
                        if (objectname != myname)  // don&amp;#039;t give self out so the user doesn&amp;#039;t get fifty thousand copies.
                        {
                            llGiveInventory(target,objectname);
                        }
                    }
                }           
            }
        }
    }
}&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:40 +0000</pubDate>
        </item>
        <item>
            <title>Skype Online Status - Multi-User Version</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/skype_multiuser?do=revisions&amp;rev=1575021523</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;skype_online_status_-_multi-user_version&quot;&gt;Skype Online Status - Multi-User Version&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;// zwischen die Anführungszeichen Deinen Skype-Name einfügen
string skype_handle = &amp;quot;&amp;quot;;
// you are done!  no more changes!

key     notecode;
string  notecard;
integer noteline;
key skype_request_id = NULL_KEY; // id of http request

showStatus(string skype_status)
{
    // build up our message
    string message = &amp;quot;Skype&amp;quot;;
    message += &amp;quot;\nName: &amp;quot; + skype_handle;
    message += &amp;quot;\nStatus: &amp;quot; + skype_status;
    
    // write out the message as hovering text
    llSetText(message, &amp;lt;.5,.5,1&amp;gt;, 1);
}

// AMD64 ADD: readnotecard() liest eine zeile
// Im Dataserver Event wird die gewünschte Variable dann gefüllt
// Sollte einmal beim rezzen/reseten und Inventory Change durchgeführt werden
readnotecard()
{
    // Der name der NC ist egal
    notecard = llGetInventoryName(INVENTORY_NOTECARD, 0);
    // Wenn aber keine da ist, setze die Variable auch auf leer und beende das ganze
    if (notecard == &amp;quot;&amp;quot;)
    {
        skype_handle = &amp;quot;&amp;quot;;
        return;
    }
    // Lesen beginnen bei Zeile Null (anfang)
    noteline = 0;
    // Ab hier gehts im Dataserver Event weiter
    notecode = llGetNotecardLine(notecard, noteline);
}

default
{
    on_rez(integer start_param)
    {
        readnotecard();
    }
    state_entry()
    {
        llSetTimerEvent(0);
        readnotecard();
    }
    changed(integer change)
    {
        // Änderung im Inventar des Objekts
        if (change &amp;amp; CHANGED_INVENTORY)
        {
            // NC am besten neu einlesen
            readnotecard();
        }
    }
    dataserver(key queryid, string data)
    {
        if (queryid == notecode)
        {
            // Für den Fall dass die NC leer ist
            if (data != EOF) 
            {
                skype_handle = data;
            }
            else
            {
                skype_handle = &amp;quot;&amp;quot;;
            }
        }
    }
    touch_start(integer total_number)
    {
        // make sure owner has specified handle
        if(skype_handle == &amp;quot;&amp;quot;)
        {
            // send message to debugger
            llWhisper(DEBUG_CHANNEL, &amp;quot;skype_handle can not be empty.&amp;quot;);
            return;
        }
        
        // prevent extra requests happening at the same time
        if(skype_request_id != NULL_KEY) return;
        
        // make a request over the internet
        skype_request_id = llHTTPRequest(&amp;quot;http://mystatus.skype.com/&amp;quot; + skype_handle + &amp;quot;.txt&amp;quot;, [HTTP_METHOD, &amp;quot;GET&amp;quot;], &amp;quot;&amp;quot;);
        
        // set a timeout for http request
        llSetTimerEvent(5);
    }
    http_response(key request_id, integer status, list metadata, string body)
    {
        // is this a response to our request?
        if(request_id == skype_request_id) 
        {
            // show status
            showStatus(body);
            
            // change to view state
            state viewing;
        }

    }
    timer()
    {
        // Didn&amp;#039;t get a response in time.
        showStatus(&amp;quot;No Response&amp;quot;);
        
        // change to view state
        state viewing;
    }
}
state viewing
{
    state_entry()
    {
        // Set next timer for 3 minutes
        llSetTimerEvent(180);
    }
    timer()
    {
        state default;
    }
    state_exit()
    {
        // stop the timer
        llSetTimerEvent(0);

        // hide the text
        llSetText(&amp;quot;&amp;quot;, ZERO_VECTOR, 0);
        
        // reset the request id
        skype_request_id = NULL_KEY;
    }
}&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:43 +0000</pubDate>
        </item>
    </channel>
</rss>
