Display Names/LSL/ja
このページには 表示名に関する一般的なよくある質問 で触れられていない 表示名関連のLSL関数についてよくある質問 を載せています。
以下の情報は Kelly Linden が opensource-dev と secondlifescripters のメーリングリストで回答した内容に基づいて編集されたものです。
llKey2Name はどのように動作するようになりますか?
llKey2Name は「フルネーム」を返却するようになります。以前からの住人の場合、例えば "Kelly Linden" のように、これまで通りとなります。新しい住人の場合、例えば "joe1234 Resident" のように、ユーザ名にラストネームとして "Resident" がついたものとなります。
llSensor はどのように動作するようになりますか?
llSensor で使えるようになる定数が 3 つ増えます - AGENT_BY_LEGACY_NAME と AGENT_BY_USERNAME です。従来の AGENT 相当のフラグは AGENT_BY_LEGACY_NAME です。これにより、センサーを使ってユーザ名 ("joe1234"/"kelly.linden") やレガシー名 ("joe1234 Resident"/"Kelly Linden") で検索できるようになります。If you OR them together and use both, the sensor will return all matches.
llSensor の AGENT_BY_DISPLAY_NAME フラグはどうなりますか?
確かにこれはちょっぴり難しい問題です。表示名は UTF-8 や Unicode を使いますので、特に難易度が高くなっています。It is quite possible for a name that looks the same to be represented at the bytecode level in many ways, sometimes with obscure characters and sometimes just because of how the character was entered. このような問題もあって、今回はこの機能を盛り込むことは見送りましたが、将来再挑戦する可能性はあります。
llDetectedName はセンサー、衝突、touch イベントでどのように動作するようになりますか?
llDetectedName は「フルネーム」を返却するようになります。以前からの住人の場合、例えば "Kelly Linden" のように、これまで通りとなります。新しい住人の場合、例えば "joe1234 Resident" のように、ユーザ名にラストネームとして "Resident" がついたものとなります。
llRequestAgentData と DATA_NAME はどのように動作するようになりますか?
llRequestAgentData(id,DATA_NAME) は住人の「フルネーム」で dataserver イベントを発生させるようになります。以前からの住人の場合、例えば "Kelly Linden" のように、これまで通りとなります。新しい住人の場合、例えば "joe1234 Resident" のように、ユーザ名にラストネームとして "Resident" がついたものとなります。
llListen と listen イベントはどのように動作するようになりますか?
llListen の name フィールドは、以前からの住人だと "Kelly Linden" 、新しい住人では "joe1234 Resident" のような、「フルネーム」のチャットをフィルタリングするようになります。listen イベントに渡される名前も「フルネーム」となります。
送信される HTTP リクエストの X-SecondLife-Owner-Name ヘッダはどのようになりますか?
オーナーの「フルネーム」となります。例えば、以前からの住人だと "Kelly Linden" 、新しい住人では "joe1234 Resident" のようになります。
住人の表示名を取得するスクリプトはどのようになりますか?
2 つの関数が導入されます: string llGetDisplayName(key id) と key llRequestDisplayName(key id) です。
string llGetDisplayName(key id) はどのように動作しますか?
指定した "id" のエージェントが同じ地域にいる場合、その表示名を返却します。
メモ: 表示名が有効になるまで最大 72 時間かかります。それまでの間、スクリプトは古い表示名を返却し、ビューアでは古い表示名が表示されることがあります。 |
key llRequestDisplayName(key id) はどのように動作しますか?
llRequestAgentData と同じように、id で指定した住人の表示名を含めて dataserver イベントを発生させます。住人は同じ地域にいる必要がありません。
メモ: 表示名が有効になるまで最大 72 時間かかります。それまでの間、スクリプトは古い表示名を返却し、ビューアでは古い表示名が表示されることがあります。 |
llGetDisplayName と llRequestDisplayName は常に同じ結果を返すようになりますか?
名前を変更してから 72 時間以内は、同じ名前を返却する保証はありません。特に、llGetDisplayName は llRequestDisplayName よりも新しい表示名を返却しがちです。
住人のユーザ名を取得するスクリプトはどのようになりますか?
2 つの関数が導入されます: string llGetUsername(key id) と key llRequestUsername(key id) です。
string llGetUsername(key id) はどのようになりますか?
指定した "id" のエージェントが同じ地域にいる場合、そのユーザ名を返却します。
key llRequestUsername(key id) はどのようになりますか?
llRequestAgentData と同じように、id で指定した住人のユーザ名を含めて dataserver イベントを発生させます。住人は同じ地域にいる必要がありません。
センサーや衝突イベントで住人の表示名を取得するにはどうすればよいですか?
これで大丈夫です: llGetDisplayName(llDetectedKey(0))
新しい名前で以前から作ってあるスクリプトがクラッシュすることはありますか?
いいえ、ないはずです。
アバター名のリストを保管して、既存の関数で取得した名前と比較する場合は?
例えば、自分のジュークボックスが、歌を変更できるアバターの名前をノートカードに保存できるようになっているとします。不具合が発生するでしょうか?
以前からの住人の場合、これまで通り動作し続けます。 - "Kelly Linden" とノートカードに書くと、ジュークボックスをタッチしたときに、これまで通り llDetectedName の結果と比較されることになります。新しい住人の場合、ノートカードには「フルネーム」を書く必要があります。これは、"joe1234 Resident" のように、ユーザ名に "Resident" というラストネームを付け足したものです。大文字小文字はこれまで通り区別されます。アバターが JOE1234 で登録したとしたら、レガシー名は "JOE1234 Resident" となります。小文字には変換 されません。できれば、スクリプトを修正して「フルネーム」とユーザ名の両方で動くようにするといいかもしれません。表示名をセキュリティ絡みで使うのは良くないでしょう。
住人に自分の名前を入力させ、それをセンサーや既存の関数で比較するようなオブジェクトの場合は?
高い確率で崩壊します。これは難しいケースです。表示名の導入の一環として、名前というものに対する捉え方を根本的に変更します。名前を聞いているのだから、「フルネーム」を入力するものだとは思わないでしょう。特に新しい住人の場合、自分の名前に Resident という単語をつけないといけないとは夢にも思わないでしょう。
ファーストネームだけをチェックするのだと?
自分の名前を聞かれたときは自分のユーザ名を入力するものだとスクリプトのユーザが考えていれば、これまで通りうまくいくでしょう。
名前を尋ねるスクリプトを直すには?
llGetDisplayName を使えば、頭の上にあるデフォルトの名前が取得できます。そしてそれは、「あなたの名前は?」と聞いたときに高い確率で返ってくる答えになるでしょう。場合によっては、3 種類の名前を全て使ってチェックすることもできるでしょう。
LSL に関連する質問は?
discussion ページ(英語)に書くか、(いずれも英語で)kelly@lindenlab.com や secondlifescripters@lists.lindenlab.com (secondlifescripters メーリングリスト) に送ってください。