Listen/ja

From Second Life Wiki
Jump to: navigation, search

説明

イベント: listen( integer channel, string name, key id, string message ){ ; }

チャットによって発生します。 llListen を使って開始と検索条件の設定を行います。

• integer channel
• string name
• key id
• string message
チャネル定数 説明
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の関連した項目が参考になるかもしれません。