お知らせ

2020年5月から、セカンドライフの情報は仮想生活ガイドというサイトにまとめていくように変更しました。
天使になりたくてのこれまでの情報は今後も過去ログとして残しておきますけれど、新しい情報は仮想生活ガイドをご覧ください^^
ラベル LSL の投稿を表示しています。 すべての投稿を表示
ラベル LSL の投稿を表示しています。 すべての投稿を表示

2017年9月23日土曜日

LSL の llHTTPRequest の仕様が再度変更されました

2017 年 8 月 29 日にメイングリッド全体に適用されたサーバーソフトウェアのアップデートにて、llHTTPRequest の仕様変更が再度行なわれました。

MIME Type changes for HTTP with LSL - LSL Scripting - SecondLife Community

Release Notes/Second Life Server/17 - Second Life Wiki

LlHTTPRequest - Second Life Wiki

今回の変更点は、下記の通りです。
  • HTTP_MIMETYPE パラメータが適切な内容になっているか、チェックが行なわれるようになりました。
  • HTTP_ACCEPT オプションが追加されました。これを使用すると、スクリプトが期待する MIME タイプをさらに制限することが出来ます。
  • スクリプトへの HTTP リクエストで、Content-Type が正しいものかどうか、許可されているものかどうかがチェックされるようになりました。

許可されている MIME タイプの形式は、下記の通りです。

"type/subtype; parameters"

正しい使用例
  • "text/plain;charset-utf8"
  • "application/x-www-form-urlencoded"
  • "multipart/mixed; boundary=\"---1234567890---\""

間違った使用例
  • "text/application/xml" (MIME タイプ に「/xml」が余計についています)
  • "text/xml charset=utf8" (MIME タイプの最後にセミコロンがありません)
  • "text / xml" (MIME タイプの区切りの前後にスペースが入っています)
  • "text/xml\n" (HTTP_MIMETYPE に改行コードが混入しています)
※これらの場合は、デバッグチャンネルでエラーが発生して、llHTTPRequest から Null キーが返されます。

セミコロンとパラメータは省略可能です。LSL は、オプションのパラメータセクションの内容は検証しません。

インターネットでの通常の仕様通りに llHTTPRequest の動作も変更されました。
LSL や Web で MIME タイプを意図した通信を行われている場合は、この辺を再度確認してみてください。
このエントリーをはてなブックマークに追加

2016年12月16日金曜日

LSL に新機能「llGetEnv(region_object_bonus)」「llGetObjectDetails(OBJECT_ATTACHED_SLOTS_AVAILABLE)」が追加されました

LSL(Linden Script Language)に、下記の新機能が追加されました
  • llGetEnvに「region_object_bonus」パラメータが追加
  • llGetObjectDetailsに「OBJECT_ATTACHED_SLOTS_AVAILABLE」パラメータが追加
Release Notes/Second Life Server/16 - Second Life Wiki


llGetEnv(region_object_bonus)


llGetEnv は、SIM(リージョン)の様々な情報を取得することが出来る関数です。

LlGetEnv - Second Life Wiki

今回は、SIM のオブジェクトボーナスの値を取得出来る機能(region_max_prims)が追加されました。

オブジェクトボーナスは、SIM の区画内で使えるプリム数を増やす設定です。

SIM の設定画面でのオブジェクトボーナスの値

土地情報でのオブジェクトボーナスの値(1.00 の場合は表示されません)

512sqm の土地で使えるプリム数は通常 175 ですが、オブジェクトボーナスが 2.00 に設定された SIM では 2 倍の 350 になります。
オブジェクトボーナスは 10.00 まで設定出来ますので、512sqm の土地で使えるプリム数は最大 1750 まで増やすことが出来ます。

ただし、SIM 全体でのプリム数の上限は変わりません。
SIM 内の一部の地区にプリムを集中させたい時に使う設定です。

セカンドライフでは主に、“ダブルプリム”の区画を作成するのに使われています。

そういった地域では、土地の残りプリム数の計算などを行なおうとすると、通常のプリム数の計算とは異なる計算が必要になります。

これまではオブジェクトボーナスを LSL で取得することは出来ませんでしたので、もしスクリプトで動的に計算を行いたいといった場合は、SIM 毎にオブジェクトボーナスの値をノートカードの設定ファイルなどであらかじめ個別に設定するといった必要がありました。

今回追加された「region_object_bonus」を使用すると、そういった手間が不用になります!^^/

オブジェクトボーナス 1.00 の SIM で「region_object_bonus」の値を取得した例

llGetObjectDetails(OBJECT_ATTACHED_SLOTS_AVAILABLE)


llGetObjectDetails は、オブジェクト(プリム)の情報を取得したり設定を行う関数です。

LlGetObjectDetails - Second Life Wiki

今回は、下記のパラメータが追加されました。

OBJECT_ATTACHED_SLOTS_AVAILABLEアバターの装着物の空きスロットの数を取得する機能

OBJECT_ATTACHED_SLOTS_AVAILABLE


OBJECT_ATTACHED_SLOTS_AVAILABLE を指定すると、アバターの装着物の空きスロットの数を取得出来ます。

チェック対象のものがアバターでない場合は、0 が返ります。

空きスロットを取得した例。
この場合は、29スロット空いています。

アバターへのオブジェクトの装着は、一つのアバター全体で 38 個(スロット)までという制限があります。

Limits - Second Life Wiki

この制限には、HUD や一時的な装着物(Temporary attachments)も含まれます。

※オブジェクトでは無い、レイヤーの衣類やアルファレイヤーなどは含まれません。

アバターにオブジェクトを装着することが出来る LSL はこれまでもありましたが、アバターがあといくつオブジェクトを装着可能かを取得する方法はありませんでした。

装着物の数が 38 個以上になる場合、LSL でさらに装着しようとすると、エラーが発生することなく失敗します。

“装着数の上限を超えて失敗した”ということを取得することは、LSL では出来ません。

ただし、今回の追加された OBJECT_ATTACHED_SLOTS_AVAILABLE を使うと、事前に装着物の上限を超えるかどうかを調べることが出来ます!

体験型のコンテンツで、llAttachToAvatarTemp でアイテムが確実に装着出来るかどうかを確認したい場合などに便利な機能だと思います^^


今回も、“かゆいところに手が届く”という感じの機能が追加されました。
少しずつですが、こうやって出来ることが増えていくのはいいですね^^
このエントリーをはてなブックマークに追加

2016年11月18日金曜日

LSL に新機能「llGetEnv(region_max_prims)」「llGetObjectDetails(OBJECT_GROUP_TAG/OBJECT_TEMP_ATTACHED)」が追加されました

LSL(Linden Script Language)に、下記の新機能が追加されました
  • llGetEnv に「region_max_prims」パラメータが追加
  • llGetObjectDetails に「OBJECT_GROUP_TAG」「OBJECT_TEMP_ATTACHED」パラメータが追加
Release Notes/Second Life Server/16 - Second Life Wiki


llGetEnv は、SIM(リージョン)の様々な情報を取得することが出来る関数です。

LlGetEnv - Second Life Wiki

今回は、SIM の最大プリム数を取得出来る機能(region_max_prims)が追加されました。

llGetEnv(region_max_prims)


llGetEnv のパラメータに「region_max_prims」を指定することで、その SIM の最大プリム数を取得出来ます。


ここで取得出来る値は、土地情報のオブジェクトタブで確認することが出来る最大プリム数と同じです。


SIM の最大プリム数は、従来は SIM の種類(フルリージョン、ホームステッド、オープンスペース)毎に固定の値でしたが、今後は同じ種類の SIM でも異なってくる場合がありますので、この機能が追加されたのだと思われます。

天使になりたくて: メインランドの SIM で利用可能なプリム数が増量されました

SIM の最大プリム数を基準にして土地のプリム数などを管理するようなスクリプトを作られる場合は、今後は固定値では無くて、region_max_prims で取得した値を基準に処理を行うようにしてください^^


llGetObjectDetails は、オブジェクト(プリム)の情報を取得したり設定を行う関数です。

LlGetObjectDetails - Second Life Wiki

今回は、下記のパラメータが追加されました。

OBJECT_GROUP_TAGアバターのグループタグを取得する機能
OBJECT_TEMP_ATTACHEDオブジェクトが一時装着されているどうかの状態

llGetObjectDetails(OBJECT_GROUP_TAG)


OBJECT_GROUP_TAG を指定すると、アバターのグループタグを取得出来ます


グループタグは、英語はもちろん、日本語などの文字列などでも問題無く取得出来ます。
アバターがグループタグを表示していない場合や、アバターでないオブジェクトを指定した場合は、空の文字列が返されます。

スクリプトから、アバターのグループタグをチェックしたい場合に使える機能です。

llGetObjectDetails(OBJECT_TEMP_ATTACHED)


OBJECT_TEMP_ATTACHED を指定すると、指定したオブジェクトが“一時的な装着オブジェクト”かどうかの状態を取得出来ます

0通常の装着
1一時的な装着オブジェクト

“一時的な装着オブジェクト”として装着されているかどうかを、これで調べることが出来ます。


今回も、細かい部分の機能追加という感じでしたけれど、あった方がいいものばかりですので、こういった進化はこれからも続けていって欲しいですね^^
このエントリーをはてなブックマークに追加

2016年10月26日水曜日

LSL に新機能「llSitOnLink」「llSetPrimitiveParams(PRIM_ALLOW_UNSIT/PRIM_SCRIPTED_SITS_ONLY/PRIM_SIT_TARGET)」が追加されました

LSL(Linden Script Language)に、下記の新機能が追加されました
  • llSitOnLink 関数が追加
  • llSetPrimitiveParams に「PRIM_ALLOW_UNSIT」「PRIM_SCRIPTED_SITS_ONLY」「PRIM_SIT_TARGET」パラメータが追加

What’s Happening Now in Second Life - secondlife
Release Notes/Second Life Server/16 - Second Life Wiki


llSitOnLink は、“スクリプトから”アバターをプリムに座らせることが出来る機能です。

LlSitOnLink - Second Life Wiki

これまでは、スクリプトからアバターを強制的に座らせることは出来ませんでした。
llSitOnLink を使用すると、それが出来るようになります。


ただし、誰でもどこでも強制的に座らせてしまうことが出来るようになってしまうのはよくないですので、llSitOnLink が使用可能なのは、「体験(Experience)」が有効になっている土地のみに限定されています。

「体験(Experience)」は、プレミアムアカウントでかつ土地を所有しているユーザーが、その土地に対して「Experience Key」を設定した場合のみ使用可能になる機能です。

Experiences in Second Life - Second Life
天使になりたくて: セカンドライフ公式ビュアー バージョン 3.8.0 が公開されました
天使になりたくて: 「Experiences(体験)」用のコンテンツの作り方

「体験(Experience)」が有効になると、アバターを自動でテレポートさせたり、アバターに HUD やアイテムを自動的に装着させたりといったことが、スクリプトから出来るようになります。

リンデン公式のゲーム「Linden Realms」や「Paleo Quest」などでおなじみの機能です。

今回追加された llSitOnLink も、その機能の一つです。

llSitOnLink を使うと、
  • 席に自動的に座らせる
  • 自動で乗り物(ライド)に乗せて、SIM 内を観光させる
  • 罠に触れたアバターを、罠に掛かったようにして一定時間動けないようにする
といったことが出来るようになります。

これまでは、ユーザーに座ってもらわないと動かなかった乗り物も、ユーザーが近づくだけで自動的に座らせて運行を開始するといったことが出来ます。
乗り込むアニメーションと組み合わせると、より自然な体験が出来るようになるような気がします^^


llSetPrimitiveParams には、下記のパラメータが追加されています。

PRIM_ALLOW_UNSITアバターが手動でプリムから立ち上がれるかどうかを設定
PRIM_SCRIPTED_SITS_ONLYアバターが手動でプリムに座ることが出来るかどうかを設定
PRIM_SIT_TARGETアバターがプリムで座る位置を設定

LlSetPrimitiveParams - Second Life Wiki

llSitOnLink と llSetPrimitiveParams の PRIM_ALLOW_UNSIT や PRIM_SCRIPTED_SITS_ONLY を組み合わせると、完全にスクリプトからしか操作が出来ない椅子などが作成可能になります。

llSetPrimitiveParams で PRIM_ALLOW_UNSIT を FALSE に設定すると、
「立ち上がる」ボタンを押しても、
“'llSitOnLink' will not allow you to stand at this time.”
というメッセージが表示されます

llSetPrimitiveParams で PRIM_SCRIPTED_SIT_ONLY を TRUE に設定すると、
プリムのメニューから「ここに座る」を選んでも
“配置に適した表面がありません。別の場所を試してみてください。”
というメッセージが表示されます

今回追加された llSitOnLink などの新機能の詳しい仕様は、Rider Linden さんが資料を公開されています。

Espeon Experience Enabled Sits.pdf

詳しい仕組みや使い方を知りたい方は、こちらもご覧ください。
このエントリーをはてなブックマークに追加

2016年2月1日月曜日

LSL に新機能「llGetObjectDetails(OBJECT_REZZER_KEY)」が追加されました

LSL(Linden Script Language)に新機能が追加されました。

Release Notes/Second Life Server/16 - Second Life Wiki

llGetObjectDetails 関数に、新しい定数が一つ追加されました。
  • OBJECT_REZZER_KEY

LlGetObjectDetails - Second Life Wiki


OBJECT_REZZER_KEY


llGetObjectDetails のフラグに OBJECT_REZZER_KEY を指定すると、Rez 元のオブジェクト(Rezzer)の Key を取得することが出来ます。


スクリプトからオブジェクトを Rez した際、Rezzer の object_rez イベントにて、Rez したオブジェクトの Key を取得することが出来ます。

Object rez/ja - Second Life Wiki

しかしこれまでは、Rez されたオブジェクト側では、自分がどのオブジェクトから Rez されたのかを知ることは出来ませんでした。

たとえば、利用可能台数の制限があるレンタルバイクの Rezzer で、

“レンタルバイクからアバターが降りたので、レンタルバイクのオブジェクトを消します”

といった情報を Rezzer に伝えたいといった場合、これまでは llRegionSay などで周辺の不特定多数のオブジェクト全てに呼びかけるといったことが必要でした。

しかしこの方法は、SIM の負荷的にはあまり良い方法とは言えません。


今回導入された llGetObjectDetails の OBJECT_REZZER_KEY フラグを使用すると、Rez されたオブジェクト内で Rezzer の Key が取得出来ます。
これにより、Rez されたオブジェクト側から Rezzer に、llRegionSayTo を使って直接情報が送れるようになります。

LlRegionSayTo/ja - Second Life Wiki

ちなみに、オブジェクトを Rez したのがアバターだった場合は、 OBJECT_REZZER_KEY フラグで取得出来るのはアバターの Key になります。


今回の機能は、SIM 内の不要な通信を減らす効果がある、すごくいい感じの新機能だと思います^^

今回は、既存の機能を llGetObjectDetails 関数でサポートしたものではなくて、新規に用意された機能みたいです。
そういう意味ではひさびさに、本当の意味での“新機能”だと思います。
このエントリーをはてなブックマークに追加

2016年1月23日土曜日

LSL に新機能「llGetObjectDetails(OBJECT_TOTAL_INVENTORY_COUNT、OBJECT_PRIM_COUNT)」が追加されました

LSL(Linden Script Language)に新機能が追加されました。

Release Notes/Second Life Server/16 - Second Life Wiki

llGetObjectDetails 関数に、二つの定数が追加されました。
  • OBJECT_TOTAL_INVENTORY_COUNT
  • OBJECT_PRIM_COUNT
LlGetObjectDetails - Second Life Wiki

OBJECT_TOTAL_INVENTORY_COUNT


llGetObjectDetails のフラグに OBJECT_TOTAL_INVENTORY_COUNT を指定すると、プリムのインベントリの中のオブジェクトの数を取得することが出来ます。

取得出来る値は、プリムのインベントリの中のオブジェクトの総数です。

これは、llGetInventoryNumber() で INVENTORY_ALL を指定した場合に取得出来る値と同じです。

LlGetInventoryNumber/ja - Second Life Wiki

プリムのインベントリの中には 3 つのオブジェクトがあるため、取得した値は 3 になります

OBJECT_PRIM_COUNT


llGetObjectDetails のフラグに OBJECT_TOTAL_INVENTORY_COUNT を指定すると、オブジェクト全体のプリム数を取得することが出来ます。

これは、llGetObjectPrimCount() で取得出来る値と同じです。

LlGetObjectPrimCount/ja - Second Life Wiki

オブジェクト全体のプリム数が 2 なので、取得された値は 2 になります

今回も、オブジェクトの情報を llGetObjectDetails 関数で一括で取得したい場合に便利な機能が追加されています^^
このエントリーをはてなブックマークに追加

2015年12月16日水曜日

LSL に新機能「llGetObjectDetails(OBJECT_OMEGA)」が追加されました

LSL(Linden Script Language)に新機能が追加されました。

Release Notes/Second Life Server/15 - Second Life Wiki

llGetObjectDetails() 関数に、OBJECT_OMEGA 定数が追加されました。

LlGetObjectDetails - Second Life Wiki

LlGetObjectDetails のフラグに OBJECT_OMEGA を指定すると、オブジェクトの回転速度を取得することが出来ます。

取得出来る値は、llTargetOmega で設定された値(vector)です。

LlTargetOmega/ja - Second Life Wiki

OBJECT_OMEGA で取得出来る値は、llGetOmega で取得出来る値と同じです。

LlGetOmega/ja - Second Life Wiki

オブジェクトの回転速度を取得するだけなら llGetOmega でも取得出来ますが、llGetObjectDetails ではオブジェクトの他の値と一緒に取得出来るのが特徴です。

llGetObjectDetails でオブジェクトの名前/位置/回転速度を一度に取得した例

list info = llGetObjectDetails(llGetKey(), [OBJECT_NAME, OBJECT_POS, OBJECT_OMEGA]);

スクリプトの処理を簡潔にまとめたい場合に、便利な新機能だと思います^^
このエントリーをはてなブックマークに追加

2015年10月9日金曜日

LSL に新機能「llGetAttachedList」「llGetObjectDetails(OBJECT_CLICK_ACTION)」が追加されました

LSL(Linden Script Language)に、下記の二つの新機能が追加されました。
  • llGetAttachedList 関数
  • llGetObjectDetails 関数に OBJECT_CLICK_ACTION 定数

llGetAttachedList()

llGetAttachedList では、アバターに装着されているオブジェクトの情報を取得出来ます。

LlGetAttachedList - Second Life Wiki

取得出来るのは、装着しているオブジェクトの key(UUID) の一覧です。

頭/手/足/腰など、アバター自身に装着されているオブジェクトの情報が取得出来ます。
HUD に装着されているオブジェクトの情報は、取得することは出来ません。

llGetAttachedList で取得出来る情報は、オブジェクトの key(UUID)のみですが、そこから llGetObjectDetails を介してオブジェクトの名称などを取得することも出来ます。

わたしが装着しているオブジェクトの名称を表示してみたところ

llGetAttachedList では自分のアバターだけでは無く、任意のアバターを指定して、そのアバターが装着しているオブジェクトの情報を取得することが出来ます。

この機能を使うことで、
  • イベントやゲームなどでのアイテムの装着確認
  • メモリー使用量の多いアイテムやレーティング上の装備品制限、セキュリティー対策といった目的でのアイテムの装着確認(身体検査)
  • 装着しているメッシュオブジェクトの情報も取得出来ますので、気になる他の人のメッシュ装着物の情報の確認
といったことが可能になります。

インワールドのゲームで、アイテムを装着していないとドアが開かなくて進行出来ないといった仕掛けを作ることが出来るようになります。

(今までもオブジェクト同士で不可視チャンネルでの Say を行なうことで疑似的には可能でしたが、今度は直接装着の確認が出来るようになります)

また、負荷が高いオブジェクトを装着している場合に、これまでは

「メモリーを○○KBまで減らしてください」

というアナウンスしかスクリプト側からは出来ませんでしたが、

「○×というアイテムは負荷が高いので外してください」

と、より具体的なアナウンスを出すといったことも出来るようになります。

地味な機能ですけれど、応用範囲は広い機能かもしれません。


個人的には LSL でここまで出来るなら、公式ビュアーでアバターを右クリックした際のメニューに、「アバターの装着物一覧」を表示出来る項目を追加して欲しいですね。

プリム製のオブジェクトであれば、装着物を右クリックしてそのオブジェクトの詳細を見ることはこれまでも出来ましたけれど、メッシュ製になってからはそれが出来なくなってしまいましたので…。

LSL だけではその辺を簡単に確認出来るようにするのは難しいですので、そこはぜひビュアー側でも対応して欲しいなーっと思いました^^

llGetObjectDetails(OBJECT_CLICK_ACTION)

llGetObjectDetails() に OBJECT_CLICK_ACTION 定数が追加されました。

LlGetObjectDetails - Second Life Wiki

LlGetObjectDetails のフラグに OBJECT_CLICK_ACTION を指定すると、オブジェクトに設定されたクリックアクションの状態を取得することが出来ます。

取得出来る値は、編集ウインドウまたは llSetClickAction で設定可能な値(数値)です。

編集ウインドウ

編集ウインドウでのクリックアクションの設定

llSetClickAction

LlSetClickAction - Second Life Wiki

使用方法としては、編集可能なオブジェクトに入れたスクリプトから、ユーザーがオブジェクトに対して適切なクリックアクションを設定しているかどうかを確認する場合に使用する感じなのかな?と思いました。

その際、結果に応じて、「適切なクリックアクションを設定してください」というメッセージを表示したり、llSetClickAction で自動的にクリックアクションの設定を変更するということが可能になりますので、よりユーザーフレンドリーな使い勝手を提供出来るようになると思います。

細かいところですけれど、こういう進化も大事なことだと思います^^
このエントリーをはてなブックマークに追加

2015年5月8日金曜日

アバターの情報を取得するための新しい機能が LSL に追加されました

セカンドライフのスクリプト言語 LSL(Linden Script Language)に、アバターの情報を取得するための新しい機能が追加されました。


New LSL support for Avatar Shape, Height and Hover - Second Life


今回は llGetObjectDetails に、アバターの情報を取得するための二つの機能が追加されました。

OBJECT_BODY_SHAPE_TYPEアバターの性別を取得
OBJECT_HOVER_HEIGHTアバターの Hover Height の値を取得

LlGetObjectDetails - Second Life Wiki

OBJECT_BODY_SHAPE_TYPE

OBJECT_BODY_SHAPE_TYPE では、アバターのシェイプで設定した性別に対応した値が取得出来ます。


性別
0.0女性
1.0男性

この機能を使うことで、アバターの性別がスクリプトで分かるようになります。

  • 更衣室やコミュニティなどで、アバターの性別で利用する施設を分けたい
  • 渡す商品をアバターの性別に応じて変更したい
といった場合に便利な機能です。

OBJECT_BODY_SHAPE_TYPE の値は、タイニーやメッシュアバターなどのデフォルトのシェイプが非表示になっているアバターでも、本来のアバターのシェイプに設定された性別の値が取得されます。

このため、タイニーやメッシュアバターの方は、見た目とアバターの性別が異なってしまうことがありますので、アバターの性別が必要になるケースでは注意が必要です。

OBJECT_HOVER_HEIGHT

OBJECT_HOVER_HEIGHT では、ビュアーの「Hover Height」で設定した値が取得出来ます。


値は、ビュアーで設定した値(-2.0 〜 2.0 の範囲)がそのまま取得出来ます。

ビュアーで Hover Height の設定を変更すると、値はすぐにサーバーに送られます。
ただし、サーバーとのやり取りは時間がかかりますので、設定した値が実際に LSL で取得出来るのは、少し遅れることがあります。


今回、公式ブログで紹介されたのはこの二つの機能だけですけれど、これ以外にもいろんな機能が追加されていますので、気になる方は Second Life Wiki の LSL Portal を確認してみてください。

LSL Portal - Second Life Wiki
※Secvond Life Wiki は現在、日本語のページはリンクでエラーが発生してしまいますので、英語版で閲覧されることをお勧めします。
このエントリーをはてなブックマークに追加