Namidame
2009年01月23日
18:31
スクリプト、いくら考えても調べても、自分でやると機能しますが、
他人がやるとうまくいきません。
何が悪いのか、教えていただけると助かります。
簡潔に要旨を書きます。
自分が作って販売した初期のアニメーションが気に入らないため
買っていただいた人に改良したものと交換できる箱を設置したい。
llAllowInventoryDrop( TRUE );
だけでは、誰がドロップしたか判定できないので、まずタッチしてもらい
タイマーをかけて一時的にドロップ可とした。
他の人にやってもらうとこの部分は機能している。
ドロップされたアニメ名とUUIDが一致すると新作アニメを渡す。
違うアニメをリネームして該当アニメに見せかけても受け付けない。
ドロップされたままコンテンツを放置すると次にドロップしたものに
1, 2, 3,・・・と次々と名前の後に自動的に番号が振られ、
アニメ名が一致しなくなるため、ドロップされるとすぐ
llRemoveInventory("アニメ名");
で消去するようにした。
自分でテストすると全て機能するが、他人がやるとどれも機能しない。
おそらく、他人ではコンテンツの中身を消去できないのではないか?
以下、ソースです。このまま使ってもうまくいきません。
-----------------------------------------------------------------------------------------------------
key avatar;
string animation_name = "アニメのUUIDをここに入れる";
default
{
touch_start(integer total_number)
{ avatar = llDetectedKey(0);
llAllowInventoryDrop( TRUE );
llSetTimerEvent(30);
llSay(0, "Drop 'アニメ名' animation here within 30 seconds\n 30秒以内に'アニメ名'アニメをドロップしてください");
}
changed( integer changed_flag )
{ key chk = llGetInventoryKey("アニメ名");
if ( changed_flag & CHANGED_INVENTORY ) {
if(chk == animation_name)
{
llSay(0, "OK");
llGiveInventory(avatar , "渡すアニメ名");
llRemoveInventory("アニメ名");
llSetTimerEvent(0);
llAllowInventoryDrop( FALSE );
}
else{
llSay(0, "NO");
llRemoveInventory("アニメ名");
llSetTimerEvent(0);
llAllowInventoryDrop( FALSE );
}
}
}
timer()
{
llAllowInventoryDrop( FALSE );
llSetTimerEvent(0);
llSay(0, "Time out. Touch again");
}
}
-----------------------------------------------------------------------------------------------------
うまくいく方法がありましたら宜しくお願いします。