arz Nitelyってシステム屋どうよ?

SecondLifeとWebとの融合を模索するセミプロWeb屋の挑戦

サインボード(オンラインチェッカー)

2008年08月10日 – 04:19

よくある「○○はオンラインです」みたいな表示をさせるスクリプトです。
もちろん、誰かがタッチするとオーナーにIMが届きます。

な〜〜んだ、そんなもんわざわざ紹介しなくてもいいし〜ww なんて思ってるあなた!!
ええ、見なくてイイですけど、損しますよw

もともと販売用にと思い、なかなか見かけないような細工をこらしたものだったんですが
(ウチで長いこと使っているものでもあります)
こんな初歩的なスクリは販売するものではないんじゃないのかな〜と思いましてww

そういうわけで、これも公開しちゃいます^^

 

はい、コードはこちらです
http://luckyboard.net/?id=jp:free_lsl



近距離テレポータースクリプト

2008年08月08日 – 11:40

いわゆるテレポートハックと呼ばれているもので、今さら紹介する意味なんてないかもしれませんが…

まぁ、ちょっぴり小枝を組み込んでみました^^

 

コードはこちらからどうぞ
http://luckyboard.net/?id=jp:free_lsl



汎用ポーズチェンジスクリプト

2008年08月07日 – 01:15

けっこう需要があるんですよね… これ
そして、オーダー受けるのがだんだん面倒になってきました^^;

というわけで、汎用スクリプトを書きましたのでw
あとはみなさん、スクリの勉強だと思ってがんばってくださいましww

 

コードはこちらからどうぞ^^
http://luckyboard.net/?id=jp:free_lsl



汎用アバターレーダースクリプト

2008年08月05日 – 13:28

フォントカラー、センサー周期、レーダーのオン/オフを
ダイアログからいつでも変更できる汎用アバターレーダーです
(ダイアログはタッチで出ます)

アバターレーダーは、スクリプトを書くときのエッセンスがぎっしりつまったものですので
お勉強用ということでw ソースを公開します。

 

もちろん、このスクリプトをそのまま商品として販売するとか
ちょっと修正したものを販売するとか
そういう姑息なことはご遠慮くださいましw

えと、適当なプリムにこのスクリプトをコピーし
HUDとしてご利用ください^^

センサーはSIMに負荷をかけますのでご利用はほどほどに^^
(なるべくセンサー周期を長めに設定しつつ、afk時はオフにしましょう!!)

// Avatar Radar :: 2008-08-04

// Setup
string my_name = "LB System :: Avatar Radar";
string ver = "ver.1.00.42";

uuSetup(){
    llSetObjectName(my_name);
    llSetObjectDesc(ver);
    llOwnerSay(my_name + "  " + ver);
}

// Sensor
integer switch;
vector my_pos;
vector av_pos;
integer max_read;
string agent_info;
string dist;
string n_s;
string e_w;
string h_l;
vector font_color = <1.0, 1.0, 1.0>;

uuSensor(integer flug){
    switch = flug;
    if (flug){
        llSensorRepeat("", NULL_KEY, AGENT, 96.0, PI, sensor_arc);
        llSetText("Searching", font_color, 1.0);
    }else{
        llSensorRemove();
        llSetText(":: OFF ::", font_color, 1.0);
    }
}

uuPos(){
    if (av_pos.y - my_pos.y > 1){
        n_s = "N";
    }else if (av_pos.y - my_pos.y < -1){
        n_s = "S";
    }else{
        n_s = "";
    }
    if (av_pos.x - my_pos.x > 1){
        e_w = "E";
    }else if (av_pos.x - my_pos.x < -1){
        e_w = "W";
    }else{
        e_w = "";
    }
    if (av_pos.z - my_pos.z > 2){
        h_l = "↑";
    }else if (av_pos.z - my_pos.z < -2){
        h_l = "↓";
    }else{
        h_l = "●";
    }
}

// Interface
integer d_ch = -11111;
float listen_remove = 60.0;
integer handle;
float sensor_arc = 5.0;
list menu_off = ["オン", "文字色", "時間"];
list menu_on = ["オフ", "文字色", "時間"];
list colors = ["白", "黒", "赤", "青", "黄", "緑"];
list color_vector = [<1.0, 1.0, 1.0>, <0.0, 0.0, 0.0>, <1.0, 0.0, 0.0>, <0.0, 0.0, 1.0>, <1.0, 1.0, 0.0>, <0.0, 1.0, 0.0>];
list seconds = ["10", "20", "30", "1", "3", "5"];
integer color_change = FALSE;

uuListen(integer flug){
    if (flug){
        handle = llListen(d_ch, "", llGetOwner(), "");
        llSetTimerEvent(listen_remove);
    }else{
        llSetTimerEvent(0.0);
        llListenRemove(handle);
    }
}

uuMainDialog(){
    uuListen(TRUE);
    if (switch){
        llDialog(llGetOwner(), "メインメニュー", menu_on, d_ch);
    }else{
        llDialog(llGetOwner(), "メインメニュー", menu_off, d_ch);
    }
}

uuColorDialog(){
    color_change = TRUE;
    uuListen(TRUE);
    llDialog(llGetOwner(), "文字色を選択してください", colors, d_ch);
}

uuArcDialog(){
    uuListen(TRUE);
    llDialog(llGetOwner(), "センサー周期を選択してください \n推奨5秒以上 \n \n現在の設定:" + (string)((integer)sensor_arc) + "(秒)", seconds, d_ch);
}

// Color Change
uuChangeColor(string str){
    font_color = llList2Vector(color_vector, llListFindList(colors, [str]));
    if (switch){
        llSetText(agent_info, font_color, 1.0);
    }else{
        llSetText(":: OFF ::", font_color, 1.0);
    }
}

// Flow
default{
    state_entry(){
        uuSetup();
        uuSensor(TRUE);
    }

    sensor(integer num_detected){
        my_pos = llGetPos();
        agent_info = "";
        if (num_detected < 8){
            max_read = num_detected;
        }else{
            max_read = 8;
        }
        integer i;
        for (i = 0; i < max_read; i++){
            av_pos = llDetectedPos(i);
            uuPos();
            dist = " @ " + n_s + e_w + " " + (string)llRound(llVecDist(llGetPos(),av_pos)) + "m " + h_l;
            agent_info += " \n" + llDetectedName(i) + dist;
        }
        llSetText(agent_info, font_color, 1.0);
    }

    no_sensor(){
        llSetText("No PPL around here.", font_color, 1.0);
    }

    touch_start(integer total_number){
        if (llDetectedKey(0) == llGetOwner()){
            uuMainDialog();
        }
    }

    timer(){
        uuListen(FALSE);
    }

    listen(integer channel, string name, key id, string message){
        uuListen(FALSE);
        if (message == "オン"){
            uuSensor(TRUE);
        }else if (message == "オフ"){
            uuSensor(FALSE);
        }else if (message == "時間"){
            uuArcDialog();
        }else if (message == "文字色"){
            uuColorDialog();
        }else if (color_change){
            color_change = FALSE;
            uuChangeColor(message);
        }else{
            sensor_arc = (float)message;
            llOwnerSay(message + "秒に設定しました");
        }
    }
}

余談ですがw

あたしはリスンイベントを使うときは
次のようなユーザ関数をつくっておいて、コールすることにしています^^

uuListen(integer flug){
    if (flug){
        handle = llListen(d_ch, "", llGetOwner(), "");
        llSetTimerEvent(listen_remove);
    }else{
        llSetTimerEvent(0.0);
        llListenRemove(handle);
    }
}

リスンするときは

uuListen(TRUE);

リスンを閉じるときは

uuListen(FALSE);

とコールします^^

これ、便利ですよw

小枝ということで^^



LMから座標データを抽出し、地図表示するスクリプト

2008年08月04日 – 21:38

このスクリプトとLM(1つだけ)をオブジェクトに入れると
LMから座標データを抽出し、タッチした人に(LMの場所の)地図を表示します。

LMを準備するだけで簡易TP看板として利用できます^^

スクリプトの編集はいっさい不要で
LMを入れるだけで設定完了しますのでとても楽ですよ〜w

// Show Map of LM :: 2008-04-16
string lm_name;
integer lm_number = 0;
vector target_pos;
key request_id;

default{
    state_entry(){
        lm_number = llGetInventoryNumber(INVENTORY_LANDMARK);
        if (lm_number == 1){
            lm_name = llGetInventoryName(INVENTORY_LANDMARK, 0);

            request_id = llRequestInventoryData(lm_name);
        }else{
            llOwnerSay("ランドマークがセットされていません。コンテンツ内に1つだけランドマークを入れてください。");
        }
    }

    changed(integer change){
        if (change & CHANGED_INVENTORY){
            llResetScript();
        }
    }

    dataserver(key query_id, string data){
        if (query_id == request_id){
            request_id = NULL_KEY;
            target_pos = (vector)data;
            llOwnerSay("ランドマークから座標データを抽出しました:" + lm_name);
        }
    }

    touch_start(integer total_number){
        llMapDestination(llGetRegionName(), target_pos, ZERO_VECTOR);
    }
}