アニメーションベンダーのスクリプトです。
ベンダーにsitして、矢印をクリックするとアニメーションが切り替わります。
ベンダーを右クリックして、パイメニューから支払いを選択するとアニメーションを販売します。
スクリプトは、tips19 ポーズスタンドのスクリプトを流用します。

「スクリプト内容」
1. ベンダー本体用スクリプト
//
// Tips33 AnimationVendor Script v1.0
//
// Created by Zero2000 Kidd 2008/09/21
//
//----------- PARAMETER SET -----------------//
integer price=50;
// ------------------------------------------//
integer itemType=INVENTORY_ANIMATION;
vector posePos=<0,0,1.5>;
integer itemCount;
integer counter=0;
string animation;
key sitavakey=NULL_KEY;
stopAnimation() {
list anims = llGetAnimationList(llGetPermissionsKey());
integer aminct = llGetListLength(anims);
integer i;
for (i = 0; i < aminct; i++){
llStopAnimation(llList2Key(anims, i));
}
}
startAnimation(integer num) {
if (itemCount==0) return;
stopAnimation();
counter+=num;
if (itemCount<=counter)
counter=0;
else if (counter==-1)
counter=itemCount-1;
animation=llGetInventoryName(itemType,counter);
showText();
llStartAnimation(animation);
}
showText() {
itemCount = llGetInventoryNumber(itemType);
string msg;
if (sitavakey==NULL_KEY)
msg="AnimationVendor\n" + (string)itemCount + " styles animation\nL$"+(string)price;
else
msg="AnimationVendor\n" + animation + "(" + (string)(counter+1) + "/" + (string)itemCount + ")\nL$"+(string)price;
llSetText(msg,<1,1,1>, 1.0);
}
default {
state_entry(){
llSitTarget(posePos,ZERO_ROTATION);
llSetPayPrice(PAY_HIDE, [price, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
showText();
}
on_rez(integer int) {
llResetScript();
}
changed(integer change) {
if (change & CHANGED_LINK) {
sitavakey = llAvatarOnSitTarget();
if( sitavakey != NULL_KEY ) {
if ((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION)
&& llGetPermissionsKey() == sitavakey) {
startAnimation(0);
} else {
llRequestPermissions(sitavakey, PERMISSION_TRIGGER_ANIMATION);
}
} else {
animation="";
counter=0;
showText();
}
} else if (change & CHANGED_INVENTORY) {
showText();
}
}
run_time_permissions(integer perm){
if(perm & PERMISSION_TRIGGER_ANIMATION){
startAnimation(0);
}
}
link_message(integer sender_num, integer num, string str, key id){
if (llGetPermissionsKey() == sitavakey) {
startAnimation(num);
}
}
money(key id, integer amount)
{
llGiveInventory(id,animation);
}
}
2. ポーズ切り替えボタン①用スクリプト
//
// button1 script v1.0
//
integer i = -1;
default {
touch_start(integer detected) {
llMessageLinked(LINK_ROOT,i,"", NULL_KEY);
}
}
3. ポーズ切り替えボタン②用スクリプト
//
// button2 script v1.0
//
integer i = 1;
default {
touch_start(integer detected) {
llMessageLinked(LINK_ROOT,i,"", NULL_KEY);
}
}
「作成方法」
1. ベンダー用のオブジェクトを作成します。
2. ポーズ切り替えボタン①用のオブジェクトを作成します。
3. ポーズ切り替えボタン②用のオブジェクトを作成します。
4. ベンダー本体用スクリプトの一行目に販売価格を指定します。
integer price=50; <-- 50の部分を変更してください。
5. 本体用オブジェクトにベンダー本体用スクリプトをドラッグします。
6. ポーズ切り替えボタン①オブジェクトにポーズ切り替えボタン①用スクリプトをドラッグします。
7. ポーズ切り替えボタン②オブジェクトにポーズ切り替えボタン②用スクリプトをドラッグします。
8. 作成した3つのオブジェクトを本体オブジェクトがルートプリムとなるようにリンクします。
以上です。
「使用方法」
1. ベンダーを右クリックし、コンテンツの中にアニメーションファイルをドラッグします。
2. ベンダーを右クリックし、パイメニューからPoseをクリックします。
3. ベンダーを右クリックし、支払いをクリックしてアニメーションを購入します。
* ポーズ位置の調整は、ポーズ本体用スクリプト2行目のvector posePos=<0,0,1.5>で調整できます。
括弧の中の数字を変更してください。数値は、X,Y,Zの順番で並んでいます。<0,0,1.5>の場合、
Z軸方向に1.5m上にポーズ位置を取ります。
「スクリプトの説明」
tips19 ポーズスタンドのスクリプトを参照ください。
リンデンスクリプト Tips Indexへ
Posted by Zero2000 Kidd at 01:00│
Comments(0)│
TrackBack(0)
│
リンデンスクリプトTips