LlSensorRepeat
| 首页 | 函数 | 事件 | 类型 | 操作符 | 常数 | Flow Control | Script Library | Categorized Library | Tutorials | 
| 函数名 | 
|---|
| Function: llSensorRepeat( string name, key id, integer type, float range, float arc, float rate ); | 
| 参数:• string name – 对象或角色名称! • key id – group, avatar or object UUID • integer type – mask (AGENT_BY_LEGACY_NAME, AGENT_BY_USERNAME, ACTIVE, PASSIVE, and/or SCRIPTED) • float range – 射程以米为单位[0.0,96.0] • float arc – 基本物体局部x轴与可探测物体之间的最大角度,距离[0.0,PI] • float rate – 一个sensor/no_sensor排队的频率。 | 
| 返回值:对名称和id执行一次扫描,扫描类型在前向向量的距离米和弧弧度内,并在每个速率秒内重复。直到速率秒过后,它才执行第一次扫描。 
 如果id是无效的键或NULL_KEY,则将其视为空。 根据所使用的代理*标志决定名称的格式要求 | 
| 注意事项 | 
|---|
| 当搜索一个角色,但不是通过名字,它无关紧要的代理标志使用。 传感器事件的重复受到 time dilation(滞后)的不利影响。 放置在附件根部prim的传感器将使用化身面对的方向作为它们的向前矢量。在mouselook中,这意味着它会在化身所看的任何地方,而在mouselook之外,这意味着化身指向的任何方向。这并不包括化身的头指向哪里,或者化身正在做什么动画,只是如果你向前走,化身将移动的方向。无论物体附着在哪里,情况都是如此。 放置在附着物根prim以外的prim中的传感器,其正向方向将相对于根prim的正向方向偏移,例如,放置在prim中的传感器,如果其+X方向是根的反向,则传感器将向后看。 只有最近的传感器事件被排队。之前的传感器事件被替换。 重复传感器不能在状态更改时持续存在。 llSensorRepeat偶尔可以检测出它的指定范围外,每隔几个周期,当使用接近sim边界。定时器中的llSensor则不是。 每个脚本只能激活一个或零个llSensorRepeats。如果在没有调用llSensorRemove的情况下第二次调用llSensorRepeat,第一个llSensorRepeat将失效,第二个llSensorRepeat将替换它 | 
| 示例 | 
|---|
| 示例1 //作者:Steamy Latte。
//每30秒扫描10米以内的游客。
//当对象所有者在范围内时,向其报告新的访问者。
 
string AllAgents;
 
default
{
    state_entry()
    {
        // arc=PI 是一个球体,你可以在物体面对的方向上看得更细一些,有/2,/4等等。
      //为了避免滞后,不要重复太多。
        llSensorRepeat("", "", AGENT_BY_LEGACY_NAME, 10.0, PI, 30.0);
    }
    sensor(integer num_detected)
    {
        string thisAgent;
        integer agentNum;
        for (agentNum=0; agentNum<num_detected; agentNum++)
        {
            thisAgent = llDetectedName(agentNum);
            if (llDetectedKey(agentNum) == 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;
            }
        }
    }
}
//作者Evans Love。
//(通过Void Singer限制最近的200个名称,以防止栈/堆冲突+清理)
//持续扫描10米以内的访问者,并向对象所有者报告新的访问者。
//-------------------------------------------------------------------------------------
 
integer RESPONSE_CHANNEL = -100;
float   SCAN_RANGE       = 10.0;
float   SCAN_INTERVAL    = 20.0;
list    VISITOR_LIST;
 
default
{
    state_entry()
    {
        llSensorRepeat("", NULL_KEY, AGENT_BY_LEGACY_NAME, SCAN_RANGE, PI, SCAN_INTERVAL);
    }
 
    sensor(integer number_detected)
    {
        integer agent_number;
 
//遍历所有检测到的代理
        for (; agent_number < number_detected; agent_number++)
        {
            string  this_agent_name = llDetectedName(agent_number);
            key     this_agent_key  = llDetectedKey(agent_number);
 
//如果在列表中没有找到代理
            if (llListFindList(VISITOR_LIST, [this_agent_name]) == -1)
            {
//加上她/他,使名单保持最后200人
                VISITOR_LIST = [this_agent_name] + llList2List(VISITOR_LIST, 0, 198);
 
                llDialog(this_agent_key, "Welcome!", ["Ok"], RESPONSE_CHANNEL);
 
                llOwnerSay(this_agent_name);
            }
// else agent已经在列表中了
        }
 
    }
}
 | 
| 相关函数 | 
|---|
| llSensor - 运行传感器一次 llSensorRemove - 停止llSensorRepeat计时器 llOverMyLand - 所有者的土地会发生什么 | 
| 相关事件 | 
|---|
| sensor - 当传感器探测到某物时触发 no_sensor - 当传感器探测不到任何东西时触发 | 
附录:(表格)
| type Flag Mask | Description (llDetectedType) | Description (llSensor and llSensorRepeat() mask) | |
|---|---|---|---|
| AGENT_BY_LEGACY_NAME | 0x1 | Agents | 这用于按遗留名称查找代理。 | 
| AGENT | 0x1 | Agents | 它还用于根据遗留名称查找代理,并且在功能上与AGENT_BY_LEGACY_NAME相同 | 
| AGENT_BY_USERNAME | 0x10 | Reserved | 它用于按用户名查找代理。 | 
| ACTIVE | 0x2 | Physical tasks. (Physical objects & agents) | 正在移动的物理对象或包含活动脚本的对象。因此,它现在正在使用SL服务器资源。 | 
| PASSIVE | 0x4 | Non-physical objects. | 非脚本或脚本是不活动的和非物理的,如果是物理的,是不移动的。因此,它现在不使用SL服务器资源。 | 
| SCRIPTED | 0x8 | Objects containing any active script. | 有任何脚本的对象,它现在在模拟器中做任何事情。 | 
