Difference between revisions of "Category:LSL Key/ja"

From Second Life Wiki
Jump to navigation Jump to search
(update)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
{{LSL Header|ml=*}}{{LSLC|}}{{LSLC|Types}}
{{LSL Header|ml=*}}{{LSLC/ja|}}{{LSLC/ja|Types}}


== 初めに ==
== 初めに ==
Line 11: Line 11:
     key whatever = "01234567-89ab-cdef-0123-456789abcdef";
     key whatever = "01234567-89ab-cdef-0123-456789abcdef";
</source>
</source>
Second Lifeの'''キー''' は{{RFC|4122|target=section-4.1.3}}で定義された[https://ja.wikipedia.org/wiki/UUID UUIDバージョン4](ランダムなUUID)として知られています。
<source lang="lsl2">
    key uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
//  where:
//      4 is 4
//      x is [0-9a-f]
//      y is [8-9a-b]
</source>
== keysの受信 ==
何かのキーを取得する方法はいくつかあります:
# 他の人から提供してもらうこと。
# 組み込みの[[LSL_Portal/ja|LSL]] [[:Category:LSL_Functions/ja|関数]](例:[[llGetKey/ja]]、[[llGetLinkKey/ja]]など)を使用すること。
# インベントリで、何かの上で右クリックし、「<code>キーのコピー</code>」を選択すること。ただし、これは完全な権限を持つアイテムに対してのみ機能します。


== キーの生成 ==
== キーの生成 ==
Line 32: Line 51:
!説明
!説明
|-
|-
|| [[GenerateKey]] || Generates an MD5-based (version 3) type UUID. Useful for identifying link-messages and for other purposes.
|| [[GenerateKey]] || MD5ベース(バージョン3)のUUIDを生成します。リンクメッセージの識別やその他の目的に役立ちます。
|-
|-
|| [[GenUUID]] || Generates a UUID based on PHP com_create_guid.
|| [[GenUUID]] || PHP com_create_guidに基づいてUUIDを生成します。
|}
|}


Line 47: Line 66:
<source lang="lsl2">key uuid = "01234567-89ab-cdef-0123-456789abcdef";
<source lang="lsl2">key uuid = "01234567-89ab-cdef-0123-456789abcdef";
llKey2Name(uuid);</source>
llKey2Name(uuid);</source>
しかし、[[llListFindList]]では暗黙の型変換は行われません。[[llListFindList]]は値だけでなく、型も一致する必要があります。
<source lang="lsl2">llListFindList(["01234567-89ab-cdef-0123-456789abcdef"], [(key)"01234567-89ab-cdef-0123-456789abcdef"]) == -1;</source>


== アバターの表示 または グループ情報の表示: ==
== アバターの表示 または グループ情報の表示: ==
Line 54: Line 78:
<source lang="lsl2">llOwnerSay("secondlife:///app/agent/" + (string)owner_key + "/about");</source>
<source lang="lsl2">llOwnerSay("secondlife:///app/agent/" + (string)owner_key + "/about");</source>


もしあなたがグループのkeyを取得している場合、チャット履歴にグループ情報を出力できます
これは、クリックするとアバタープロファイルウィンドウが表示される、[[Display names|表示名]]と[[Usernames|ユーザー名]]の両方をクリック可能なリンクとして表示します。[[llRequestAgentData/ja]]や[[llRequestUsername/ja]]、[[llRequestDisplayName/ja]]を使用する必要がないため、[[dataserver/ja]] イベントを使用する必要がありません。
 
もしあなたがグループのkeyを取得している場合、(<code>[[llGetObjectDetails/ja|llGetObjectDetails]]([[key/ja|key]] id, <nowiki>[</nowiki>[[OBJECT_GROUP/ja|OBJECT_GROUP]]<nowiki>]</nowiki>)</code>,
または <code>[[llGetParcelDetails/ja|llGetParcelDetails]]([[vector/ja|vector]] pos, <nowiki>[</nowiki>[[PARCEL_DETAILS_GROUP/ja|PARCEL_DETAILS_GROUP]]<nowiki>]</nowiki>)</code>の呼び出しの結果),
 
チャット履歴にグループ情報を出力できます
特別なURL:
特別なURL:
<source lang="lsl2">llOwnerSay("secondlife:///app/group/" + (string)group_key + "/about");</source>
<source lang="lsl2">llOwnerSay("secondlife:///app/group/" + (string)group_key + "/about");</source>


もしあなたが[[Land/ja#Parcel|土地]]のkeyを取得している場合、チャット履歴に土地情報を出力できます
これは、クリックするとグループプロファイルウィンドウが表示される、グループ名をクリック可能なリンクとして表示します。これは特に便利です、なぜなら他の方法は存在せず、グループの名前を出力するLSL関数が存在しないからです。
 
もしあなたが[[Land/ja#Parcel|土地]]のkeyを取得している場合、(<code>[[llGetParcelDetails/ja|llGetParcelDetails]]([[vector/ja|vector]] pos, <nowiki>[</nowiki>[[PARCEL_DETAILS_ID/ja|PARCEL_DETAILS_ID]]<nowiki>]</nowiki>)</code>の呼び出しの結果)
 
チャット履歴に土地情報を出力できます
特別なURL:
特別なURL:
<source lang="lsl2">llOwnerSay("secondlife:///app/parcel/" + (string)parcel_key + "/about");</source>
<source lang="lsl2">llOwnerSay("secondlife:///app/parcel/" + (string)parcel_key + "/about");</source>
Line 84: Line 117:
}
}
</source>
</source>
== 注意事項 ==
* <source lang="lsl2">if (uuid)</source>は特別な場合です。キーは[[Integer/ja|integers]]に変換できないため、<code>!</code>、<code>||</code>、<code>&&</code>などの論理[[LSL_Operators/ja|operators]]をキーと一緒に使用できません。もし、<source lang="lsl2">if (!uuid) { /* wont work */ }</source>を実行したい場合は、次のように単純な回避策を使用できます:<source lang="lsl2">if (uuid) { } else { /* will work */ }</source>。これは、無効な文字列コンテンツを破棄したい場合に特に有用です(つまり、キーが実際にキーであることを確認する場合):<source lang="lsl2">if (uuid) ; else uuid = NULL_KEY;</source>
* リストにキーリテラルを追加する際には注意が必要で、暗黙の型変換は行われません。キーリテラルがキーであることを確認しない場合、[[llListFindList/ja]]で問題が発生する可能性があります。
* さらに、LSOとMonoでは文字列をキーに型変換する際に同じ方法が動作しないことに注意してください。
** LSOには、LLが修正を拒否したバグがあり、修正すると既存のコンテンツが壊れるためです。

Latest revision as of 13:50, 3 October 2023

初めに

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が修正を拒否したバグがあり、修正すると既存のコンテンツが壊れるためです。