小数点の四捨五入とか、切り下げとかのスクリプト
float 型を integer 型にするときに使ったりします。
float a=5.5;
integer b;
integer c;
defult
{
b = llRound(a);
c = llFloor(a);
}
上の場合、
b には 6が出力されます。
c には 5が出力されます。
あと
llCeil(a) ってのも同様なものらしいです。
小数点の四捨五入とか、切り下げとかのスクリプト
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)
お金にかかわるスクリプト
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)
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)
オブジェクトをタッチすることで、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)
角度に関するスクリプト
角度を取得
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)
親と子で情報を伝達するスクリプト
複数のプリムをリンクさせて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)
posted by Son Clave at 00:02 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)
rotationをvectorに直すみたいなスクリプト
llRot2Euler( rotation);
これで変換できる!この逆は
llEuler2Rot( vector );
vectorはPI を使ってあらわします。<PI*?,PI*?,PI*?>みたいな
posted by Son Clave at 23:27 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)
アバターを検知するスクリプト
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)
指定したアイテムを増やす(登場させる)スクリプト
オブジェクトに触れば増える方法を書きます。
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)
オブジェクトに働く物理的力のオンとオフを切り替えるスクリプト
default
{
state_entry()
{
llSetStatus(STATUS_PHYSICS,オンかオフか);
}
}
オン=TRUE もしくは、1
オフ=FALSE もしくは、0
この数字・文字で決めることができる。
posted by Son Clave at 12:00 | Comment( 2 ) | TrackBack( 0 ) | スクリプト(LSL)
オブジェクトを浮遊させるスクリプト
default
{
state_entry()
{
llSetHoverHeight(float 浮上したいところの高さ,水の上でも上昇できるか ,float 移動にかかる時間短いほど速度はやい);
}
}
浮上したいところの高さ 小数点まで
水の上でも上昇するか? TRUE か FALSE
移動にかかる時間 小数点まで
最後に、このオブジェクトの物理をオンにしたら浮上開始します。
自動的に指定した高さまで移動します。
高さの数値の基準はおそらく、地形の表面からの高さだと思われます、なのでデコボコな土地では高さのデータが違ってくるような、ただ一度浮上すればその高さをキープはしますので、同一の場所でアイテムを出して浮上させれば同じ高さになるはずです。
posted by Son Clave at 10:30 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)
座るポーズボールで、座ったときに強制的にマウスルックにするスクリプト
default
{
state_entry()
{
llForceMouselook(TRUE);
llSitTarget(<ボールからどの位置に座るかを座標で書く>,ZERO_ROTATION);
}
}
llForceMouselook(TRUE);
によって強制的にマウスルックになります。
逆にTRUEをFALSEにすれば、マウスルック解除になります。
posted by Son Clave at 07:29 | Comment( 1 ) | TrackBack( 0 ) | スクリプト(LSL)
オブジェクトがキャラとぶつかる・接触したことを感知するスクリプト
default
{
collision_start(integer a)
{
何か実行したいこと
}
}
実行したいことはなんでも可能ですが、問題は条件などを設定しなければ、触り続けることで何度も連続して”実行させたいこと”が起こってしまいます。
posted by Son Clave at 01:08 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(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)
実は簡単だったのですが、オブジェクトの座標を出力する方法を探しました。
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)
posted by Son Clave at 11:39 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)
オブジェクトを削除する(消えてもらう)スクリプト
いずれ使うあろう、便利なコマンド! llDie();
default
{
touch_start(integer num)
{
llDie();
}
}
これで、触ったらオブジェクトは消えます。いろいろ条件によっても消えるようにできるので役立つスクリプトです。
posted by Son Clave at 08:34 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(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)
タッチするとMAPを出してテレポートができるようにする。
default
{
touch_start(integer total_number)
{
llMapDestination( "目的地名", <座標>,<0,0,0> );
}
}
目的地名や座標は、テレポートをするときにMAPで確認するか、もしくは現在いる場所の、画面の上に書かれていますので、それを使えば可能です。
posted by Son Clave at 19:46 | Comment( 0 ) | TrackBack( 0 ) | スクリプト(LSL)

セカンドライフの歩き方
公式ガイドブック登場