Site search
2008年6月18日水曜日
ダイアログで何かを渡すスクリプト
タッチでノートやランドマークを渡す、Notecard giverとかLandmark giverなどよく見かけますね。
この例のOshiraseはノートカードのつもりですが、ランドマークやオブジェクトやボディパーツなど他の持ち物に変えてもOKです。ただし、ノートはパーミッションがノーコピーだと渡しても開いて見れないので注意してくださいw
では本題に入ります。今回はこれをダイアログを出してボタンで選べるようにします^^
メニューのボタンを押すとチャットでボタンの内容が送信されます。ですからチャンネルを0に設定すると送信内容が普通に見れます^^;
送信された内容はlistenイベントでゲットして処理します。
2009年4月19日追記: state_entryでチャンネルを乱数で決めてリッスンを開始するようにしておいて、以後llListenRemoveしないように修正しました。
// オブジェクトのコンテンツ内にあるOshiraseを渡す
default
{
touch_start(integer total_number)
{
key agent=llDetectedKey(0);
llGiveInventory(agent,"Oshirase");
}
}
この例のOshiraseはノートカードのつもりですが、ランドマークやオブジェクトやボディパーツなど他の持ち物に変えてもOKです。ただし、ノートはパーミッションがノーコピーだと渡しても開いて見れないので注意してくださいw
では本題に入ります。今回はこれをダイアログを出してボタンで選べるようにします^^
メニューのボタンを押すとチャットでボタンの内容が送信されます。ですからチャンネルを0に設定すると送信内容が普通に見れます^^;
送信された内容はlistenイベントでゲットして処理します。
// ダイアログ
string text="サンプル メニュー"; // ダイアログに表示するメッセージ
string button1="お知らせ";
string note1="Oshirase";
string button2="ギフト";
string item2="T-shirt";
string button3="ブログへGO";
string url3="http://beta.slmame.com/";
list menu=[button1,button2,button3]; // メニューに出るボタンのリスト
integer CHANNEL; // メニューの返事を聞くチャンネル用
default
{
state_entry()
{
CHANNEL=llCeil(llFrand(2147483646)); // チャンネルを乱数で設定
llListen(CHANNEL,"",NULL_KEY,""); // listen開始
}
touch_start(integer total_number)
{
key agent=llDetectedKey(0); // タッチしたアバターのキー
llDialog(agent,text,menu,CHANNEL); // ダイアログを出す
}
listen(integer channel, string name, key id, string msg)
{
if (channel == CHANNEL)
{
if (msg == button1) { // button1が押されたとき
llGiveInventory(id,note1); // note1を渡す
}
else if (msg == button2) { // button2が押されたとき
llGiveInventory(id,item2); // item2を渡す
}
else if (msg == button3) { // button3が押されたとき
llLoadURL(id,button3,url3); // webページを開く
}
}
}
}
2009年4月19日追記: state_entryでチャンネルを乱数で決めてリッスンを開始するようにしておいて、以後llListenRemoveしないように修正しました。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿