2009年08月13日

ノートカードを読み込んで発言のスクリプト

こんばんは
毎度お世話になっております。

ノートカードを読み込んでその内容を発言させたいのですが・・
実のところ皆目検討もつきません。

default
{
touch_start(integer total_number)
{
llWhisper( 0,"てすとです" );
llSleep(2);
llWhisper( 0,"本日は晴天なり" );
}
}

単純に発言させるところまでしかわかってないんですが・・
参考資料等あるところはないでしょうか?
おしえていただければたすかります。

よろしくお願いします。



同じカテゴリー(スクリプト関連)の記事画像
オブジェクトのリンクとタッチで開く扉
自動チャットを止めたい
テレポートするとアニメーションが解除される
同じカテゴリー(スクリプト関連)の記事
 テクスチェンジのHUDについて (2015-07-01 04:51)
 モール用のプリムカウンターを探しています (2014-11-29 20:09)
 連続するアニメーションの処理 (2014-08-24 03:23)
 オブジェクトの上にフローティングテキストを出す。 (2014-08-22 16:46)
 チャットログの盗聴について (2014-02-03 03:43)
 椅子に座った後で位置調整できるスクリプト (2013-03-24 16:37)

Posted by Philotes  at 19:32 │Comments(3)スクリプト関連

この記事へのコメント
とりあえず、Makapuさんのサイトとかどうでしょう?

ノートカード関連の記事です。
http://miz.slmame.com/e2400.html
Posted by Tako★MASARU at 2009年08月13日 21:12
LSL初心者さんのようなので、簡単なサンプルを書いておきます。
ただ、実際には色々な制約もありますから、先の人の書いたMakapu等を良く読んでください。

以下のはノートカードの1行を1メッセージ単位として読み込んでおき、タッチするたびに、ランダムに読み込んだメッセージを発言する物です。
使うときは、適当なメッセージを書き込んだノートカードを入れてお試し下さい。
ノートカード内容を書き換えたら、スクリプトをリセットして読み込み直しをさせて下さい。

お役に立てれば幸いです。

***********************************************
key query_id;
integer read_line=0;
list msg_list;//ノートカードに記入されたメッセージのリスト。1行1メッセージとして扱う。
string card_name;//コンテンツ内のノートカード名をセット

integer check_note(){//ノートカードの存在確認をして、読み込みを指示する関数
llOwnerSay("Now Loading.."+card_name);
if (llGetInventoryType(card_name) == INVENTORY_NOTECARD) {
query_id = llGetNotecardLine(card_name, read_line); // request first line
return(TRUE);
}else{
llOwnerSay("Not found notecard " + card_name + ", "+card_name+" content into it, please re-read them.");
return(FALSE);
}
}

default
{
state_entry()
{
card_name=llGetInventoryName(INVENTORY_NOTECARD,0);//コンテンツ内のノート角名を取得
check_note();//ノートカードの読み込み指示関数を呼び出す。
}
dataserver(key queryid, string data) {//ノートカード内容の読み込み
if (queryid == query_id) {
if (data != EOF) {
list temp_list = llParseString2List(data, [","], []);
msg_list +=temp_list;//読み込んだ1行をメッセージリストに追加
query_id = llGetNotecardLine(card_name, ++read_line);
}else{
llOwnerSay("Loading complete.");
state say_msg;
}
}
}
}

state say_msg
{
touch_start(integer total_number)
{
integer temp_no = (integer)llFrand((integer)llGetListLength(msg_list));//乱数を発生させ、発言するメッセージのリスト位置を決める。
llWhisper(0,llList2String(msg_list,temp_no));//メッセージリストから該当メッセージを取り出して発言
}
}
***********************************************
Posted by Gonbe ShanGonbe Shan at 2009年08月14日 09:24
すみません。一部補足です。

先のサンプルは、厳密には1行1メッセージでは無く、カンマ区切りで1メッセージに分割されます。この部分↓
list temp_list = llParseString2List(data, [","], []);

手持ちの製作物の内容を元にしたので、そのような仕様になっています。

後は色々と試して見て下さい。
Posted by Gonbe ShanGonbe Shan at 2009年08月14日 09:31
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。