LlSensorRepeat

De DigiWiki.

// Written by Steamy Latte.
// Scans every 30 seconds for visitors within 10 meters.
// Reports new visitors to object owner when she is in range.
 
string AllAgents;
string OwnerName;
 
default
{
    state_entry()
    {
        // arc=PI is a sphere, you could look more narrowly in the direction object is facing with PI/2, PI/4 etc.
        // don't repeat this too often to avoid lag.
        llSensorRepeat("", "", AGENT, 10.0, PI, 30.0);
    }
    sensor(integer num_detected)
    {
        string thisAgent = "";
        integer agentNum;
        for (agentNum=0; agentNum<num_detected; agentNum++)
        {
            key thisKey = llDetectedKey(agentNum);
            string thisAgent = llDetectedName(agentNum);
            if (thisKey == llGetOwner())
            {
                if (AllAgents != "")
                {
                    llOwnerSay("We've had the following visitors:" + AllAgents);
                    AllAgents = "";
                }
            }
            else if (llSubStringIndex(AllAgents+"\n", "\n"+thisAgent+"\n") < 0)
            {
                AllAgents = AllAgents + "\n" + thisAgent;
            }
        }
    }
}
// Written by Evans Love.
// (Limited to most recent 200 names by Void Singer to prevent eventual Stack/Heap Collision + clean up)
// Continuously scans for visitors within 10 meters and reports new visitors to object owner.
//-------------------------------------------------------------------------------------
 
// Channel
integer RESPONSE_CHANNEL = -100;
 
// Variables
list VISITOR_LIST;
float SCAN_RANGE = 10.0;
float SCAN_INTERVAL = 0.1;
 
 
//Program
default
{
    state_entry (  )
    {
        llSensorRepeat ( "", NULL_KEY, AGENT, SCAN_RANGE, PI, SCAN_INTERVAL );
    }
 
    sensor ( integer number_detected )
    {
        integer agent_number;
 
        for ( agent_number = 0; agent_number < number_detected; agent_number ++ )  // Iterates through all Agents detected.
        {
            string this_agent_name = llDetectedName ( agent_number ); // Working Agent Name
            key this_agent_key = llDetectedKey ( agent_number ); // Working Agent Key
 
            integer index = llListFindList ( VISITOR_LIST, [ this_agent_name ] );
 
            if ( index == -1 )  // If the Agent is not on the list.
            {
                VISITOR_LIST = [this_agent_name] + llList2List( VISITOR_LIST, 0, 198 ); // Appends the Agent to the Visitor List
 
                llDialog ( this_agent_key, "Welcome!", "Ok", RESPONSE_CHANNEL );
 
                llOwnerSay ( this_agent_name );
 
            }
 
            else // If the Agent is already on the list.
            {
            } 
        }   
    }
 
    no_sensor (  )
    {
    }
}
Outils personnels
  • Cette page a été consultée 557 fois.
donate
Google Ads