2012/06/11

オンライン伝言板


築地のお店にオンライン伝言板を置いています。
タッチしてチャットで何か言うと、私がオンラインのときに伝言として送ります。
何も用事はなくても、ひやかしでもいいので、何か送ってみてください。
「ブログ見たよ」でもいいので^^

スクリプトでは、タッチした人の伝言が聞こえたらそれを記録して、私がオンラインかどうか問合せ、オンラインだったら伝言を送ります。
一定時間たっても何も聞こえないときは、聞くのをやめます。
問合せてもしオフラインだったら何もしないのですが、一定時間ごとにオンラインかどうか問合せするので、オンラインになった時にまとめて送るしくみになってます。

実際のスクリプトは、オンライン/オフラインの表示など、もっといろんなこともしてますが、伝言を聞いて送る部分はこんな感じです…。
default {
 state_entry() {
  Owner = llGetOwner();
  llSetTimerEvent(StepTime);
 }
 touch_start(integer touch_num) { // 誰かがタッチしたら
  llWhisper(0, "Say your message on chat.");
  Handle = llListen(0, "", llDetectedKey(0), ""); // 伝言を待つ
  llSetTimerEvent(StepTime);
 }
 listen(integer channel, string name, key id, string message) { // 伝言を聞いたら
  llWhisper(0, "Thank you for your message.");
  removeListen(); // 聞くのをやめる
  Messages += name+": "+message; // 名前と伝言を記録
  llRequestAgentData(Owner, DATA_ONLINE); // オンラインを問合せ
 }
 timer() { // 一定時間たったら
  if (Handle) removeListen(); // 伝言待ちなら聞くのをやめる
  llRequestAgentData(Owner, DATA_ONLINE); // オンラインを問合せ
 }
 dataserver(key query, string online) { // 問合せの答
  if ((integer)online == TRUE && Messages != []) {
   // 所有者がオンラインで、伝言があればIMを送る
   llInstantMessage(Owner, llDumpList2String(Messages,"\n\t"));
   llResetScript();
  }
 }
}
築地のお店