Category:LSL Key/ja

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

初めに

keyは、Second Life内でほとんどすべての、プリムアバターテクスチャなどの(しばしばUUIDとして言及される)固有の識別子です。

keyそのものは16進数の文字[0-9a-f]から構成され、keyの各セクションは-(ハイフン)によって連結して表記されます。(合計で36文字)

keyの例:

    key whatever = "01234567-89ab-cdef-0123-456789abcdef";

Second LifeのキーRFC-4122で定義されたUUIDバージョン4(ランダムなUUID)として知られています。

    key uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";

//  where:
//      4 is 4
//      x is [0-9a-f]
//      y is [8-9a-b]

keysの受信

何かのキーを取得する方法はいくつかあります:

  1. 他の人から提供してもらうこと。
  2. 組み込みのLSL 関数(例:llGetKey/jallGetLinkKey/jaなど)を使用すること。
  3. インベントリで、何かの上で右クリックし、「キーのコピー」を選択すること。ただし、これは完全な権限を持つアイテムに対してのみ機能します。

キーの生成

LSL 関数:

関数 説明
llGenerateKey Version 5 (SHA-1 hash) を使ってキーを生成します UUID ユニークキーを生成

ユーザー作成関数:

関数 説明
GenerateKey MD5ベース(バージョン3)のUUIDを生成します。リンクメッセージの識別やその他の目的に役立ちます。
GenUUID PHP com_create_guidに基づいてUUIDを生成します。

key変換

stringからkeyへ変換

key whatever = (key)"01234567-89ab-cdef-0123-456789abcdef";

keyから名前の取得

key uuid = "01234567-89ab-cdef-0123-456789abcdef";
llKey2Name(uuid);

しかし、llListFindListでは暗黙の型変換は行われません。llListFindListは値だけでなく、型も一致する必要があります。

llListFindList(["01234567-89ab-cdef-0123-456789abcdef"], [(key)"01234567-89ab-cdef-0123-456789abcdef"]) == -1;


アバターの表示 または グループ情報の表示:

もしあなたがアバターのkeyを取得している場合、チャット履歴にアバターの表示名を出力できます 特別なURL:

llOwnerSay("secondlife:///app/agent/" + (string)owner_key + "/about");

これは、クリックするとアバタープロファイルウィンドウが表示される、表示名ユーザー名の両方をクリック可能なリンクとして表示します。llRequestAgentData/jallRequestUsername/jallRequestDisplayName/jaを使用する必要がないため、dataserver/ja イベントを使用する必要がありません。

もしあなたがグループのkeyを取得している場合、(llGetObjectDetails(key id, [OBJECT_GROUP]), または llGetParcelDetails(vector pos, [PARCEL_DETAILS_GROUP])の呼び出しの結果),

チャット履歴にグループ情報を出力できます 特別なURL:

llOwnerSay("secondlife:///app/group/" + (string)group_key + "/about");

これは、クリックするとグループプロファイルウィンドウが表示される、グループ名をクリック可能なリンクとして表示します。これは特に便利です、なぜなら他の方法は存在せず、グループの名前を出力するLSL関数が存在しないからです。

もしあなたが土地のkeyを取得している場合、(llGetParcelDetails(vector pos, [PARCEL_DETAILS_ID])の呼び出しの結果)

チャット履歴に土地情報を出力できます 特別なURL:

llOwnerSay("secondlife:///app/parcel/" + (string)parcel_key + "/about");

keyの有効性チェック:

有効性チェック:

if(uuid){
     //do something
}

条件式に引数として渡された時、有効なkeyでありNULL_KEYではないことをtrueとして評価するのみです。任意の文字列が有効なkeyかどうかを以下の方法で検出することができます。

// 2:         有効なキー, NULL_KEYではない
// 1 (TRUE):  NULL_KEY
// 0 (FALSE): 無効なキー

integer isKey(key in)
{
    if (in)
        return 2;
    return (in == NULL_KEY);
}

注意事項

  • if (uuid)
    
    は特別な場合です。キーはintegersに変換できないため、!||&&などの論理operatorsをキーと一緒に使用できません。もし、
    if (!uuid) { /* wont work */ }
    
    を実行したい場合は、次のように単純な回避策を使用できます:
    if (uuid) { } else { /* will work */ }
    
    。これは、無効な文字列コンテンツを破棄したい場合に特に有用です(つまり、キーが実際にキーであることを確認する場合):
    if (uuid) ; else uuid = NULL_KEY;
    
  • リストにキーリテラルを追加する際には注意が必要で、暗黙の型変換は行われません。キーリテラルがキーであることを確認しない場合、llListFindList/jaで問題が発生する可能性があります。
  • さらに、LSOとMonoでは文字列をキーに型変換する際に同じ方法が動作しないことに注意してください。
    • LSOには、LLが修正を拒否したバグがあり、修正すると既存のコンテンツが壊れるためです。