LlTakeControls
| 首页 | 函数 | 事件 | 类型 | 操作符 | 常数 | Flow Control | Script Library | Categorized Library | Tutorials |
| 函数名 |
|---|
| 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–请求权限 |
| 相关事件 |
|---|
| run_time_permissions–权限接收事件 |