“LlRequestPermissions”的版本间的差异

来自人工智能助力教育知识百科
跳转至: 导航搜索
Mkx讨论 | 贡献
第90行: 第90行:
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! colspan="2" style="text-align: center;" |Constants  
+
! colspan="2" |Constants  
 
! Action  
 
! Action  
 
! Category
 
! Category

2020年8月5日 (三) 04:09的版本

Template:Needs Translation/


函数名
Function: llRequestPermissions( key agent, integer permissions );
参数:• key agent – 在同一区域的化身UUID

• integer permissions – 权限掩码(包含请求权限的位域)

返回值:向代理请求运行某些类函数的权限。

脚本继续执行,不等待响应。当给出响应时,将在事件队列中放置一个run_time_permissions事件。

注意事项
一个对话框将显示给代理,以授予这些权限,除非自动授予,如附录所示。

如果对象附加到代理,“自动”权限被授予请求而不通知。

权限可以跨状态更改持久化。

不管授予是否是自动的,您都应该始终使用run_time_permissions事件。授予权限需要时间,在调用run_time_permissions处理程序之前,不应该假定它已经完成。

菜单选项“停止动画我”将释放某些权限(PERMISSION_TRIGGER_ANIMATION和PERMISSION_OVERRIDE_ANIMATIONS),如果拥有这些权限的脚本与代理在同一区域,并且脚本没有附加到权限授予者。

权限不会累积。

 如果在之前对该函数的调用中请求了权限并授予了该权限,那么在随后的调用中没有请求,该权限将被释放(丢失)。
 要同时请求两个或多个权限,请使用位或操作符,例如:
     llRequestPermissions(AvatarID, PERMISSION_TAKE_CONTROLS (PERMISSION_TRIGGER_ANIMATION))

对每个脚本分别请求和授予权限,即使它们位于相同的对象中。

目前根本不可能请求没有权限(见下面的问题);作为一种解决方案,llResetScript可以使用。

脚本一次只能持有一个代理的权限。要拥有多个代理的权限,您必须使用多个脚本。

授予权限的结果会立即影响llGetPermissionsllGetPermissionsKey的返回,尽管run_time_permissions事件正在排队,或者如果对象的事件队列已满,则会删除该事件。

权限请求对话框永远不会超时。

如果一个脚本发出两个权限请求,最后一个响应将被视为已授予的权限。

查看器将任何代理对任何其他代理的权限请求限制为10秒内5个对话框。

权限请求和改变状态…

 请求处于一种状态的权限,然后在代理响应之前更改状态,将导致在代理响应之后以新状态触发run_time_permissions。
 只请求在一种状态下自动授予的权限,然后立即更改状态,将永远不会触发run_time_permissions。
示例
请求允许动画化身
default
{
    touch_start(integer detected)
    {
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);
    }
    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION)
        {
            llStartAnimation("sit");
            llOwnerSay("animation will end in 5 seconds");
            llSetTimerEvent(5.0);
        }
    }
    timer()
    {
        llSetTimerEvent(0.0);
        llStopAnimation("sit");
    }
}

要同时请求两个(或更多)权限,请使用按位或操作符。

llRequestPermissions(AvatarID, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION);

- or -

integer perms = PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION;
llRequestPermissions(AvatarID, perms);
相关函数
llGetPermissions - 获得已授予的权限

llGetPermissionsKey - 获取授予权限的化身。

相关事件
run_time_permissions - 允许接收事件

附录:(表格)

Constants Action Category Granter Automatically granted when…
PERMISSION_DEBIT 0x2 从代理人的账户中取钱 Money Owner
[[]]
[[]]
[[]]
[[]]
[[]]
[[]]
[[]]
[[]]