2008年06月21日
ランダム 3D モンドリアン - Randrian(その3)
Randrian ですが 実は 本来 リンクする機能を試してみようと思って始めたことだったのですが それができないままで 気持ちが悪かったのですが
-----
ようやく 思ったものができましたが... これが結構大変でした w
-----
rez したオブジェクトの key を返す object_rez というのがある というのに気付き これをリンクすればいいんじゃないか
-----
というわけで少し調べてみると
-----
パーミッションも リンクする側で取られていればよいようなので 本体側でとっておくだけでよいようです
-----
というわけで そくっと作って試してみましたが どうもうまくいきません(リンクしないのです)
-----
-----
流石にこれは変だろうというわけで object_rez llcreatelink で google ってみると
-----
LSL-BBS :: トピックを表示 - 失敗したこと・はまったこと
-----
に 同じようなことで悩んだ人がいて
-----
オチとしては、なぜか私のSIMではうまく動かないという...
数m移動して隣のSIMでやってみると見事動きました
2日ハマってたのに...
-----
などということが書かれてあり
-----
ひょっとしてと思い 自分の土地で試してみると
-----
-----
なんのことはない ちゃんとリンクされています
-----
で リンクする所までも 結構波乱の展開だったのですが ^^;
-----
クリックすると リンクした cube を削除し 生成し直す という機能を実現しようとして また嵌りました
-----
リンクを変更すると イベントが発生するので それが 2回起きたら llDie するスクリプトを cube の方に入れておけばいいだろう
-----
と思ったのですが 本体が消えてしまいました
-----
cube は本体にリンクされるので リンクされたものとして リンクが変更されたというイベントをもらってしまって 本体ごと消えてしまうのかもしれません
-----
というわけで 本体の方で 子プリム に対し メッセージを出しておいて そのメッセージを受けた後 リンクが変更されたら llDie するようにするとうまくいきました ^^
-----
-----
リンクに結構時間がかかるので(1リンク 1秒?)メッセージをださせるようにしました
-----
というわけで 本体側のスクリプトがこれ
-----
ようやく 思ったものができましたが... これが結構大変でした w
-----
rez したオブジェクトの key を返す object_rez というのがある というのに気付き これをリンクすればいいんじゃないか
-----
というわけで少し調べてみると
-----
パーミッションも リンクする側で取られていればよいようなので 本体側でとっておくだけでよいようです
-----
というわけで そくっと作って試してみましたが どうもうまくいきません(リンクしないのです)
-----
-----
流石にこれは変だろうというわけで object_rez llcreatelink で google ってみると
-----
LSL-BBS :: トピックを表示 - 失敗したこと・はまったこと
-----
に 同じようなことで悩んだ人がいて
-----
オチとしては、なぜか私のSIMではうまく動かないという...
数m移動して隣のSIMでやってみると見事動きました
2日ハマってたのに...
-----
などということが書かれてあり
-----
ひょっとしてと思い 自分の土地で試してみると
-----
-----
なんのことはない ちゃんとリンクされています
-----
で リンクする所までも 結構波乱の展開だったのですが ^^;
-----
クリックすると リンクした cube を削除し 生成し直す という機能を実現しようとして また嵌りました
-----
リンクを変更すると イベントが発生するので それが 2回起きたら llDie するスクリプトを cube の方に入れておけばいいだろう
-----
と思ったのですが 本体が消えてしまいました
-----
cube は本体にリンクされるので リンクされたものとして リンクが変更されたというイベントをもらってしまって 本体ごと消えてしまうのかもしれません
-----
というわけで 本体の方で 子プリム に対し メッセージを出しておいて そのメッセージを受けた後 リンクが変更されたら llDie するようにするとうまくいきました ^^
-----
-----
リンクに結構時間がかかるので(1リンク 1秒?)メッセージをださせるようにしました
-----
というわけで 本体側のスクリプトがこれ
//cube 側のスクリプトがこれ
// File: randrian2link.lsl
// Date Author number of nodes
// 2008/6/21 walkinglint 30
// 2008/6/19 walkinglint 18
// 2008/6/19 walkinglint 19 (randrian->randrian2link)
// 2008/6/19 walkinglint 19
//
integer i;
integer j;
integer num_of_box = 50;
float range = 0.5;
float distance = 0.7;
gen_randrian() {
for (i = 0; i < num_of_box; i++) {
llRezObject("cube2link", llGetPos()
+ (<0.0, 0.0, distance>
+ <(llFrand(1.0) - 0.5) * range, (llFrand(1.0) - 0.5) * range, (llFrand(1.0) - 0.5) * range>) * llGetRot(),
ZERO_VECTOR, llGetRot(), 0);
}
}
default {
state_entry() {
llRequestPermissions(llGetOwner(), PERMISSION_CHANGE_LINKS);
}
on_rez(integer param) {
llResetScript();
}
touch_start(integer total_number) {
llMessageLinked(LINK_ALL_CHILDREN, 0, "", NULL_KEY);
llSleep(1.0);
llBreakAllLinks();
llOwnerSay("linking boxes ...");
j = 0;
gen_randrian();
}
object_rez(key id) {
llCreateLink(id, TRUE);
j++;
if (j == num_of_box) {
llOwnerSay("linked all boxes");
}
}
}
//あ もちろんここでは cube は臨時オブジェクトでなくしています
// File: cube2link.lsl
// Date Author number of nodes
// 2008/6/21 walkinglint 32
// 2008/6/19 walkinglint 25
// 2008/6/19 walkinglint 16 (cube->cube2link)
// 2008/6/18 walkinglint 15
//
integer i;
integer to_die;
default {
on_rez(integer param) {
i = 0;
vector scale;
scale.x = llFrand(1.0) * 0.1;
scale.y = llFrand(1.0) * 0.1;
scale.z = llFrand(1.0) * 0.1;
llSetScale(scale);
vector color;
color.x = llFrand(1.0);
color.y = llFrand(1.0);
color.z = llFrand(1.0);
llSetColor(color, ALL_SIDES);
llSetAlpha(llFrand(1.0), ALL_SIDES);
llSetPrimitiveParams([25, ALL_SIDES, llFrand(1.0) * 0.1]); // too bright
integer to_die = 0;
}
changed(integer change) {
if ((to_die == 1) && (change == CHANGED_LINK)) {
llSleep(1.0);
llDie();
}
}
link_message(integer sender_num, integer num, string str, key id) {
to_die = 1;
}
}
Posted by walkinglint at 18:02│Comments(0)
│walking のスクリプティング講座