You are currently browsing the daily archive for 6月 17th, 2008.
良くある Sit ボール用のスクリプトです。
////////////////////////////////////////
string HOVER_TEXT = "Sit"; ///// floating text
string SIT_TEXT = ""; ///// sit text
vector TEXT_COLOR = <1.0, 1.0, 1.0>;
string ANIMATION_NAME; ///// animation file
key USER = NULL_KEY;
vector USER_POSITION = <0.0, 0.0, -0.2>; ///// positon
vector USER_ROTATE = <0.0, 0.0, 0.0>; ///// rotate (not need to change)
hide() {
llSetText("", TEXT_COLOR, 1);
llSetAlpha(0, ALL_SIDES);
}
show() {
llSetText(HOVER_TEXT, TEXT_COLOR, 1);
llSetAlpha(1.0, ALL_SIDES);
}
check_amimation() {
integer TOTAL_ANIMATION = llGetInventoryNumber(INVENTORY_ANIMATION);
if (TOTAL_ANIMATION == 0) { llOwnerSay("Could not find the animation file."); }
else if (TOTAL_ANIMATION > 1) { llOwnerSay("This script can have only one animation in contents. You currently have " + (string)TOTAL_ANIMATION + ". Please delete the excess animations."); }
else { ANIMATION_NAME = llGetInventoryName(INVENTORY_ANIMATION, 0); }
}
default {
on_rez (integer params) { llResetScript(); }
state_entry() {
llSitTarget(USER_POSITION, llEuler2Rot(USER_ROTATE * DEG_TO_RAD));
llSetText(HOVER_TEXT, TEXT_COLOR, 1);
llSetSitText(SIT_TEXT);
check_amimation();
}
changed(integer change) {
if(change == CHANGED_INVENTORY) {
llSleep(2.0);
llResetScript();
}
if (change & CHANGED_LINK) {
key AV = llAvatarOnSitTarget();
if (USER != NULL_KEY) {
if (AV == NULL_KEY) {
llStopAnimation(ANIMATION_NAME);
show();
USER = NULL_KEY;
}
}
else {
if (AV != NULL_KEY) {
USER = AV;
llRequestPermissions(USER, PERMISSION_TRIGGER_ANIMATION);
}
}
}
}
run_time_permissions(integer perm) {
key PERM_KEY = llGetPermissionsKey();
if (PERM_KEY == USER) {
if (perm & PERMISSION_TRIGGER_ANIMATION) {
list AMIMATIONS = llGetAnimationList(USER);
integer i;
for (i = 0; i < llGetListLength(AMIMATIONS); i++) {
llStopAnimation(llList2Key(AMIMATIONS, i));
show();
}
llStartAnimation(ANIMATION_NAME);
hide();
}
}
}
}
////////////////////////////////////////
またインデント消えちゃってますが(ノ∀`)
見づらいですが。。。/// ~ /// をそのままコピペして貰えれば使えます。
上から3行目までが変更箇所デス。
string HOVER_TEXT = “Sit”; ///// floating text
ここはボールの上に表示するフローティングテキスト。
“” だと何も表示しません。
string SIT_TEXT = “”; ///// sit text
ここはボールを使う時に表示されるパイメニューの sit の文字。
“” だとデフォルトの 『 sit 』 のままです。
vector TEXT_COLOR = <1.0, 1.0, 1.0>;
これはフローティングテキストの文字の色です。
check_amimation() で自動でアニメ(ポーズ)ファイルを読み込みますので
このスクリプトとアニメーションファイルをポイっとコンテンツに入れるだけで
ポーズボールが完成デス(・∀・)
コンテンツの内容に変更があったらスクリプトをリセットして再度読み込み
直しますので、アニメーションファイルを入れ替える時も、スクリプトは何もしなくてもOK。
SL内でフルパーのポーズボール用スクリプトを元に、いつもお世話になってる
Makapu サンの解説を参考にして一部修正、更に check_amimation() を
追加したものです。
Makapu@BlackSheep-LSL
