Mkx(讨论 | 贡献)2020年5月31日 (日) 15:36的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
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(); // 触摸,重新开始整个过程
}
}
|