2009年11月24日火曜日

RLV化とWEB API通信開発

今度は以前作ったArgos(bondage tower)を、RLV対応に改装中。

新しい機能拡張で、WebAPI経由でDBと通信して管理するような機能を考えています。作るのは簡単だろうと思ったが、やってみると意外とはまった。
サーバ側はPHPだが、最近触っていなかったので5.2系の勉強をしながら開発している。PHPのワーニングが出ないので、動かなくても理由がわからん。デバッグがやりにくい。。。
SL側はHTTPで取得できるbodyのサイズは2048バイトだと。。。大きなデータは無理ですね。それからXMLのパーサはビルトイン関数は無いのですね。不便かも。

[参考]
llHTTPRequest
HTTP Post request to a PHP server

2009年11月15日日曜日

MinotaurosがRLV対応に

以前紹介したMinotaurosをRLV対応に改良しました。

Minotauros - Spanking wood horse(V1.3)


新しい機能:

  • RLV対応(ちゃんと再ログインにも対応)
  • タイムロック機能(RLVだとセルフだったり誰かに解除してもらわないとずっと拘束なのですが、それだと大変なので10~20分経つとリリースされます。)
  • セキュリティ機能(拘束中は、メニューにアクセスできない)
  • ヘルプ(もちろん英語も。。。いい加減だけど)

2009年11月9日月曜日

Discipline chair

Caneを使ったお仕置きのために、新製品を開発しました。

イスは、Arieala Andelという作者が無料で配布しているものが、mod可であったので、これをベースにテクスチャを差し替え、スクリプトを埋め込んでいます。
ついでに、Caneも作成。これは、ほとんどただの円柱です。

(1)最初に Spankeeがイスにsitします。イスに手をついて、お尻をあげた格好になります。


(2)次に、Spankerは、Spankeeのお尻のあたりに 透明な半球オブジェクトがあるので、一度触ります。すると、叩く位置にsitします。


Ctrl-Alt-Tで透明オブジェクトを表示させると、こうなっている。


(3)Spankerは、Spankeeのお尻のあたりをマウスでクリックすると、先ほどの透明な半球オブジェクトがtouchイベントを拾い、ケインを振り下ろします。音付きです。


ここで工夫をして、透明な半球オブジェクトでllDetectedTouchUVを使い、お尻の上のあたりをクリックすると弱く、お尻の下のあたりをクリックすると強く叩くというマニアックな仕様になっています。自分では、すごく直感的なUIだと思うのですが、おそらく他の人にはわかりにくいので、マニュアルを同梱しないと理解できないかもしれない。
特に拘束するようなシチュエーションでもないのでRLV対応の予定はありません。あくまで両者合意のもとで楽しんでください。

2009年10月18日日曜日

スカイボックスの拡張

Zindra自宅のスカイボックスが物作りに手狭になってきたので、思い切って拡張工事を行いました。場所も若干東に移動。

ついで、お仕置き部屋を新設。




外から中の様子を隠し窓で覗くことができます。

2009年9月27日日曜日

RLV対応化の実験

家具をRLVに対応させようと思い、いろいろ試してみました。



単純には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などを検証しないと、危険ですね。