‘プログラミング’ カテゴリーのアーカイブ

LSL仕様メモ4 イベントchangedでllResetScriptを使う場合の注意点

2009 年 2 月 14 日 土曜日

仕様というよりただ自爆しただけですが、少しハマってしまったのでメモ。

結論から先に述べますと、

イベントattachとオーナーが変わった際のllResetScriptを同じスクリプトに入れてはいけない

前提として、

  1. イベントstate_entryは、初めてスクリプトが実行された時に1回だけ働く。
  2. llResetScript()は、そのスクリプトをリセットする。
  3. イベントchangedにおけるif(change & CHANGED_OWNER){~}は、オーナーが変わった時に働く。

以上のLSLの基本的な動きがあります。

例えばstate_entry内にllGetOwnerを書き、オーナーのkey(UUID)を得てなにかしら動く仕組みのものを作る場合、人にそのオブジェクトを渡すとstate_entryはもう実行されないので以前のオーナーのkeyが残ったまま不都合な動作が起こります。

これを回避するのに3.で挙げたchanged内でオーナーが変わった時にllResetScript()を動かし、state_entryを再度走らせてオーナーのkeyを取得し直す、というのがよくある手法です。

今回アタッチし機能するものを作っていたのですが、

  • state_entry内に初回だけ働く機能を盛り込む
  • attach内にアタッチするたびに働く機能を盛り込む
  • changed内にオーナーが変わったらllResetScript

という組み合わせをしたところ悲劇は起きました。 (というほど大げさじゃないですが)

「付けてみたらちゃんと動かなかったけど、突然動くようになったよ」という理解不能なレスポンスのシロモノになってしまったわけです。

誤動作の流れとしては

  1. オブジェクトを渡した相手がアタッチする
  2. イベントattachが働く
  3. オーナーが変わったのでllResetScriptが働く
  4. イベントstate_entryが働く

となります。つまり、イベントattachで機能した内容がllResetScriptで消去されていました。

ちゃんとスクリプトを理解している人には当然なのでしょうが、自分はイベントchangedのif(change & CHANGED_OWNER){~}は、相手に渡した時点で機能すると勘違いしていました。

スクリプトなので当然Rez(アタッチも含む)されて始めて動くわけで、使用する人にオブジェクトを渡して最初の稼動がアタッチだと、イベントattach内の内容は全てキャンセルされてしまいます。

そして2回目アタッチした時は、オーナーが変わっていないのでllResetScriptは働かずattachは正常に機能します。途中からちゃんと動く不具合品の出来上がりですw

わかったつもりっていうのは危ないですね。基本的な機能でもテストしてからじゃないとダメだと思い知った件でした。

LSL仕様メモ3 簡易なカメラ制御について

2008 年 10 月 17 日 金曜日
  • LSLでの簡易なカメラ制御、llSetCameraEyeOffset(カメラ設置位置)とllSetCameraAtOffset(カメラを向ける座標)は、llSitTarget(座る位置の指定)を設定してあるオブジェクトでないと機能しない
  • 上記2つのカメラ制御関数は、そのオブジェクトに座ったアバターの視点を一度固定するだけ。後から動的に制御したい場合はllSetCameraParamsを使うこと。
  • 上記2つのカメラ制御関数を一度でもオブジェクトにセットすると、その後関数自体を取り除いてもカメラ位置がセットされたままになる。解除するにはllSetCameraEyeOffset(<0,0,0>); llSetCameraAtOffset(<0,0,0>);を一度セットすること。

参考:BlackSheep-LSL@Wiki カメラ制御

LSL仕様メモ2

2008 年 9 月 21 日 日曜日
  • LSLのイベント、on_rez(integer sparam){ }は地面などへのフィールドへのrez、およびアバターへのアタッチでは機能するが、HUDとして画面上にアタッチした場合は機能しない。例えばHUDをon_rezでllResetScript();する仕様にしていると不具合となるので注意。

LSL 仕様メモ1

2008 年 8 月 5 日 火曜日
  • llMoveToTarget の最大移動限界値は60m程度。それ以上に設定すると、全く動かない、または少しずつ近づくといったおかしな動きになる。
  • llListen は、llListenを含むスクリプト自身およびそのオブジェクトにある他のスクリプトにおいて、自身がllSayなどで発したメッセージを受け取ることができない。(llDialog はオーナーアバターが発したことになるので受け取れる)

localhostでMySQLにphpMyAdminを使ってログインできない

2008 年 6 月 17 日 火曜日

PHPを勉強中なのですが、ローカルでPHPを用いたDB環境を構築しようとするもいきなりハマったのでメモ書きします。

問題: localhost(Apache2)上のMySQL5.0にphpMyAdmin2.11.6を使ってログインできない(PHPは4.4.8)→PHPからのMySQL接続もできない

症状: Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading ~(ローカルパス)と表示され、ログインできない

前提: PHP4.1からの認証方式変更に対応するため、MySQLのmy.ini [mysqld]以下の68行目にold-passwordsは挿入済み。また、コマンドプロンプトからは問題なくMySQLに接続できる。

原因: MySQLインストール時に設定したパスワードがold-passwords適用前のパスワードだったため

解決法: パスワードを再設定するだけ

これははまりました。いかに初心者か思い知りますね(笑)

ちなみにパスワードの変更方法はこちら

mysql>SET PASSWORD FOR root@localhost = PASSWORD(’パスワード’);

参考サイト:

PHPからMySQLに接続できない – 教えて!goo

Windowsへphp4をインストールする – bnote

mysql パスワード変更 – MK の日記

Lightbox2をSSL環境で使用すると警告が出る

2008 年 4 月 18 日 金曜日

このブログでもLightbox2を使っているのですが、どうもSSL環境下だと「保護されている項目と保護されていない項目があります」という警告ダイアログが出てしまいます。

検索してみたところ、同じような症状の方の記事がありました。

使えるネット – Lightboxについて

しかし、画像やCSSへのパスは何度も見直し間違いはないはず・・ ということで、Lightbox2のサイトからダウンロードしたフォルダをそのままSSL領域にアップロードしてみると、それでも警告ダイアログが出ます。

そこで、このような記事も発見しましたが利用法がわからず・・

lightboxがSSLで警告 – ARK-Web SandBox Wiki

仕方なく、lightbox.jsやlightbox.cssをしらみつぶしにチェックしていると、lightbox.cssの13行目に

#prevLink, #nextLink{ width: 49%; height: 100%; background-image: url(data:image/gif;base64,AAAA); /* Trick IE into showing hover */ display: block; }

の記述があり、これをコメントアウトすることで解消できました。

詳細は検証していませんが、#prevLink,#nextLinkとあるのでグループ化した画像を送るときに問題はでるのかな。

ただ単品画像として使用する際は問題ないようなので、ひとまずこれで実装してみます。