Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Door Script

Amaranthim Talon
Voyager, Seeker, Curious
Join date: 14 Nov 2006
Posts: 12,032
01-16-2009 09:27
(I posted this in the scripting forum but did not get much input yet..on the chance some scripty type folks prefer R/A....)


Hello folks - seriously script impaired person here... Someone in the Builder Exchange was kind enough to give me a copy of the Advanced Door Script that apparently comes from the Scripting Library. I placed the script in the door making sure the linked door was not the root prim as specified in the instructions. I then stood close to the door and completed the open and close part of the set up. Then ... that was it - the end of the instructions. I assumed it would work from there but when i Take and then re-rezz, the resulting thing- in this case a large cage- it rezzes like a large cylinder - a cage in the closed position - but when i touch the door to have it open, i get a message about the door has not been set up...

What did I miss?

Thank you all.
_____________________
"Yield to temptation. It may not pass your way again. "
Robert A. Heinlein




http://talonfaire.blogspot.com/

Visit Talon Faire Main:
http://slurl.com/secondlife/Misto%20Presto/216/21/155- Main Store

XStreets: http://tinyurl.com/6r7ayn
say Moo
.......
Join date: 14 Mar 2007
Posts: 284
01-16-2009 09:59
There are so many script out there for doors..

just from your story nobody can realy help you, we need to see the script code, so we can see how the script works. (and then we might help you further).

Or.. ask the provider of the script, maybe he/she knows the script well.. and can instruct you, or give a demo door.
Amaranthim Talon
Voyager, Seeker, Curious
Join date: 14 Nov 2006
Posts: 12,032
01-16-2009 10:03
From: say Moo
There are so many script out there for doors..

just from your story nobody can realy help you, we need to see the script code, so we can see how the script works. (and then we might help you further).

Or.. ask the provider of the script, maybe he/she knows the script well.. and can instruct you, or give a demo door.

Thank you- I didn't realize that was the problem- I will post a copy tonight when i go inworld- the instructions say it is from the Script Library but i will get it. Thanks again.
_____________________
"Yield to temptation. It may not pass your way again. "
Robert A. Heinlein




http://talonfaire.blogspot.com/

Visit Talon Faire Main:
http://slurl.com/secondlife/Misto%20Presto/216/21/155- Main Store

XStreets: http://tinyurl.com/6r7ayn
DancesWithRobots Soyer
Registered User
Join date: 7 Apr 2006
Posts: 701
01-16-2009 11:55
It sounds like you're using a variation of the Timeless Prototype Linked Door script. When you say "door closed" and then after setting the open position, "door opened" (Note spelling.) you should get an auditory confirmation ("confirmed";) that it worked each time. After the second time it should work.
_____________________
"Two lives I have.
One life I live. One life I dream.
In dreams I remember the better in me."
Amaranthim Talon
Voyager, Seeker, Curious
Join date: 14 Nov 2006
Posts: 12,032
01-16-2009 11:58
That is exactly as it is - however- having followed those instructions and verified the spelling- nothing happened afterwards. The door remained in the last position- the open. Which is when i thought it needed me to take it and then put it back out- but still nothing happened after that. Now I have been told it may very well be a broken script.
_____________________
"Yield to temptation. It may not pass your way again. "
Robert A. Heinlein




http://talonfaire.blogspot.com/

Visit Talon Faire Main:
http://slurl.com/secondlife/Misto%20Presto/216/21/155- Main Store

XStreets: http://tinyurl.com/6r7ayn
Jerboa Haystack
TGTKFMA
Join date: 23 Sep 2008
Posts: 2,283
01-16-2009 12:05
If you don't get it fixed earlier...I'd be happy to take a peek for you. :)

I'm doing a photo shoot at 9ish. But...am IMable as long as I'm on.
_____________________
From: Maureen Boccaccio
Well between your fingers and that magical device, you work wonders.


TOTD:
"Human beings, who are almost unique in having the ability to learn from the experience of others, are also remarkable for their apparent disinclination to do so." - Douglas Adams
Amaranthim Talon
Voyager, Seeker, Curious
Join date: 14 Nov 2006
Posts: 12,032
01-16-2009 13:12
From: Jerboa Haystack
If you don't get it fixed earlier...I'd be happy to take a peek for you. :)

I'm doing a photo shoot at 9ish. But...am IMable as long as I'm on.

Are you the shooter or the shootie? Is this Mouse Calendar Material...? Inquiring minds...
And thank you.
_____________________
"Yield to temptation. It may not pass your way again. "
Robert A. Heinlein




http://talonfaire.blogspot.com/

Visit Talon Faire Main:
http://slurl.com/secondlife/Misto%20Presto/216/21/155- Main Store

XStreets: http://tinyurl.com/6r7ayn
VonGklugelstein Alter
Bedah Profeshinal Tekstur
Join date: 22 Dec 2007
Posts: 808
01-17-2009 06:56
I dropped you a door blank template with full perm script . If its for a cage or any regular swing door, this is all you will ever need. That other script from the library is a nightmare.
_____________________
Void Singer
Int vSelf = Sing(void);
Join date: 24 Sep 2005
Posts: 6,973
01-17-2009 13:02
If you're just wanting a simple door that'll work no matter the rezzed rotation, and no extras like locking or access lists, search my simple door script in the scripting forums.
_____________________
|
| . "Cat-Like Typing Detected"
| . This post may contain errors in logic, spelling, and
| . grammar known to the SL populace to cause confusion
|
| - Please Use PHP tags when posting scripts/code, Thanks.
| - Can't See PHP or URL Tags Correctly? Check Out This Link...
| -
Amaranthim Talon
Voyager, Seeker, Curious
Join date: 14 Nov 2006
Posts: 12,032
01-17-2009 13:18
From: VonGklugelstein Alter
I dropped you a door blank template with full perm script . If its for a cage or any regular swing door, this is all you will ever need. That other script from the library is a nightmare.

Hi there! I didn't get it sorry - i have noticed when IM's get capped so does the deliver of stuff :(
_____________________
"Yield to temptation. It may not pass your way again. "
Robert A. Heinlein




http://talonfaire.blogspot.com/

Visit Talon Faire Main:
http://slurl.com/secondlife/Misto%20Presto/216/21/155- Main Store

XStreets: http://tinyurl.com/6r7ayn
Amaranthim Talon
Voyager, Seeker, Curious
Join date: 14 Nov 2006
Posts: 12,032
01-17-2009 13:18
Thanks Void :)
_____________________
"Yield to temptation. It may not pass your way again. "
Robert A. Heinlein




http://talonfaire.blogspot.com/

Visit Talon Faire Main:
http://slurl.com/secondlife/Misto%20Presto/216/21/155- Main Store

XStreets: http://tinyurl.com/6r7ayn
Isablan Neva
Mystic
Join date: 27 Nov 2004
Posts: 2,907
01-17-2009 13:47
You can also use these -

http://www.xstreetsl.com/modules.php?name=Marketplace&file=item&ItemID=370693
_____________________

http://slurl.com/secondlife/TheBotanicalGardens/207/30/420/
Amaranthim Talon
Voyager, Seeker, Curious
Join date: 14 Nov 2006
Posts: 12,032
01-17-2009 15:18
Thanks Isablan - those are very nice- I did pick up a set for future use- I was able to get the door working when Qie suggested a thread with a corrected script- here is the thread:

/54/c1/102699/1.html.

And here is the script he pointed me to (I was able to get this one to work and also successfully replaced the wooden door sound with a metallic clang I bought in-world. Next I will see about getting the lock to function.):

//------------------------------------------------------
// Timeless Linked Door Script by Timeless Prototype
//------------------------------------------------------

//======================================================
// Modified by Yabu Kurosawa (feb 2008)
// As of server version 1.19.0, the length of the object
// name is always truncated to 63 characters, the length of the
// description to 127 characters. See also:
// http://blog.secondlife.com/2008/02/01/scripters-object-name-and-description-changes/
// The original script exceeds the maximum name length.
// This problem is solved by compressing the 20 float
// values into 5-character strings and storing them all
// in the description field. Total string length is 105.
//======================================================


// The original 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

//------------------------------------------------------
// 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 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 Description of the door prim
// (these are where the position information is
// stored), and then follow the steps above again.

//------------------------------------------------------
// 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.
list allowedAgentUUIDs = ["8efecbac-35de-4f40-89c1-2c772b83cafa"]; // Comma-separated, quoted list of avatar UUIDs who are allowed access to this door.
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 = "";

// code string used for the parameter encoding/decoding
string code68 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@$#&!?";

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)
{
string s = llGetObjectDesc();
integer k = 5;

openPos.x = decode_float( llGetSubString(s,k,k+4) ); k += 5;
openPos.y = decode_float( llGetSubString(s,k,k+4) ); k += 5;
openPos.z = decode_float( llGetSubString(s,k,k+4) ); k += 5;

openRot.x = decode_float( llGetSubString(s,k,k+4) ); k += 5;
openRot.y = decode_float( llGetSubString(s,k,k+4) ); k += 5;
openRot.z = decode_float( llGetSubString(s,k,k+4) ); k += 5;
openRot.s = decode_float( llGetSubString(s,k,k+4) ); k += 5;

openScale.x = decode_float( llGetSubString(s,k,k+4) ); k += 5;
openScale.y = decode_float( llGetSubString(s,k,k+4) ); k += 5;
openScale.z = decode_float( llGetSubString(s,k,k+4) ); k += 5;

closedPos.x = decode_float( llGetSubString(s,k,k+4) ); k += 5;
closedPos.y = decode_float( llGetSubString(s,k,k+4) ); k += 5;
closedPos.z = decode_float( llGetSubString(s,k,k+4) ); k += 5;

closedRot.x = decode_float( llGetSubString(s,k,k+4) ); k += 5;
closedRot.y = decode_float( llGetSubString(s,k,k+4) ); k += 5;
closedRot.z = decode_float( llGetSubString(s,k,k+4) ); k += 5;
closedRot.s = decode_float( llGetSubString(s,k,k+4) ); k += 5;

closedScale.x = decode_float( llGetSubString(s,k,k+4) ); k += 5;
closedScale.y = decode_float( llGetSubString(s,k,k+4) ); k += 5;
closedScale.z = decode_float( llGetSubString(s,k,k+4) ); k += 5;

isSetup = TRUE;
}
else
{
myOwnerSay("The door prim's description is empty of has invalid syntax. Delete the door prim's description and setup the door prim again.";);
}

}

mySetDoorParams(vector openPos, rotation openRot, vector openScale, vector closedPos, rotation closedRot, vector closedScale)
{
string s = "door:";

s += encode_float(openPos.x);
s += encode_float(openPos.y);
s += encode_float(openPos.z);

s += encode_float(openRot.x);
s += encode_float(openRot.y);
s += encode_float(openRot.z);
s += encode_float(openRot.s);

s += encode_float(openScale.x);
s += encode_float(openScale.y);
s += encode_float(openScale.z);

s += encode_float(closedPos.x);
s += encode_float(closedPos.y);
s += encode_float(closedPos.z);

s += encode_float(closedRot.x);
s += encode_float(closedRot.y);
s += encode_float(closedRot.z);
s += encode_float(closedRot.s);

s += encode_float(closedScale.x);
s += encode_float(closedScale.y);
s += encode_float(closedScale.z);

llSetObjectDesc(s);

isSetup = TRUE;
mySay(0,"Parameters are stored";);
}

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 (llListFindList(allowedAgentUUIDs, [(string)id]) != -1)
{
hasPermission = TRUE;
}
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);
}
}
}

//==========================================================================
// encode a float with 7 digits precision into a 5-character string
// minimum=1e-31, maximum=1e+31
// example: 1.234567 --> "hAM70"
//==========================================================================

string encode_float(float value)
{
integer neg = 0;
integer exp = 0;
integer k = 0;
integer i;
integer n;
string s;

// get sign, make value positive
if( value < 0 )
{
neg = 1;
value = -value;
}

// scale value to 7 digits before decimal dot
if( value > 0 )
{
if( value > 1e31 ) value = 1e31;
if( value < 1e-31) value = 1e-31;
while( value >= 10000000 )
{
exp += 1;
value = value / 10;
}
while( value < 1000000 )
{
exp -= 1;
value = value * 10;
}
}

// round to integer, discard decimals
k = (integer)(value+0.5);

// encode exponent and sign into integer (should fit into 32 bit)
k = k*64 + (exp+38);
k = k*2 + neg;

// encode integer into string
s = "";
for( i=0; i<5; i++ )
{
n = k % 68;
k = k / 68;
s = llGetSubString(code68,n,n) + s;
}

return s;
}

//==========================================================================
// decode a 5-character string into a float with 7 digits precision
// example: "hAM70" --> 1.234567
//==========================================================================

float decode_float(string s)
{
integer k = 0;
integer i;
integer neg;
float value;
integer exp;

// decode string into integer
for( i=0; i<5; i++ )
{
k = k*68 + llSubStringIndex(code68,llGetSubString(s,i,i));
}

// extract sign and exponent
neg = k % 2;
k = k/2;

exp = k % 64 - 38;
k = k/64;

// convert into float
value = (float)k;

// scale according to exponent
while( exp > 0 )
{
value = value * 10;
exp -= 1;
}
while( exp < 0 )
{
value = value / 10;
exp += 1;
}

// insert sign
if( neg ) value = -value;

return value;
}

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(llGetObjectDesc(), "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.
_____________________
"Yield to temptation. It may not pass your way again. "
Robert A. Heinlein




http://talonfaire.blogspot.com/

Visit Talon Faire Main:
http://slurl.com/secondlife/Misto%20Presto/216/21/155- Main Store

XStreets: http://tinyurl.com/6r7ayn