arz Nitelyってシステム屋どうよ?

SecondLifeとWebとの融合を模索するセミプロWeb屋の挑戦

ようやく完成がみえてきた

2009年02月09日 – 14:45

アクセサリー屋さんからご注文いただきましたオーダースクリプトの完成がようやく見えてきました。

ご注文内容は…
1. テクスチャーチェンジ機能
  ・任意の特定のプリム(複数アリ)のみテクスチャーが変わること
  ・テクスチャーごとにオフセットや倍率、グロー、色などのパラメータの指定ができること
  ・使用するテクスチャーの枚数は商品ごとに異なる
  ・テクスチャーチェンジ機能を必要としない商品もある(その場合はダイアログに表示させない)
2. リサイズ機能
  ・どれか1プリムでも最小の大きさ(0.01m)になればそれ以上縮小させないこと(拡大も同様)
  ・インストールが簡単なこと
  ・リンク数が最大の255でもきちんと動くこと
  ・拡大 / 縮小はダイアログから行う(拡大 / 縮小それぞれ1%、5%、10%ずつ)
  ・リサイズを使わない商品もある(その場合はダイアログに表示させない)
3. パーティクル機能
  ・任意の特定のプリム(複数アリ)からパーティクルを出せること
  ・パーティクルを使わない商品ではダイアログからそのメニューを消せること
4. 効果音再生機能
  ・一定時間ごとに効果音を再生できる(ダイアログから周期とオン / オフを選択可能)ように
  ・効果音を使わない商品ではダイアログからそのメニューを消せること

※ これらをどんなアクセサリーにも対応できるよう汎用的につくってほしい(設定は簡単に)

 

単体スクリプトというよりも、ソフト開発に近いですねw
ウチが最も得意とする分野です^^

というわけで、こんな風に設定できるようにしてみました
(コアスクリプトは別途存在しますので、このスクリプトだけを入れても何もできませんw)



アップデート: lsl-ml.lib

2008年12月02日 – 17:20

llLoadURL()関数を忘れていたので追加しました。
詳細はこちらをご覧ください。

余談ですが…

当初、ml.moduleとしてご紹介しましたが
「モジュール」というよりも「ライブラリ」なのかな?と思いまして改名しましたw



ml.module(多言語化モジュール)

2008年11月28日 – 04:15

とりあえず、やりたいこととテストコードをつらつらと…

1. やりたいこと

llSay(), llOwnerSay(), llInstantMessage(), llDialog()などUIに利用する関数を、代替関数を用いることで多言語化させる

ちと具体的に書くと…

llSay(0, "Hello, Avatar");

説明も不要なこの関数を…

mlSay(0, "Hello, Avatar", llGetAgentLanguage(llGetOwner()), []);

という感じで、代替関数を使うことによって、”Hello, Avatar”の部分を各言語に置き換えてしゃべらせたいと^^
そういうわけなんですw
(mlはバレバレですが、MultiLingualからとってます)

 

2. テストコード

んで、いきなりですがコードからw

新旧の情報が混同しないよう、この投稿内容は削除しhttp://arznitely.com/document/?id=ja:free_lsl:lsl-ml.libにおいて、最新の情報を公開しています。そちらをご覧ください。

前者が「ml.module」で、後者のスクリからそのモジュールを呼び出しています

とりあえず、llSay(), llOwnerSay(), llInstantMessage()の代替関数をつくってみました
(llDialog()はまだです)

細かいことは抜きにして、興味のある方は試してみてくださいw

なるべく汎用性を持たせ、GPLライセンスで配布したいと思っていますので、突っ込み大歓迎です♪

 

─── 追記:2008-11-28 15:10 ───
llShout(), llWhisper(), llRegionSay(), llSetText()の代替関数も追加します
あと…何かあったかな??

─── 追記:2008-11-29 02:52 ───
llShout(), llWhisper(), llRegionSay(), llSetText(), llDialog()の代替関数を追加
llDialog()の「ボタン」を多言語化するかどうか悩み中…

─── 追記:2008-11-30 02:21 ───
下記ページへ移転しました。最新情報はそちらをご覧ください。
http://arznitely.com/document/?id=ja:free_lsl:lsl-ml.lib



LuckyBoard…その後

2008年11月27日 – 03:24

先日、LuckyBoardを使ってくださっている方からノートカードを頂きまして

「やあ、LuckyBoardは実にいいね〜
 だけど、残念なのが数字の表示をオフにできないことと
 グループメンバーのみに配布できる機能がないことなんだよね
 これってどうにかならないものなのかな?(英語)」

というご意見を頂きました

そ、そうでしたね…
当初の予定では、この機能を付加するハズだったんですよね…

というわけで、この機能を付加し、近々マイナーアップデートをかけます^^
(既に実装は完了、現在テスト段階です)

 

それと…

それだけでは何か物足りなかったのでww
ついでにマルチリンガル仕様に挑戦してみます^^

llGetAgentLanguage()関数を利用して、オーナー側もユーザ(賞品をゲットする人)側も
日・英・中・韓・独・仏・葡・西の8カ国語に対応させてみようと思いますw

とりあえず、ユーザ側の方が簡単なので、さくっとME(Multilingual Edition)化してしまいました
(日本語圏の人がタッチすると日本語でアナウンス、英語圏の人がタッチすると英語でアナウンス…という感じ)

んでもってオーナー側なんですが…
PHPでいうところのsprintf関数にあたるものが必要になります。

簡単(?)に説明すると…

例えばオーナーがダイアログから「A」というボタンを選択したとします。
その操作をLSLで復唱させようとした場合…

日:あなたはAを選択しました。
英:You chose A.
韓:당신은 A를 선택했습니다.

といった具合に、オーナーが選んだ結果に合わせて文章を組み立てないといけませんし
各言語によって「A」という変数値が入る位置が変わるわけです。

復唱させるメッセージ内に値を決め打ちしておくことはどう考えても無理がありますし
はじめはA〜Cの3つのボタンだったけど、途中から仕様変更してA〜Eの5つに増えた…なんてこともあり得ます

 

また、次のようなケースも考えられます

例えば、コンテンツ内を検索したような場合に…

日:1枚のテクスチャーと、3つのオブジェクトと、4つのアニメーションが見つかりました。
英:1 texture, 3 objects and 4 animations are found.
仏:se encuentran 1 textura, 3 objetos y 4 animaciones.

この場合は3つの変数値を各位置に割り込ませつつ文章を組み立てなければいけません
これが、4つに増えても5つに増えても、たとえ20に増えたとしても成立するようにしないとダメなんですね^^

 

このあたりを簡単にやってくれるのがsprintf関数(PHP)なんですが
LSLにはそういう関数は準備されていないので、ユーザ関数として自分で準備しないといけないわけですw

こいつを実装してる最中なんですが、これがまた何とも楽しいです〜♪

 

簡単に多言語化できちゃうモジュールをつくったら少しはSLに貢献することになるかな〜?



OnMouseOver使いたい!!

2008年11月07日 – 19:18

JavaScriptにOnMouseOverって関数があります
マウスクリックの判定ではなくて、マウスが乗ったかどうかを判定する関数です

LSLにもコレがあると、SLビュアのUIが革命的に使いやすくできるな〜と思うんですが…

例えば…

default{
    on_mouse_over(integer mouse_on, integer face){
        if (mouse_on && face == 1){
            llSetTexture("mouse_on.texture", 1);
        }else if (!mouse_on || face != 1){
            llSetTexture("mouse_off.texture", 1);
        }
    }
}

こんな感じ??

event: on_mouse_over(integer mouse_on, integer face)

integer mouse_on ... 初期値はFALSE、マウスオーバーでTRUEを返す
integer face ... マウスオーバーした面番号を返す

llTargetOmegaみたく、クライアント側で動く関数として追加されたらイイな〜と思います

 

何がやりたいかって??

Dockですよww

普段は画面外に隠れるように配置させておいて
OnMouseOverで画面最下段(または最上段)ににゅ〜〜っと出てくるHUDです

邪魔にならずにイイと思いません??