でも実は、アバター同士の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のウィンドウが開きます。