Difference between revisions of "User:Zai Lynch/Sandbox/LSL Goodies"

From Second Life Wiki
Jump to navigation Jump to search
m (formatting)
m (notcard reader script (uncommented))
Line 77: Line 77:


<div id="box">
<div id="box">
== Script 2 ==
== Basic Notecard-Reader ==
<div style="padding: 0.5em">
<div style="padding: 0.5em">
script
This script reads notecards placed in the same prim as the script itself.
 
<lsl>
//////////////////////////////////////////////////////
//                                                  //
//          Basic Notecard-Reader                  //
//            Released under                      //
//  Creative Commons Attribution-Share Alike 3.0    //
//              by Zai Lynch                        //
//                                                  //
//////////////////////////////////////////////////////
 
 
// Constants
 
integer CHANNEL = 2130214;
list MENU = ["Forward", "Backward", "Load", "Play", "Stop", "Time"];
 
// Variables
list gMenuNC;
integer gLine = 0;
integer gTime = 5;
string gNC = "";
 
 
zlGenerateList()
{
    integer i;
    integer n = llGetInventoryNumber(INVENTORY_NOTECARD);
    string name;
    gMenuNC = [];
    if (n > 0)
    {
        for (i=0; i<n; i++)
        {
            name = llGetInventoryName(INVENTORY_NOTECARD, i);
            if (llStringLength(name) < 25)
                gMenuNC = gMenuNC + [name];
            else
            {
                llSay(0, "Name: "+name + " is to long.");
                llRemoveInventory(name);
                llSay(0, "Notecard removed.");
            }
        }
    }
    if (gNC == "") gNC=llGetInventoryName(INVENTORY_NOTECARD,0);
}
 
 
 
default
{
    state_entry()
    {
        zlGenerateList();
        llListen(CHANNEL, "", llGetOwner(), "");
        llListen(CHANNEL+1, "", llGetOwner(), "");
    }
   
    on_rez(integer start_param)
    {
        llResetScript();
    }
   
    changed(integer change)
    {
        if (change == CHANGED_INVENTORY) zlGenerateList();
    }
   
    touch_start(integer num)
    {
        if (llDetectedKey(0) == llGetOwner()) llDialog(llGetOwner()," ",MENU,CHANNEL);
    }
   
    listen(integer cha, string name, key id, string msg)
    {
        if (cha == CHANNEL)
        {
            if (msg == "Stop")
            {
                llSetTimerEvent(0);
                llDialog(llGetOwner()," ",MENU,CHANNEL);
            }
            if (msg == "Play")
            {
                llSetTimerEvent(gTime);
                llGetNotecardLine(gNC, gLine);
                llDialog(llGetOwner()," ",MENU,CHANNEL);
            }
            if (msg == "Forward")
            {
                gLine = gLine + 1;
                llGetNotecardLine(gNC, gLine);
                llDialog(llGetOwner()," ",MENU,CHANNEL);
                llSetTimerEvent(0);
            }
            if ((msg == "Backward") && (gLine > 0))
            {
                gLine = gLine - 1;
                llGetNotecardLine(gNC, gLine);
                llDialog(llGetOwner()," ",MENU,CHANNEL);
                llSetTimerEvent(0);
            }
            if (msg == "Load")
                llDialog(llGetOwner(), " ", gMenuNC, CHANNEL+1);
            if (msg == "Time")
                state listening;
        }
        if (cha == (CHANNEL+1))
        {
            gNC = msg;
            gLine = 0;
            llDialog(llGetOwner()," ",MENU,CHANNEL);
        }
    }
   
    timer()
    {
        gLine = gLine+1; 
        llGetNotecardLine(gNC, gLine);
    }
   
    dataserver(key qid, string data)
    {
        llSay(0, data);       
    }
   
    state_exit()
    {
        llSetTimerEvent(0);
    }
       
}
 
state listening
{
    state_entry()
    {
        llSetTimerEvent(30);
        llListen(0, "", llGetOwner(), "");
        llSay(0,"Please tell me the desired updatetime in seconds.");
    }
   
    listen(integer cha, string name, key id, string msg)
    {
        gTime = (integer)msg;
        llSay(0, "Time set.");
        state default;
    }   
   
    timer()
    {
        llSay(0,"Sorry, the request timed out.");
        state default;
    }
   
    state_exit()
    {
        llSetTimerEvent(0);
        llDialog(llGetOwner()," ",MENU,CHANNEL);
    }
}
</lsl>
</div></div>
</div></div>



Revision as of 17:38, 28 May 2008


Intro

So just for the record: I'm a complete LSL n00b. So don't expect much from this page. 'Cause I love the Open Source concept, I'd like to share some of my scripts with other SL Residents =)
Since these are contributions to the SL Wiki, all scripts are released under Creative Commons Attribution-Share Alike 3.0 License.


Simple Countdown

This script displays a hovering countdown above the item it's placed in.


<lsl> ////////////////////////////////////////////////////// // // // Simple Countdown Script // // Released under // // Creative Commons Attribution-Share Alike 3.0 // // by Zai Lynch // // // //////////////////////////////////////////////////////


integer DAYS = 28; // Days until the countdown finishs integer HOURS = 6; // Hours until the countdown finishs integer MINUTES = 42; // Minutes until the countdown finishs integer SECONDS = 12; // Seconds until the countdown finishs string TEXT = "The end of the world will come in"; // Additional text defining the event string FINISHED = "uh oh..."; // Text displayed when event happened vector COLOR = <1,1,1>; // Color of the displayed text


countdown() {

   llSetText(TEXT+"\n"+(string)(SECONDS/86400)+" days, "
       +(string)((SECONDS%86400)/3600)+" hours, "
       +(string)(((SECONDS%86400)%3600)/60)+" minutes, "
       +(string)(((SECONDS%86400)%3600)%60)+ "seconds.",COLOR,1);

}


default {

   state_entry()
   {
       SECONDS = SECONDS + MINUTES * 60 + HOURS * 3600 + DAYS * 86400;
       llSetTimerEvent(1);
       countdown();
   }


   timer()
   {
       if (SECONDS > 0)
       {
           SECONDS = SECONDS - 1;
           countdown();
       }
       else 
       {
           llSetText(FINISHED, COLOR,1);
           llSetTimerEvent(0);
       }
   }

} </lsl>


Basic Notecard-Reader

This script reads notecards placed in the same prim as the script itself.

<lsl> ////////////////////////////////////////////////////// // // // Basic Notecard-Reader // // Released under // // Creative Commons Attribution-Share Alike 3.0 // // by Zai Lynch // // // //////////////////////////////////////////////////////


// Constants

integer CHANNEL = 2130214; list MENU = ["Forward", "Backward", "Load", "Play", "Stop", "Time"];

// Variables list gMenuNC; integer gLine = 0; integer gTime = 5; string gNC = "";


zlGenerateList() {

   integer i;
   integer n = llGetInventoryNumber(INVENTORY_NOTECARD);
   string name;
   gMenuNC = [];
   if (n > 0)
   {
       for (i=0; i<n; i++)
       {
           name = llGetInventoryName(INVENTORY_NOTECARD, i);
           if (llStringLength(name) < 25)
               gMenuNC = gMenuNC + [name];
           else 
           {
               llSay(0, "Name: "+name + " is to long.");
               llRemoveInventory(name);
               llSay(0, "Notecard removed.");
           }
       }
   }
   if (gNC == "") gNC=llGetInventoryName(INVENTORY_NOTECARD,0);

}


default {

   state_entry()
   {
       zlGenerateList();
       llListen(CHANNEL, "", llGetOwner(), "");
       llListen(CHANNEL+1, "", llGetOwner(), "");
   }
   
   on_rez(integer start_param)
   {
       llResetScript();
   }
   
   changed(integer change)
   {
       if (change == CHANGED_INVENTORY) zlGenerateList();
   }
   
   touch_start(integer num)
   {
       if (llDetectedKey(0) == llGetOwner()) llDialog(llGetOwner()," ",MENU,CHANNEL);
   }
   
   listen(integer cha, string name, key id, string msg)
   {
       if (cha == CHANNEL)
       {
           if (msg == "Stop") 
           {
               llSetTimerEvent(0);
               llDialog(llGetOwner()," ",MENU,CHANNEL);
           }
           if (msg == "Play") 
           {
               llSetTimerEvent(gTime); 
               llGetNotecardLine(gNC, gLine); 
               llDialog(llGetOwner()," ",MENU,CHANNEL);
           }
           if (msg == "Forward") 
           {
               gLine = gLine + 1; 
               llGetNotecardLine(gNC, gLine); 
               llDialog(llGetOwner()," ",MENU,CHANNEL); 
               llSetTimerEvent(0);
           }
           if ((msg == "Backward") && (gLine > 0)) 
           {
               gLine = gLine - 1; 
               llGetNotecardLine(gNC, gLine); 
               llDialog(llGetOwner()," ",MENU,CHANNEL); 
               llSetTimerEvent(0);
           }
           if (msg == "Load") 
               llDialog(llGetOwner(), " ", gMenuNC, CHANNEL+1);
           if (msg == "Time") 
               state listening;
       }
       if (cha == (CHANNEL+1))
       {
           gNC = msg;
           gLine = 0;
           llDialog(llGetOwner()," ",MENU,CHANNEL);
       }
   }
   
   timer()
   {
       gLine = gLine+1;  
       llGetNotecardLine(gNC, gLine);
   }
   
   dataserver(key qid, string data)
   {
       llSay(0, data);        
   }
   
   state_exit()
   {
       llSetTimerEvent(0);
   }
       

}

state listening {

   state_entry()
   {
       llSetTimerEvent(30);
       llListen(0, "", llGetOwner(), "");
       llSay(0,"Please tell me the desired updatetime in seconds.");
   }
   
   listen(integer cha, string name, key id, string msg)
   {
       gTime = (integer)msg;
       llSay(0, "Time set.");
       state default;
   }    
   
   timer()
   {
       llSay(0,"Sorry, the request timed out.");
       state default;
   }
   
   state_exit()
   {
       llSetTimerEvent(0);
       llDialog(llGetOwner()," ",MENU,CHANNEL);
   }

} </lsl>


Script 3

script


Zai landing.png