2009年08月13日
ノートカードを読み込んで発言のスクリプト
こんばんは
毎度お世話になっております。
ノートカードを読み込んでその内容を発言させたいのですが・・
実のところ皆目検討もつきません。
default
{
touch_start(integer total_number)
{
llWhisper( 0,"てすとです" );
llSleep(2);
llWhisper( 0,"本日は晴天なり" );
}
}
単純に発言させるところまでしかわかってないんですが・・
参考資料等あるところはないでしょうか?
おしえていただければたすかります。
よろしくお願いします。
毎度お世話になっております。
ノートカードを読み込んでその内容を発言させたいのですが・・
実のところ皆目検討もつきません。
default
{
touch_start(integer total_number)
{
llWhisper( 0,"てすとです" );
llSleep(2);
llWhisper( 0,"本日は晴天なり" );
}
}
単純に発言させるところまでしかわかってないんですが・・
参考資料等あるところはないでしょうか?
おしえていただければたすかります。
よろしくお願いします。
テクスチェンジのHUDについて
モール用のプリムカウンターを探しています
連続するアニメーションの処理
オブジェクトの上にフローティングテキストを出す。
チャットログの盗聴について
椅子に座った後で位置調整できるスクリプト
モール用のプリムカウンターを探しています
連続するアニメーションの処理
オブジェクトの上にフローティングテキストを出す。
チャットログの盗聴について
椅子に座った後で位置調整できるスクリプト
ノートカード関連の記事です。
http://miz.slmame.com/e2400.html
ただ、実際には色々な制約もありますから、先の人の書いた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));//メッセージリストから該当メッセージを取り出して発言
}
}
***********************************************
先のサンプルは、厳密には1行1メッセージでは無く、カンマ区切りで1メッセージに分割されます。この部分↓
list temp_list = llParseString2List(data, [","], []);
手持ちの製作物の内容を元にしたので、そのような仕様になっています。
後は色々と試して見て下さい。