2007年11月29日木曜日

できたかな、、、同期ダンスユニット・・・

LIN ちゃんの想定外の使い方でエラーが出ていた MLDU (Massive Link Dance Unit) ですが、、、これでうまくいくかも・・・
image
和服なのは、、、行きがかり上で(笑

Heap/Stack を確保するためのメモリー確保の方法をいろいろと。
まだまだできるかもしれないけど、結局は、、、、

あまり詳しくない人向けの機能が「あだ」となり・・・(笑

それを削っちゃいました。だから・・・ MLDUnit RAIZEEN SPECIAL なのかも。

なにをやったかというと、、、ダンスセットのノートカードがなかった場合に、インベントリ(コンテンツフォルダ)にあるダンスをすべて規定の秒数できりかえる仕様だったのですが、まずはそれを削除w

だって、、、それらのアニメーションの名前をすべて LIST にいれていたからです。

あと、その LIST がある前提で、Notecard の記載されているアニメーションの存在チェックをしていました。
llListFindList を使っていたわけです。もし、なければ、「このアニメーションないよー」というエラーをだして、MLDU は動かない、、、という風にしてました。llStartAnimation でアニメがないと実行時にスクリプトエラーになっちゃうので、それを回避するためにこの手の存在チェックは必要だと思います。

で、全アニメーションの LIST がなくなったんで、存在チェックに llGetInventoryType を使って、INVENTORY_ANIMATION つまり 20 じゃなければダメよ・・・という判断にしました。
これはKioさんから教えてもらった。。。ありがとー。llGetInventoryKey を最初使ったのですが、No MOD, No COPY, No TRANS のパーミッションだとこの関数は存在しないときと同じ return をするので困っていたんです。

あとは、、、もう一度、たくさんの人で同期ダンスを踊るテストをすればw
もうちょっと負荷テストとか、バグのチェックをしたら・・・本格的に売り出そうかなぁ、、、と思っています。
でも、、、このスクリプトは、LIN ちゃんとか ASUKA にくる多くの人のおかげです~。ほんと、勉強になりましたw
一般のものは、、、「あだ」となったアニメーション全部オプションを復活させて、アニメーションの上限をつけるかも、、、です。メモリーってほんと、すぐに使っちゃいますよね、、、。

3 件のコメント:

  1. llGetInventoryKey()の仕様ですけど、その書き方だと正しくなくて「フル・パーミッションでなければならない」が正解です(lslwikiもそういう書き方をしていると思います)。
    その書き方をすると、細かいようですが、 no mod, copy ok, no transとかの組み合わせだと使えるよ、という誤解を招きかねないです。
    一般向けの機能の場合、先に全部のリストを読み込むのではなくて、インベントリ内のアニメファイル名を取り出す関数(名前忘れた)を1回呼び出したら再生、再生が終わったら次の名前を呼び出す…にすればいいです。インベントリから名称を取得してるので、名称チェックもいりませんし、リストに詰め込む必要もありませんね。
    ロジックがスペシャルと違っちゃいますけど、そこはスクリプトを分けたりステートを分けたりすればいいですね。

    返信削除
  2. 革命的なユニットが、記念すべき日に完成しました。というのは、11月29日は私の誕生日なのでありまーす。
     最高のプレゼントありがとうSnumaさんん。

    返信削除
  3. Kioさん、ありがとうー。フルパーミッションじゃないと Key がとれないことを言いたかったんで、その通りです。
    一般向けの全アニメーションの指定はそのとおりですね。
    スペシャルは、、LINちゃんスペシャルなので、ロジックが変わっても、、、いいしょ(笑

    返信削除