ページ

ラベル script の投稿を表示しています。 すべての投稿を表示
ラベル script の投稿を表示しています。 すべての投稿を表示

2011/07/14

モアイに秘密

送信者 breakstuff

愛音の海の家Breakstuff
デルース(和田や煙、灰色が治るスクリ)を置いてもらいましたよ

家の横にある茶色い方のモアイに座ると
一気に上空へ飛んで、アバターを読み込み直してくれます

元はカエルカフェでもらったものですが
いや~便利便利


これのHUD装着型があれば便利なのに
従来からあるHUD型のオートデルースは天井にぶつかったり
着地失敗したりと若干めんどうなので・・・

2010/04/24

新しいリサイズスクリプト

ルートプリム1個に入れるだけで機能するリサイズスクリプトですよ!
ポピが作ったよ~

従来のは、リンクしてあるプリム全部にスクリを入れなきゃならんかったので
すげぇ負荷がかかっていたんだけど
サーバが1.38になったことで、新しいスクリプトが使えるようになったらしい

詳しくは分からんので、ポピのSNSを読んでくだされ
http://sns.navisl.jp/?m=pc&a=page_fh_diary&target_c_diary_id=473580

2009/11/02

フェードイン・フェードアウトするスライドショー

// スライドショー
float time=10; // 表示時間(秒)
float val=0; // 加減値用
integer int=0; // カウンタ
integer dir=1; // 符号設定用

default
{
state_entry()
{
llSetTimerEvent(0.1); // タイマー始動
}

timer()
{
llSetTimerEvent(0.1); // タイマー0.1秒
if (val > 1) { // valが1を超えたら
dir=-1; // 符号をマイナス
llSetTimerEvent(time); // タイマーを調整して一定時間表示させる
}
else if (val < 0) { // valがマイナスになったら dir=1; // 符号をプラス integer i=llGetInventoryNumber(INVENTORY_TEXTURE); // コンテンツ内のテクスチャ数 int++; // カウンタを進める if (int >= i) int=0; // カウンタがテクスチャ数を超えたら0にする
string texture=llGetInventoryName(INVENTORY_TEXTURE,int); // カウンタからテクスチャ名取得
if (texture) llSetTexture(texture,0); // 面番号0にテクスチャ表示
}
val+=0.05*dir; // 加減する値を計算
llSetColor(,0); // 面番号0の色を設定
}
}

☑スクリプト参照
http://shop-chihiro.blogspot.com/2009/10/blog-post_31.html

2009/09/27

カラーチェンジダイアログスクリプト


// カラーチェンジ
integer listen_handle;
integer CHANNEL;
list color_name=["Red","Green","Blue","White"]; // 色の名前
list color_value=[<1,0,0>,<0,1,0>,<0,0,1>,<1,1,1>]; // 色の値

default
{
touch_start(integer total_number)
{
key agent=llDetectedKey(0); // タッチしたアバターのキー
if (agent != llGetOwner()) return; // オーナーでないときは中断
llListenRemove(listen_handle); // listen解除
CHANNEL=llCeil(llFrand(2147483646)); // listenチャンネルのランダム化
listen_handle=llListen(CHANNEL, "", agent, ""); // listen開始
llDialog(agent, "Color change", color_name, CHANNEL); // ダイアログ表示
}

listen(integer channel, string name, key id, string msg)
{
llListenRemove(listen_handle); // listen解除
if (channel == CHANNEL && id == llGetOwner()) {
integer i=llListFindList(color_name,[msg]); // 押されたボタンをリストから検索
if (i < 0) return; // 一致しなかったら終了 vector color=llList2Vector(color_value,i); // 色の値リストの一致した色 llSetLinkColor(LINK_SET,color,ALL_SIDES); // 全プリムの色を変更 } } }



変えたくないプリムには以下を挿入

// 色変更しない子プリム

vector color=<0,0,0>; // 変えたくない色

default
{
changed(integer change)
{
if (change & CHANGED_COLOR) { // 色が変わったら
if (llGetColor(0) != color) { // 違う色に変わったら
llSetColor(color,ALL_SIDES); // 元の色に戻す
}
}
}
}

2009/08/15

1プリムに複数座れるスクリ

// 1プリムの定位置に2人座れる
list pos=[<0.4,-0.5,0.4>, <0.4,0.5,0.4>]; // 座る位置のリスト(1人目、2人目)
list av; // 座ってるアバターのキーリスト用
vector ang=<0,0,0>; // 座った角度

default
{
state_entry()
{
llSitTarget(<0,0,0.5>, llEuler2Rot(ang*DEG_TO_RAD)); // 座る位置の初期値
integer i;
for (i=0; i < llGetListLength(pos); i++) { // キーリストに座席分のNULL_KEYを設定 av+=[NULL_KEY]; } } changed(integer change) { if (change & CHANGED_LINK) { // リンクが変化したら integer i=llGetNumberOfPrims(); // リンクしてるプリムの数 key id=llGetLinkKey(i); // 座った(リンクした)アバターのキー取得 if (id) { integer j=llListFindList(av,[NULL_KEY]); // 空席チェック if (~j) { // 空いてたら av=llListReplaceList(av,[id],j,j); // アバターのキーをセット vector v=llList2Vector(pos,j); // 空いてた席の座る位置 v.z+=0.35; // Z方向に0.35加算 // 座った位置を移動 llSetLinkPrimitiveParams(i,[PRIM_POSITION,v, PRIM_ROTATION,ZERO_ROTATION/llGetRot()*llEuler2Rot(ang*DEG_TO_RAD)]); } else { // 空席がないとき if (llListFindList(av,[id]) < 0) llUnSit(id); // キーリストになかったら立たせる } } list l; for (i; i > 1; i--) { // 子プリムのキーをリストアップ
l+=[llGetLinkKey(i)];
}
for (i=0; i < llGetListLength(av); i++) { // 座ってるアバターのキーリストと比較して、一致しないキーをリストから削除 id=llList2Key(av,i); if (llListFindList(l,[id]) < 0) av=llListReplaceList(av,[NULL_KEY],i,i); } } } }




人数を増やす場合は
list pos=[<0.4,-0.5,0.4>, <0.4,0.5,0.4>]; の部分に座標を追加

スクリプト参照
http://beta.slmame.com/e707587.html

2009/08/09

SIM負荷チェッカー

float checkRate=5.0;
string title="SIM PERF CHACKER";
vector lime=<0.00,1.00,0.00>;
vector yellow=<1.00,1.00,0.00>;
vector red=<1.00,0.00,0.00>;
vector white=<1.00,1.00,1.00>;

ShowPerformance() {

string simname=llGetRegionName();
float fps=llGetRegionFPS();
float timdilation=llGetRegionTimeDilation();
integer avatorcount=llGetRegionAgentCount();

vector color;
if (fps>35) color=lime;
else if (fps<20) color=red; else color=yellow; string str=title+"\n"; str+="Sim Name:"+simname+"\n"; str+="Avator Count:"+(string)avatorcount+"\n"; str+="Sim FPS:"+(string)fps+"\n"; str+="Time Dilation:"+(string)timdilation+"\n"; llSetText(str,white,1.0); llSetColor(color,ALL_SIDES); } default { state_entry() { llSetText(title,white,1.0); llSetColor(white,ALL_SIDES); llSetTimerEvent(checkRate); llSetPrimitiveParams([PRIM_BUMP_SHINY,ALL_SIDES,PRIM_SHINY_HIGH,PRIM_BUMP_NONE]); } on_rez(integer param){ llResetScript(); } touch_start(integer total_number) { state off; } timer() { ShowPerformance(); } } state off { state_entry() { llSetText(title+"\nOFF",white,1.0); llSetColor(white,ALL_SIDES); } on_rez(integer param){ llResetScript(); } touch_start(integer total_number) { state default; } }



スクリプト参照:http://zero2000.slmame.com/e703295.html

FPS値の値によって、下記の基準でオブジェクトの色を変化させます。
FPS 35以上    -> 緑
FPS 20以上 35未満-> 黄
FPS 20未満    -> 赤

だってさ~
置いてみたらSHOP Kもホームも緑だった

2009/07/08

タッチでポーズ切り替え

// タッチでポーズの変わる椅子
string anim;
integer total;
integer count;

default
{
state_entry()
{
vector pos=<0,0.2,0.55>; // 座る位置
vector ang=<0,0,90>; // 座る角度
llSitTarget(pos,llEuler2Rot(ang*DEG_TO_RAD)); // 座る位置と角度を設定
total=llGetInventoryNumber(INVENTORY_ANIMATION); // コンテンツ内のアニメーション数
}

touch_start(integer total_number)
{
key id=llDetectedKey(0); // タッチしたアバターのキー取得
if (id == llAvatarOnSitTarget()) { // 座ってるアバターだったら
if (total > 1) { // アニメーションが複数あったら
count++; // カウンタ加算
if (count >= total) count=0; // カウンタがトータルの数を超えたら0
llStopAnimation(anim); // 実行中のアニメーション停止
anim=llGetInventoryName(INVENTORY_ANIMATION,count); // 次のアニメーション名
llStartAnimation(anim); // 次のアニメーション実行
}
}
}

changed(integer change)
{
if (change & CHANGED_LINK)
{ // リンクが変わったとき
key id=llAvatarOnSitTarget(); // 座ったアバターのキー取得
if (id) llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION); // アバターが座ってたらアニメーションの権限を要求
else if (llGetPermissionsKey()) llStopAnimation(anim); // そうじゃないときはアニメーション停止
}
else if (change & CHANGED_INVENTORY) total=llGetInventoryNumber(INVENTORY_ANIMATION); // コンテンツ内が変わったときアニメーション数取得
}

run_time_permissions(integer perm)
{
if (perm & PERMISSION_TRIGGER_ANIMATION)
{ // アニメーションの権限を得たら
count=0; // カウンタ初期化
anim=llGetInventoryName(INVENTORY_ANIMATION,count); // countからアニメーション名取得
llStopAnimation("sit"); // 通常のsitアニメーションを停止
llStartAnimation(anim); // アニメーション実行
}
}
}

スクリプト参照

2009/06/02

4商品販売スクリプト

// 価格違いのアイテムを4つまで販売

list item=[ // アイテムリスト 各行は "アイテム名",価格
"Apple", 5,
"Banana", 4,
"Orange", 3,
"Fruit set",10,
NULL_KEY]; // リストの最後にもカンマを付けたいからw
integer len;

default
{
state_entry()
{
list price=[PAY_HIDE,PAY_HIDE,PAY_HIDE,PAY_HIDE]; // 価格リスト
integer i;
len=llGetListLength(item)-1; // アイテムリストの長さ(ヌルキーを減算してます)
for (i=0; i < len; i+=2) { if (llGetInventoryType(llList2String(item,i)) == INVENTORY_NONE) { // アイテムがコンテンツ内にないとき llOwnerSay(llList2String(item,i)+" is none."); // ないよって表示 } else { // そうでないときは価格リストに値段を登録 price=llListReplaceList(price,[llList2Integer(item,i+1)],i/2,i/2); } } llSetPayPrice(PAY_HIDE,price); // 支払いボタンに値段を設定 } changed(integer change) { if (change & CHANGED_INVENTORY) { // コンテンツ内が変わったら llResetScript(); // スクリプトリセット } } money(key id, integer amount) { // 支払いがあったら integer i; integer j; for (i=1; i < len; i+=2) { // アイテムリストの価格と比較 if (amount == llList2Integer(item,i)) j=i-1; } llGiveInventory(id,llList2String(item,j)); // アイテム渡す } }

スクリプト参照

2009/06/01

ガチャガチャのスクリプト

// ガチャガチャ
integer price=10; // 値段
integer len;

init()
{
llSetPayPrice(PAY_HIDE,[PAY_HIDE,PAY_HIDE,PAY_HIDE,PAY_HIDE]); // 一時的に支払いを不可に設定
len=llGetInventoryNumber(INVENTORY_OBJECT); // コンテンツ内のオブジェクト数
if (len > 0) { // オブジェクトが1個以上入ってたら支払いボタンに値段を設定
llSetPayPrice(PAY_HIDE,[price,PAY_HIDE,PAY_HIDE,PAY_HIDE]);
}
}

default
{
state_entry()
{
init(); // 最初にinit実行
}

changed(integer change)
{
if (change & CHANGED_INVENTORY) {
init(); // コンテンツ内が変わったらinit
}
}

money(key id, integer amount)
{ // 支払いがあったら
integer i=llFloor(llFrand(len)); // 乱数発生して
string str=llGetInventoryName(INVENTORY_OBJECT,i); // オブジェクト名を決め
llGiveInventory(id,str); // 購入者に渡す
}
}
スクリプト参照

2009/05/31

アニメストップスクリプト

// アニメーションを全部止める
list anim_list;

default
{
touch_start(integer total_number)
{
key agent=llDetectedKey(0); // タッチしたアバターのキー
anim_list=llGetAnimationList(agent); // 再生中のアニメーションのリスト
llRequestPermissions(agent,PERMISSION_TRIGGER_ANIMATION); // アニメのパーミッションリクエスト
}

run_time_permissions(integer perm)
{
if (perm & PERMISSION_TRIGGER_ANIMATION)
{
integer i;
for (i=0; i < llGetListLength(anim_list); i++) { // リストのアニメの数だけループして llStopAnimation(llList2Key(anim_list,i)); // アニメを1個ずつ停止 } llStartAnimation("stand"); // 立った状態のポーズをとらせる } } }

スクリプト参照

2009/05/30

プリム内のデータ削除スクリプト

// プリムに記録されたデータを消す
default
{
state_entry()
{
llSetText("",<0,0,0>,0); // フローティングテキスト消去
llParticleSystem([]); // パーティクル消去
llSetTouchText(""); // パイメニューTouch初期化
llSetSitText(""); // パイメニューSit Here初期化
llSitTarget(<0,0,0>,<0,0,0,1>); // 座る位置初期化
llSetCameraEyeOffset(<0,0,0>); // カメラアイオフセット初期化
llSetCameraAtOffset(<0,0,0>); // カメラ位置オフセット初期化

llRemoveInventory(llGetScriptName()); // このスクリプトをコンテンツ内から削除
}
}
スクリプト参照

2009/05/29

ポストのスクリプト

// 投書箱
default
{
state_entry()
{
llAllowInventoryDrop(TRUE); // インベントリーにドロップ許可
}

changed(integer change)
{
if (change & CHANGED_ALLOWED_DROP)
{ // オーナー以外が入れたとき
llWhisper(0,"Thank you for your suggestion.");
llInstantMessage(llGetOwner(),"Got a suggestion.");
}
}
}


// ポスト
default
{
state_entry()
{
llAllowInventoryDrop(TRUE); // インベントリーにドロップ許可
}

touch_start(integer total_number)
{ // タッチしたら
llWhisper(0,"Put your notecard for owner."); // オーナー宛のノートちょーだい^^
}

changed(integer change)
{
if (change & (CHANGED_INVENTORY|CHANGED_ALLOWED_DROP))
{ // ドロップされたら
llAllowInventoryDrop(FALSE); // ドロップを不許可にしといて
string str;
integer note=FALSE; // ノートの有無チェック用フラグ
integer i;
for (i=0; i < llGetInventoryNumber(INVENTORY_ALL); i++) { // アイテムを1個ずつチェック str=llGetInventoryName(INVENTORY_ALL,i); if (llGetInventoryType(str) == INVENTORY_NOTECARD) { // ノートだったらオーナーに配送 llGiveInventory(llGetOwner(),str); llWhisper(0,"Sent "+str); note=TRUE; // フラグをTRUE } if (llGetInventoryType(str) != INVENTORY_NONE) { if (str != llGetScriptName()) { // このスクリプト以外は削除 llRemoveInventory(str); i--; } } } llAllowInventoryDrop(TRUE); // ドロップ許可 // ノートを受付けたときのメッセージ if (note) llWhisper(0,"Thank you for your notecard."); } } }

スクリプト参照

2009/05/28

売り上げ分配ベンダースクリプト

// 売り上げ分配ベンダー
key av="00000000-0000-0000-0000-000000000000"; // 分配するアバターのキー
float percent=5; // 分配率(%)
integer price;
list items;

init()
{
items=[]; // アイテムリスト初期化
string str;
integer i;
integer j=llGetInventoryNumber(INVENTORY_ALL); // コンテンツ内のアイテム数
for (i=0; i < j; i++) { // アイテムをチェック str=llGetInventoryName(INVENTORY_ALL,i); // アイテム名取得 if (llGetInventoryType(str) == INVENTORY_NOTECARD && llGetSubString(str,0,1) == "L$") { // 名前がL$○○になってるノートのとき price=(integer)llGetSubString(str,2,-1); // ノート名から価格を設定 } else if (str != llGetScriptName()) items+=[str]; // その他は、このスクリプト以外をリストアップ } if (llGetPermissions() & PERMISSION_DEBIT) llSetPayPrice(PAY_HIDE,[price,PAY_HIDE,PAY_HIDE,PAY_HIDE]); } default { state_entry() { llSetPayPrice(PAY_HIDE,[PAY_HIDE,PAY_HIDE,PAY_HIDE,PAY_HIDE]); // 支払い不可に設定 llSetClickAction(CLICK_ACTION_TOUCH); // クリックでタッチに設定 init(); // initでコンテンツ内チェック if (av != "") llOwnerSay("Split money with secondlife:///app/agent/"+(string)av+"/about ?"); // 分配するアバターのプロフ } on_rez(integer start_param) { // 持ち物から出したときリセット llResetScript(); } changed(integer change) { // コンテンツ内が変化したらinitへ if (change & CHANGED_INVENTORY) init(); } touch_start(integer total_number) { if (llDetectedKey(0) == llGetOwner()) { // オーナーがタッチしたとき口座引落し許可のリクエスト llRequestPermissions(llGetOwner(), PERMISSION_DEBIT); } } run_time_permissions(integer perm) { if (perm & PERMISSION_DEBIT) { // 口座引落し許可されたら llSetPayPrice(PAY_HIDE,[price,PAY_HIDE,PAY_HIDE,PAY_HIDE]); // 支払いダイアログに金額を設定 llSetClickAction(CLICK_ACTION_PAY); // クリックで支払いに設定 } } money(key id, integer amount) { // 売れたら llGiveInventoryList(id,llGetObjectName(),items); // リストのアイテムを渡す llInstantMessage(id,"Thank you for your purchase."); integer i=(integer)(amount*percent/100); // 分配額を計算 if (i > 0) llGiveMoney(av,i); // 分配額が0でなければ送金
}
}
UUIDはhttp://search.secondlife.com/

スクリプト参照

2009/05/27

長距離テレポータースクリプト

// 長距離用の高速テレポーター
vector dest;
vector pos;

default
{
state_entry()
{
llSitTarget(<0.2,0,0.55>, ZERO_ROTATION); // 座る位置
dest=llGetPos(); // 現在位置の座標を目的地に設定
llOwnerSay("Destination = "+(string)dest);
}

changed(integer change)
{
if (change & CHANGED_LINK) { // リンクが変わったとき
key id=llAvatarOnSitTarget(); // 乗ってるアバターのキー
if (id) {
if (pos) return; // 出発地座標が設定されてるとき(動作中)はリターン
pos=llGetPos(); // 現在位置を出発地の座標に設定
vector v=dest-pos; // 目的地と出発地のベクトルの差
float f=llVecDist(dest,pos); // 移動する距離
list l; // llSetPrimitiveParams用のリスト
integer i;
integer j=llCeil(llFabs(f/10)); // 移動距離を10mで何分割になるか計算
vector p=v/j; // 1回に移動させるベクトル値
for (i=0; i <= j; i++) { // 分割した回数分ループ l+=[PRIM_POSITION,pos+p*i]; // 分割した座標をリストアップ } llSetPrimitiveParams(l); // テレポート開始 llUnSit(id); // 目的地でアバターを降ろす l=[]; // リストをクリア for (i=j; i >= 0; i--)
{ // 行きと逆順のリストにする
l+=[PRIM_POSITION,pos+p*i];
}
llSetPrimitiveParams(l); // テレポーターを出発地に戻す
pos=ZERO_VECTOR; // 出発地の座標をクリア
}
}
}
}
目的地に置いてリセット→スタート地へ置く

スクリプト参照