Site search
2009年3月19日木曜日
メッセージを数件記録するスクリプト
タッチした後、チャットで打ったメッセージを記録するスクリプトを考えてみました。記録したメッセージの読み出しは誰でもできます。最初はオーナーのみ読み出し可能にしようかなって思ったんですが、それだったら普通にIMでOKなんじゃないかなって感じになってきたので変更したんですよw
タッチしてチャットすると、チャット内容をリストに記録します。内容を表示するときはチャットのときmsgって入力すると表示するようにしました。(制限時間120秒)
リストには [ 時間+アバター名, チャット内容 ] のように2つずつ記録するようにしました。1つにまとめた方がスマートなんですけど、そうするとチャットできる文字数(バイト数?)いっぱいまで表示できなくなるので分割したんですね。
キー型の変数userは、タッチしたアバターのキーを入れて、使用中かどうかを判断するのに使ってます。スクリプトできてから、これブーリアン型で良かったのにって思ったんですけどね^^;
リストや時間の部分の処理は訪問者を記録するスクリプト http://backup-beta.blogspot.com/2008/10/blog-post_4583.htmlと同じです^^;
タッチしてチャットすると、チャット内容をリストに記録します。内容を表示するときはチャットのときmsgって入力すると表示するようにしました。(制限時間120秒)
リストには [ 時間+アバター名, チャット内容 ] のように2つずつ記録するようにしました。1つにまとめた方がスマートなんですけど、そうするとチャットできる文字数(バイト数?)いっぱいまで表示できなくなるので分割したんですね。
キー型の変数userは、タッチしたアバターのキーを入れて、使用中かどうかを判断するのに使ってます。スクリプトできてから、これブーリアン型で良かったのにって思ったんですけどね^^;
// メッセージを記録
list msglist; // 記録用リスト
key user=NULL_KEY; // 使用チェック用
integer time=120; // 制限時間
integer listen_handle;
integer max=10; // 最大記録数
string cmd="msg";
string get_time()
{
integer t=(integer)llGetWallclock(); // 太平洋時間
integer h=t/3600; // 時
integer m=(t%3600)/60; // 分
string hh=(string)h; // 時を文字に変換
if (h < 10) hh="0"+hh; // 時が1桁だったら0を付ける
string mm=(string)m;
if (m < 10) mm="0"+mm;
return hh+":"+mm; // hh:mm でリターン
}
default
{
touch_start(integer total_number)
{
key id=llDetectedKey(0); // タッチしたアバターのキー
if (user == NULL_KEY) { // 使用中でないとき
user=id; // userにキーを設定
llSay(0,"Say '"+cmd+"' to read messages, or say message to save your message. (timeout "+(string)time+" seconds)");
listen_handle=llListen(0,"",id,""); // リッスン開始
llSetTimerEvent(time); // タイマー始動
}
}
timer()
{ // 時間切れになったときの処理
llSetTimerEvent(0); // タイマー停止
llListenRemove(listen_handle); // リッスン中止
user=NULL_KEY; // userにヌルキーを設定
llSay(0,"Timeup! Touch and say again."); // 時間切れです
}
listen(integer channel, string name, key id, string msg)
{
llSetTimerEvent(0); // タイマー停止
llListenRemove(listen_handle); // リッスン中止
user=NULL_KEY; // userにヌルキー
if (msg == cmd) { // 読み出し
integer i;
integer j=llGetListLength(msglist); // リストの長さ
llSay(0,"--- Max "+(string)max+" saved message(s). ---");
for (i=0; i < j; i+=2) {
llSay(0,llList2String(msglist,i)); // 時間、名前
llSay(0,llList2String(msglist,i+1)); // メッセージ
}
llSay(0,"----------------------------------------");
}
else { // 記録
msglist+=["["+get_time()+"] "+name+": ",msg]; // リストに時間と名前、メッセージを登録
integer i=llGetListLength(msglist); // リストの長さ
if (i > max*2) { // リストが最大記録数×2を超えたら
msglist=llDeleteSubList(msglist,0,i-1-max*2); // 古いほうから消す
}
llSay(0,"Saved your message.");
}
}
}
リストや時間の部分の処理は
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿