
単純にはRLVリレー着用を前提に
integer RLVRS_CHANNEL = -1812221819;
string cmd_name = "test";
key subject_key = (対象となるアバターのkey);
if (ロックする場合) {
llSay(RLVRS_CHANNEL,cmd_name + "," + (string)subject_key +
",@tploc=n|@sittp=n|@unsit=n");
} else {
llSay(RLVRS_CHANNEL,cmd_name + "," + (string)subject_key +
",@tploc=y|@sittp=y|@unsit=y");
}
でロック/アンロックは動作します。
しかし、長時間のプレイを前提にすると、ログアウトを想定しないといけません。
listen(integer ch, string n, key id, string message)
{
list tokens = llParseString2List (message, [","], []);
if (ch == RLVRS_CHANNEL)
{
if (llList2Key(tokens, 1) == llGetKey()) {
if (llList2String(tokens, 3) == "ping") {
llSay(RLVRS_CHANNEL,"ping," +
(string)subject_key + ",!pong");
}
}
}
}
家具にsitしてロックした状態でログアウトして、ログインした場合、!pongを送信することで、再度家具にsit&ロックを継続します。pongを送信しないとsitとロックは解除されます。
・ログアウト中に他の人がsitしたら?
・誰が解除できる?(ロックされている人が解除できたら面白くないので)
ということを考えだすと、コードが複雑になっていきますね。
ちなみに、周囲にあるRLV家具も同じチャンネルで受信しているので、メッセージはkeyなどを検証しないと、危険ですね。