LlGetObjectDetails/ja

From Second Life Wiki
Jump to: navigation, search

要約

関数: list llGetObjectDetails( key id, list params );

id の詳細、具体的には params で指定されたものを list で返します。

• key id 同じ 地域 にある アバター または プリムUUID。もしくは近くの地域にあるアバターまたはプリムの UUID *
• list params OBJECT_* フラグ

id が見つからない場合は空のリストとなります。 整数として正しくない引数が渡されたときは、 OBJECT_UNKNOWN_DETAIL が返ります。

仕様

Avatar detection range for SL Server 1.34
id 引数

id には、この関数が詳細を取得しようとしているアバターまたはプリムの UUID を指定します。

id が地域で見つからないと、近くの地域で id に一致するアバターを探します。アバターは、地域にいるか、地域の境界線の外 34 メートル以内にいれば、見つかったとされます (図を参照) 。アバターがこのゾーンを去った後では、 1 回だけ結果が返ってくることがあります。

params 引数

params リストはオブジェクトの特定の属性を指定するのに使用されます。結果のリストの並び順は、指定された順と同じになります。

  • params に対象外の整数が含まれていると、 OBJECT_UNKNOWN_DETAIL が出力リストに入ります。
  • params整数 でないものが含まれていると、何もすることなく無視されます。
フラグ 説明 型変換 されて文字列になったときの文字数 返り値 代替手段 ローカル
OBJECT_NAME 1 プリムの名前を取得します。
もし id がアバターだった場合、レガシー名 が返ります。
最大 63 文字 string name llGetObjectName
OBJECT_DESC 2 プリムの説明を取得します。
id がアバターの場合、空文字列が返ります。
最大 127 文字 string desc llGetObjectDesc
OBJECT_POS 3 プリムの位置を リージョン座標 で取得します。
id が地域の外にいるアバターの場合 (上記参照) 、この位置はスクリプトが 動作している 地域に相対するものになります。
最大 37 文字 vector pos llGetPos
OBJECT_ROT 4 プリムの回転を取得します。 最大 48 文字 rotation rot llGetRot
OBJECT_VELOCITY 5 オブジェクトの速度を取得します。 36 文字 vector vel llGetVel
OBJECT_OWNER 6 オブジェクトの オーナー のキーを取得します。
id がアバターの場合、アバターのキーが返ります (id と同じ) 。
id がグループ所有の場合、 NULL_KEY が返ります。
36 文字 key owner llGetOwner
OBJECT_GROUP 7 プリムの グループ のキーを取得します。
id がアバターの場合、 NULL_KEY が返ります。[1]
36 文字 key group グループ
OBJECT_CREATOR 8 プリムの クリエーター のキーを取得します。
id がアバターの場合、 NULL_KEY が返ります。
36 文字 key creator クリエーター llGetCreator
OBJECT_RUNNING_SCRIPT_COUNT 9 オブジェクトやアバターにくっついて 稼働している スクリプトの数を取得します。 最大 11 文字 integer count llGetScriptState
OBJECT_TOTAL_SCRIPT_COUNT 10 稼働状態によらず、オブジェクトやアバターにくっついているスクリプトの数を取得します。 最大 11 文字 integer count llGetInventoryNumber
OBJECT_SCRIPT_MEMORY 11 オブジェクトやアバターに割り当てられたスクリプトメモリの合計値をバイトで取得します。 最大 11 文字 integer bytes
OBJECT_SCRIPT_TIME 12 オブジェクトやアバターが使用している CPU 時間の 1 秒間の平均値を取得します。 最大 15 文字 float seconds Top Scripts
OBJECT_PRIM_EQUIVALENCE 13 オブジェクトのランドインパクトを取得します。 最大 11 文字 integer count Calculating land impact
OBJECT_SERVER_COST 14 オブジェクトの server cost を取得します。 最大 15 文字 float cost Server cost
OBJECT_STREAMING_COST 15 オブジェクトの streaming (download) cost を取得します。 最大 15 文字 float cost Streaming (download) cost
OBJECT_PHYSICS_COST 16 オブジェクトの physics cost を取得します。 最大 15 文字 float cost Physics cost
OBJECT_CHARACTER_TIME 17 オブジェクトがパスファインディングキャラクターの場合、ナビゲーションに掛かる CPU 時間の 1 秒間の平均値を取得します。キャラクターでない場合は、0 を返します。 最大 15 文字 float seconds Pathfinding characters
OBJECT_ROOT 18 オブジェクトの root prim の id を取得します。
id がアバターの場合、アバターがオブジェクトに座っていてリンクセットの末尾にリンクされている場合や、アバターがどこにも座っていない場合の二つのケースがあります。
36 文字 key root llGetLinkKey
OBJECT_ATTACHED_POINT 19 オブジェクトが装着されている装着ポイントを取得します。 最大 11 文字 integer attach_point llGetAttached
OBJECT_PATHFINDING_TYPE 20 リージョン内でのオブジェクトのパスファインディングの設定を取得します。. 返される値は、 OPT_* です。 最大 11 文字 integer type Pathfinding types
OBJECT_PHYSICS 21 オブジェクトが物理状態かどうかを取得します。
idアバター または 装着物 の場合、 0 が返されます。
1 文字 integer boolean llGetStatus PRIM_PHYSICS
OBJECT_PHANTOM 22 オブジェクトのファントム状態を取得します。
idアバター装着物の場合、 0 を返します。
1 文字 integer boolean llGetStatus PRIM_PHANTOM
OBJECT_TEMP_ON_REZ 23 オブジェクトのテンポラリ状態を取得します。 1 文字 integer boolean PRIM_TEMP_ON_REZ
OBJECT_RENDER_WEIGHT 24 アバターの描画コストを取得します。
id がオブジェクトの場合, 0 を返します。id がアバターで、かつシミュレータで描画コストが不明の場合、-1 を返します。サーバーから取得可能な最大値は 500000 です。
最大 6 文字 integer weight Avatar_Rendering_Cost
OBJECT_HOVER_HEIGHT 25 アバターの hover height の値を取得します。
id がアバターでない場合、0.0 が返されます。通常、値の範囲は [-2.0, 2.0] です。デフォルトの値は 0.0 です。この値は、アバターのシェイプのホバースライダーの値には反映しません。ビュアー上の動的な設定です。
最大 9 文字 float height
OBJECT_BODY_SHAPE_TYPE 26 アバターに装着しているシェイプの性別の値を取得します。
id がアバターでない場合、-1.0 が返されます。
通常、値の範囲は [0.0, 1.0] です。
  • 0.0 女性,
  • 1.0 男性.

二つの性別の間の値は、シェイプを手動で作成することで設定が可能です。

最大 9 文字 float shape
OBJECT_LAST_OWNER_ID 27 オブジェクトの前のオーナーの UUID を取得します。グループがオーナーのオブジェクトの場合は、グループに譲渡したオーナーが取得出来ます。 36 文字 key last_owner
OBJECT_CLICK_ACTION 28 プリムの Click Action の値を取得します。 最大 11 文字 integer action
OBJECT_OMEGA 29 オブジェクトの回転速度を取得します。 (radians per second). 36 文字 vector omega llGetOmega
OBJECT_PRIM_COUNT 30 オブジェクトのプリム数を取得します。 最大 3 文字 integer count llGetObjectPrimCount llGetNumberOfPrims
OBJECT_TOTAL_INVENTORY_COUNT 31 オブジェクト内のインベントリのアイテム数を取得します。 最大 10 文字 integer count llGetInventoryNumber(INVENTORY_ALL)
OBJECT_REZZER_KEY 32 Rez されたオブジェクトで、Rez 元のオブジェクトやアバターのキーを取得します。 36 文字 integer rezzer
OBJECT_GROUP_TAG 33 アバターのグループタグテキストを取得します。
idがアバターでない場合、空の文字列を返します。
最大20バイト string text
OBJECT_TEMP_ATTACHED 34 オブジェクトが一時的に装着された状態かどうかを返します。 1文字 integer boolean
OBJECT_ATTACHED_SLOTS_AVAILABLE 35 アバターが利用可能な装着スロットの数を返します。
もし id がアバターでない場合は、0を返します。
最大2文字 integer boolean

警告

  • OBJECT_ROT はアバターが座っているかマウスルックの場合、正確な対面での値を返します。しかしその他の場合は、おおまかな方向だけになります。
  • 隣接したリュージョンでは id にマッチしたプリムを探しません。
  • いなくなったアバターの情報は短い時間 (約 45 秒間) 使用可能ですが、更新されません。
  • 整数でない params の要素は何もすることなく無視され、 OBJECT_UNKNOWN_DETAIL は返りません。
  • この関数はインベントリの中にあるアイテムの情報を返しません。
  • llTargetOmega はオブジェクトが 物理属性 であるときのみ OBJECT_ROT を返すようになります。オブジェクトが物理属性でない場合、元からあった回転が返され、 llTargetOmegaクライアント側の効果 になります。
  • OBJECT_SCRIPT_MEMORY は、全てのスクリプトで利用可能な最大メモリ量を返します。現在実際に使用しているメモリ量ではありません。特に Mono のスクリプトでは、デフォルトの 64K または llSetMemoryLimit の値を返します。現在、動的にスクリプトに割り当てられたものではありません。LSO スクリプトでは、全てのケースで 16K 使用します。実際これは、最悪のケースのシナリオとして報告されます。
  • OBJECT_RUNNING_SCRIPT_COUNT は、壊れているスクリプトもその計算に含みます。
  • OBJECT_REZZER_KEY は、Second Life Server 16.01.16.310114 以前では、NULL_KEY を返します。
  • アバターがオブジェクトに座っていて、OBJECT_REZZER_KEY がアバターを対象にする場合、rezzer key はオブジェクトのルートプリムを返します。

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   [Won't Fix] OBJECT_RUNNING_SCRIPT_COUNT includes the crashed scripts in the count of running scripts.

サンプル

default
{
    collision_start(integer num_detected)
    {
        key  id      = llDetectedKey(0);
        list details = llGetObjectDetails(id, ([OBJECT_NAME, OBJECT_DESC,
                            OBJECT_POS, OBJECT_ROT, OBJECT_VELOCITY,
                            OBJECT_OWNER, OBJECT_GROUP, OBJECT_CREATOR]));
 
        llWhisper(PUBLIC_CHANNEL, "UUID: " + (string)id
                    + "\nName: '"          + llList2String(details, 0)
                    + "'\nDescription: '"  + llList2String(details, 1)
                    + "'\nPosition: "      + llList2String(details, 2)
                    + "\nRotation: "       + llList2String(details, 3)
                    + "\nVelocity: "       + llList2String(details, 4)
                    + "\nOwner: "          + llList2String(details, 5)
                    + "\nGroup: "          + llList2String(details, 6)
                    + "\nCreator: "        + llList2String(details, 7));
    }
}
// グループ招待
// オブジェクトに設定されたグループの名称を Web のグループプロフィールから取得します
 
key groupNameRequestId;
key groupKey;
string groupName;
 
init()
{
    // 警告:
    // プリム毎に違うグループが設定可能です!!!
 
    // ルートプリムに設定されているグループのキーを取得
    groupKey = llList2Key(llGetObjectDetails(llGetLinkKey(LINK_ROOT), [OBJECT_GROUP]), 0);
 
    // ルートプリムに設定されたグループの名称を取得
    groupNameRequestId = llHTTPRequest("http://world.secondlife.com/group/" + (string)groupKey, [], "");
}
 
default
{
    state_entry()
    {
        init();
    }
 
    touch_start(integer num_detected)
    {
        if (groupKey == NULL_KEY || groupName == "")
            return;
 
        key id = llDetectedKey(0);
        llInstantMessage(id,
            "Click the link to join the group '" + groupName + "'\n"
            + "secondlife:///app/group/" + (string)groupKey + "/about");
    }
 
    http_response(key request_id, integer status, list metadata, string body)
    {
        if (request_id != groupNameRequestId)
            return;
 
        list args = llParseString2List(body, ["title"], []);
        groupName = llList2String(llParseString2List(llList2String(args, 1), [">", "<", "/"], []), 0);
    }
}
// 狙い撃ち
default
{   state_entry()
    {   llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
    }
    control(key id, integer pressed, integer change) 
    {   if(change & pressed & CONTROL_ML_LBUTTON)
            llSensor("", "", AGENT|PASSIVE|ACTIVE, 96.0, PI/16.0);
    }
    run_time_permissions(integer perm)
    {   if(perm&PERMISSION_TAKE_CONTROLS)
            llTakeControls(CONTROL_ML_LBUTTON, TRUE, TRUE); 
    }
    sensor(integer n)
    {   key uuid=llDetectedKey(0);
        list a = llGetObjectDetails(uuid, ([
            OBJECT_NAME, OBJECT_DESC, OBJECT_POS, OBJECT_ROT,
            OBJECT_VELOCITY,OBJECT_OWNER, OBJECT_GROUP, OBJECT_CREATOR]));
        llOwnerSay("UUID: " + (string)uuid +
            "\nName: \"" + llList2String(a,0)+ "\"" +
            "\nDecription: \"" + llList2String(a,1) + "\"" +
            "\nPosition: " + llList2String(a,2) +
            "\nRotation: " + llList2String(a,3) +
            "\nVelocity: " + llList2String(a,4) +
            "\nOwner: " + llList2String(a,5) +
            "\nGroup: " + llList2String(a,6) +
            "\nCreator: " + llList2String(a,7)
        );
    }
}
// オブジェクトの Script Time を取得
default
{
    touch_start(integer num_detected)
    {
        llOwnerSay(llGetObjectName()+" Script Time: "+llList2String(llGetObjectDetails(llGetKey(), [OBJECT_SCRIPT_TIME]), 0));
    }
}

便利なスニペット

Link/Get/jaリンク に関連する補助関数があります。リンクされたプリムのパラメタを取得する関数がないことから、リンクされたプリムの位置や回転を取得したいときに便利かもしれません。

integer isLindenTreeOrGrass(key id){
    //Check if it's an OPT_OTHER and not an attachment, which makes it a Linden tree or grass!
    list out = llGetObjectDetails(id, [OBJECT_PATHFINDING_TYPE, OBJECT_ATTACHED_POINT]);
    return (llList2Integer(out, 0) == OPT_OTHER) && !llList2Integer(out, 1);
}

関連項目

関数

•  llKey2Name
•  llGetPrimitiveParams
•  llSetLinkPrimitiveParams
•  llSetPrimitiveParams
•  llGetParcelDetails

記事

•  各種制限 SL の制限と制約
•  検出
•  Prim Attribute Overloading

特記事項

経緯

2007 SL 1.18.3(2) 導入
28-09-2007 SL 1.18.3.285.29 リリース

All Issues

~ Search JIRA for related Issues
   OBJECT_DISPLAY_NAME and OBJECT_USERNAME to llGetObjectDetails()
   [Won't Fix] OBJECT_RUNNING_SCRIPT_COUNT includes the crashed scripts in the count of running scripts.

脚注

  1. ^ OBJECT_GROUP とアバターについて最低 3 つの JIRA があります。リンデンラボはそれら全てを拒否しています。最も最近のものは、2013 年 12 月 5 日の BUG-4654 です。
  2. ^ 記事中の範囲は、 実数空間 に記載されているものです。

Signature

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