友だちが「どこでもダンス」とかで、アニメーションをメニューでいちいち選ぶのはめんどう、というので作ってみました(^^)/
オブジェクトを装着するとすぐアニメーションがはじまり、一定時間ごとに切り替わります。
はずせば終了。
とっても簡単です。
(最初はアニメーションを許すか聞いてきますが、次からはそれもなし)
スクリプトはこんな感じ:
default {
attach(key id) {
if (id) { // アバターに装着
Id = id;
Attach = TRUE;
llSetTimerEvent(CycleTime); // 時間切替をセット
}
else Attach = FALSE; // アバターからはずれた
// アニメーション許可申請
llRequestPermissions(Id,PERMISSION_TRIGGER_ANIMATION);
}
timer() { // 一定時間ごとに切替
llRequestPermissions(Id,PERMISSION_TRIGGER_ANIMATION);
}
run_time_permissions(integer perms) {
if (perms & PERMISSION_TRIGGER_ANIMATION) { // アニメーション許可
if (Anim) llStopAnimation(Anim); // 前のアニメをストップ
if (Attach) { // アバターに装着されてれば
integer n = llList2Integer(Nums,Index); // アニメ番号
Anim = llGetInventoryName(INVENTORY_ANIMATION,n);
llStartAnimation(Anim); // 新しいアニメをスタート
if (NumAnims <= ++Index) { // インデックスを増やして超過したら
Index = 0;
Nums = llListRandomize(Nums,1); // アニメ番号を並び替え
}
}
else llResetScript(); // アバターからはずれた
}
}
}
llListRandomize() という関数は、リストの内容をランダムに並び替えます。アニメを毎回ランダムに選んでもいいのですが、それだと短い間に同じものが何度もでてくることもあるので、順番をバラバラにした番号リストを一巡して、また順番を並び替えて、というふうにやるとまんべんなくしかもランダムに選べます。