LlGetAgentList/ja

From Second Life Wiki
Jump to navigation Jump to search

要約

関数: list llGetAgentList( integer scope, list options );

現在その地域にいるアバターのリストを問合せます、scopeパラメタで制限
[key id0, key id1, ..., key idn] または [string error_msg] - その地域内の、scopeで指定された区画にいる全アバターのキーを list で返します。

• integer scope
AGENT_LIST_* 選択する範囲を指定するフラグ
  • AGENT_LIST_PARCEL - スクリプトが走っている同じ区画にいるアバターだけを返します
  • AGENT_LIST_PARCEL_OWNER - その地域にある区画で、スクリプトの入ってるオブジェクトがある区画と同じ所有者の区画全部にいるアバターだけを返します
  • AGENT_LIST_REGION - その地域にいる全部のアバターを返します
• list options 未使用

警告

  • 戻りリストの順番は意味を持ちません
  • 100以下のアバターしか戻りません

サンプル

KBcaution.png 重要 アバターが同じSIMにいるかどうかチェックするには、 llGetAgentSizeZERO_VECTORを返さないことでチェックしてください。こちらのほうが llGetAgentList を呼び出してリスト内のキーと比較するよりずっと速くて簡単です。
KBcaution.png 重要 今のところ、この関数はoptionで制限できません。したがって、この関数は最大100のアバターのキーを返すかもしれません。これらのキーを保存するには大きなメモリー容量が必要で、STACK_HEAP_COLLISION_ERRORを起こすかもしれないことに注意してください。
//地域内で検出した最大100のアバターのキーと名前を表示

default
{
    touch_start(integer total_number)
    {
        list avatarsInRegion = llGetAgentList(AGENT_LIST_REGION, []);
        integer numOfAvatars = llGetListLength(avatarsInRegion);

        // アバターがいないときは、リストアップはせずにお知らせ
        if (!numOfAvatars)
        {
            llOwnerSay("この地域にアバターはみつかりません!");
            return;
        }

        integer index;
        while (index < numOfAvatars)
        {
            key id = llList2Key(avatarsInRegion, index);
            string name = llKey2Name(id);

            llOwnerSay(name + " [ " + (string)id + " ]");
            ++index;
        }
    }
}
//  タッチで距離で並び替えた名前と距離を答える

default
{
    touch_start(integer num_detected)
    {
        list keys = llGetAgentList(AGENT_LIST_REGION, []);
        integer numberOfKeys = llGetListLength(keys);

        vector currentPos = llGetPos();
        list newkeys;
        key thisAvKey;

        integer i;
        for (i = 0; i < numberOfKeys; ++i) {
            thisAvKey = llList2Key(keys,i);
            newkeys += [llRound(llVecDist(currentPos,
                            llList2Vector(llGetObjectDetails(thisAvKey, [OBJECT_POS]), 0))),
                        thisAvKey];
        }
  
        newkeys = llListSort(newkeys, 2, FALSE);     //  距離の降順でストライドソート

        for (i = 0; i < (numberOfKeys * 2); i += 2) {
            llOwnerSay(llGetDisplayName(llList2Key(newkeys, i+1))
                +" ["+ (string) llList2Integer(newkeys, i) + "m]");
        }
    }
}

関連項目

特記事項

経緯

All Issues

~ Search JIRA for related Issues
   llGetAgentList() with scope AGENT_LIST_PARCEL or AGENT_LIST_PARCEL_OWNER returns empty list when attached to avatar
   llGetNumberOfAgents() function to return an integer count of agents
   AGENT_LIST_MAX_RESULTS option for llGetAgentList()

Signature

function list llGetAgentList( integer scope, list options );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。