新しく実装された関数はllName2KeyとllRequestUserKeyです。llName2KeyはllKey2Nameと同様データサーバーを通さないので、同一SIM内かその周囲数m以内に対象アバターがいないと値が得られないんだと思います。。。ってことは名前からキーを割り出すっていう場面では、この関数ってあまり使い道なくないですかね?www
そういうことでllRequestUserKeyの方を使って、早速アバターキーを取得するスクリプトを書いてみました。
// アバター名からアバターキーを取得
integer ch=5;  // チャット入力に使うチャンネル番号
integer listen_handle;  // リッスン関数を扱うための変数
key query;  // データ問い合わせ用変数
listen_end()
{  // チャット受信またはタイムアウト時の処理
    llListenRemove(listen_handle);  // リッスンを破棄
    llSetTimerEvent(0);  // タイマー停止
}
default
{
    touch_start(integer total_number)
    {
        key id=llDetectedKey(0);  // タッチしたアバターが
        if (id == llGetOwner()) {  // オーナーなら
            llOwnerSay("「/"+(string)ch+" アバター名」でキーを検索します。");
            llListenRemove(listen_handle);  // 一応リッスンを破棄して
            listen_handle=llListen(ch, "", NULL_KEY, "");  // リッスン開始
            llSetTimerEvent(60);  // タイマー60秒
        }
    }
    timer()
    {  // 指定時間が経過したら
        listen_end();  // listen_endへ
        llOwnerSay("時間切れです><");
    }
    listen(integer channel, string name, key id, string msg)
    {  // チャットを受信
        if (channel == ch) {  // 設定したチャンネル番号なら
            listen_end();  // listen_endを処理して
            query = llRequestUserKey(msg);  // アバターキー問い合わせ
        }
    }
    dataserver(key queryid, string data)
    {
        if (queryid == query) {  // 問い合わせたデータを取得したら
            llOwnerSay("アバターキー "+data);  // アバターキーを表示
        }
    }
}
オーナーがタッチして「/5 アバター名」をチャットで入力するとアバターキーを表示します。入力するアバター名はユーザーネームでもレガシーネームでもオッケーみたいです。
7月3日追記: リッスン開始の直前に念のためリッスン破棄するよう修正しました。

0 件のコメント:
コメントを投稿