ソースって言うのはプログラムの本体のことです。
まぁ、スクリプトのことですね。
では、長いですがどうぞ。
-------------------------------------------------------
//============================================
// 定数定義
//============================================
integer SW_OPEN = FALSE;
integer SW_CLOSE = TRUE;
integer SW_NORMAL = FALSE;
integer SW_REVERSE = TRUE;
//============================================
//変数定義
//============================================
key gfOwnerKey;
integer gfDoorClosed;
integer gfDoorSwing;
//============================================
// 初期設定関数
//============================================
gmInitFields()
{
//ドアのオーナーを取得
gfOwnerKey = llGetOwner();
//初期設定としてドアが閉じている状態とする
gfDoorClosed = TRUE;
//ドアの振り(回転)は通常モードとする
gfDoorSwing = SW_NORMAL;
return;
}
//============================================
// ドアのスイング
//============================================
gmSwingDoor(integer direction)
{
//定数定義
rotation rot;
rotation delta;
float piVal;
//ドアが開いていた場合
if (direction == SW_OPEN)
{
//90度を設定
piVal = PI/4;
//ドアモードのチェック
if (gfDoorSwing == SW_REVERSE)
{
//-90度を設定
piVal = -PI/4;
}
} else {
//-90度を設定
piVal = -PI/4;
//ドアモードのチェック
if (gfDoorSwing == SW_REVERSE)
{
//90度を設定
piVal = PI/4;
}
}
//ROTを算出、設定
rot = llGetRot();
delta = llEuler2Rot(<piVal,0,0> );
rot = delta * rot;
llSetRot(rot);
llSleep(0.25);
rot = delta * rot;
llSetRot(rot);
return;
}
//============================================
//ドアを閉じる
//============================================
gmCloseDoor()
{
//ドアが閉じているかチェック
if (gfDoorClosed == TRUE)
{
//メッセージ表示
llSay (0, "This door is already closed.");
return;
}
//音を鳴らしたい場合はコメントアウトをはずす
//llTriggerSound("Door close", 0.2);
//ドアを閉じている状態にセット
gmSwingDoor(SW_CLOSE);
//
gfDoorClosed = TRUE;
return;
}
//============================================
//ドアを開ける
//============================================
gmOpenDoor()
{
//ドアが開いてるかチェック
if (gfDoorClosed == FALSE)
{
//メッセージ表示
llSay (0, "This door is already open.");
return;
}
//音を鳴らしたい場合はコメントアウトをはずす
//llTriggerSound("Door open", 0.2);
//ドアを開いている状態にセット
gmSwingDoor(SW_OPEN);
//
// Now that the door is opened, set the door's state.
//
gfDoorClosed = FALSE;
return;
}
//============================================
// メイン部
//============================================
default
{
state_entry()
{
//初期状態セット関数呼び出し
gmInitFields();
//
llListen(0, "", "", "open");
llListen(0, "", "", "close");
}
listen(integer channel, string name, key id, string msg)
{
//変数定義
string operName;
string ownerName;
//
operName = llKey2Name(id);
ownerName = llKey2Name(gfOwnerKey);
//ドアのオーナーをチェック
if (ownerName != operName)
{
//オーナーでない場合はノック
//音を鳴らしたい場合はコメントアウトをはずす
//llTriggerSound("Door knock", 0.2);
llSay(0, "Voice command access is for owner only.");
return;
}
// ドアの開閉チェック
if(msg == "open")
{
gmOpenDoor();
}
//
if (msg == "close")
{
gmCloseDoor();
}
}
touch_start(integer i)
{
//ドアが閉じているかチェック
if (gfDoorClosed == FALSE)
{
//音を鳴らしたい場合はコメントアウトをはずす
//llTriggerSound("Door close", 0.2);
gmSwingDoor(SW_CLOSE);
gfDoorClosed = TRUE;
return;
} else
{
//音を鳴らしたい場合はコメントアウトをはずす
//llTriggerSound("Door open", 0.2);
gmSwingDoor(SW_OPEN);
gfDoorClosed = FALSE;
return;
}
}
}
-------------------------------------------------------