2010年7月1日木曜日

ドリンク用スクリプト

冷蔵庫に冷たい飲み物が欠かせない季節になってきましたね^^ ってことで今回は飲み物に使うスクリプトです。

フリービーでもよくあるスクリプトですが、装着したら銃を右手に持つ内蔵アニメーションが動いて、タイマーで数十秒毎にドリンクを飲む内蔵アニメーションを再生するような感じですね。

飲む間隔はランダムになるように書いてみました。20~30秒で飲みます。
// ドリンク用
float time_min=20;  // 飲む間隔の最小時間(秒)
float time_max=30;  // 飲む間隔の最大時間(秒)
string anim="hold_R_handgun";  // 右手に銃を持つ内蔵アニメ

req_anim()
{
    llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);  // アニメーション実行リクエスト
}

default
{
    state_entry()
    {
        if (llGetAttached()) req_anim();  // 装着されてたらreq_anim実行
    }

    changed(integer change)
    {
        if (change & CHANGED_TELEPORT)
        {  // テレポートしたら
            req_anim();  // req_animへ
        }
    }

    attach(key id)
    {  // アタッチイベント
        llSleep(0.1);  // スクリプト停止0.1秒
        if (id) req_anim();  // 装着されたらreq_animへ
        else if (llGetPermissionsKey()) llStopAnimation(anim);  // 一応外したらアニメ停止(不要かも?)
    }

    run_time_permissions(integer perm)  
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION)
        {  // アニメーション実行が許可されたら
            llStartAnimation(anim);  // 手に持つアニメ開始
            llSetTimerEvent(time_min);  // タイマーをセット
        }
    }

    timer()
    {
        if (llGetAttached()) {  // 装着されてるとき
            llSetTimerEvent(time_min+llFrand(time_max-time_min));  // 次回のタイマーの値をランダムに決める
            llStartAnimation("drink");  // 飲むアニメを実行
        }
        else llSetTimerEvent(0);  // 装着されてないときはタイマー停止
    }
}

基本は装着でアニメするスクリプトと同じで、タイマーイベントで飲む部分を付けただけだったりしますが^^;

0 件のコメント:

コメントを投稿