2008年06月21日
リモートロードを試してみた
今回 スクリプトの機能をもう少し調べてみよう と思ってみた時に頭に浮かんだのがこの機能
-----
でも 調べてみたら これって 同一 SIM でないと機能しないのね
-----
思ったより 制約が強いかも w
-----
Makapu@BlackSheep-LSL:リモートロード
-----
に説明があるんだけれど 読んでるだけではいまいち分からないので 実際に試してみた
-----
-----
は(本体のスクリプトで)クリックすると data というスクリプトを別のオブジェクトに与える
-----
save_data というのが別のオブジェクト
-----
タッチすると save_data を rez し 1秒待ってから それに data を与える(object rez は rez した後 rez したオブジェクトの id を持って呼ばれる あ... これ使えば リンクできるんだ w)
-----
-----
は save_data のスクリプト
-----
最初に pin を設定しておく
-----
rez されると 日にちと時刻を後ろに付けた名前にリネームする
-----
タッチすると 今度は逆に こっちのデータで 本体の方にデータをロードする(本体のスクリプトは data load と言うと data load と答えるようになっている)
-----
その後 llDie で消える
-----
このオブジェクトは 本体に入れておく
-----
実際にどう動作するか試してみる
-----
-----
本体をクリックするとこうなる(save_data が離れた位置に rez される)
-----
-----
中には data が入れられている(rez されてからロードされた)
-----
-----
本体の側の data を削除してから
-----
-----
save_data の方をクリックすると save_data は消えて data が戻されている(実際には save_data の後ろに 日にちと時刻を後ろに付けた名前)
-----
一箇所 元のページのスクリプトに誤りがある(llRezObject の最後のパラメタが消えている)ので そこを修正しておいたのですぐ試せるよう載せておきます
-----
本体側
-----
でも 調べてみたら これって 同一 SIM でないと機能しないのね
-----
思ったより 制約が強いかも w
-----
Makapu@BlackSheep-LSL:リモートロード
-----
に説明があるんだけれど 読んでるだけではいまいち分からないので 実際に試してみた
-----
-----
は(本体のスクリプトで)クリックすると data というスクリプトを別のオブジェクトに与える
-----
save_data というのが別のオブジェクト
-----
タッチすると save_data を rez し 1秒待ってから それに data を与える(object rez は rez した後 rez したオブジェクトの id を持って呼ばれる あ... これ使えば リンクできるんだ w)
-----
-----
は save_data のスクリプト
-----
最初に pin を設定しておく
-----
rez されると 日にちと時刻を後ろに付けた名前にリネームする
-----
タッチすると 今度は逆に こっちのデータで 本体の方にデータをロードする(本体のスクリプトは data load と言うと data load と答えるようになっている)
-----
その後 llDie で消える
-----
このオブジェクトは 本体に入れておく
-----
実際にどう動作するか試してみる
-----
-----
本体をクリックするとこうなる(save_data が離れた位置に rez される)
-----
-----
中には data が入れられている(rez されてからロードされた)
-----
-----
本体の側の data を削除してから
-----
-----
save_data の方をクリックすると save_data は消えて data が戻されている(実際には save_data の後ろに 日にちと時刻を後ろに付けた名前)
-----
一箇所 元のページのスクリプトに誤りがある(llRezObject の最後のパラメタが消えている)ので そこを修正しておいたのですぐ試せるよう載せておきます
-----
本体側
//save_data 側
// File: save_test.lsl
// Date Author number of nodes
// 2008/6/20 walkinglint 26
//
integer pin = 12345;
integer channel = -7;
integer handle;
string script_name = "data";
string dataobject_name = "save_data";
default {
state_entry() {
llSetRemoteScriptAccessPin(pin);
handle = llListen(channel, "", NULL_KEY, "");
}
touch_start(integer detected) {
if (llDetectedKey(0) == llGetOwner()) {
llRezObject(dataobject_name, llGetPos() + <1.0, 0.0, 0.0>, ZERO_VECTOR, ZERO_ROTATION, 1);
}
}
object_rez(key id) {
llSleep(1.0);
llSay(0, "Data save process start. Please wait... ");
llRemoteLoadScriptPin(id, script_name, pin, TRUE, 0);
llSay(0, "Data save complete! Take '" + dataobject_name + "'.");
}
listen(integer ch, string nm, key id, string msg) {
if (msg == "data load" && llGetOwnerKey(id) == llGetOwner()) {
llSay(channel, "data load");
}
}
}
//
// File: save_data.lsl
// Date Author number of nodes
// 2008/6/20 walkinglint 26
//
integer pin = 12345;
integer channel = -7;
integer handle;
string script_name = "data";
default {
state_entry() {
llSetRemoteScriptAccessPin(pin);
}
on_rez(integer i) {
if (i == 1) {
llSetObjectName(llGetObjectName() + "(" + llGetTimestamp() + ")");
}
}
touch_start(integer detected) {
if (llDetectedKey(0) == llGetOwner()) {
handle = llListen(channel, "", NULL_KEY, "data load");
llSay(channel, "data load");
}
}
listen(integer ch, string nm, key id, string msg) {
if (msg == "data load" && id != llGetKey() && llGetOwnerKey(id) == llGetOwner()) {
llSay(0, "Data load process start. Please wait... ");
llRemoteLoadScriptPin(id,script_name , pin, TRUE, 0);
llSay(0, "Data load complete! ");
llDie();
}
}
}
Posted by walkinglint at 12:38│Comments(0)
│walking のスクリプティング講座