LlTakeControls

来自人工智能助力教育知识百科
跳转至: 导航搜索

Template:Needs Translation/


函数名
Function: llTakeControls( integer controls, integer accept, integer pass_on );
参数:允许从脚本有权限的代理拦截键盘和鼠标单击,特别是由控件指定的那些。

•整型控件–控制标志的位域

•整数接受–布尔值,确定是否生成控制事件

•整数传递开启–布尔值,确定控件是否执行其正常功能 若要运行此函数,脚本必须使用llRequestPermissions请求权限\u TAKE\u CONTROLS权限。 如果accept为FALSE,pass-on为FALSE,则行为不是直观的。在这种情况下,指定控件的补码不会生成事件,也不会执行其正常功能。他们实际上是残疾人。在这种情况下,当指定时,某些控制位(例如,控制位左)也被禁用。 如果accept为FALSE且pass_on为TRUE,则指定的控件不会生成事件,而是执行其正常功能。 如果accept为TRUE,pass_on为FALSE,则指定的控件将生成事件,但不执行其正常功能。 如果accept为TRUE且pass_on为TRUE,则指定的控件将生成事件并执行其正常功能。

返回值:无
注意事项
权限

不依赖于自动授予权限的状态。始终使用“运行时”权限事件。 如果脚本缺少权限\u TAKE\u控件,脚本将在DEBUG_CHANNEL上发出错误消息,操作将失败(但脚本将继续运行)。 一旦授予PERMISSION\u TAKE\u CONTROLS权限,就可以从脚本内部(使用llReleaseControls或新的llRequestPermissions调用)或用户从查看器中选择释放密钥来撤销它。脚本在重置时,或者对象被删除、分离或删除时也将丢失此权限。 当脚本中没有控制事件时,使用accept=TRUE、pass_on=TRUE似乎没有任何惩罚(例如,在AO中使用以确保它们在无脚本区工作) 某些权限中存在一个错误,如果将左键单击设置为accept=FALSE,pass\u on=TRUE,则会阻止鼠标左键单击 如果您坐/坐在已使用accept=TRUE和pass_on=TRUE获取控件的对象上,则“控制”“前进”、“控制”“后退”、“控制”“向左”和“向右控制”不会生成事件;相反,这些控件将只执行其正常功能。 如果未记录的控件0x02000000或0x04000000在pass_on=FALSE的情况下执行,则llGetAnimation将永远不会分别“左转”或“右转”,并且由llSetAnimationOverride设置的动画将永远不会播放

示例
示例1
default
{
    state_entry()
    {
        llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
    }
    run_time_permissions(integer perm)
    {
        if(PERMISSION_TAKE_CONTROLS & perm)
        {
            llTakeControls(
                            CONTROL_FWD |
                            CONTROL_BACK |
                            CONTROL_LEFT |
                            CONTROL_RIGHT |
                            CONTROL_ROT_LEFT |
                            CONTROL_ROT_RIGHT |
                            CONTROL_UP |
                            CONTROL_DOWN |
                            CONTROL_LBUTTON |
                            CONTROL_ML_LBUTTON ,
                            TRUE, TRUE);
 
        }
    }
    control(key id, integer level, integer edge)
    {
        integer start = level & edge;
        integer end = ~level & edge;
        integer held = level & ~edge;
        integer untouched = ~(level | edge);
        llOwnerSay(llList2CSV([level, edge, start, end, held, untouched]));
    }
}
相关函数
llGetPermissions –获得授权

llGetPermissionsKey –找到授予权限的代理

llRequestPermissions–请求权限

llReleaseControls

相关事件
run_time_permissions–权限接收事件

control

详见:http://wiki.secondlife.com/wiki/LlTakeControls