From Lucinda Bulloch:

someone asked me to make this script. It just sends out a string that others with the same script can pick up. Copy and paste this into a blank script and load that script into an object.  Rename the object Friendship Braclet then edit the object description with a list of words seperated by commers. When its on anyone with the same words, they will be told you are near.  Fun thing for finding people with the same interest it has help built in and is self contained.

integer on = 0;
list levelnames = ;
integer chatchannel = 7;
integer bracletchannel = -2345678;
integer level = 0;
integer scantime = 10;
list namestore = [];
list preffstore = [];
default
{
   on_rez(integer param)
    {
     llResetScript();
    }  
   state_entry()
    {
     llOwnerSay("Commands - Type /"+(string)chatchannel+" option - options are - "+llDumpList2String(levelnames," | "));  
     llOwnerSay("Set to "+llList2String(levelnames,on)+ " - Level set to "+llList2String(levelnames,level+2));
     llListen(bracletchannel,"Friendship Braclet","","");
     llListen(chatchannel,"",llGetOwner(),"");
    }
   timer()
    {
     string sendstring = llGetObjectDesc();  
     if(level == 3)llRegionSay(bracletchannel,sendstring);
     else if(level == 2)llShout(bracletchannel,sendstring);
     else if(level == 1)llSay(bracletchannel,sendstring);
     else llWhisper(bracletchannel,sendstring); 
    }
   listen(integer chan, string name, key id, string option)
    {
     if(chan == chatchannel)
      {
       integer ix  = llListFindList(levelnames,);  
       if(ix != -1)
        {
         if(ix<2)on = ix;
         else if(ix<6)level = ix-2;
         else if(ix == 6)llOwnerSay("Commands - Type /"+(string)chatchannel+" option - options are - "+llDumpList2String(levelnames," | "));
         else if(ix == 7){namestore = [];preffstore = [];}
         else
          {
           integer x;
           for(x=0; x 2) llSetTimerEvent(on*scantime); 
         else{llOwnerSay("NO PREFFS SET - Please add your preffs seperated with commers in the description field of the object");on = 0;}
         llOwnerSay("Set to "+llList2String(levelnames,on)+ " - Level set to "+llList2String(levelnames,level+2));
        }  
      }
     if(chan == bracletchannel)
      {
       integer ix  = llListFindList(namestore,);  
       if(ix == -1)
        {  
         list matchpreffs = [];
         list preffs = llCSV2List(llGetObjectDesc());  
         list returnpreffs = llCSV2List(option);
         integer x;
         for(x=0; x