2008年04月29日
メッセージ送信箱(リンデンスクリプト Tips)
送信箱にノートカードをドラッグすると、ノードカードの内容を指定したメールアドレス宛てに送信し ます。伝言等に利用されてはいかがでしょうw オブジェクトのオーナーでなくても誰でもメッセージ の送信か可能です。難点として、日本語だと文字化けするところです・・・
「スクリプト内容」 // // SHOP ZERO Tips26 MessageBox v1.0 // // Created by Zero2000 Kid 2008/04/29 // string emailaddress="zero_seven@hotmail.co.jp"; string subject="email from sl"; string ftext="**MessageBox** \n Please drag NoteCard."; integer ItemType=INVENTORY_NOTECARD; integer read_line; key note_req; string notename; string message; ClearInvetory () { integer i; integer Itemct = llGetInventoryNumber(INVENTORY_ALL); for (i = 0; i < Itemct-1; i++) { string ItemName=llGetInventoryName(INVENTORY_ALL,i); if (ItemName!=llGetScriptName()) { llRemoveInventory(ItemName); } } } default { state_entry() { llSetText(ftext,<1,1,1>, 1.0); ClearInvetory(); llAllowInventoryDrop(TRUE); } on_rez(integer int) { llResetScript(); } changed(integer change){ if(change & (CHANGED_INVENTORY | CHANGED_ALLOWED_DROP)) { state active_mode; } } } state active_mode { state_entry() { read_line = 0; message=""; llAllowInventoryDrop(FALSE); if (llGetInventoryNumber(ItemType)) { notename=llGetInventoryName(ItemType,0); llWhisper(0,notename + " loading now ..."); note_req = llGetNotecardLine(notename, read_line); } else { state default; } } dataserver(key queryid, string data) { if (data != EOF) { if (llGetFreeMemory()<9000) { llEmail(emailaddress, subject, message); llWhisper(0,"Message send complete."); state default; } message+=data +"\n"; read_line ++; note_req = llGetNotecardLine(notename, read_line); } else { llEmail(emailaddress, subject, message); llWhisper(0,"Message send complete."); state default; } } } 「使用方法」 1. スクリプトの1行目のstring emailaddress="zero_seven@hotmail.co.jp"のメールアドレス部分を 送信したいアドレスに書き換えます。 2. オブジェクトを1つ作成します。(球でもボックスでも何でも構いません。) 3. オブジェクトにスクリプトをドラッグします。 4. オブジェクトにノードカードをドラッグします。 5. ノートカードの内容が、設定したメールアドレス宛てに送信されます。 「スクリプトの説明」 今回のスクリプトのポイントは、llAllowInventoryDropという関数とノードカード読み込み、 電子メール送信コマンドでしょうか。通常オブジェクトへのアイテムのドラッグは、そのオブ ジェクトのオーナーのみしか許可されません。しかし、llAllowInventoryDropという関数を利 用するとオーナー以外でもアイテムのドラッグが可能になります。 最初にstate_entryが呼び出されます。ここでllAllowInventoryDropを利用してオブジェクト へのドラッグを許可します。 state_entry() { llSetText(ftext,<1,1,1>, 1.0); // インベントリの中をクリア ClearInvetory(); // オブジェクトへのドラッグを許可する。 // 括弧の中にTRUEと書くと許可する意味になる。 llAllowInventoryDrop(TRUE); } オブジェクトにノートカードがドラッグされるとchangedイベントが発生します。 changed(integer change){ // オーナーがドラッグした場合は、CHANGED_INVENTORYのビットが立つ // オーナー以外からのドラッグだとCHANGED_ALLOWED_DROPのビットが立つ if(change & (CHANGED_INVENTORY | CHANGED_ALLOWED_DROP)) { // active_modeステートへ移行 state active_mode; } } アイテムのドラッグが検出されるとactive_modeステートに移行します。active_modeでは、 最初にstate_entryが呼び出されます。ここでは、まず最初にllAllowInventoryDrop(FALSE)を 実行して、処理中のドラッグを一時的に禁止します。その後、ドラッグされたアイテムをチェック し、アイテムがノードカードであれば、そのままノートカードの内容を読み込みます。 ノートカードの読み込みについては、llGetNotecardLineを参照してください。 state_entry() { read_line = 0; message=""; // アイテムのドラッグを禁止 llAllowInventoryDrop(FALSE); // アイテムがノートカードなのかを判定 if (llGetInventoryNumber(ItemType)) { // アイテムがノードカードなら内容を読み込み notename=llGetInventoryName(ItemType,0); llWhisper(0,notename + " loading now ..."); note_req = llGetNotecardLine(notename, read_line); } else { // アイテムがノートカード以外ならステートをdefaultへ戻し処理終了 state default; } } ノートカードの読み込みが終了すると電子メールを送信します。 電子メールの送信については、llEmailを参照してください。 dataserver(key queryid, string data) { if (data != EOF) { // オーバーフロー対策。ノートの内容が多すぎるとスクリプトのオーバーフロー // を起こすので、フリーメモリが9000を切ったらそこでメール送信する。 if (llGetFreeMemory()<9000) { // 電子メール送信処理 llEmail(emailaddress, subject, message); llWhisper(0,"Message send complete."); // ステートをdefaultへ移行 state default; } message+=data +"\n"; read_line ++; note_req = llGetNotecardLine(notename, read_line); } else { // ノートカードを最後まで読んだら電子メール送信処理 llEmail(emailaddress, subject, message); llWhisper(0,"Message send complete."); // ステートをdefaultへ移行 state default; } } 電子メールの送信が終わるとステートをdefaultへ戻し、ClearInvetory()という関数を呼び出し、イベント リの中のアイテムを削除します。 リンデンスクリプト Tips Indexへ
サウンド再生スクリプト(リンデンスクリプト Tips)
カメラコントロール(リンデンスクリプト Tips)
標準時間表示スクリプト(リンデンスクリプト Tips)
プリムカウンター2(リンデンスクリプト Tips)
土地情報チェッカー(リンデンスクリプト Tips)
SIM負荷チェッカー(リンデンスクリプト Tips)
Posted by Zero2000 Kidd at 13:55│Comments(0)
│リンデンスクリプトTips