ソラマメブログ
< 2025年05月 >
S M T W T F S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

2008年12月07日

オブジェクト探知機2(リンデンスクリプト Tips)

コメント欄のご要望からTips24 オブジェクト探知機の改良版を作りました。
前回の探知機は、完全なオブジェクト名を入力しなければ検出できませんでしたが、
今回のスクリプトは、オブジェクト名の一部だけで検出可能です。
便利になりましたが、一部問題もあります。詳しくは、使用方法の注意を参考下さいw

「スクリプト内容」
//
//    SHOP ZERO Tips36 ObjectDetector v2.0
//
//                   Created by Zero2000 Kid     2008/12/07
//                   
// 

integer input_ch = 36;
integer range=96;
integer handle;
string target;
string simname;


output_info (vector v , string name) {
    string pos=(string)v.x + "/" + (string)v.y + "/" + (string)v.z;
    llInstantMessage(llGetOwner(),name+"--> secondlife://"+simname+"/"+pos);
}

default {
    state_entry(){
        handle = llListen(input_ch,"",llGetOwner(),"");
    }

    on_rez(integer param){
        llResetScript();
    }
    
    listen(integer ch, string name, key id, string message) {
        target=message;
        simname=llGetRegionName();
        llInstantMessage(llGetOwner(),"Searching " + target + " ....");
        state active_target;
    }
    
}


state active_target {
    
    state_entry(){
        llInstantMessage(llGetOwner(),"");
        llSensor("", NULL_KEY, ACTIVE, range, PI);
    }
    
    sensor(integer total_number) {
        integer i;
        for (i = 0; i < total_number; i++) {
            if (llSubStringIndex(llToLower(llDetectedName(i)),llToLower(target))!=-1) {
                output_info(llDetectedPos(i),llDetectedName(i));
            }
        }
        state passive_target;
    }
    
    no_sensor() {
        llInstantMessage(llGetOwner(),"active_target --> Not found.");
        state passive_target;
    }

}

state passive_target {
    
    state_entry(){
        llInstantMessage(llGetOwner(),"");
        llSensor("", NULL_KEY, PASSIVE, range, PI);
    }
    
    sensor(integer total_number) {
        integer i;
        for (i = 0; i < total_number; i++) {
            if (llSubStringIndex(llToLower(llDetectedName(i)),llToLower(target))!=-1) {
                output_info(llDetectedPos(i),llDetectedName(i));
            }
        }
        state scripted_target;
    }
    
    no_sensor() {
        llInstantMessage(llGetOwner(),"passive_target --> Not found.");
        state scripted_target;
    }

}

state scripted_target {
    
    state_entry(){
        llInstantMessage(llGetOwner(),"");
        llSensor("", NULL_KEY, SCRIPTED, range, PI);
    }
    
    sensor(integer total_number) {
        integer i;
        for (i = 0; i < total_number; i++) {
            if (llSubStringIndex(llToLower(llDetectedName(i)),llToLower(target))!=-1) {
                output_info(llDetectedPos(i),llDetectedName(i));
            }
        }
        llInstantMessage(llGetOwner(),"Searching complete.");
        state default;
    }
    
    no_sensor() {
        llInstantMessage(llGetOwner(),"scripted_target --> Not found.");
        llInstantMessage(llGetOwner(),"Searching complete.");
        state default;
    }
    
}


「使用方法」
1. オブジェクトを1つ作成します。(球でもボックスでも何でも構いません。)
2. オブジェクトにスクリプトをドラッグします。
3. 探知したいオブジェクト名が、"Hot Dog" だとしたらチャット入力欄に
   /36 dog
  のように名前の一部を入力します。
4. オブジェクト探知が始まります。
5. オブジェクトが見つかるとチャット欄にオブジェクト名と座標が表示されます。
6. 座標をクリックするとそのオブジェクトの場所へのテレポ画面が起動します。
7. テレポを実行するとオブジェクトの場所へ移動します。
  (距離が近すぎるとテレポに失敗するので、その場合は少し離れてみましょう)

[注意]
 今回のスクリプトは、前回のスクリプトと比べて名前の一部で検索可能なので
便利ではありますが少々問題があります。llSensorコマンドは、オブジェクトの
名称にワイルドカード指定ができないため、全てのオブジェクトを検出対象にす
る必要があります。llSensorコマンドで検出可能なオブジェクトの数は16個が
限界なので、ターゲットまでの間に16個以上のオブジェクトが存在すると、たと
えセンサー検出範囲内であっても目的のオブジェクトを検出することができなく
なります。ですので周りにオブジェクトが多数存在するような場所で使用した場合、
検出範囲が短くなりますので注意しましょう~(^-^)/


「スクリプトの説明」
Tips24 オブジェクト探知機
部分検索の部分は、
Tips25 アバター探知機
を参考にして下さい。

手抜き。。w

リンデンスクリプト Tips Indexへ




同じカテゴリー(リンデンスクリプトTips)の記事画像
サウンド再生スクリプト(リンデンスクリプト Tips)
カメラコントロール(リンデンスクリプト Tips)
標準時間表示スクリプト(リンデンスクリプト Tips)
プリムカウンター2(リンデンスクリプト Tips)
土地情報チェッカー(リンデンスクリプト Tips)
SIM負荷チェッカー(リンデンスクリプト Tips)
同じカテゴリー(リンデンスクリプトTips)の記事
 サウンド再生スクリプト(リンデンスクリプト Tips) (2009-12-16 20:13)
 カメラコントロール(リンデンスクリプト Tips) (2009-11-21 21:26)
 標準時間表示スクリプト(リンデンスクリプト Tips) (2009-11-02 00:34)
 プリムカウンター2(リンデンスクリプト Tips) (2009-10-12 20:40)
 土地情報チェッカー(リンデンスクリプト Tips) (2009-10-11 21:33)
 SIM負荷チェッカー(リンデンスクリプト Tips) (2009-08-09 20:26)
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。