Site search

Google
WWW を検索 backup-beta.blogspot.com を検索

2008年12月29日月曜日

ダイアログを送るスクリプト

今回は周りのアバターにダイアログでメッセージを送るスクリプトです。。。でもうざいと思いますので乱用はしないでくださいねwww

チャンネル1でチャットすると周りにいるアバターにチャット内容をダイアログで送りますので、HUDにして使ったらいいですね。
/1 メッセージ♪

周囲のアバターはセンサーでキャッチして取得しますので最大16人になると思います。
ダイアログはllDialogでアバターのUUIDキーを指定するだけで簡単に送れます。今回はボタンはOKボタンのみで、押したボタンを受信する必要ないのでダイアログのチャンネルはテキトーにマイナスの番号にしました。
あと、ダイアログに使う文字列は512バイトの制限があるので、最大文字数を日本語で見積もって512/3(170文字)にしてます。


// ダイアログを送る
float range=30;  // 範囲(最大96)
string text;

default
{
    state_entry()
    {
        llListen(1,"",llGetOwner(),"");  // チャンネル1でオーナーに対してリッスン開始
    }

    listen(integer channel, string name, key id, string msg)
    {
        if (channel == 1 && id == llGetOwner()) {  // チャンネル1でオーナーのチャット受信したら
            integer max=512/3;  // 最大文字数
            if (llStringLength(msg) > max) {  // 文字数超えたら
                llOwnerSay("Error! Max "+(string)max+" characters.");  // エラー表示
                return;  // リターン
            }
            if (msg) {  // 受信した文字列が空じゃないとき
                text=msg;  // 文字列をtextに格納
                llSensor("",NULL_KEY,AGENT,range,PI);  // センサー実行
            }
        }
    }

    sensor(integer num_detected)
    {
        key id;
        string name;
        list l;
        integer i;
        for (i=0; i < num_detected; i++) {
            id=llDetectedKey(i);  // キャッチしたアバターのキー
            name=llDetectedName(i);  // キャッチしたアバター名
            l+=[name];  // アバター名をリストアップしとく
            llDialog(id,text,[],-100);  // ダイアログ送信
        }
        // リストアップしたアバター名を表示
        llOwnerSay("Dialog sent to "+llDumpList2String(l,", "));
    }
}

0 件のコメント:

コメントを投稿