LlListen/ja
From Second Life Wiki
Second Life Wiki > LlListen/ja
要約
関数: integer llListen( integer channel, string name, key id, string msg );
name や id から channel で発せられた msg の コールバック を設定します。
リスナーを 停止 したり 削除 したりするのに使用する数字を integer で返します。
| • integer | channel | – | 任意の有効な整数 (-2147483648 ~ 2147483647) 。 | |
| • string | name | – | 検索条件に追加する特定のプリムやアバターの名前。 | |
| • key | id | – | 検索条件に追加する特定のプリムやアバターの UUID 。 | |
| • string | msg | – | 検索条件に追加する特定のチャットメッセージ |
msg 、name 、id が空白の場合、入力メッセージの検索条件に使用されません。
id に不正なキーや NULL キー が指定された場合、空白が指定されたものとされます。
| Channel Constant | Description | |
|---|---|---|
| DEBUG_CHANNEL | 0x7FFFFFFF | Chat channel reserved for script debugging and error messages. |
| PUBLIC_CHANNEL | 0x0 | Chat channel that broadcasts to all nearby users. |
警告
- state の変更または スクリプトでリセット されたときに、全てのリスナーは自動的に削除されます。
- state の変更を、スクリプトのリスナーを全て解放するショートカットとして利用することもできます。
- 1 つのスクリプトで同時に起動できるリスナーは 65 個までです。
- この数を超えると スクリプトランタイムエラー と Too Many Listens エラーが発生します。
- クライアントはダイアログボックス以外の方法で負の数のチャネル番号でチャットできません。
- オブジェクト間のコミュニケーションに適しています。
- これは仮想プロトコルでなく、クライアントが課した意図的な制約です (ダイアログの回答はダイアログが受信されなくても送信することができます) 。
- 一旦リスナーが登録されると、検索条件は更新できません。リスナーが llGetOwner で登録されると、リスナーはオーナーが変わった後も以前のオーナーで登録したままになります。
- プリムは自分自身が生成したチャットを拾うことはできません。しかし、リンクされたプリムのチャットを拾うことはできます。
重要事項
~ JIRA で関連バグを検索| | | SVC-3170 | [A, C] | Listeners in child prims get positioned at root prim position first, then switch to child prim position after re-rez (resulting in wrong listener / whisper radius) |
サンプル
オブジェクトのオーナーのチャットを拾って 1 回返答するという、平凡な例です。ラグを減らし、周囲のユーザにスパムとならないよう、 0 以外のチャネルで Listen して、 listen イベントを他のチャネルでチャットされたときに、例えば '/5 hello' などで発生させるようにするともっと良いです。
// オーナーがメインチャットで何か発言したら、オーナーに beep と発言します。 integer listen_handle; default { state_entry() { // 呼び出した時点でのオブジェクトのオーナーをリスナーに登録します。 // オーナーが変更されても自動的に更新されません。 // 0 を他の正の数字に変えて '/5 hello' のような形式のチャットを拾えるようにしましょう。 listen_handle = llListen(0, "", llGetOwner(), ""); } listen( integer channel, string name, key id, string message ) { llOwnerSay("beep"); // スクリプトがリセットされるまでリスナーを停止します。 llListenRemove(listen_handle); } on_rez(integer param) { // オブジェクトが rez されたときに発生します。オブジェクトがベンダーで売れた後などです。 llResetScript();//rez でスクリプトをリセットして、リスナーを再登録させます。 } changed(integer mask) { // スクリプトの入っているオブジェクトのオーナーが変更されたときに発生します。 if(mask & CHANGED_OWNER) { llResetScript(); } } }
注意点
- ラグ を防止するために、チャネル 0 を避け、できる限り name か id を指定しましょう。 llListen(0,"","","") はチャットの範囲内の全ての人の全てのチャットを拾うため、大変なラグを発生させる可能性があります。全力で避けるべきです。
- 2007 年 11 月、 Kelly Linden はスクリプターがリスナーをもっと効果的に設計できるように、 この説明 を行いました。
- 発言されたチャットは履歴に追加されます。
- 実行していて、かつ listen イベントがあるスクリプトは実行時間のスライスでチャットメッセージの履歴を問い合わせます。
- スクリプトがチャットメッセージの履歴を問い合わせると、以下の順序でチェックされます:
- チャネル
- 自分のチャット (プリムは自分自身の発言を拾えません)
- 距離/RegionSay
- キー
- 名前
- メッセージ
- メッセージが見つかると、イベントキューに listen イベントが追加されます。
- キー・名前・メッセージのチェックはもちろん指定された場合にのみ実行されます。
- このため、最も効果的な方法は llRegionSay をめったに使用しないチャネルで使うことです。
関連項目
イベント
| • | listen |
関数
| • | llListenRemove | – | リスナーを削除します。 | |
| • | llListenControl | – | リスナー開始/停止します。 | |
| • | llWhisper | – | 10 メートルに限定したチャットを送ります | |
| • | llSay | – | 20 メートルに限定したチャットを送ります | |
| • | llShout | – | 100 メートルに限定したチャットを送ります | |
| • | llRegionSay | – | 地域全体にチャットを送ります |
特記事項
記事
~ JIRA で関連記事を検索| | | SVC-3170 | [A, C] | Listeners in child prims get positioned at root prim position first, then switch to child prim position after re-rez (resulting in wrong listener / whisper radius) |
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。

