Difference between revisions of "Template:Darwin's Scripts"

From Second Life Wiki
Jump to navigation Jump to search
m
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
<includeonly>
<includeonly>
{{#switch: {{{1}}}
{{#switch: {{{1}}}
  | find screen width =  
  | find screen width = <div id="box">
<div id="box">
==Find Screen Width==
==Find Screen Width==
<div style="padding: 0.5em">
<div style="padding: 0.5em">
Line 19: Line 18:
         llOwnerSay((string)screen_width);
         llOwnerSay((string)screen_width);
     }
     }
}</lsl>
}</lsl></div></div>
</div></div>
| date difference = <div id="box">
  | color picker =  
==Date Difference==
<div id="box">
<div style="padding: 0.5em">
Finds the difference in days between two dates. Dates are used in the format yyyy-mm-dd
<lsl>integer dateDiff(string date1, string date2)
{
    list months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
   
    integer year1 = (integer)llGetSubString(date1, 0, 3);
    integer month1 = (integer)llGetSubString(date1, 5, 6);
    integer day1 = (integer)llGetSubString(date1, 8, 9);
   
    integer year2 = (integer)llGetSubString(date2, 0, 3);
    integer month2 = (integer)llGetSubString(date2, 5, 6);
    integer day2 = (integer)llGetSubString(date2, 8, 9);
   
    integer daysDiff;
    integer i;
   
    integer yeardays1;
    for(i=0; i<month1-1; i++)
        yeardays1 += llList2Integer(months, i);
    yeardays1 += day1;
   
    integer yeardays2;
    for(i=0; i<month2-1; i++)
        yeardays2 += llList2Integer(months, i);
    yeardays2 += day2;
   
    daysDiff = yeardays2 - yeardays1 + 365*(year2-year1);
   
    return daysDiff;
}</lsl></div></div>
  | color picker = <div id="box">
==Color Picker==
==Color Picker==
<div style="padding: 0.5em">
<div style="padding: 0.5em">
Line 41: Line 71:
</lsl>
</lsl>
===Color Picker===
===Color Picker===
<lsl>float THRID = 0.333333;
<lsl>float hue = 0.0;
float SIXTH = 0.166666;
 
vector color;
float hue = 0.0;
float lum = 0.5;
float lum = 0.5;
float sat = 1.0;
float sat = 1.0;
Line 118: Line 144:
     {
     {
         start_face = llDetectedTouchFace(0);
         start_face = llDetectedTouchFace(0);
       
         if(start_face == 4)
         if(start_face == 4)
             llOwnerSay((string)hsl_to_rbg(hue, sat, lum));
             llOwnerSay((string)hsl_to_rbg(hue, sat, lum));
Line 127: Line 152:
         vector st = llDetectedTouchST(0);
         vector st = llDetectedTouchST(0);
         integer face = llDetectedTouchFace(0);
         integer face = llDetectedTouchFace(0);
       
         if(start_face != face) return;
         if(start_face != face) return;
       
         if(face == 0)
         if(face == 0)
         {
         {
             sat = st.y;
             sat = st.y;
             hue = st.x;
             hue = st.x;
           
             llSetColor(hsl_to_rbg(hue, sat, lum), 4);
             llSetColor(hsl_to_rbg(hue, sat, lum), 4);
         }
         }
Line 140: Line 162:
         {
         {
             lum = st.x;
             lum = st.x;
           
             llSetColor(hsl_to_rbg(hue, sat, lum), 4);
             llSetColor(hsl_to_rbg(hue, sat, lum), 4);
         }
         }
     }
     }
}
}
</lsl>
</lsl></div></div>
</div></div>
| uv button maker = <div id="box">
==UV Button Maker==
<div style="padding: 0.5em">
The following scripts are tools to making your own uv button setup for a texture in a hud or for any multi-button texture. First script is for getting the button coordinates which are used in the second script (detected_button) which returns the button number pressed.
===Get Coordinates===
<lsl>integer start_face;
vector start_uv;
 
default
{
  touch_start(integer s)
  {
      start_face = llDetectedTouchFace(0);
      start_uv = llDetectedTouchUV(0);
      start_uv.x += -(integer)start_uv.x - (start_uv.x < 0);
      start_uv.y += -(integer)start_uv.y - (start_uv.y < 0);
  }
 
  touch(integer s)
  {
      if(llDetectedTouchFace(0) == start_face)
      {
        vector new_uv = llDetectedTouchUV(0);
        new_uv.x -= (integer)new_uv.x - (new_uv.x < 0);
        new_uv.y -= (integer)new_uv.y - (new_uv.y < 0);
 
        llSetText((string)start_uv+" | "+(string)new_uv, <1,1,1>, 1);
      }
  }
 
  touch_end(integer s)
  {
      if(llDetectedTouchFace(0) == start_face)
      {
        vector end_uv = llDetectedTouchUV(0);
        end_uv.x -= (integer)end_uv.x - (end_uv.x < 0);
        end_uv.y -= (integer)end_uv.y - (end_uv.y < 0);
 
        llOwnerSay("Button coords: "+(string)start_uv+" | "+(string)end_uv, <1,1,1>, 1);
      }
  }
}</lsl>
===detected_button()===
<lsl>//Example coords
list button_coords = [
<0.617, 0.050, 0.000>, <0.823, 0.141, 0.000>,    //Button 0
<0.399, 0.535, 0.000>, <0.972, 0.764, 0.000>,    //Button 1
<0.152, 0.864, 0.000>, <0.796, 0.940, 0.000>,    //Button 2
<0.047, 0.529, 0.000>, <0.376, 0.576, 0.000>      //Button 3
];
 
integer within_square(vector test, vector a, vector b)
{
    vector BLC;
    vector TRC;
   
    if(a.x > b.x)
    {
        TRC.x = a.x;
        BLC.x = b.x;
    }
    else
    {
        TRC.x = b.x;
        BLC.x = a.x;
    }
   
    if(a.y > b.y)
    {
        TRC.y = a.y;
        BLC.y = b.y;
    }
    else
    {
        TRC.y = b.y;
        BLC.y = a.y;
    }
   
   
    if(test.x <= TRC.x && test.x >= BLC.x && test.y >= BLC.y && test.y <= TRC.y)
        return TRUE;
    else
        return FALSE;
}
 
integer detected_buttonUV(vector uv)
{
    uv.x -= (integer)uv.x - (uv.x < 0);
    uv.y -= (integer)uv.y - (uv.y < 0);
   
    integer i;
    for(i=0; i<llGetListLength(button_coords); i=i+2)
    {
        if(within_square(uv, llList2Vector(button_coords, i), llList2Vector(button_coords, i+1)))
            return i/2;
    }
   
    return -1;
}
 
default
{
    touch_start(integer total_number)
    {
        llOwnerSay("Button "+(string)detected_buttonUV(llDetectedTouchUV(0)));
    }
}</lsl></div></div>
| pass code dialog = <div id="box">
==Pass Code Dialog==
<div style="padding: 0.5em">
A simple script that will receive number inputs through menu like a number pad, and will grant access when submission matches pass code
<lsl>string pass_code = "1234";
string code_input;
 
integer dialog_ch;
integer dialog_handle;
key dialog_user;
 
list rebutton(list src)
{
    list temp;
   
    temp += llList2List(src, -3, -1);
    temp += llList2List(src, -6, -4);
    temp += llList2List(src, -9, -7);
    temp += llList2List(src, -12, -10);
   
    return temp;
}
 
integer rand(integer max)
{
    return llAbs((integer)("0x"+llGetSubString(llMD5String((string)llFrand(10000), 0), 0, 7)))%max;
}
 
num_pad()
{
    llSetTimerEvent(10);
 
    list buttons = [
"1", "2", "3",
"4", "5", "6",
"7", "8", "9",
"Submit", "0", "Cancel"];
   
    llDialog(dialog_user, "Enter pass code.\n\n"+code_input, rebutton(buttons), dialog_ch);
}
 
new_channel()
{
    dialog_ch = rand(1 << 30);
    llListenRemove(dialog_handle);
    dialog_handle = llListen(dialog_ch, "", "", "");
}
 
new_user(key user)
{
    dialog_user = user;
    code_input = "";
    new_channel();
    num_pad();
}
 
clear_user()
{
    llSetTimerEvent(0);
    dialog_user = NULL_KEY;
    llListenRemove(dialog_handle);
    dialog_handle = 0;
}
 
default
{
    touch_start(integer s)
    {
        if(dialog_user);
        else
            new_user(llDetectedKey(0));
    }
   
    timer()
    {
        clear_user();
    }
   
    listen(integer channle, string name, key id, string message)
    {
        if(id != dialog_user) return;
       
        if((integer)message || message == "0")
        {
            code_input += message;
            num_pad();
        }
       
        if(message == "Submit")
        {
            if(code_input == pass_code)
                llSay(0, "Access granted.");
            else
                llSay(0, "Access denied.");
           
            clear_user();
        }
       
        if(message == "Cancel")
            clear_user();
    }
}</lsl></div></div>
  | Script not found: {{{1}}}
  | Script not found: {{{1}}}
}}
}}
</includeonly>
</includeonly><noinclude>
<noinclude>
==Usage==
<nowiki>{{Darwin's Scripts|script name}}</nowiki>
<nowiki>{{Darwin's Scripts|script name}}</nowiki>


Returns lsl scripts
Returns lsl scripts in a div box with descriptions


==Contents:==
==Contents:==
* find screen width
* find screen width (1)
* color picker
* color picker (2)
* date difference (1)
* uv button maker (2)
* pass code dialog (1)
 
==Templates List==
[https://wiki.secondlife.com/w/index.php?title=Special%3APrefixIndex&from=&namespace=10 List of all wiki templates]
</noinclude>
</noinclude>

Latest revision as of 02:29, 6 October 2009

Usage

{{Darwin's Scripts|script name}}

Returns lsl scripts in a div box with descriptions

Contents:

  • find screen width (1)
  • color picker (2)
  • date difference (1)
  • uv button maker (2)
  • pass code dialog (1)

Templates List

List of all wiki templates