Sensors and detection

Forward Avatar Intersect

Code summary: 

Detects avatars whose bounding box intersects with a straight line.

// Forward sector avatar intersect
// Ordinal Malaprop
// 2006-09-22

// Should report the first avatar whose bounding box "sort of"
// intersects the forward vector of the toucher, adjusted for eye level.

// An assumption is made for simplicity that the box is actually a
// cylinder; this won't make any real difference in practice.

default
{
   touch_start(integer n)
   {
      llSensor("", NULL_KEY, AGENT, 96.0, PI_BY_TWO);
   }

   sensor(integer n)
   {
      // Adjust position for eye level
      vector mypos = llGetPos() + <0.0, 0.0, 0.75>;
      // Current forward

Day/night check action

Code summary: 

This simple script merely conducts actions when either sunrise or sunset occur.

// Day-night check action script
// Performs different actions when it becomes light or dark, checking
// every minute.

// Ordinal Malaprop
// 2006-06-20

integer daytime()
{
   vector sun = llGetSunDirection();
   return (sun.z >= 0.0);
}

default
{
   state_entry()
   {
      llSetTimerEvent(60.0);
      if (!daytime()) state night;
      // insert things to be done in the day e.g.
      llOwnerSay("I now think it is daytime");
   }

   timer()
   {
      if (!daytime()) state night;
   }

   on_rez(integer p)
   {
      llResetScript();
   }
}

state night

Ban from an area based on age

// Autoban from area if under a certain age in months
// Ordinal Malaprop
// 2006-06-13

list gCheckList = [];
integer gThisDay = 0;
integer gThisMonth = 0;
integer gThisYear = 0;

integer gAgeLimit = 3; // in months
// hardcode in keys to ignore, to save dataserver load
list gExcludeKeys = [];

check_name()
{
   if (gCheckList == []) return;
   llRequestAgentData(llList2Key(gCheckList, 0), DATA_BORN);
}

default
{
   state_entry()
   {
      gExcludeKeys += llGetOwner(); // don't check the owner
      llSensorRepeat("", NULL_KEY, AGENT, 96.0, PI, 60.0);
   }

   sen
Syndicate content