Listen/ja
< Listen
| LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
| チャネル定数 | 説明 | |
|---|---|---|
| DEBUG_CHANNEL | 0x7FFFFFFF | スクリプトのデバッグメッセージとエラーメッセージを受け取るチャットチャネル |
| PUBLIC_CHANNEL | 0x0 | 近くのユーザ全員にブロードキャストされるチャットチャネル |
警告
- state の変更または スクリプトがリセット されたときに、全てのリスナーは自動的に 終了 します。
- オブジェクトのオーナーが変更されても、 llGetOwner を使って登録したリスナーはスクリプトがリセットされるまで自動的に更新されません。スクリプターは下の例のような感じでこのようなケースを検出して対処するとよいでしょう。
- メッセージがスクリプトで登録された複数の llListen の条件を満たしていても、 1 つのイベントだけが発生します。
- プリムは自分自身が生成したチャットを拾うことはできません。
- リスナーの位置はリスナーのあるプリムの位置と同じでなく、ルートプリムの位置になります。これは子プリムを使用して区画の境界線を越えて盗聴することを防ぐ目的でそうなっています。 チャット生成系関数 はこれとは逆に、 (ルートプリムの位置ではなく) 関数を呼び出したプリムの位置となります。
サンプル
オブジェクトのオーナーのチャットを拾って 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();
}
}
}
参考情報
関数
| • | llListen | |||
| • | llListenControl | |||
| • | llListenRemove | |||
| • | llDialog | |||
| • | llOwnerSay | – | PUBLIC_CHANNEL でスパムとならないように、オーナーにだけチャットを送ります | |
| • | llWhisper | – | 10 メートルに限定したチャットを送ります | |
| • | llSay | – | 20 メートルに限定したチャットを送ります | |
| • | llShout | – | 100 メートルに限定したチャットを送ります | |
| • | llRegionSay | – | 地域全体にチャットを送ります |
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。