ソラマメブログ

  

Posted by at

2007年06月30日

出たり消えたりできるメッセージボード

タッチすると表示されさらにタッチすると消えるメッセージボードを作ろうと考え
作ってはみたものの・・機能的には一応問題がないのですが、使いがっては悪いのと
出現中はリッスンが常時作動中というのも問題。とりあえずはベースとして忘れないように
メモ書きとして残しておきます。

------------------------------------
1.親OBJ スイッチ側に以下のスクリプトを突っ込みます。
------------------------------------

default
{
touch_start(integer total_number)
{
llRezObject("Message", llGetPos() + <0, 0, 2.0>, ZERO_VECTOR, llGetRot(), 0);
}

object_rez(key id)
{
state off;
}
}

state off
{
touch_start(integer total_number)
{
llSay(2, "off");
state on;
}
}

state on
{
touch_start(integer total_number)
{
llRezObject("Message", llGetPos() + <0, 0, 2.0>, ZERO_VECTOR, llGetRot(), 0);
}

object_rez(key id)
{
state off;
}
}

------------------------------------
2.子供obj 出現側に以下のスクリプトを突っ込みます。
------------------------------------
default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
integer mes = llListen(2, "mes_obj",NULL_KEY, "off");
}

listen(integer channel, string name, key id, string message)
{
llDie();
}
}
default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
integer mes = llListen(2, "mes_obj",NULL_KEY, "off");
}

listen(integer channel, string name, key id, string message)
{
llSay(0, "dell");
llDie();
}
------------------------------------
3.スクリプトを入れたらさらに、親objに格納するとできあがり。
------------------------------------
  


Posted by T4476 at 21:15Comments(0)逆引き

2007年06月25日

リッスン

llListen(integer channel, string name, key id, string msg)

channel  
チャットチャンネルを指定します。整数ならなんでもOKプリム同士で通信させたい場合は、 llSay(0, "こんにちわ");のチャットチャンネル部分を同じにしなければなりません。

name
アバターに限らず、オブジェクトの名前を指定できる。

id
UUIDを指定します。NULL_KEYを使った場合は、全ての人/物に有効になる。UUIDが不明の場合はこれを指定。

msg
なんと言う言葉にを受信するか、指定した場合はその単語の受信の有無を示す。
何でも聞いて欲しい場合は””空文字を指定。


llListen(2, "obj", NULL_KEY, ""); 〔2チャンネルのobjの発言を聞け!! 〕



llListenRemove(integer number)

llListenをストップする命令。llListenを常時つけっぱなりはよくないそうでなので、必要な情報が聞けたらすぐにストップするのがいいようです。

number
llListen(integer channel, string name, key id, string msg)を変数に代入すると、整数値が入ります。整数値がllListenの番号となります。つまりllListenは複数同時に走らせ好きな番号のllListenをつけたり消したりできるようです。



integer CH;
CH=llListen(2, "obj", NULL_KEY, ""); 
llListenRemove(CH); // listen OFF









  


Posted by T4476 at 23:05Comments(0)LSL

2007年06月22日

イベント覚書(修正)

event引数内容備考
at_rot_target (integer tnum, rotation targetrot, rotation ourrot) llRotTargetを使用してターゲットのローテーション に到達した場合に呼ばれる。  
at_target (integer tnum, vector targetpos, vector ourpos) llTargetを使用して設定したターゲットに到達した場合に呼ばれる。  
attach (key id)
agentが objectを脱着した際に呼ばれる。  
changed (integer change) オブジェクトのさまざまな状態が変更されたときに予備される。

CHANGED_INVENTORY/CHANGED_COLOR /CHANGED_SHAPE/CHANGED_SCALE/CHANGED_TEXTURE /CHANGED_LINK/CHANGED_ALLOWED_DROP/ CHANGED_OWNER/ CHANGED_REGION /CHANGED_TELEPORT

collision (integer num_detected) taskが他のタスクとコリジョン(colliding)した(重なっている)場合に呼ばれる。  
collision_end (integer num_detected) タスクのほかのタスクとのコリジョンが終了した場合に呼ばれる。  
collision_start (integer num_detected) タスクが他のタスクとコリジョンを開始した場合に呼ばれる。  
control (key id, integer held, integer change)
llTakeControlsを使用時に,プレス/ホールド/リリースを検知した場合に呼ばれる。  
dataserver (key queryid, string data) 非同期データを受信した際に呼ばれる。  
email (string time, string address, string subj, string message, integer num_left) emailを受信した際に呼ばれる。  
http_response (key request_id, integer status, list metadata, string body)
llHTTPRequestリクエストのレスポンスを受信した際に呼ばれる  
land_collision (vector pos) 土地へのコリジョンが発生した場合によばれる  
link_message (integer sender_num, integer num, string str, key id) llMessageLinkedによるメッセージの受信時に呼ばれる
 
listen (integer channel, string name, key id, string message)
llListenによって設定された条件でタスクの聞き取れる範囲でチャットを受信した際に呼ばれる
 
money (key id, integer amount)
お金を受け取った際に呼ばれる。
 
moving_end () simを出た場合や移動を停止した場合に呼ばれる  
moving_start () 移動時やsimに入った場合に呼ばれる  
no_sensor () llSensor や llSensorRepeat によって何も見つけられなかった場合に呼ばれる。  
not_at_rot_target () llRotTargetで指定したターゲットに到達した場合,しなかった場合に呼ばれる。  
not_at_target () llTargetで指定した目標に到達できた場合やできなかった場合に呼ばれる  
object_rez (key id) llRezObjectを使用して他のobject のrezzesが完了した場合に呼び出される
 
on_rez (integer start_param)
自分がrezされた場合に呼ばれる。(インベントリや他のタスク(オブジェクト)により)
 
remote_data (integer event_type, key channel, key message_id, string sender, integer idata, string sdata)
XML-RPC 通信を受信した場合に呼ばれる  
run_time_permissions (integer perm) 実行時に、agent に対してllRequestPermissionsを利用してパーミッションのリクエストをした場合に呼ばれる。  
sensor (integer num_detected)
llSensor or llSensorRepeatで検知した場合に呼ばれる  
state_entry () 状態の遷移時に呼ばれる。  
state_exit () 他の状態へ遷移する際に呼ばれる。
 
timer () llSetTimerEventによるタイマーイベント
 
touch () エージェントがクリックした際に呼ばれる    
       
       
       
  


Posted by T4476 at 12:37Comments(0)覚書

2007年06月20日

触ると光るライト


touchすると光るライトを作ってみました。これを発展させ、夜になると光るライトを作る予定。

--------------------------------------
default
{
state_entry()
{
 
//ライトの設定 最初は消してます。

llSetPrimitiveParams( [PRIM_POINT_LIGHT, FALSE, <0.0, 0.0, 0>, 0, 3.5, 0.5]); 

//”touch me”の表示
llSetText("touch me",<1.0,0.0,0.0>,1.0);

//stateの定義?消してるからステータスはOFF
state off;
}

touch_start(integer total_number)
{
//タッチすると、つきます。
llSetPrimitiveParams( [PRIM_POINT_LIGHT, TRUE, <1.0, 0.5, 0.25>, 1, 10, 0.5]);
//ついてるので、ステータスはon
state on;

}
}

//ステータスがonなら

state on
{
touch_start(integer total_number)
{
llSay(0, "Touched.off");

//タッチすると消えます
llSetPrimitiveParams( [PRIM_POINT_LIGHT, FALSE, <0.0, 0.0, 0>, 0.5, 3.5, 0.5]);

//消してるからステータスはOFF
state off;
}

}

//ステータスがoffなら
state off
{

touch_start(integer total_number)
{
llSay(0, "Touched.on");

//タッチすると、つきます。
llSetPrimitiveParams( [PRIM_POINT_LIGHT, TRUE, <1.0, 0.5, 0.25>, 1, 10, 0.5]);

//ついてるので、ステータスはon
state on;

}
}

--------------------------------------
とまーこんな感じで作ってみました。ファンクションなんかを使うとまとめられるのですが、まだまだ初心者なんで、ストレートに書いてみました。一応思ったように機能しているので、構文的に問題あってもよしとします。単なる覚え書きですのでご勘弁を  


Posted by T4476 at 00:15Comments(1)逆引き

2007年06月15日

パーミッション問題解決

小物を持った時に強制的にアニメーションさせようと思い、

attach(key attached)

llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);


と書くて見ましたが、どうもこのattach時にオーナーのPERMISSIONを参照しようというのが
そもそもの間違いのようでした。この方法では、takeして初めて使うプリムはオーナーがどうやら参照できないようで、パーミションの許可を取るタイミングを別の方法を使用する必要があるようでした。

そこで、掲示板で書かれたいた、changed イベントを検討したのですがどうもattachと同じ理由で
うまくいかず、そうこうしているうちにrezの存在を知り色々と思考錯誤の結果解決する事ができました。

以下が解決した、スクリプトです。ただし以下のスクリプトだけでは実用品としては問題が多数ありエラーも起きます。まー今回の問題にくらべれば簡単そうなので、実用品になれば公開したいなぁーと考えています。

-----------------------------------------

string Anim = "Model Pose 3"; //アニメの名前

default
{

 //プリム出現時にパーミションを要求

on_rez(integer param){
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
}

//装着後アニメ開始

attach(key attached)
{
llStartAnimation(Anim);
}

}

-----------------------------------------  


Posted by T4476 at 08:30Comments(0)LSL

2007年06月14日

実験島


社内の実験島の様子です。ぼちぼち人目に触れるような仕事を始めています。  


Posted by T4476 at 00:01Comments(0)実験島

2007年06月12日

パーミッション

llRequestPermissions(key agent, integer perm);

key agent・・・・・・対象者のkey

integer perm・・・許可してほしい内容


 PERMISSION_TRIGGER_ANIMATION(アニメーションさせたい)
 PERMISSION_ATTACH (アタッチしたい)
 PERMISSION_CHANGE_LINKS (リンクさせたい)

問題は対象者のkeyの習得習得には、現時点で以下の方法があるらしい事が判明

llGetKey () スプリクトが入っているprimのkey?
llDetectedKey(integer number) 0だと自分?
llGetOwner   現時点での所有者?
llGetOwnerKey(key id) さっぱりわかりません?????
llGetInventoryKey(string name) 名前で習得??

これらの使いわけがさっぱりわかりません。
いろいろ試してはみているものの、自分に着させる時に、パーミッションを要求させようとしても
うまくいきません。さてさてどうしたものか?  


Posted by T4476 at 19:33Comments(3)LSL