LlTeleportAgentGlobalCoords

来自人工智能助力教育知识百科
Wzc讨论 | 贡献2020年7月20日 (一) 08:01的版本 (创建页面,内容为“{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = Function: llTeleportAgentGlobalCoords( key agent, vector global_coor…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

Template:Needs Translation/


函数名
Function: llTeleportAgentGlobalCoords( key agent, vector global_coordinates, vector region_coordinates, vector look_at );
参数:

将代理传送到指定全局_坐标的区域内的区域_坐标集。探员朝着look\u at定义的方向着陆。可以使用llRequestSimulatorData(region_name,DATA_SIM_POS)检索区域的全局坐标 •密钥代理(key agent)–位于同一区域的化身UUID(要传送的化身) •矢量全局坐标(vector global_coordinates)–目的地区域的全局坐标。可以使用llRequestSimulatorData(地区名称,数据_SIM_POS)检索。 •矢量区域_坐标( vector region_coordinates)–化身着陆的区域坐标位置。 •vector look_at–化身着陆时应面向的方向(东、西等)。 若要运行此函数,脚本必须使用llRequestPermissions请求“传送”权限,并且必须由代理授予该权限。 llRequestSimulatorDatallteleportagentglobalords的组合允许代理通过区域名称传送到区域。

返回值:无
注意事项
不依赖于自动授予权限的状态。始终使用“运行时”权限事件。

如果脚本缺少权限“传送”,脚本将在调试频道上发出错误消息,操作失败(但脚本继续运行)。 如果权限_TELEPORT是由代理以外的任何人授予的,那么当函数被调用时,DEBUG峎通道上将会发出一个错误。 一旦PERMISSION\u TELEPORT权限被授予,除了从脚本内部(例如,使用一个新的llRequestPermissions调用)或脚本被重置或删除之外,就无法撤消它。 此功能只能传送对象的所有者(除非是经验的一部分)。 传送被限制了 此函数不能在使用llAttachToAvatarTemp附加的对象中的脚本中使用。 坐着的化身不能用这个功能传送。你必须先解开它们。 此功能不会覆盖包裹的传送设置,也就是说,如果包裹启用了着陆区域,则代理将被传送到那里。 如果脚本是虚拟人物授予许可的体验的一部分,那么这个功能可以在不作为所有者的情况下传送它们,并且它将覆盖包裹传送路由。 look\u at不是区域中某个点的坐标。look_-at向量是<llCos(facing),llSin(faceing),0.0>,其中facing是到达的化身要看的角度。

示例
示例1
string simName = "Help Island Public";
vector simGlobalCoords;
 
vector landingPoint = <128.0, 128.0, 24.0>;
 
key owner;
 
 
default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }
 
    changed(integer change)
    {
        if (change & CHANGED_OWNER)
            llResetScript();
    }
 
    state_entry()
    {
        owner = llGetOwner();
 
        llRequestPermissions(owner, PERMISSION_TELEPORT);
        llRequestSimulatorData(simName, DATA_SIM_POS);
    }
 
    touch_start(integer total_number)
    {
        key id = llDetectedKey(0);
 
        if (id == owner)
        {
            if (simGlobalCoords == ZERO_VECTOR)
            {
                llOwnerSay("Config error, tp request was denied. Please try again!");
                llResetScript();
            }
            else
            {
                llOwnerSay("Teleporting you to: http://maps.secondlife.com/secondlife/"
                    + llEscapeURL(simName) + "/" + (string)llRound(landingPoint.x)
                    + "/" + (string)llRound(landingPoint.y) + "/" + (string)llRound(landingPoint.z) + "/");
 
                llTeleportAgentGlobalCoords(owner, simGlobalCoords, landingPoint, ZERO_VECTOR);
            }
        }
        else
        {
            // llRegionSayTo is faster than llInstantMessage and we can assume
            // that the touching avatar is within the same sim
 
            llRegionSayTo(id, PUBLIC_CHANNEL,
                "Sorry, I can't tp you. You're NOT my owner!");
        }
    }
 
    run_time_permissions(integer perm)
    {
        // if permission request has been denied (read ! as not)
        if (!(perm & PERMISSION_TELEPORT))
        {
            llOwnerSay("I need permissions to teleport you!");
            llRequestPermissions(owner, PERMISSION_TELEPORT);
        }
    }
 
//  dataserver event only called if data is returned
//  or in other words, if you request data for a sim that does
//  not exist this event will NOT be called
 
    dataserver(key query_id, string data)
    {
        simGlobalCoords = (vector)data;
        // llOwnerSay("Sim global coords: " + (string)simGlobalCoords);
    }
}
相关函数
llGetPermissions –获得授权

llGetPermissionsKey –找到授予权限的代理

llRequestPermissions–请求权限

llRequestSimulatorData–用于请求模拟器位置

llTeleportAgent–将特工传送到该地区的地标或位置。

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