Difference between revisions of "Category:LSL Key/ja"
(categorized category) |
(update) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{LSL Header | {{LSL Header|ml=*}}{{LSLC/ja|}}{{LSLC/ja|Types}} | ||
== 初めに == | |||
keyは、Second Life内でほとんどすべての、[[Primitive/ja|プリム]]、[[avatar/ja|アバター]]、{{LSLGC|Texture/ja|テクスチャ}}などの(しばしば{{LSLG/ja|UUID}}として言及される)'''固有の識別子'''です。 | |||
keyそのものは[https://ja.wikipedia.org/wiki/%E5%8D%81%E5%85%AD%E9%80%B2%E6%B3%95 16進数の文字]<code>[0-9a-f]</code>から構成され、keyの各セクションは-(ハイフン)によって連結して表記されます。(合計で36文字) | |||
< | |||
keyの例: | |||
<source lang="lsl2"> | |||
key whatever = "01234567-89ab-cdef-0123-456789abcdef"; | |||
</source> | |||
< | Second Lifeの'''キー''' は{{RFC|4122|target=section-4.1.3}}で定義された[https://ja.wikipedia.org/wiki/UUID UUIDバージョン4](ランダムなUUID)として知られています。 | ||
integer isKey(key in) { | |||
if(in) return 2; | <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>」を選択すること。ただし、これは完全な権限を持つアイテムに対してのみ機能します。 | |||
== キーの生成 == | |||
[[LSL_Portal/ja|LSL]] [[:Category:LSL_Functions/ja|関数]]: | |||
{|{{Prettytable}} | |||
|+ | |||
|-{{Hl2}} | |||
!関数 | |||
!説明 | |||
|- | |||
|| {{LSLG/ja|llGenerateKey}} || [http://en.wikipedia.org/wiki/UUID#Version_5_.28SHA-1_hash.29 Version 5 (SHA-1 hash)] を使ってキーを生成します {{LSLG/ja|UUID}} ユニークキーを生成 | |||
|} | |||
ユーザー作成関数: | |||
{|{{Prettytable}} | |||
|+ | |||
|-{{Hl2}} | |||
!関数 | |||
!説明 | |||
|- | |||
|| [[GenerateKey]] || MD5ベース(バージョン3)のUUIDを生成します。リンクメッセージの識別やその他の目的に役立ちます。 | |||
|- | |||
|| [[GenUUID]] || PHP com_create_guidに基づいてUUIDを生成します。 | |||
|} | |||
== key変換 == | |||
{{LSLG/ja|string}}からkeyへ変換 | |||
<source lang="lsl2">key whatever = (key)"01234567-89ab-cdef-0123-456789abcdef";</source> | |||
keyから名前の取得 | |||
<source lang="lsl2">key uuid = "01234567-89ab-cdef-0123-456789abcdef"; | |||
llKey2Name(uuid);</source> | |||
しかし、[[llListFindList]]では暗黙の型変換は行われません。[[llListFindList]]は値だけでなく、型も一致する必要があります。 | |||
<source lang="lsl2">llListFindList(["01234567-89ab-cdef-0123-456789abcdef"], [(key)"01234567-89ab-cdef-0123-456789abcdef"]) == -1;</source> | |||
== アバターの表示 または グループ情報の表示: == | |||
もしあなたがアバターのkeyを取得している場合、チャット履歴にアバターの表示名を出力できます | |||
特別なURL: | |||
<source lang="lsl2">llOwnerSay("secondlife:///app/agent/" + (string)owner_key + "/about");</source> | |||
これは、クリックするとアバタープロファイルウィンドウが表示される、[[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: | |||
<source lang="lsl2">llOwnerSay("secondlife:///app/group/" + (string)group_key + "/about");</source> | |||
これは、クリックするとグループプロファイルウィンドウが表示される、グループ名をクリック可能なリンクとして表示します。これは特に便利です、なぜなら他の方法は存在せず、グループの名前を出力する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: | |||
<source lang="lsl2">llOwnerSay("secondlife:///app/parcel/" + (string)parcel_key + "/about");</source> | |||
== keyの有効性チェック: == | |||
有効性チェック: | |||
<source lang="lsl2">if(uuid){ | |||
//do something | |||
}</source> | |||
{{LSLGC|Flow Control/ja|条件式}}に引数として渡された時、有効なkeyであり{{LSLG/ja|NULL_KEY}}ではないことを'''true'''として評価するのみです。任意の文字列が有効なkeyかどうかを以下の方法で検出することができます。 | |||
<source lang="lsl2"> | |||
// 2: 有効なキー, NULL_KEYではない | |||
// 1 (TRUE): NULL_KEY | |||
// 0 (FALSE): 無効なキー | |||
integer isKey(key in) | |||
{ | |||
if (in) | |||
return 2; | |||
return (in == NULL_KEY); | return (in == NULL_KEY); | ||
}</ | } | ||
</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
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
初めに
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の受信
何かのキーを取得する方法はいくつかあります:
- 他の人から提供してもらうこと。
- 組み込みのLSL 関数(例:llGetKey/ja、llGetLinkKey/jaなど)を使用すること。
- インベントリで、何かの上で右クリックし、「
キーのコピー
」を選択すること。ただし、これは完全な権限を持つアイテムに対してのみ機能します。
キーの生成
関数 | 説明 |
---|---|
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/jaやllRequestUsername/ja、llRequestDisplayName/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);
}
注意事項
- は特別な場合です。キーはintegersに変換できないため、
if (uuid)
!
、||
、&&
などの論理operatorsをキーと一緒に使用できません。もし、を実行したい場合は、次のように単純な回避策を使用できます:if (!uuid) { /* wont work */ }
。これは、無効な文字列コンテンツを破棄したい場合に特に有用です(つまり、キーが実際にキーであることを確認する場合):if (uuid) { } else { /* will work */ }
if (uuid) ; else uuid = NULL_KEY;
- リストにキーリテラルを追加する際には注意が必要で、暗黙の型変換は行われません。キーリテラルがキーであることを確認しない場合、llListFindList/jaで問題が発生する可能性があります。
- さらに、LSOとMonoでは文字列をキーに型変換する際に同じ方法が動作しないことに注意してください。
- LSOには、LLが修正を拒否したバグがあり、修正すると既存のコンテンツが壊れるためです。
Pages in category "LSL Key/ja"
The following 18 pages are in this category, out of 18 total.