LlGetParcelPrimOwners

来自人工智能助力教育知识百科
Mkx讨论 | 贡献2020年5月31日 (日) 15:36的版本 (创建页面,内容为“{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = Function: list llGetParcelPrimOwners( vector pos ); |参数= 参数…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

Template:Needs Translation/


函数名
Function: list llGetParcelPrimOwners( vector pos );
参数:vector pos – 区域坐标中的位置
返回值:返回在pos拥有地块上的对象并使用了单个土地影响的所有居民和组的列表。列表的格式为[key ownerKey1,integer agentImpact1,key ownerKey2,integer agentImpact2。。。],并按代理/组键排序,最大步幅为100步。
注意事项
此函数使脚本睡眠2.0秒。

如果此功能所在对象的所有者当前未联机且未连接到sim,则Function将不会在集体所有的土地上工作(尽管现在似乎正在为私有土地的所有者工作,即使所有者不在身边)。

 这些限制可以通过将对象定义为对象所有者所属的组来克服。
 在做决定之前记得要复印一份,因为你不可能得到某样东西。

需要对包具有类似所有者的权限。

 Ownership 
 如果地块所有者和对象所有者相同(包括对象和地块都是集团所有的情况下):              
    返回所有对象所有者。              
 如果包裹归集团所有,但对象归集团成员所有,则函数返回取决于授予的权限:              
    如果住户拥有“归还集团拥有的物品”的权力:              
        返回列表包括它在地块上拥有的对象的组和LI。              
    如果常驻程序具有“返回组设置对象”权限:             
        返回列表包括将对象设置为地块上的组的所有所有者              
    如果住户具有“返回非组对象”权限              
        返回列表包括不属于上述两类的对象的所有所有者。              
 如果以上情况都不匹配,则返回空列表。
示例
显示以逗号分隔的用户ID及其原始计数列表。键1,计数1,键2,计数2。。。。等。
default
{
    state_entry()
    {
        list TempList = llGetParcelPrimOwners( llGetPos() );
        llSay(0, llList2CSV(TempList) );
    }
}

使用浮动文本按计数顺序显示原始所有者名称和计数

// 显示此地块上原始所有者的浮动文本列表,按每个所有者的原始计数排序。最高用户优先。
// Omei Qunhua
 
// 对象具有与其所有者相同的权限来查看原始地块所有者(在“关于土地>>对象>>对象所有者”中)
 
// 示例:如果不能返回组对象,则看不到组对象              
//如果不能返回任何对象,将返回空列表。 
//如果prim被认为是正确的组,它应该总是得到一个完整的列表
 
// Note: 仅当对象所有者在Sim中时,才在集团所有的土地上工作
//       Deeded objects always work (group is always online?)
 
list    gListCountsAndOwners;       // 排序列表计数+所有者对
list    gListNamesAndCounts;        // 所有者名称列表+原始计数
integer gOffset;
integer gIndex;
key     gDataserverID;
integer gListLength;
 
default
{
    state_entry()
    {
        llSetText("Parcel Prim Owner List\n", <1,1,1>, 1);
        list TempList = llGetParcelPrimOwners( llGetPos() );
        gListLength= llGetListLength(TempList);      
        if (!gListLength)
        {
            llSetText("[ERROR]\n Couldn't get Parcel Prim Owners", <1,0,0>, 1);
        }
        else
        {
            // 生成一份适合按计数排序的列表副本,即计数然后按键 
            integer x;
            for ( ; x < gListLength; x += 2)
            {
                gListCountsAndOwners += llList2Integer(TempList, x+1);
                gListCountsAndOwners += llList2String(TempList, x);
            }
            // 按原始计数的降序排列列表
            gListCountsAndOwners = llListSort(gListCountsAndOwners, 2, FALSE);
            // 查找每个所有者的名称。从排序列表的开头开始
            gDataserverID = llRequestAgentData( llList2String(gListCountsAndOwners, 1), DATA_NAME );
        }
    }
 
    dataserver( key request_id, string data)
    {
        string TempStr = "Parcel Prim Owner List\n";
        if ( request_id == gDataserverID )
        {
            gListNamesAndCounts += data;
            gListNamesAndCounts += llList2String(gListCountsAndOwners, gIndex);  // 将计数作为字符串处理
 
            gIndex += 2;               // 快速浏览单子
            if (gIndex < gListLength )
            {
                // 查找列表中下一个所有者的名称
                gDataserverID = llRequestAgentData( llList2String(gListCountsAndOwners, gIndex +1) , DATA_NAME );
            }
            integer x;
            for (; x < 16; x+=2)       // 从“gOffset”开始,显示列表的8名子集
            {
                // 如果我们超出了列表的末尾,我们只会得到空值,所以不会造成伤害
                TempStr += llList2String(gListNamesAndCounts, gOffset+x) + " : " + llList2String(gListNamesAndCounts, gOffset+x+1) + "\n";
            }
            llSetText(TempStr, <1,1,1>, 1);
            if ( (gListNamesAndCounts != []) > 14)       // 如果列表超过14(7个所有者+计数)。。。
            {
                gOffset += 2;   // 向前滚动列表
                llSleep(2);     // 每隔2秒
            }
        }
    }
 
    touch_start(integer total_number)
    {
        llResetScript();        // 触摸,重新开始整个过程
    }
}
相关函数
相关事件