ソースって言うのはプログラムの本体のことです。


まぁ、スクリプトのことですね。


では、長いですがどうぞ。


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


//============================================
// 定数定義
//============================================
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;
}
}
}

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