Site search

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

2008年8月26日火曜日

ノートカードを読むスクリプト

今回はノートに書いたテキストを読み出すスクリプトです^^
ノートカードの内容を1行ずつllGetNotecardLineで読み出して、読み出したデータはdataserverイベントでキャッチできます。

スクリプトが編集不可で設定をノートからロードしたりするのによく使われますよね^^ でもdataserver通すので行が増えるほど読み込みが重くなるんですよw
そのノートから設定を読むスクリプトは http://wiki.secondlife.com/wiki/Dataserver_API にも出てます。。。て書くと記事もこれで終わっちゃいますので、ここではノートに書いた文章をそのまま読み出すだけの簡単なスクリプトを載せますね^^;


表示はチャットとフローティングテキストで表示するようにしてみました^^
// ノートカードを読み出す
string text;  // 読み出した文字列格納用
string note;
integer line;  // 読み出す行のカウント用
key queryhandle;
key note_id;  // コンテンツ内のノートのキー

init()
{
    note=llGetInventoryName(INVENTORY_NOTECARD,0);  // コンテンツ内のノート
    text="";  // 文字列初期化
    line=0;  // カウント初期化
    queryhandle=llGetNotecardLine(note, line);  // ノートの行読み出し開始
    note_id=llGetInventoryKey(note);  // ノートのキーを変数に入れとく
}

default
{
    state_entry()
    {  // 最初はinit実行
        init();
    }

    changed(integer change)
    {
        if (change & CHANGED_INVENTORY) {
            if (note_id != llGetInventoryKey(note))
            {  // ノートのキーが変わったら
                init();  // initへ
            }
        }
    }

    dataserver(key query_id, string data)
    {
        if (query_id == queryhandle) {
            if (data != EOF) {  // ノートが終わってなければ
                text+=data+"\n";  // 読み出した行に改行つけてtextに追加
                line++;  // カウンタを次の行にして
                queryhandle=llGetNotecardLine(note,line);  // 読み出し続行
            }
            else {  // そうでないとき(ノートが終わりに達したら)
                llSay(0,text);  // チャットで表示
                llSetText(text,<1,1,1>,1.0);  // フローティングテキストに表示
            }
        }
    }
}

何か書いたノートをコンテンツ内に1つ入れてくださいね。このスクリプトではノートカード名は何でもOKにしてます^^

0 件のコメント:

コメントを投稿