Under Age Boot
Revision as of 11:58, 30 October 2007 by Chance Unknown (talk | contribs)
Security device example to teleport home accounts below a minimum age limit; can be useful in combating free griefer accounts.
Place this script into a single prim and decorate to taste.
Requirements:
- Deed to match the land group
- Place the prim reasonably close to the parcel landing point
- Set the prim description field to be the minmimum age accounts must be in days
Operation:
- No special instructions. It operates stand alone once installed.
////////////////////////////////////////////////////////////////////////////////////// // // 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 // ////////////////////////////////////////////////////////////////////////////////////// // Set the age in the description field of the prim to reflect the SL account age // of individuals to boot. integer AGE_LIMIT; list agent_list; integer date2days(string data) { integer result; list parse_date = llParseString2List(data, ["-"], []); integer year = llList2Integer(parse_date, 0); result = (year - 2000) * 365; // Bias Number to year 2000 (SL Avatars Born After Date) list days = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ]; result += llList2Integer(days, (llList2Integer(parse_date, 1) - 1)); if (year/4 == llRound(year/4)) result += 1; result += llList2Integer(parse_date, 2); return result; } default { on_rez(integer param) { llResetScript(); } state_entry() { AGE_LIMIT = (integer)llGetObjectDesc(); if (AGE_LIMIT < 2) { AGE_LIMIT = 2; } llSetObjectName("Unknown Underage Boot - " + llGetRegionName()); llVolumeDetect(TRUE); if (llOverMyLand(llGetKey()) == FALSE) { llSay(0, "Requires proper group deeds to work on this land."); } llSensorRepeat("", "", AGENT, 100.0, PI, 1.0); llOwnerSay("Set Avatar age in the description, currently it is set for " + (string)AGE_LIMIT + " days."); } sensor(integer num_detected) { if (llOverMyLand(llGetKey()) == FALSE) { return; } integer i; for (i = 0; i < num_detected; i++) { key agent = llDetectedKey(i); if (llSameGroup(agent) == FALSE) { if (llListFindList(agent_list, [ agent ]) < 0) { if (llGetListLength(agent_list) == 0) { agent_list += agent; llRequestAgentData(llList2Key(agent_list, 0), DATA_BORN); } else { agent_list += agent; } } } } } dataserver(key queryid, string data) { AGE_LIMIT = (integer)llGetObjectDesc(); integer today = date2days(llGetDate()); integer age = date2days(data); key agent = llList2Key(agent_list, 0); string name = llKey2Name(agent); if (AGE_LIMIT < 2) { AGE_LIMIT = 2; llSetObjectDesc((string)AGE_LIMIT + " : SET AGE LIMIT HERE"); } if (name != "") { if ((today - age) < AGE_LIMIT) { if (llOverMyLand(agent)) { llSay(0, name + ", you are too young to be here."); llTeleportAgentHome(agent); } } else { } } else { llTeleportAgentHome(agent); } agent_list = llDeleteSubList(agent_list, 0, 0); if (llGetListLength(agent_list) != 0) { llRequestAgentData(llList2Key(agent_list, 0), DATA_BORN); } } }