セカンドライフの達人 (単行本(ソフトカバー))

最近の記事

12月23日 TVカフェがなくなる。
12月23日 竹内綾乃さんのライブ
12月23日 クラシックコンサート
12月22日 サンタはウサギで トナカイはにわとり
12月22日 3Dオークション
12月22日 テロと美の狭間で
12月22日 NOVANEKOさんの1万リンデン生活スタート
12月22日 初期あばたーが続々でてきます。
12月22日 セカンドライフのフットサルがプレーオフへ
12月06日 マグスルがプリペイドカードでのリンデンドル販売を始めました。
12月02日 マグスル2で文化祭
12月02日 SLで株取引
12月02日 にわとり・・・・
12月02日 ATLUS SIM
12月02日 300人耐久イベント。
12月02日 鍋の季節
12月02日 RaceWayでいべんと 
12月02日 会議。
12月02日 空港が出現。
11月11日 SLSE JAPANオープン!!株取引がSLでも始まる。

2007年04月21日

小数点以下を切捨て切り上げスクリプト

小数点の四捨五入とか、切り下げとかのスクリプト

float 型を integer 型にするときに使ったりします。


float a=5.5;

integer b;

integer c;

defult

{

b = llRound(a);

c = llFloor(a);

}


上の場合、

b には 6が出力されます。

c には 5が出力されます。

あと

llCeil(a) ってのも同様なものらしいです。

タグ:スクリプト

posted by Son Clave at 20:55 | Comment( 1 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年04月19日

お金を支払うスクリプト

お金にかかわるスクリプト


default
{
state_entry()
{
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
}

touch_start(integer num)
{
llGiveMoney(llDetectedKey(0),金額 );
}
}


これをオブジェクトに入れれば、誰かにタッチされるごとに、オーナーが金額どおりの額をタッチした人へ支払います。むやみに使えるスクリプトじゃないかもなーー。危険だ!金が減るし・・・


タグ:スクリプト

posted by Son Clave at 18:54 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年04月17日

llListenスクリプトの説明

llListenスクリプトの説明をちょっと追加


default
{

state_entry()
{
llListen( チャンネル,"",KEY ID ,"");
}

listen(integer channel, string name, key id, string message)
{
}

}


として、使用するのですが、

 

チャンネルに入れる数字で受け取るパターンが違います

0 であれば、すべてのチャットの会話を拾います

1以上であれば、チャットの中に、 /数字 とい書いてから使います

 

KEY IDを使うことで、使用者を限定できます。

そこに、llGetOwner() といれれば、持ち主のみ使えます。

""で何も書かない場合は、すべてのユーザーで使えます。

 

llListenをスクリプトでオン・オフするには


integer a;
integer i=1;

default
{

state_entry()
{
a=llListen( チャンネル,"",KEY ID ,"");
}

listen(integer channel, string name, key id, string message)
{
}

touch(integer total_number)
{

if(i==1)
{
llListenControl(a, TRUE);
i*=-1;
}

if(i==-1)
llListenControl(a, FALSE);
i*=-1;
}

}


llListenControl() を用いることで、コントロール可能です。

後ろに、0/1 もしくは TRUE/FALSE を入れることでできます。

上のプログラムでは、タッチすることでON/OFFを切り替えるようにしてます

タグ:スクリプト

posted by Son Clave at 07:35 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年04月15日

タッチで直接マップを開くスクリプト

オブジェクトをタッチすることで、MAPの場所を表示してテレポートをしてもらうスクリプト


default
{

touch_start(integer total_number)
{
llMapDestination("Sugamo", <41,118,22>, <0,1,0> );
}

}


SugamoにはSIM名を、

次の座標は、SIM上の、画面に書いてある数字を書けばOKです。

最後の座標は・・・まあ、<0,1,0>でいいかも適当にどうぞ

タグ:スクリプト

posted by Son Clave at 21:27 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年04月14日

角度に関するスクリプト

角度に関するスクリプト


角度を取得

llGetRot(); スクリプトを埋め込んだオブジェクトの重心の角度

llGetLocalRot(); 複数のリンクしたもの自体の重心の角度

llGetRootRotation(); 複数のリンクしたものの親の重心の角度

角度を設定する

llSetRot(); スクリプトを埋め込んだオブジェクトの重心の角度設定

llSetLocalRot(); 複数のリンクしたもの自体の重心の角度設定

llSetRootRotation(); 複数のリンクしたものの親の重心の角度設定


角度の数値を変換する便利なもの

rotationデータ = llEuler2Rot(<ラジアン>); 

vectorデータ = llRot2Euler(<rotationデータ>);

DEG_TO_RAD 角度にこれをかけるとラジアンに変換できる

RAD_TO_DEG ラジアンにこれをかけると角度に変換できる

タグ:スクリプト

posted by Son Clave at 11:35 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年04月08日

親プリムと子プリムで情報伝達できるスクリプト

親と子で情報を伝達するスクリプト

 

複数のプリムをリンクさせて1つにしたときに、最後に選択したものを”親”として、その前に選択したものを”子”とする。この場合は、それぞれを区別するために認識ナンバーのようなものが自動的に割り振られている。

その認識ナンバーを取得するスクリプト

llGetLinkNumber()


default
{

touch_start(integer total_number)
{
llOwnerSay((string)llGetLinkNumber());
}

}


このスクリプトを、”リンクされたパートを編集”を用いて、リンクでまとめられたもので、認識番号を知りたいものの内容にスクリプトとしてつけてみる・・・この場合は、クリックすると番号がわかります。だいたい、親=1、子=2とかになるようです。まあ、そのつど確かめたほうがいいです。

 

親に入れるスクリプト・・・発信側

送りたい先の認識番号は、子に送るのであれば、この番号・・・2とか書きます。

送信したい型が数字(integer)か文字(string)か?ということで、場所を変えます。

もし送りたい情報がなければ、"" って書きます。


default
{
touch_start(integer total_number)
{
llMessageLinked(送りたい先の認識番号, 送りたい情報(数字), "送りたい情報(文字)", NULL_KEY);
}
}


子に入れるスクリプト・・・受信側

文字か数字かで取り込みが違います。


default
{
link_message(integer sender_num, integer num, string str, key id)
{
llOwnerSay(str); 文字ならば strで受け取ります

llOwnerSay((string)num); 数字ならば numで受け取ります
}
}


これを使うことで、親と子で情報を伝達できます。

 

タグ:スクリプト

posted by Son Clave at 20:36 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年04月07日

強制起立スクリプト

座っている人を立たせるスクリプト


llUnSit(llAvatarOnSitTarget());

これを椅子などに仕込めば、

強制的に立たせることも可能です。

タグ:スクリプト

posted by Son Clave at 00:02 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年04月06日

ベクトルとローテーションの変換方法

rotationをvectorに直すみたいなスクリプト


llRot2Euler( rotation);

これで変換できる!この逆は

llEuler2Rot( vector );

 

vectorはPI を使ってあらわします。<PI*?,PI*?,PI*?>みたいな

 

タグ:スクリプト

posted by Son Clave at 23:27 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

アバターを検知するスクリプト

アバターを検知するスクリプト


default
{

state_entry()
{
llSetTimerEvent(読み込みを更新する時間(秒) );
}

timer()
{
llSensor("特定の名前もしくは空白", NULL_KEY, AGENT, 測定する距離m, 角度PI表示 );
}

sensor(integer total_number)
{

センサーにかかった場合は、どう命令をするかを書く

}

}


測定できる距離はだいたい90mくらいでした。

あとは、名前を指定しない場合は、一番近くの人を検知します。

また特定の人だけを検出して条件で命令文を動かすことも可能。

タグ:スクリプト

posted by Son Clave at 00:23 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年03月31日

オブジェクトを増やすスクリプト

指定したアイテムを増やす(登場させる)スクリプト

オブジェクトに触れば増える方法を書きます。


default
{

touch_start(integer a)
{
llRezObject("アイテムの名前" , 登場させたい座標 , 影響する力 , llEuler2Rot(座標) , 数字);
}

}


増やしたいアイテムは、内容のところへスクリプトと一緒に入れておきます。

登場させたい座標は vector表記で、<X,Y,Z>にします。このとき便利な方法は、スクリプトを入れているオブジェクトの座標をまず、llGetPos();でとり、そこに移動させたい分だけ足すのです。これで簡単に位置をしていできます。

登場するオブジェクトに影響する力は vector表記にしますが、通常は ZERO_VECTOR でいいようです。

llEuler2Rot(座標)は、通常 ROTATIONがはいるのですが、なにもしていしないときには、ZERO_ROTATIONでいいですが、もし変更する場合は、llEuler2Rot(座標)でやったらいいです、この場合は、角度ですので、座標は、<X,Y,Z>であらわします。このときに注意するのは、PI を使った表記で角度をしていするということです。 PI=180度です。PI*2= 360度 です。かけることで数値をかえます。

最後の数字は、0以外をいれたらいいとのこと。

タグ:スクリプト

posted by Son Clave at 16:25 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

物理的力のオンとオフを切り替えるスクリプト

オブジェクトに働く物理的力のオンとオフを切り替えるスクリプト


default
{

state_entry()
{
llSetStatus(STATUS_PHYSICS,オンかオフか);
}

}


オン=TRUE もしくは、1

オフ=FALSE もしくは、0

この数字・文字で決めることができる。

タグ:スクリプト

posted by Son Clave at 12:00 | Comment( 2 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

浮力を与えるホバースクリプト

オブジェクトを浮遊させるスクリプト


default
{
state_entry()
{
llSetHoverHeight(float 浮上したいところの高さ,水の上でも上昇できるか ,float 移動にかかる時間短いほど速度はやい);
}
}


浮上したいところの高さ 小数点まで

水の上でも上昇するか? TRUE か FALSE

移動にかかる時間 小数点まで

 

 

最後に、このオブジェクトの物理をオンにしたら浮上開始します。

自動的に指定した高さまで移動します。


高さの数値の基準はおそらく、地形の表面からの高さだと思われます、なのでデコボコな土地では高さのデータが違ってくるような、ただ一度浮上すればその高さをキープはしますので、同一の場所でアイテムを出して浮上させれば同じ高さになるはずです。

タグ:スクリプト

posted by Son Clave at 10:30 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

座ったときに強制的にマウスルックにするスクリプト

座るポーズボールで、座ったときに強制的にマウスルックにするスクリプト


default
{

state_entry()
{
llForceMouselook(TRUE);
llSitTarget(<ボールからどの位置に座るかを座標で書く>,ZERO_ROTATION);
}

}


llForceMouselook(TRUE);

によって強制的にマウスルックになります。

逆にTRUEをFALSEにすれば、マウスルック解除になります。

タグ:スクリプト

posted by Son Clave at 07:29 | Comment( 1 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

オブジェクトとキャラの接触を知るスクリプト

オブジェクトがキャラとぶつかる・接触したことを感知するスクリプト


default
{

collision_start(integer a)
{
何か実行したいこと
}

}


実行したいことはなんでも可能ですが、問題は条件などを設定しなければ、触り続けることで何度も連続して”実行させたいこと”が起こってしまいます。

posted by Son Clave at 01:08 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年03月29日

LSLでの型の紹介

LSLの中で使える型を紹介

型というのは、数値や言葉を一次的に蓄えておく箱みたいなものです。しかしながらコンピュータはできるだけメモリーを消費しないように、必要なデータにあわせて最初から箱の形態を指定しておきます。それにより無駄にデータ空間を使うのを防いでいます。


integer 整数

float 小数

vector <"X","Y","Z">であらわす、XYZの座標データ

rotation <"X","Y","Z","S">であらわす、回転のための座標

key UUIDというものを使って、SLの内部にあるオブジェクトや各種データを指定

string 文字列を入れるものです。

list 配列をいれることができます。


違う型のものを違う型に代入することはできません、そのため代入するときには一度、変換しなくてはいけません。

例えば integer型を float型にするには


integer a;

float b;

があるとして、

a = (integer)b;

という感じで、合わせる型を()で先につければOKです。

タグ:スクリプト

posted by Son Clave at 20:50 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

座標を出力するスクリプト

実は簡単だったのですが、オブジェクトの座標を出力する方法を探しました。

XYZの座標を文字としてオーナーや人に知らせるスクリプトです。


vector a;

default
{
state_entry()
 {
a = llGetPos();
llOwnerSay((string)a);
 }
}


llOwnerSay や llSay や llWhisper では、string 形式でしか出力できないので、座標の vector 形式を変換しなければなりません。そこで(string)を使うと変換できました。

タグ:スクリプト

posted by Son Clave at 12:21 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

プログラム実行に時差をつけるスクリプト

読み込まれて時差をつけてプログラムを発動させるスクリプト


llSleep(数字);


この関数を使えば、数字のところにいれた時間の後にプログラムが発動できるようです。

タグ:スクリプト

posted by Son Clave at 11:39 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

オブジェクトを消すスクリプト

オブジェクトを削除する(消えてもらう)スクリプト

いずれ使うあろう、便利なコマンド! llDie();


default
{
touch_start(integer num)

{
llDie();
}

}


これで、触ったらオブジェクトは消えます。いろいろ条件によっても消えるようにできるので役立つスクリプトです。

タグ:スクリプト

posted by Son Clave at 08:34 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年03月28日

LSLでランダム関数を使ってみる。

ランダム関数をつかってみます。


float a;

default
{
state_entry()
{
a = llFrand(10.0);
}
}


これで、a にランダム関数である、llFrand(10.0) が入りました。このランダム関数は小数点表記なので、float で aをあらわさなければならないです。

()のなかの、10.0では、0.0から9.9までの数字をランダムで抽出してくれます。

応用偏として、

integer 整数としてランダム関数を受け取るには、


integer a;

default
{
state_entry()
{
a = llFloor(llFrand(10.0));
}

}


llFloor() を使うことで、float を integer に変換できます。これになると、 0から9までの数字をランダムで抽出できます。

posted by Son Clave at 23:52 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png

2007年03月27日

タッチしてテレポートをするスクリプト

タッチするとMAPを出してテレポートができるようにする。


default
{

touch_start(integer total_number)
{
llMapDestination( "目的地名", <座標>,<0,0,0> );
}

}


目的地名や座標は、テレポートをするときにMAPで確認するか、もしくは現在いる場所の、画面の上に書かれていますので、それを使えば可能です。

タグ:スクリプト

posted by Son Clave at 19:46 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

humanbar.png