Difference between revisions of "User:Fred Gandt/Scripts/Continued 2"

From Second Life Wiki
Jump to navigation Jump to search
(Added first draft of door script. Yet to test, debug and annotate.)
(→‎Swing Door: Tested and seems pretty good.)
Line 138: Line 138:
}</lsl>
}</lsl>


=== Swing Door ===
=== Swingin' Door ===


'''I have yet to test and debug this. I'll be doing it pretty soon though.'''
'''I have tested this roughly and there are a couple of little bumps in it. I'll heat up the steam iron...'''


'''btw ... there will be a breakdown of the who's, what's, why's and wherefore's when I have debugged.'''
'''I will add notes and guidance soon too. Basically this is a link or unlink, rotate or don't super robust swinging door script.'''


<lsl>key LL_Brazillian_Rosewood = "a25bebc8-4739-453d-d44e-fc522cf95488";
<lsl>// Don't fiddle with it unless you know what you're doing.
// I designed it to be dragged and dropped. Touch and hold until a blue drop-down dialog shows.
// That is all the configuration details you NEED to know for now.
 
key LL_Brazillian_Rosewood = "a25bebc8-4739-453d-d44e-fc522cf95488";


key Door_Opening = "99236139-075b-3057-7c6f-0f68bb2af001";
key Door_Opening = "99236139-075b-3057-7c6f-0f68bb2af001";
Line 153: Line 157:


integer notecard_length;
integer notecard_length;
integer sound_on = TRUE;


string dia_msg = "\n";
string dia_msg = "\n";
Line 161: Line 167:


list blacklist = [];
list blacklist = [];
integer count_NCL;


string owner_name;
string owner_name;


integer sound_on = TRUE;
float time = 6.0;


integer dia_chan;
integer dia_chan;
Line 180: Line 188:
integer IGAN;
integer IGAN;


integer nop;
integer dead;


integer mln;
integer open;


integer count_NCL;
integer nop;


integer dead;
key bell_id;


integer open;
integer mln;


integer ot;
integer ot;


string NCN;
string NCN;
float time = 6.0;
key bell_id;


key owner;
key owner;
Line 207: Line 211:


key NL;
key NL;


OperateDoor(integer o, integer lm)
OperateDoor(integer o, integer lm)
Line 322: Line 324:
                     if(!w)
                     if(!w)
                     {
                     {
                         if(!llSameGroup(id))
                         if(llSameGroup(id))
                         w = FALSE;
                         w = TRUE;
                     }
                     }
                 }
                 }
Line 368: Line 370:
                 global = TRUE;
                 global = TRUE;
                 dia_msg = "\nConfigure your doors.";
                 dia_msg = "\nConfigure your doors.";
                 dia_buttons = ["Auto Close", "CANCEL"];
                 dia_buttons = ["AutoClose", "CANCEL"];
                 if(sound_on)
                 if(sound_on)
                 dia_buttons += ["SoundOff"];
                 dia_buttons += ["SoundOff"];
Line 408: Line 410:
             else if(msg == "Deadlock")
             else if(msg == "Deadlock")
             dead = TRUE;
             dead = TRUE;
             else if(msg == "No Auto")
             else if(msg == "NoAuto")
             time = 0.0;
             time = 0.0;
             else if(msg == "Auto Close")
             else if(msg == "AutoClose")
             {
             {
                 dia_lis = llListen(dia_chan, owner_name, owner, "");
                 dia_lis = llListen(dia_chan, owner_name, owner, "");
Line 417: Line 419:
                     ot = FALSE;
                     ot = FALSE;
                     dia_msg = "\nSelect the length of time to wait before auto closing or turn off auto closure.";
                     dia_msg = "\nSelect the length of time to wait before auto closing or turn off auto closure.";
                     if(((integer)time))
                     if(llRound(time))
                     dia_msg += ("\nThe time is set at " + ((string)((integer)time)) + " seconds now.");
                     dia_msg += ("\nThe time is set at " + ((string)((integer)time)) + " seconds now.");
                     dia_buttons = ["No Auto", " ", "CANCEL"];
                     dia_buttons = ["NoAuto", "-", "CANCEL"];
                     dia_buttons += ["16", "18", "20","10", "12", "14", "4", "6", "8"];
                     dia_buttons += ["16", "18", "20","10", "12", "14", "4", "6", "8"];
                     llDialog(owner, dia_msg, dia_buttons, dia_chan);
                     llDialog(owner, dia_msg, dia_buttons, dia_chan);
Line 426: Line 428:
             else
             else
             {
             {
                 if(msg != " ")
                 if(msg != "-")
                 time = ((float)msg);
                 time = ((float)msg);
             }
             }

Revision as of 19:13, 16 February 2010

FG jpg.jpg

My Contributions

Other Pages

Free Scripts

More Free Scripts

Legal Stuff

The legal stuff about contributing to this wiki (worth reading).

Tuition

Tuition scripts, notes, videos and screenshots etc. (hardly any content yet)

Free Scripts

Online Status Display & Pager

This will display the owners profile picture and a color coded and text texture sign that changes depending on the owners online status.

Just drop the script into a fresh prim.

<lsl>key owner_id;

string owner_name;

key ON_OFF_line = "124cfcec-6b8d-552c-42b8-6a1179884e74";

string profile_url = "http://world.secondlife.com/resident/";

key name_id;

key online_id;

key touch_request_id;

integer lis;

integer channel;

key requester;

OnlineStatus(integer ol, integer tr) {

   list ol_params = [];
   if(ol)
   ol_params = [17, 5, ON_OFF_line, <1.4,0.25,0.0>, <0.0,0.375,0.0>, (90*DEG_TO_RAD),
                18, 5, <0.0,1.0,0.0>, 1.0,
                18, 6, <1.0,1.0,1.0>, 1.0];
   else
   ol_params = [17, 5, ON_OFF_line, <1.4,0.25,0.0>, <0.0,0.625,0.0>, (90*DEG_TO_RAD),
                18, 5, <1.0,0.0,0.0>, 1.0,
                18, 6, <0.5,0.5,0.5>, 1.0];
   llSetPrimitiveParams(ol_params);
   if(tr)
   {
       llSetTimerEvent(30.0);
       if(ol)
       {
           lis = llListen(channel, "", requester, "");
           llDialog(requester, ("\nWould you like to page " + owner_name + "?"), ["YES", "NO"], channel);
       }
       else
       llInstantMessage(requester, (owner_name + " is currently offline."));
   }

}

default {

   state_entry()
   {
       owner_id = llGetOwner();
       name_id = llRequestAgentData(owner_id, DATA_NAME);
       channel = -5647;
   }
   dataserver(key q, string data)
   {
       if(q == name_id)
       {
           owner_name = data;
           llSetObjectName(owner_name + "'s Online Status");
           llHTTPRequest((profile_url + ((string)owner_id)), [], "");
       }
       else if(q == online_id)
       OnlineStatus(((integer)data), FALSE);
       else if(q == touch_request_id)
       OnlineStatus(((integer)data), TRUE);
   }
   http_response(key q, integer status, list metadata, string body)
   {
       integer tex_key_start = (llSubStringIndex(body, "imageid") + 18);
       integer tex_key_end = (tex_key_start + 35);
       key profile_image = ((key)llGetSubString(body, tex_key_start, tex_key_end));
       llSetPrimitiveParams([9, 0, 0, <0.6,0.875,0.0>, 0.02, ZERO_VECTOR, <1.0,1.0,0.0>, ZERO_VECTOR,
                             8, llEuler2Rot(<0.0,90.0,0.0>*DEG_TO_RAD),
                             7, <0.85,0.01,0.6>,
                             17, -1, TEXTURE_BLANK, <1.0,1.0,0.0>, ZERO_VECTOR, 0.0,
                             18, -1, ZERO_VECTOR, 1.0]);
       llSetPrimitiveParams([17, 6, profile_image, <1.0,1.0,0.0>, ZERO_VECTOR, (90*DEG_TO_RAD),
                             17, 5, ON_OFF_line, <1.4,0.25,0.0>, <0.0,0.375,0.0>, (90*DEG_TO_RAD),
                             19, 5, 0, 1,
                             18, 6, <1.0,1.0,1.0>, 1.0,
                             18, 5, <0.0,1.0,0.0>, 1.0,
                             20, 5, 1,
                             20, 6, 1]);
       llSetTimerEvent(0.1);
   }
   timer()
   {
       llListenRemove(lis);
       llSetTimerEvent(10.0);
       online_id = llRequestAgentData(owner_id, DATA_ONLINE);
   }
   touch_start(integer nd)
   {
       llSetTimerEvent(0.0);
       requester = llDetectedKey(0);
       touch_request_id = llRequestAgentData(owner_id, DATA_ONLINE);
   }
   listen(integer chan, string name, key id, string msg)
   {
       llListenRemove(lis);
       llSetTimerEvent(10.0);
       if(msg == "YES")
       {
           llInstantMessage(owner_id, ("secondlife:///app/agent/" + ((string)requester) + "/about has requested to message you."));
           llInstantMessage(requester, owner_name + " has been paged.");
       }
   }

}</lsl>

Swingin' Door

I have tested this roughly and there are a couple of little bumps in it. I'll heat up the steam iron...

I will add notes and guidance soon too. Basically this is a link or unlink, rotate or don't super robust swinging door script.

<lsl>// Don't fiddle with it unless you know what you're doing. // I designed it to be dragged and dropped. Touch and hold until a blue drop-down dialog shows. // That is all the configuration details you NEED to know for now.

key LL_Brazillian_Rosewood = "a25bebc8-4739-453d-d44e-fc522cf95488";

key Door_Opening = "99236139-075b-3057-7c6f-0f68bb2af001";

key Door_Closing = "43e46041-25fa-0a03-7be8-78297f579d53";

key Doorbell = "213aae54-6093-7fcc-118f-3039a5435986";

integer notecard_length;

integer sound_on = TRUE;

string dia_msg = "\n";

list dia_buttons = [];

list whitelist = [];

list blacklist = [];

integer count_NCL;

string owner_name;

float time = 6.0;

integer dia_chan;

integer dia_lis;

integer t_count;

integer global;

integer locked;

integer group;

integer IGAN;

integer dead;

integer open;

integer nop;

key bell_id;

integer mln;

integer ot;

string NCN;

key owner;

key NoNL;

key NCK;

key OLC;

key NL;

OperateDoor(integer o, integer lm) {

   if(nop > 2 && (!lm))
   llMessageLinked(LINK_ALL_OTHERS, dia_chan, owner_name, owner);
   if(sound_on)
   {
       key door_sound;
       if(o)
       door_sound = Door_Closing;
       else
       door_sound = Door_Opening;
       llPlaySound(door_sound, 1.0);
   }
   vector v = (llRot2Euler(llGetLocalRot())*RAD_TO_DEG);
   float x = llFabs(v.x);
   float z = v.z;
   float d;
   if(x < 1.0)
   d = 1.0;
   else
   d = -1.0;
   float a = 90.0;
   if(o)
   {
       if(x < 1.0)
       d = -1.0;
       else
       d = 1.0;
       a = -90.0;
       llSetTimerEvent(0.0);
   }
   else
   llSetTimerEvent(time);
   llTargetOmega(<0.0,0.0,d>, 1.0, 1.0);
   llSleep(1.5);
   llTargetOmega(ZERO_VECTOR, 0.0, 0.0);
   llSetLocalRot(llEuler2Rot(<x,0.0,(z + a)>*DEG_TO_RAD));
   open = (!open);

}

TouchMeAllOver(key id, integer t, integer te) {

   if(t && id == owner)
   {
       ot = TRUE;
       global = FALSE;
       dia_msg = "\n\"Global\" - Instruct all doors linked to this.\n\n\"Local\" - Instruct only locally linked doors.";
       dia_buttons = ["Global", "CANCEL", "Local"];
       dia_lis = llListen(dia_chan, owner_name, owner, "");
       llDialog(owner, dia_msg, dia_buttons, dia_chan);
   }
   if(te)
   {
       if(t_count < 10)
       {
           if(!dead)
           {
               if(!Whitelist(id))
               {
                   bell_id = id;
                   OLC = llRequestAgentData(owner, DATA_ONLINE);
                   return;
               } 
           }
           else
           {
               if(id != owner)
               return;
           }
           OperateDoor(open, FALSE);
       }
       t_count = 0;
   }

}

integer Whitelist(key id) {

   integer w = TRUE;
   integer index;
   if(id == NULL_KEY)
   {
       whitelist = [];
       blacklist = [];
       count_NCL = 0;
       NCN = llGetInventoryName(INVENTORY_NOTECARD, 0);
       if(llStringLength(NCN))
       {
           IGAN = TRUE;
           NCK = llGetInventoryKey(NCN);
           llMessageLinked(LINK_ALL_OTHERS, dia_chan, "IGAN", NCK);
           NoNL = llGetNumberOfNotecardLines(NCN);
       }
       else
       {
           IGAN = FALSE;
           if(nop > 1)
           llMessageLinked(LINK_ALL_OTHERS, dia_chan, "IGAN", owner);
       }
   }
   else
   {
       if(id != owner)
       {
           if(locked)
           {
               index = llListFindList(whitelist, [llKey2Name(id)]);
               if(index == -1)
               w = FALSE;
               if(group)
               {
                   if(!w)
                   {
                       if(llSameGroup(id))
                       w = TRUE;
                   }
               }
           }
           index = llListFindList(blacklist, [llKey2Name(id)]);
           if(index != -1)
           w = FALSE;
       }
   }
   return w;

}

default {

   state_entry()
   {
       owner = llGetOwner();
       dia_chan = (-1 * llAbs(((integer)("0x" + llGetSubString(((string)owner), -9, -3)))));
       owner_name = llKey2Name(owner);
       nop = llGetNumberOfPrims();
       mln = llGetLinkNumber();
       vector pos = llGetPos();
       llSetPrimitiveParams([9, 0, 0, <0.125, 0.375, 0.0>, 0.0,ZERO_VECTOR, <1.0, 1.0, 0.0>, ZERO_VECTOR, // Build the door.
                             17, 0, LL_Brazillian_Rosewood, <2.0, 0.1, 0.0>, <0.5, 0.025, 0.0>, 0.0,      //
                             17, 1, LL_Brazillian_Rosewood, <2.0, 1.0, 0.0>, <0.5, 0.0, 0.0>, 0.0,        //
                             17, 2, LL_Brazillian_Rosewood, <0.05, 1.0, 0.0>, <0.0125, 0.0, 0.0>, 0.0,    // Set the texture offsets.
                             17, 3, LL_Brazillian_Rosewood, <2.0, 0.1, 0.0>, <0.5, -0.025, 0.0>, 0.0,     //
                             17, 4, LL_Brazillian_Rosewood, <0.05, 1.0, 0.0>, ZERO_VECTOR, 0.0,           //
                             17, 5, LL_Brazillian_Rosewood, <1.0, 1.0, 0.0>, ZERO_VECTOR, 0.0,            // Raise up out of floor.
                             6, <pos.x,pos.y,(pos.z + 1.25)>,                                             //
                             19,ALL_SIDES,1,13,                                                           //
                             7, <3.0, 0.2, 3.0>,                                                          //
                             8, ZERO_ROTATION]);                                                          // etc.
       Whitelist(NULL_KEY);
   }
   listen(integer chan, string name, key id, string msg)
   {
       llListenRemove(dia_lis);
       if(msg != "CANCEL")
       {
           if(msg == "Global" | msg == "Local")
           {
               if(msg == "Global")
               global = TRUE;
               dia_msg = "\nConfigure your doors.";
               dia_buttons = ["AutoClose", "CANCEL"];
               if(sound_on)
               dia_buttons += ["SoundOff"];
               else
               dia_buttons += ["SoundOn"];
               if(locked)
               dia_buttons += ["Unlock"];
               else
               dia_buttons += ["Lock"];
               if(group)
               dia_buttons += ["GroupOff"];
               else
               dia_buttons += ["GroupOn"];
               if(dead)
               dia_buttons += ["Undead"];
               else
               dia_buttons += ["Deadlock"];
               if(global)
               llMessageLinked(LINK_ALL_OTHERS, dia_chan, "ALTT", owner);
               else
               llMessageLinked(LINK_ALL_OTHERS, dia_chan, "LTT", owner);
               dia_lis = llListen(dia_chan, owner_name, owner, "");
               llDialog(owner, dia_msg, dia_buttons, dia_chan);
           }
           if(msg == "SoundOff")
           sound_on = FALSE;
           else if(msg == "SoundOn")
           sound_on = TRUE;
           else if(msg == "Unlock")
           locked = FALSE;
           else if(msg == "Lock")
           locked = TRUE;
           else if(msg == "GroupOff")
           group = FALSE;
           else if(msg == "GroupOn")
           group = TRUE;
           else if(msg == "Undead")
           dead = FALSE;
           else if(msg == "Deadlock")
           dead = TRUE;
           else if(msg == "NoAuto")
           time = 0.0;
           else if(msg == "AutoClose")
           {
               dia_lis = llListen(dia_chan, owner_name, owner, "");
               if(ot)
               {
                   ot = FALSE;
                   dia_msg = "\nSelect the length of time to wait before auto closing or turn off auto closure.";
                   if(llRound(time))
                   dia_msg += ("\nThe time is set at " + ((string)((integer)time)) + " seconds now.");
                   dia_buttons = ["NoAuto", "-", "CANCEL"];
                   dia_buttons += ["16", "18", "20","10", "12", "14", "4", "6", "8"];
                   llDialog(owner, dia_msg, dia_buttons, dia_chan);
               }
           }
           else
           {
               if(msg != "-")
               time = ((float)msg);
           }
       }
   }
   dataserver(key q, string data)
   {
       if(q == NoNL)
       {
           notecard_length = ((integer)data);
           NL = llGetNotecardLine(NCN, count_NCL);
       }
       else if(q == NL)
       {
           if(data != EOF)
           whitelist += [data];
           if(count_NCL < notecard_length)
           NL = llGetNotecardLine(NCN, (++count_NCL));
           else
           {
               integer index = llListFindList(whitelist, ["blacklist"]);
               blacklist = llList2List(whitelist, index, -1);
               whitelist = llDeleteSubList(whitelist, index, -1);
           }
       }
       else if(q == OLC)
       {
           if(((integer)data))
           {
               llPlaySound(Doorbell, 1.0);
               llInstantMessage(owner, (llKey2Name(bell_id) + " is at the door"));
           }
       }
   }
   link_message(integer sender, integer num, string str, key id)
   {
       if(str != "IGAN")
       {
           if(sender == (mln + 1) | sender == (mln - 1))
           {
               if(num == dia_chan && str == owner_name && id == owner)
               OperateDoor(open, TRUE);
               else if(num == dia_chan && str == "LTT" && id == owner)
               dia_lis = llListen(dia_chan, owner_name, owner, "");
           }
           if(num == dia_chan && str == "ALTT" && id == owner)
           dia_lis = llListen(dia_chan, owner_name, owner, "");
       }
       else
       {
           if(num == dia_chan && id == owner)
           {
               if(IGAN)
               llMessageLinked(LINK_ALL_OTHERS, dia_chan, "IGAN", NCK);
           }
           else
           {
               NCN = ((string)id);
               whitelist = [];
               blacklist = [];
               count_NCL = 0;
               NoNL = llGetNumberOfNotecardLines(NCN);
           }
       }        
   }
   touch(integer nd)
   {
       ++t_count;
       if(t_count >= 10)
       {
           key id = llDetectedKey(0);
           TouchMeAllOver(id, TRUE, FALSE);
       }
   }
   touch_end(integer nd)
   {
       key id = llDetectedKey(0);
       TouchMeAllOver(id, FALSE, TRUE);
   }
   timer()
   {
       llSetTimerEvent(0.0);
       ot = FALSE;
       llListenRemove(dia_lis);
       OperateDoor(open, FALSE);
       
   }
   changed(integer change)
   {
       if(change & CHANGED_INVENTORY)
       {
           IGAN = FALSE;
           Whitelist(NULL_KEY);
       }
       if(change & CHANGED_OWNER)
       llResetScript();
       if(change & CHANGED_LINK)
       {
           llSleep(2.0);
           nop = llGetNumberOfPrims();
           mln = llGetLinkNumber();
           Whitelist(NULL_KEY);
       }
   }

}</lsl>