2013/09/19

スタッフボードからIM

スタッフボードは、タッチでスタッフとIMができるようにしてます。
でも実は、アバター同士のIMを直接開くスクリプト関数はないのです。
どうするかというと、ビューワーからIMを起動する方法があって、それを使います。
ビューワーで表示するメッセージ文中に「secondlife:///app/agent/(相手のキー)/im」があると、そこにリンクが張られて、クリックするとIMのウィンドウが開くのです。
公式ビューワーだとメニューの表示メッセージでこれができますが、できないビューワーもあるので、ボタンを用意して、メッセージのチャットログから開くようにします。

右の写真は、Firestorm ビューワーの画面で、メニューに「IM lovemax」というのが 「secondlife:///app/…」から置き換わって表示されています。(公式ビューワーも同様)
showMenu() { // メニューを出す
  OpenIM = "secondlife:///app/agent/" + (string)StaffId + "/im";
  list buttons = ["IM"];
  string message = "\nIM: 下線またはボタンをクリック"
      +" Click Underline or Button\n" + OpenIM;
  if (llGetInventoryNumber(INVENTORY_NOTECARD)) {
    Note = llGetInventoryName(INVENTORY_NOTECARD,0);
    buttons += ["Note"];
    message += "\nNote: ノートもらえます Get Note";
  }
  Handle = llListen(Channel,"",Id,"");
  llDialog(Id,message,buttons+["Cancel"],Channel);
}

default {
  touch_start(integer num) {
    Id = llDetectedKey(0); // タッチした人
    // (実際にはスタッフIDを調べてから)
    showMenu(); // メニューを出す
  }
  listen(integer ch,string na,key id,string msg) {
    if (msg=="IM") llInstantMessage(Id,
          "チャットログで下線をクリックしてください"
          +" Click Underline on Chat Log\n"+OpenIM);
    else if (msg=="Note") llGiveInventory(Id,Note);
    llListenRemove(Handle);
  }
}


左の写真は、Cool VL ビューワーの画面で、メニューの文字「secondlife:///app/…」はそのままです。
[IM]ボタンを押すとボードからメッセージが送られてきて、それをチャットログで見たのが右の写真です。
文字「secondlife:///app/…」のところにリンクがあり、クリックすれば、IMのウィンドウが開きます。