Difference between revisions of "Group Privacy"
Jump to navigation
Jump to search
Kireji Haiku (talk | contribs) (faster loop, fixed some conditional statements and improved readability) |
Omei Qunhua (talk | contribs) (Reduce obfuscation) |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
{{LSL Header}} | {{LSL Header}} | ||
Many landlords do not allow residents to have security devices that are | Many landlords do not allow residents to have security devices that are continuously operating. This device is activated manually, and only operates so long as avatars are present. When avatars leave the vicinity, the device turns off. To turn on again, the device needs to be touched by an authorised person. | ||
Place this script into a single prim, and decorate to taste. | Place this script into a single prim, and decorate to taste. | ||
Line 13: | Line 13: | ||
# Insure that group members have the group tag active | # Insure that group members have the group tag active | ||
# Touch to activate; touch to deactivate | # Touch to activate; touch to deactivate | ||
< | <source lang="lsl2"> | ||
////////////////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////////////////// | ||
// | // | ||
Line 37: | Line 37: | ||
float duration = 60.0; // Duration of Land Ban Following the Eject (1Hr) | float duration = 60.0; // Duration of Land Ban Following the Eject (1Hr) | ||
float RANGE = 40.0; // Scan Range (40m) | float RANGE = 40.0; // Scan Range (40m) | ||
float RATE = | float RATE = 10.0; // Scan Rate (10 Sec) | ||
integer status; | integer status; | ||
Line 46: | Line 44: | ||
{ | { | ||
status = FALSE; | status = FALSE; | ||
llSensorRemove(); | llSensorRemove(); | ||
llSetColor(<1,1,1>, ALL_SIDES); | |||
llSetColor( | llSay(0, "Deactivated."); | ||
llSetText("Group Privacy\nOff\n\nTouch to Turn On", <1,1,1>, 1); | |||
llSay( | |||
llSetText("Group Privacy\nOff\n\nTouch to Turn On", | |||
} | } | ||
Line 59: | Line 53: | ||
{ | { | ||
status = TRUE; | status = TRUE; | ||
llSensorRepeat("", NULL_KEY, AGENT, RANGE, PI, RATE); | llSensorRepeat("", NULL_KEY, AGENT, RANGE, PI, RATE); | ||
llSetColor(<1,0,0>, ALL_SIDES); | llSetColor(<1,0,0>, ALL_SIDES); | ||
llSay(0, "Activated while group memebers are present."); | |||
llSay( | llSetText("Group Privacy\nOn\n\nTouch to Turn Off", <1,1,1>, 0.5); | ||
llSetText("Group Privacy\nOn\n\nTouch to Turn Off", | |||
} | } | ||
Line 74: | Line 64: | ||
{ | { | ||
llUnSit(id); | llUnSit(id); | ||
llEjectFromLand(id); | llEjectFromLand(id); | ||
llAddToLandBanList(id, duration); // Hour of Ban | llAddToLandBanList(id, duration); // Hour of Ban | ||
} | } | ||
Line 90: | Line 78: | ||
touch_start(integer num_detected) | touch_start(integer num_detected) | ||
{ | { | ||
if (llGetLandOwnerAt(llGetPos()) != llGetOwner()) | |||
llSay(0, "Deed device to match land group."); | |||
llSay( | |||
else | else | ||
{ | { | ||
if (llSameGroup( | if (llSameGroup(llDetectedKey(0))) | ||
{ | { | ||
if (status) | if (status) | ||
Line 106: | Line 90: | ||
} | } | ||
else | else | ||
llSay( | llSay(0, "Authorized to group members only."); | ||
} | } | ||
} | } | ||
Line 113: | Line 97: | ||
{ | { | ||
integer group_members; | integer group_members; | ||
key id; | |||
integer i; | integer i; | ||
for ( ; i < num_detected; ++i) | |||
{ | { | ||
id = llDetectedKey(i); | |||
if (llSameGroup(id)) | if (llSameGroup(id)) | ||
{ | { | ||
llRemoveFromLandBanList(id); | llRemoveFromLandBanList(id); | ||
++group_members; | ++group_members; | ||
} | } | ||
Line 128: | Line 112: | ||
boot(id); | boot(id); | ||
} | } | ||
if (!group_members) | if (!group_members) | ||
Line 139: | Line 122: | ||
} | } | ||
} | } | ||
</ | </source> | ||
{{LSLC|Library}} | {{LSLC|Library}} |
Latest revision as of 10:31, 21 January 2016
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Many landlords do not allow residents to have security devices that are continuously operating. This device is activated manually, and only operates so long as avatars are present. When avatars leave the vicinity, the device turns off. To turn on again, the device needs to be touched by an authorised person.
Place this script into a single prim, and decorate to taste.
Requirements:
- Edit script range and timer frequency to suit
- Deed to match the land group
Operation:
- Insure that group members have the group tag active
- Touch to activate; touch to deactivate
//////////////////////////////////////////////////////////////////////////////////////
//
// Version 1.0 Release
// Copyright (C) 2007, Chance Unknown
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//////////////////////////////////////////////////////////////////////////////////////
float duration = 60.0; // Duration of Land Ban Following the Eject (1Hr)
float RANGE = 40.0; // Scan Range (40m)
float RATE = 10.0; // Scan Rate (10 Sec)
integer status;
off()
{
status = FALSE;
llSensorRemove();
llSetColor(<1,1,1>, ALL_SIDES);
llSay(0, "Deactivated.");
llSetText("Group Privacy\nOff\n\nTouch to Turn On", <1,1,1>, 1);
}
on()
{
status = TRUE;
llSensorRepeat("", NULL_KEY, AGENT, RANGE, PI, RATE);
llSetColor(<1,0,0>, ALL_SIDES);
llSay(0, "Activated while group memebers are present.");
llSetText("Group Privacy\nOn\n\nTouch to Turn Off", <1,1,1>, 0.5);
}
boot(key id)
{
if (llOverMyLand(id) == TRUE)
{
llUnSit(id);
llEjectFromLand(id);
llAddToLandBanList(id, duration); // Hour of Ban
}
}
default
{
state_entry()
{
off();
}
touch_start(integer num_detected)
{
if (llGetLandOwnerAt(llGetPos()) != llGetOwner())
llSay(0, "Deed device to match land group.");
else
{
if (llSameGroup(llDetectedKey(0)))
{
if (status)
off();
else
on();
}
else
llSay(0, "Authorized to group members only.");
}
}
sensor(integer num_detected)
{
integer group_members;
key id;
integer i;
for ( ; i < num_detected; ++i)
{
id = llDetectedKey(i);
if (llSameGroup(id))
{
llRemoveFromLandBanList(id);
++group_members;
}
else
boot(id);
}
if (!group_members)
off();
}
no_sensor()
{
off();
}
}