Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Discussion: Timeless Linked Door

Adept Pascal
Elite, get over it.
Join date: 25 Jun 2005
Posts: 26
04-23-2006 08:29
Make full-featured doors that are linked to other prims with the Timeless Linked Door script. Full instructions and details are available on the wiki:
http://secondlife.com/badgeo/wakka.php?wakka=LibraryTimelessLinkedDoor
Nada Epoch
The Librarian
Join date: 4 Nov 2002
Posts: 1,423
Original Thread
04-26-2006 07:39
/15/58/102144/1.html
_____________________
i've got nothing. ;)
MadameThespian Underhill
"I'm Aaacting!"
Join date: 18 Dec 2002
Posts: 38
04-29-2006 22:25
This is a great script! But now...here's a question: Can someone alter this to work on a door that requires 4 linked prims. My "door" that I want to open has an unusual shape that is made with 4 prims. Is there a way to set some kind of a hierarchy where my 4 linked prims that make the door will open to the base object to which it is linked?

um....does this make sense. Sorry if it doesn't. I'm not a scripter...just and alterer. :o
_____________________
Support the arts...go to the theatre!
Timeless Prototype
Humble
Join date: 14 Aug 2004
Posts: 216
05-01-2006 01:43
From: MadameThespian Underhill
This is a great script! But now...here's a question: Can someone alter this to work on a door that requires 4 linked prims. My "door" that I want to open has an unusual shape that is made with 4 prims. Is there a way to set some kind of a hierarchy where my 4 linked prims that make the door will open to the base object to which it is linked?

um....does this make sense. Sorry if it doesn't. I'm not a scripter...just and alterer. :o

Step 1. Change the following line of the script:
CODE
if (num == llGetLinkNumber())

to become:
CODE
if (num == llGetLinkNumber() || llGetLinkName(sender_num) == llGetObjectName())

Step 2. Change the name of each prim in the door so that they all have matching names, eg. "Front Door".

Step 3. Change the following line of the script:
CODE
llMessageLinked(LINK_SET, 255, "cmd|door|opened", NULL_KEY);

to become:
CODE
llMessageLinked(LINK_SET, 255, "cmd|door|doOpen", NULL_KEY);

Step 4. Change the following line of the script:
CODE
llMessageLinked(LINK_SET, 255, "cmd|door|closed", NULL_KEY);

to become:
CODE
llMessageLinked(LINK_SET, 255, "cmd|door|doClose", NULL_KEY);
_____________________
Jason Desoto
Registered User
Join date: 15 Apr 2006
Posts: 1
Script Help
05-03-2006 11:28
This script seems to work some-what. The problem I've found is I am unable to open the door after configuring the script with an associated door. I get "Jason Desoto is at the door." - I've added my UUID for my AV to the script.
Neb Soyer
Really good looking.
Join date: 9 Apr 2006
Posts: 45
05-03-2006 11:31
Now everyone shouldn't have to pay for a door script ever again. :rolleyes:

Good stuff Timeless.
_____________________
down in the ghetto.
Seamus Remblai
Registered User
Join date: 18 Apr 2006
Posts: 4
Swing or Slide
05-17-2006 23:47
Exactly how does this door open is it a swinging or a sliding door?
Timeless Prototype
Humble
Join date: 14 Aug 2004
Posts: 216
05-18-2006 09:19
The same script can be used to make a swinging door, a sliding door or a door that goes smaller to open.

Currently limited to a single prim door, multiple doors per linked set. I will work on an update one day to make it handle one or more multiple prim doors.
_____________________
Sensi Bliss
Registered User
Join date: 15 Dec 2004
Posts: 5
05-20-2006 04:31
Good script i have it linked to the entire house and have no problems with it :) Thankyou!
Laurie Partridge
Retro Goddess
Join date: 1 Jun 2004
Posts: 73
05-24-2006 17:16
Shame on me for not seeing this thread sooner. I've been having trouble getting this script to work correctly. It works perfectly as a door. I can get it to swing, slide, anything. But the lock function doesn't work even though I get a "confirmed" message when I use the "lock" command.

And related to that, I've been told how to add users manually via the script. I'm wondering if this script is supposed to have an "add user" command through a chat channel?

Am I doing something wrong, or am I asking the script to do things it isn't designed to do?
_____________________
Adept Pascal
Elite, get over it.
Join date: 25 Jun 2005
Posts: 26
05-24-2006 23:42
When the door is locked only the owner or group can open it. So, to you it doesn't appear locked, but to strangers it is.

As for adding users, it's not ideal at the moment and could use some work, but currently you have to add the UUID (key) of the avatar you wish to allow directly into the script.
Laurie Partridge
Retro Goddess
Join date: 1 Jun 2004
Posts: 73
05-25-2006 05:06
Hi Adept, thanks so much for responding. I thought that may be how the door worked. So, I tried it with a friend and he was able to open it over and over, even after I'd locked the door. It seems like such a simple thing, and I'm not getting any sort of error message. Frustrating.


EDIT: As far as adding users, I can live with the door as is, if only I could lock it. :(
_____________________
Timeless Prototype
Humble
Join date: 14 Aug 2004
Posts: 216
05-25-2006 11:49
From: Laurie Partridge
Hi Adept, thanks so much for responding. I thought that may be how the door worked. So, I tried it with a friend and he was able to open it over and over, even after I'd locked the door. It seems like such a simple thing, and I'm not getting any sort of error message. Frustrating.


EDIT: As far as adding users, I can live with the door as is, if only I could lock it. :(

Set the allowGroupToo to FALSE in the script and save it. Then say 'lock' to lock the doors. Then only you can open them.
CODE
integer     allowGroupToo       = FALSE; // Set to FALSE to disallow same group access to door.
_____________________
Laurie Partridge
Retro Goddess
Join date: 1 Jun 2004
Posts: 73
05-25-2006 17:15
Thank you so much! That did it!
_____________________
Kimmer Soyer
Registered User
Join date: 19 Feb 2006
Posts: 93
06-11-2006 11:43
Does the door have to be at a 0,0,0 rotation? I've got a door that's at an angle and when i use this script, it works fine for a while, but then after about ten minutes the door seems to shift and opens at a different location when i try open/closing it. Then it stays stuck there.
Timeless Prototype
Humble
Join date: 14 Aug 2004
Posts: 216
06-11-2006 16:04
From: Kimmer Soyer
Does the door have to be at a 0,0,0 rotation? I've got a door that's at an angle and when i use this script, it works fine for a while, but then after about ten minutes the door seems to shift and opens at a different location when i try open/closing it. Then it stays stuck there.

Once the door is linked to the link set and the script has recorded the positions and rotations in the door name and description, make sure that the build always keeps the same root prim and that the door doesn't move in relation to the root prim.

If you must change the root prim and/or its position or the position of the door, rename the door prim to Object and clear the description and reset the door script, then record the new positions for closed and open. Do one door at a time.
_____________________
Kimmer Soyer
Registered User
Join date: 19 Feb 2006
Posts: 93
06-11-2006 17:27
Ah, thanks Timeless.

Guess i should have waited until I was completely done building the house before adding in the script. LOL.


Works like a charm now.
Danny Cosmo
Registered User
Join date: 11 Apr 2005
Posts: 1
07-03-2006 12:13
"Currently limited to a single prim door, multiple doors per linked set. I will work on an update one day to make it handle one or more multiple prim doors."

I'm using it for a multiple prim door by just giving each prim the script individually. then when i say 'open' they all hear me and open. ;)
paulie Femto
Into the dark
Join date: 13 Sep 2003
Posts: 1,098
good stuff!
07-05-2006 10:59
Thanks!
_____________________
REUTERS on SL: "Thirty-five thousand people wearing their psyches on the outside and all the attendant unfettered freakishness that brings."
Caroline Apollo
Lo Lo
Join date: 23 Oct 2003
Posts: 288
07-12-2006 16:44
Isn't there some way to use llMessageLinked to move more than 1 prim? I am a script noob, but I have other scripts that work this way. And if so, can you show me how? I would really rather it work on touch and not by say. Thanks =]
Lillani Lowell
Registered User
Join date: 5 Apr 2006
Posts: 171
07-13-2006 00:03
You can open/close multi-prim doors using llMessageLinked.

You just need to pass a message to the prims you want to move, telling them whether they should open or close, etc.

I have a set of cages which use sliding doors, they use the llMessageLinked method and have several prims per door which slide open and close on command. Works like a charm.

Put the following script into each of the prims you want to move:

vector door_move;

default
{

link_message( integer sender_num, integer num, string message, key id )
{

if( message == "open" )
{

door_move = llGetLocalPos();

door_move.y += 2;

llSetPos( door_move );

}

if( message == "close" )
{

door_move = llGetLocalPos();

door_move.y -= 2;

llSetPos( door_move );

}

}

}

and then use:

llMessageLinked( LINK_SET, 0, "open", NULL_KEY );

You can change LINK_SET to the prim #s of your door if you know them.
Tuber Potato
Registered User
Join date: 26 Jan 2006
Posts: 57
I love this script!
08-01-2006 09:00
Thanks Timeless,

This script rules. I use it for all sorts of things besides doors. I use it for stage curtains, potitioning furniture, double doors, sliding doors, you name it. If you need something to move when you click it, this script will do it.

Here are some tips I have learned after countless uses of the script.

1) The first thing I learned, is that is better to NOT link your door to your building for this script. I make a tiny little invisible prim at the corned of the door and use that as the Root Prim with door prim linked to it. This allows me to move the door anywhere I want after it has been configured. You can even pick up the door and rez it somewhere else and it works just fine. Linking to your building, like an adjacent wall or floor means that door can never move to a different location.

2) For those of you wanting double doors, the solution is simple: Make a set of doors. Set up a left side door. Then make and set up right side door. Each with its own copy of the script, and each set up indepenently from the other door. The doors will open seperately from each other, but if a visitor clicks on both doors, both will open. Any commands you give the door, such as lock and unlock, will be heard by BOTH doors. Also, if you have 2 doors in 2 different parts of your house (ie a back and a front door) if they are close enough to each other, they may also both hear your voice commands. Setting up one door to listen on a channel isn't hard.

3) If you should happen to screw up setting up a door and want to try again, you might get very frustrated, as it seems to not work. Here are the clues. First ungroup your door and root prim. Delete the script from the door and rename the door object, deleting the coordinates from the Object name and description. Re-add the script to the door. Start the configuring over.

4) Locking the door does in fact work. The owner can open the door regardless of its locked state. Others cannot. Setting the object to group does infact treat group members as if they were owners, allowing them to lock, unlock, open close.

Anyway, I use the hell the out of this script and just thought I'd share some of the tricks I have learned over the months.

PS I made some very nice stage curtains with this script, also help a friend make window curtains, as well as curtains that go around a bed.

Tuber
Princess Pierterson
Registered User
Join date: 17 Dec 2005
Posts: 10
Access List
10-19-2006 15:18
Hey Everyone, I hope all is well. To start of, I am not a scripter. But I'm building some prefabs and wanted a way for people to add others to the access list w/o having to find their Key#. After much tinkering, this is what I came up with:



CODE
//------------------------------------------------------
// Timeless Linked Door Script by Timeless Prototype
//------------------------------------------------------
// The latest version of this script can always be found
// in the Library section of the wiki:
// http://www.secondlife.com/badgeo/
// This script is free to use, but whereever it is used
// the SCRIPT's permissions MUST be set to:
// [x] Next owner can modify
// [x] Next owner can copy
// [x] Next owner can transfer
// [x] Allow anyone to copy
// [x] Share with group

// Modified by Princess Pierterson on October 19, 2006

//------------------------------------------------------
// USAGE INSTRUCTIONS FOR EVERYDAY USE:
//------------------------------------------------------
// Say the following commands on channel 0:
// 'unlock' - Unlocks all doors in range.
// 'lock' - Locks all doors in range and allows
// only the permitted users to open it.
// To open the door, either Touch it, Walk into it ( If
// collision is uncommented at the bottom) or
// say 'open' or say 'close'.

//------------------------------------------------------
// USAGE INSTRUCTIONS FOR BUILDERS:
//------------------------------------------------------
// 1. Copy and paste this script into the door prim and
// change the settings (see further down).
// 2. The door prim must be linked to at least one other
// prim (could be linked to the house for example).
// 3. The door prim MUST NOT be the root prim.
// 4. Use Edit Linked Parts to move, rotate and size the
// door prim for the closed state.
// 5. When ready, stand close to the door and say
// '/door closed' (this records the closed door
// position, rotation and size to the object's
// name and description).
// 6. Use the Edit Linked parts to move, rotate and size
// the door prim for the opened state.
// 7. When ready, stand close to the door and say
// '/door opened' (this records the opened door
// position, rotation and size).
// 8. Once recorded it will not accept these commands
// again. If you do need to redo the settings then
// delete the Name and Description of the door prim
// (these are where the position information is
// stored), and then follow the steps above again.
// Note: deleting the object name won't save, so set
// the object name to 'Object' to reset the object
// name.

//------------------------------------------------------
// Change these settings to suit your needs.
//------------------------------------------------------
// To mute any/all of the sounds set the sound string(s)
// to "" (empty string).
// To get the UUID of a sound, right click on the sound
// in your inventory and choose "Copy Asset UUID", then
// paste the UUID in here.
string doorOpenSound = "cb340647-9680-dd5e-49c0-86edfa01b3ac";
string doorCloseSound = "e7ff1054-003d-d134-66be-207573f2b535";
string confirmedSound = "69743cb2-e509-ed4d-4e52-e697dc13d7ac";
string accessDeniedSound = "58da0f9f-42e5-8a8f-ee51-4fac6c247c98";
string doorBellSound = "ee871042-e272-d8ec-3d40-0b0cb3371346"; // Setting to empty stops door announcements too.
float autoCloseTime = 120.0; // 0 seconds to disable auto close.
integer allowGroupToo = TRUE; // Set to FALSE to disallow same group access to door.
integer AccessList = FALSE; // Set this to TRUE use the access list method
integer OwnerOnly = FALSE; // Set this to TRUE to make door OWNER only
list AccessNames = [
"Princess Pierterson",
"John Doe"
];
integer listenChannel = 0;


//------------------------------------------------------
// Leave the rest of the settings alone, these are
// handled by the script itself.
//------------------------------------------------------
integer isLocked = FALSE; // Only when the door is locked do the permissions apply.
integer isOpen = TRUE;
vector openPos = ZERO_VECTOR;
rotation openRot = ZERO_ROTATION;
vector openScale = ZERO_VECTOR;
vector closedPos = ZERO_VECTOR;
rotation closedRot = ZERO_ROTATION;
vector closedScale = ZERO_VECTOR;
key openerKey = NULL_KEY;
key closerKey = NULL_KEY;
integer isSetup = FALSE;
integer listenHandle = 0;
string avatarName = "";

mySayName(integer channel, string objectName, string message)
{
string name = llGetObjectName();
llSetObjectName(objectName);
llSay(0, "/me " + message);
llSetObjectName(name);
}

mySay(integer channel, string message)
{
string name = llGetObjectName();
llSetObjectName("Door");
llSay(0, message);
llSetObjectName(name);
}

myOwnerSay(string message)
{
string name = llGetObjectName();
llSetObjectName("Door");
llOwnerSay(message);
llSetObjectName(name);
}

mySoundConfirmed()
{
if (confirmedSound != "")
{
llTriggerSound(confirmedSound, 1.0);
}
}

mySoundAccessDenied()
{
if (accessDeniedSound != "")
{
llTriggerSound(accessDeniedSound, 1.0);
}
}

myGetDoorParams()
{
isSetup = FALSE;
if (llSubStringIndex(llGetObjectDesc(), "door;") == 0 && llSubStringIndex(llGetObjectName(), "door;") == 0)
{
list nameWords = llParseString2List(llGetObjectName(), [";"], []);
list descWords = llParseString2List(llGetObjectDesc(), [";"], []);
if (llGetListLength(nameWords) != 4 || llGetListLength(descWords) != 4)
{
myOwnerSay("The door prim's name and/or description has invalid syntax and/or number of parameters. Delete the door prim's name and description and setup the door prim again.");
}
else
{
openPos = (vector)llList2String(nameWords, 1);
openRot = (rotation)llList2String(nameWords, 2);
openScale = (vector)llList2String(nameWords, 3);
closedPos = (vector)llList2String(descWords, 1);
closedRot = (rotation)llList2String(descWords, 2);
closedScale = (vector)llList2String(descWords, 3);
isSetup = TRUE;
}
}
}

mySetDoorParams(vector openPos, rotation openRot, vector openScale, vector closedPos, rotation closedRot, vector closedScale)
{
llSetObjectName("door;" +
(string)openPos + ";" +
(string)openRot + ";" +
(string)openScale);
llSetObjectDesc("door;" +
(string)closedPos + ";" +
(string)closedRot + ";" +
(string)closedScale);
isSetup = TRUE;
}

integer myPermissionCheck(key id)
{
integer hasPermission = FALSE;
if (isLocked == FALSE)
{
hasPermission = TRUE;
}
else if (llGetOwnerKey(id) == llGetOwner())
{
hasPermission = TRUE;
}
else if (allowGroupToo == TRUE && llSameGroup(id))
{
hasPermission = TRUE;
}
else if (OwnerOnly && llDetectedKey(0) != llGetOwner())
{
hasPermission = TRUE;
}
string x = llKey2Name(llDetectedKey(0));
// Check if we're using an access list, if we are look for the person, if we're the owner
// Let us in even if we're not in the bloody access list. If collider isn't the owner
// and isn't in the guest list, don't open the door.
if (AccessList && llListFindList(AccessNames, [x]) < 0 && llDetectedKey(0) != llGetOwner())
{
return;
}
return hasPermission;
}

myOpenDoor()
{
isOpen = FALSE;
myToggleDoor();
}

myCloseDoor()
{
isOpen = TRUE;
myToggleDoor();
}

myToggleDoor()
{
if (isSetup == FALSE)
{
myOwnerSay("The door prim has not been configured yet. Please read the usage instructions in the door script.");
}
else if (llGetLinkNumber() == 0 || llGetLinkNumber() == 1)
{
myOwnerSay("The door prim must be linked to at least one other prim and the door prim must not be the root prim");
}
else
{
isOpen = !isOpen;
if (isOpen)
{
if (doorBellSound != "")
{
llTriggerSound(doorBellSound, 1.0);
if (avatarName != "")
{
mySayName(0, avatarName, "is at the door.");
avatarName = "";
}
}
if (doorOpenSound != "")
{
llTriggerSound(doorOpenSound, 1.0);
}
llSetPrimitiveParams([ PRIM_POSITION, openPos, PRIM_ROTATION, ZERO_ROTATION * openRot / llGetRootRotation(), PRIM_SIZE, openScale ]);
// Door API.
llMessageLinked(LINK_SET, 255, "cmd|door|opened", NULL_KEY);
}
else
{
if (doorCloseSound != "")
{
llTriggerSound(doorCloseSound, 1.0);
}
llSetPrimitiveParams([ PRIM_POSITION, closedPos, PRIM_ROTATION, ZERO_ROTATION * closedRot / llGetRootRotation(), PRIM_SIZE, closedScale ]);
// Door API.
llMessageLinked(LINK_SET, 255, "cmd|door|closed", NULL_KEY);
}

llSetTimerEvent(0.0);
if (isOpen == TRUE && autoCloseTime != 0.0)
{
llSetTimerEvent(autoCloseTime);
}
}
}

default
{
state_entry()
{
listenHandle = llListen(listenChannel, "", NULL_KEY, "");
myGetDoorParams();
}

touch_start(integer total_number)
{
if (myPermissionCheck(llDetectedKey(0)) == TRUE)
{
avatarName = llDetectedName(0);
myToggleDoor();
}
else
{
mySoundAccessDenied();
}
}

timer()
{
myCloseDoor();
}

link_message(integer sender_num, integer num, string str, key id)
{
// Door API. The API is here in case you want to create PIN entry keypads or whatever.
if (num == llGetLinkNumber())
{
if (str == "cmd|door|doOpen")
{
myOpenDoor();
}
else if (str == "cmd|door|doClose")
{
myCloseDoor();
}
}
if (str == "cmd|door|discover")
{
llMessageLinked(LINK_SET, 255, "cmd|door|discovered|" + (string)llGetKey(), id);
}
}

listen(integer channel, string name, key id, string message)
{
// Performance note: it's quicker to compare the strings than to compare permissions each time anyone says anything on this channel.
if (message == "open")
{
if (myPermissionCheck(id) == TRUE)
{
// Only open the door if the person is quite close to this door.
openerKey = id;
closerKey = NULL_KEY;
avatarName = name;
llSensor(name, id, AGENT, 5.0, TWO_PI);
}
else
{
mySoundAccessDenied();
}
}
else if (message == "close")
{
if (myPermissionCheck(id) == TRUE)
{
openerKey = NULL_KEY;
closerKey = id;
avatarName = name;
// Only close the door if the person is quite close to this door.
llSensor(name, id, AGENT, 5.0, TWO_PI);
}
else
{
mySoundAccessDenied();
}
}
else if (message == "lock")
{
if (myPermissionCheck(id) == TRUE)
{
isLocked = TRUE;
mySoundConfirmed();
}
else
{
mySoundAccessDenied();
}
}
else if (message == "unlock")
{
if (myPermissionCheck(id) == TRUE)
{
isLocked = FALSE;
mySoundConfirmed();
}
else
{
mySoundAccessDenied();
}
}
else if (message == "/door opened" && llSubStringIndex(llGetObjectName(), "door;") == -1)
{
if (llGetOwnerKey(id) == llGetOwner())
{
mySoundConfirmed();
openPos = llGetLocalPos();
openRot = llGetLocalRot();
openScale = llGetScale();
isOpen = TRUE;
if (! (closedPos == ZERO_VECTOR && closedRot == ZERO_ROTATION && closedScale == ZERO_VECTOR))
{
mySetDoorParams(openPos, openRot, openScale, closedPos, closedRot, closedScale);
}
}
else
{
mySoundAccessDenied();
}
}
else if (message == "/door closed" && llSubStringIndex(llGetObjectDesc(), "door;") == -1)
{
if (llGetOwnerKey(id) == llGetOwner())
{
mySoundConfirmed();
closedPos = llGetLocalPos();
closedRot = llGetLocalRot();
closedScale = llGetScale();
isOpen = FALSE;
if (! (openPos == ZERO_VECTOR && openRot == ZERO_ROTATION && openScale == ZERO_VECTOR))
{
mySetDoorParams(openPos, openRot, openScale, closedPos, closedRot, closedScale);
}
}
else
{
mySoundAccessDenied();
}
}
}

sensor(integer num_detected)
{
if (openerKey != NULL_KEY)
{
integer i;
for (i = 0; i < num_detected; i++)
{
if (llDetectedKey(i) == openerKey && myPermissionCheck(llDetectedKey(i)) == TRUE)
{
myOpenDoor();
}
}
openerKey = NULL_KEY;
}
else
{
integer i;
for (i = 0; i < num_detected; i++)
{
if (llDetectedKey(i) == closerKey && myPermissionCheck(llDetectedKey(i)) == TRUE)
{
myCloseDoor();
}
}
closerKey = NULL_KEY;
}
}

//------------------------------------------------------
// Uncomment the following code if you particularly want
// collisions to affect the door state.
//------------------------------------------------------

// collision_start(integer num_detected)
// {
// integer i;
// for (i = 0; i < num_detected; i++)
// {
// if (myPermissionCheck(llDetectedKey(i)) == TRUE)
// {
// avatarName = llDetectedName(i);
// myOpenDoor();
// }
// else if (llDetectedType(i) & AGENT)
// {
// mySoundAccessDenied();
// }
// }
// }

} // End of default state and end of script.



I've tested it and it seems to work. Let me know what you think or what your experiences are with this. Later.:)
chr0nic MacKay
Registered User
Join date: 12 Jul 2006
Posts: 26
01-16-2007 17:51
hey there i love this script i have been trying to find somtihng liek this for a while i lvoe the changes u ahev made to it withe h lsit but is there away that ppl can add and remove ppl with out haveing to edit the script i have some freinds that wouldnt know the frist thing about editing and adding a name this is why i asked i have this script on my doors at my rp pub and the ppl renting the rooms cant added ppl there always asking me so i was hopeing to find out if there was away so ppl can type /add avname or /remove avname to add and take ppl off the list

thx for your time reading this
rico
Celty Westwick
Registered User
Join date: 24 Jun 2006
Posts: 145
Script to actuate open and close with buttons
02-01-2007 20:46
I would like to add an open and close set of buttons linked to an object with a prim that uses the timeless linked door script. I need the buttons because the "door" prim moves to a position where it is not visible to be "touched" when in the open position and a timed close is not desirable. In the script, a section seems to refer to this capability:

link_message(integer sender_num, integer num, string str, key id)
{
// Door API. The API is here in case you want to create PIN entry keypads or whatever.
if (num == llGetLinkNumber())
{
if (str == "cmd|door|doOpen";)
{
myOpenDoor();
}
else if (str == "cmd|door|doClose";)
{
myCloseDoor();
}
}
if (str == "cmd|door|discover";)
{
llMessageLinked(LINK_SET, 255, "cmd|door|discovered|" + (string)llGetKey(), id);
}
}

I have tried to create two scripts to using llMessageLinked, but have not gotten it to work at this point:

default
{
touch_start( integer num )
{
llMessageLinked(LINK_SET,255,"cmd|door|doOpen",NULL_KEY);
}
}

Anyone have a script that has worked for them?
1 2 3 4