2007年07月12日
リファレンス【GetG-GetL】
llGetG・・・からllGetL・・・の関数リファレンスです。
llGetGeometricCenter
llGetGMTclock
llGetInventoryCreator
llGetInventoryKey
llGetInventoryName
llGetInventoryNumber
llGetInventoryPermMask
llGetInventoryType
llGetKey
llGetLandOwnerAt
llGetLinkKey
llGetLinkName
llGetLinkNumber
llGetListEntryType
llGetListLength
llGetLocalPos
llGetLocalRot
llGetGeometricCenter
vector llGetGeometricCenter()
オブジェクトの中心点を返す。
ここで言う中心とは、オブジェクトの配置上の中心点である。
ルートプリムの座標とも重心とも異なる場合がある。
例えば同じ大きさのキューブが二つ結合されているオブジェクトであれば、llGetGeometricCenterの戻り値は二つのprimの中間地点の座標となる。
なんだか3つ以上のprimが結合された場合は微妙な結果が返るという噂もあるので、どこまで信用できるかは何ともいえない。
llGetGMTclock
float llGetGMTclock()
グリニッジ標準時(GMT)0時からの秒数を返す。
日本の標準時刻はGMT+9時間なので、
llGetGMTclock() + 9 * 3600
とすると日本時間を計算することができる(3600 = 1時間の秒数)。
integer jp_time = llGetGMTclock() + 9 * 3600;
時:(integer)((jp_time / 3600) % 24)
分:(integer)((jp_time % 3600) / 60)
秒:(integer)(jp_time % 60)
llGetInventoryCreator
key llGetInventoryCreator(string item)
オブジェクトのコンテンツ内にあるアイテムの製作者のUUIDを得る。
調べたいアイテム名を引数itemに指定する。
指定した名前のアイテムがコンテンツ内に存在しない場合はエラーとなる。
llGetInventoryKey
key llGetInventoryKey(string name)
オブジェクトのコンテンツ内にあるアイテムのUUIDを得る。
調べたいアイテム名を引数itemに指定する。
指定した名前のアイテムがコンテンツ内に存在しない場合はNULL_KEYを返す。
また、オブジェクトのオーナーが調べたいアイテムに関して、Modify/Copy/Transfer権限を持っていない場合もNULL_KEYを返すため、この関数の戻り値がNULL_KEYだったからといって、そのアイテムがコンテンツ内に存在しないとは言えない。
コンテンツ内のアイテムの存在確認にはllGetInventoryTypeを使うこと。
llGetInventoryName
string llGetInventoryName(integer type, integer number)
コンテンツ内にある指定したtypeのnumber番目のアイテムの名前を返す。
numberはゼロから始まるアイテムの番号である。
指定したアイテムが存在しない場合は空文字""が返る。
アイテムのタイプには以下の値を使用する。
例えば、以下の例はコンテンツに含まれる最初のスクリプト名を返す。
llGetInventoryNumber
integer llGetInventoryNumber(integer type)
指定したtypeのアイテムがコンテンツ内にいくつあるかを返す。
アイテムのタイプには以下の値を使用する。
例えば、以下の例はコンテンツに含まれるアイテムの数を返す。
llGetInventoryPermMask
integer llGetInventoryPermMask(string item, integer mask)
コンテンツ内にある指定したアイテム名の権限を調べる。
引数maskには調べたい権限の対象者を指定する。
戻り値はビットフィールドになっているので、以下の定数と&演算を行って権限をチェックする。
以下の例はコンテンツ内にある"hogehoge"という名前のアイテムに関して、次のオーナーがModify権限を持っているかどうかを調べる。
llGetInventoryType
integer llGetInventoryType(string name)
コンテンツ内にある指定した名前のアイテムのタイプを返す。
一般的に、引数nameで指定したアイテムがコンテンツ内に存在するかどうかをチェックするのに利用される。
戻り値は以下のいずれかとなる。
アイテム'hogehoge'がコンテンツ内にあるかどうかを調べるには以下のようにすればよい。
llGetKey
key llGetKey()
オブジェクトのUUIDを返す。
あくまでも自分自身のUUIDを返すだけであり、他のオブジェクトやアバターのUUIDを調べる関数ではない。
llGetLandOwnerAt
key llGetLandOwnerAt(vector pos)
引数posで指定した位置の土地所有者のUUIDを返す。
もしもposの位置の土地がグループ所有だった場合はグループのKEYを返す。
llGetLinkKey
key llGetLinkKey(integer linknum)
linknumで示されるリンクprimのUUIDを返す。
オブジェクトが単一primの場合、linknumに指定できる有効な値は0のみである。
オブジェクトがリンクされている場合は、ルートprimのリンクナンバーは1となり、2以降は子primである。
以下の例はリンクオブジェクトにおいて、タッチされたprimのUUIDを返す。
llGetLinkName
string llGetLinkName(integer linknum)
linknumで示されるリンクprimの名前を返す。
オブジェクトが単一primの場合、linknumに指定できる有効な値は0のみである。
オブジェクトがリンクされている場合は、ルートprimのリンクナンバーは1となり、2以降は子primである。
以下の例はリンクオブジェクトにおいて、タッチされたprimの名前を返す。
この関数はオブジェクト上の「ボタン」を実装する際に有用である。
タッチされたprimの「名前」に応じて処理を分岐させることでメンテナンス性の向上が見込める。
もしもタッチされたprimのリンクナンバーに応じて処理を分岐させるだけだと、オブジェクトを編集してリンクの順番が変わったときにLSLが正しく動作しなくなってしまう。
詳しい実装方法はllDetectedLinkNumberの説明を参照。
llGetLinkNumber
integer llGetLinkNumber()
自分自身のリンクナンバーを返す。
この関数が単一primで使用された場合には0、ルートprimにおいて使用された場合は1が返る。
子primにて使用された場合はそのprimのリンクナンバーが返る。
子primのリンクナンバーを調べる際に利用する関数であるが、リンクナンバーに頼った実装はオススメできない。
というのもオブジェクトが編集されるとリンクナンバーは変動する可能性があるためである。
よりメンテナンス性の高い実装については、llDetectedLinkNumber及びllGetLinkNameを参照。
llGetListEntryType
integer llGetListEntryType(list src, integer index)
リストsrcのindex番目の要素に関して、型情報を返す。
戻り値は以下の通り。
リストにリストを含めることはできないので、当然ながら戻り値にリスト型は存在しない。
llGetListLength
integer llGetListLength(list src)
リストsrcの要素数を返す。
最終インデックスの値ではないので注意。
どういうことかと言うと、
リストsrcが
[1,2,3,4,5]
だった時、
最終インデックスの値は4である(リストの先頭はインデックス0である)。
llGetListLength関数の戻り値は要素数の5である。
言い換えるなら、インデックスの最終値は要素数-1であると言える。
この関数はリスト内の項目についてforループ等で繰り返し処理を行う際には必ずと言っていいほど登場する。
llGetLocalPos
vector llGetLocalPos()
子primに関してルートprimからの相対位置を得る。
つまり戻り値はルートprimの中心座標からのズレを示すvector値である。
例えばルートprimのZ軸方向に1m離れた位置でリンクされた子primでは、llGetLocalPos関数は常に<0., 0.0, 1.0>を返す。
オブジェクト全体がどこに移動しようともこの戻り値は変わらない。
であるが、この関数がルートprimや単一primにおいて使用された場合、例外的にワールド座標におけるオブジェクトの位置を返す。
アタッチメントにおいても使用することができるが、アタッチメントのルートprim内でこの関数を使った場合、戻り値はアタッチメントポイントからの相対座標である。
この辺り動作が複雑なので注意すること。
llGetPosも参照。
llGetLocalRot
rotation llGetLocalRot()
子primに関してルートprimからの相対的な回転値を得る。
つまり戻り値はルートprimに対してどのくらい回転しているかを示すrotation値である。
例えばルートprimが回転ゼロのとき、90度回転してリンクされた子primでは、llGetLocalPos関数は常に90度の回転値を返す。
オブジェクト全体がどう回転しようともこの戻り値は変わらない。
であるが、この関数がルートprimや単一primにおいて使用された場合、例外的にワールド座標におけるオブジェクトの回転値を返す。
アタッチメントにおいても使用することができるが、アタッチメントのルートprim内でこの関数を使った場合、戻り値はアタッチメントポイントに対する相対的な回転値である。
この辺り動作が複雑なので注意すること。
llGetRotも参照。
llGetGMTclock
llGetInventoryCreator
llGetInventoryKey
llGetInventoryName
llGetInventoryNumber
llGetInventoryPermMask
llGetInventoryType
llGetKey
llGetLandOwnerAt
llGetLinkKey
llGetLinkName
llGetLinkNumber
llGetListEntryType
llGetListLength
llGetLocalPos
llGetLocalRot
llGetGeometricCenter
vector llGetGeometricCenter()
オブジェクトの中心点を返す。
ここで言う中心とは、オブジェクトの配置上の中心点である。
ルートプリムの座標とも重心とも異なる場合がある。
例えば同じ大きさのキューブが二つ結合されているオブジェクトであれば、llGetGeometricCenterの戻り値は二つのprimの中間地点の座標となる。
なんだか3つ以上のprimが結合された場合は微妙な結果が返るという噂もあるので、どこまで信用できるかは何ともいえない。
llGetGMTclock
float llGetGMTclock()
グリニッジ標準時(GMT)0時からの秒数を返す。
日本の標準時刻はGMT+9時間なので、
llGetGMTclock() + 9 * 3600
とすると日本時間を計算することができる(3600 = 1時間の秒数)。
integer jp_time = llGetGMTclock() + 9 * 3600;
時:(integer)((jp_time / 3600) % 24)
分:(integer)((jp_time % 3600) / 60)
秒:(integer)(jp_time % 60)
llGetInventoryCreator
key llGetInventoryCreator(string item)
オブジェクトのコンテンツ内にあるアイテムの製作者のUUIDを得る。
調べたいアイテム名を引数itemに指定する。
指定した名前のアイテムがコンテンツ内に存在しない場合はエラーとなる。
llGetInventoryKey
key llGetInventoryKey(string name)
オブジェクトのコンテンツ内にあるアイテムのUUIDを得る。
調べたいアイテム名を引数itemに指定する。
指定した名前のアイテムがコンテンツ内に存在しない場合はNULL_KEYを返す。
また、オブジェクトのオーナーが調べたいアイテムに関して、Modify/Copy/Transfer権限を持っていない場合もNULL_KEYを返すため、この関数の戻り値がNULL_KEYだったからといって、そのアイテムがコンテンツ内に存在しないとは言えない。
コンテンツ内のアイテムの存在確認にはllGetInventoryTypeを使うこと。
llGetInventoryName
string llGetInventoryName(integer type, integer number)
コンテンツ内にある指定したtypeのnumber番目のアイテムの名前を返す。
numberはゼロから始まるアイテムの番号である。
指定したアイテムが存在しない場合は空文字""が返る。
アイテムのタイプには以下の値を使用する。
定数 | 値 | 説明 |
---|---|---|
INVENTORY_ALL | -1 | 全種類 |
INVENTORY_ANIMATION | 20 | アニメーション |
INVENTORY_BODYPART | 13 | ボディパーツ |
INVENTORY_CLOTHING | 5 | 服 |
INVENTORY_GESTURE | 21 | ジェスチャー |
INVENTORY_LANDMARK | 3 | ランドマーク |
INVENTORY_NOTECARD | 7 | ノートカード |
INVENTORY_OBJECT | 6 | オブジェクト |
INVENTORY_SCRIPT | 10 | スクリプト |
INVENTORY_SOUND | 1 | サウンド |
INVENTORY_TEXTURE | 0 | テクスチャ |
例えば、以下の例はコンテンツに含まれる最初のスクリプト名を返す。
default {
state_entry(){
string script_name = llGetInventoryName(INVENTORY_SCRIPT, 0);
if (script_name == ""){
llSay(0, "There is no script in contents.");
}else{
llSay(0, "There is script '" + script_name + "'.");
}
}
}
llGetInventoryNumber
integer llGetInventoryNumber(integer type)
指定したtypeのアイテムがコンテンツ内にいくつあるかを返す。
アイテムのタイプには以下の値を使用する。
定数 | 値 | 説明 |
---|---|---|
INVENTORY_ALL | -1 | 全種類 |
INVENTORY_ANIMATION | 20 | アニメーション |
INVENTORY_BODYPART | 13 | ボディパーツ |
INVENTORY_CLOTHING | 5 | 服 |
INVENTORY_GESTURE | 21 | ジェスチャー |
INVENTORY_LANDMARK | 3 | ランドマーク |
INVENTORY_NOTECARD | 7 | ノートカード |
INVENTORY_OBJECT | 6 | オブジェクト |
INVENTORY_SCRIPT | 10 | スクリプト |
INVENTORY_SOUND | 1 | サウンド |
INVENTORY_TEXTURE | 0 | テクスチャ |
例えば、以下の例はコンテンツに含まれるアイテムの数を返す。
default {
state_entry(){
integer item_number = llGetInventoryNumber(INVENTORY_ALL);
if (item_number == 0){
llSay(0, "There is no item.");
}else{
llSay(0, "There is " + (string)item_number + " items.");
}
}
}
llGetInventoryPermMask
integer llGetInventoryPermMask(string item, integer mask)
コンテンツ内にある指定したアイテム名の権限を調べる。
引数maskには調べたい権限の対象者を指定する。
定数 | 値 | 説明 |
MASK_BASE | 0 | 基本(現在のオーナーの権限に等しい) |
MASK_OWNER | 1 | 現在のオーナーの権限 |
MASK_GROUP | 2 | グループの権限 |
MASK_EVERYONE | 3 | その他の人々の権限 |
MASK_NEXT | 4 | 次のオーナーの権限 |
戻り値はビットフィールドになっているので、以下の定数と&演算を行って権限をチェックする。
定数 | 値(16進数) | 値(整数値) | 説明 |
PERM_ALL | 0x7FFFFFFF | 2147483647 | Move/Modify/Copy/Transfer(フルパーミッション) |
PERM_COPY | 0x00008000 | 32768 | Copy可能 |
PERM_MODIFY | 0x00004000 | 16384 | Modify可能 |
PERM_MOVE | 0x00080000 | 524288 | Move可能 |
PERM_TRANSFER | 0x00002000 | 8192 | Transfer可能 |
以下の例はコンテンツ内にある"hogehoge"という名前のアイテムに関して、次のオーナーがModify権限を持っているかどうかを調べる。
default {
state_entry(){
integer perm = llGetInventoryPermMask("hogehoge", MASK_NEXT);
if (perm & PERM_MODIFY){
llSay(0, "Next owner can MODIFY.");
}else{
llSay(0, "Next owner can't MODIFY.");
}
}
}
llGetInventoryType
integer llGetInventoryType(string name)
コンテンツ内にある指定した名前のアイテムのタイプを返す。
一般的に、引数nameで指定したアイテムがコンテンツ内に存在するかどうかをチェックするのに利用される。
戻り値は以下のいずれかとなる。
定数 | 値 | 説明 |
---|---|---|
INVENTORY_NONE | -1 | アイテムは存在しない |
INVENTORY_ANIMATION | 20 | アニメーション |
INVENTORY_BODYPART | 13 | ボディパーツ |
INVENTORY_CLOTHING | 5 | 服 |
INVENTORY_GESTURE | 21 | ジェスチャー |
INVENTORY_LANDMARK | 3 | ランドマーク |
INVENTORY_NOTECARD | 7 | ノートカード |
INVENTORY_OBJECT | 6 | オブジェクト |
INVENTORY_SCRIPT | 10 | スクリプト |
INVENTORY_SOUND | 1 | サウンド |
INVENTORY_TEXTURE | 0 | テクスチャ |
アイテム'hogehoge'がコンテンツ内にあるかどうかを調べるには以下のようにすればよい。
default {
state_entry(){
if (llGetInventoryType("hogehoge") == INVENTORY_NONE){
llSay(0, "There is not 'hogehoge'.");
}else{
llSay(0, "There is 'hogehoge'.");
}
}
}
llGetKey
key llGetKey()
オブジェクトのUUIDを返す。
あくまでも自分自身のUUIDを返すだけであり、他のオブジェクトやアバターのUUIDを調べる関数ではない。
llGetLandOwnerAt
key llGetLandOwnerAt(vector pos)
引数posで指定した位置の土地所有者のUUIDを返す。
もしもposの位置の土地がグループ所有だった場合はグループのKEYを返す。
llGetLinkKey
key llGetLinkKey(integer linknum)
linknumで示されるリンクprimのUUIDを返す。
オブジェクトが単一primの場合、linknumに指定できる有効な値は0のみである。
オブジェクトがリンクされている場合は、ルートprimのリンクナンバーは1となり、2以降は子primである。
以下の例はリンクオブジェクトにおいて、タッチされたprimのUUIDを返す。
default {
touch_start(integer detected){
llSay(0, "UUID of touched prim is " + (string)llGetLinkKey(llDetectedLinkNumber(0)));
}
}
llGetLinkName
string llGetLinkName(integer linknum)
linknumで示されるリンクprimの名前を返す。
オブジェクトが単一primの場合、linknumに指定できる有効な値は0のみである。
オブジェクトがリンクされている場合は、ルートprimのリンクナンバーは1となり、2以降は子primである。
以下の例はリンクオブジェクトにおいて、タッチされたprimの名前を返す。
default {
touch_start(integer detected){
llSay(0, "Touched prim is " + llGetLinkName(llDetectedLinkNumber(0)));
}
}
この関数はオブジェクト上の「ボタン」を実装する際に有用である。
タッチされたprimの「名前」に応じて処理を分岐させることでメンテナンス性の向上が見込める。
もしもタッチされたprimのリンクナンバーに応じて処理を分岐させるだけだと、オブジェクトを編集してリンクの順番が変わったときにLSLが正しく動作しなくなってしまう。
詳しい実装方法はllDetectedLinkNumberの説明を参照。
llGetLinkNumber
integer llGetLinkNumber()
自分自身のリンクナンバーを返す。
この関数が単一primで使用された場合には0、ルートprimにおいて使用された場合は1が返る。
子primにて使用された場合はそのprimのリンクナンバーが返る。
子primのリンクナンバーを調べる際に利用する関数であるが、リンクナンバーに頼った実装はオススメできない。
というのもオブジェクトが編集されるとリンクナンバーは変動する可能性があるためである。
よりメンテナンス性の高い実装については、llDetectedLinkNumber及びllGetLinkNameを参照。
llGetListEntryType
integer llGetListEntryType(list src, integer index)
リストsrcのindex番目の要素に関して、型情報を返す。
戻り値は以下の通り。
定数 | 値 | 説明 |
TYPE_INTEGER | 1 | integer型 |
TYPE_FLOAT | 2 | float型 |
TYPE_STRING | 3 | string型 |
TYPE_KEY | 4 | key型 |
TYPE_VECTOR | 5 | vector型 |
TYPE_ROTATION | 6 | rotation型 |
TYPE_INVALID | 0 | indexがリストの範囲外 |
リストにリストを含めることはできないので、当然ながら戻り値にリスト型は存在しない。
llGetListLength
integer llGetListLength(list src)
リストsrcの要素数を返す。
最終インデックスの値ではないので注意。
どういうことかと言うと、
リストsrcが
[1,2,3,4,5]
だった時、
最終インデックスの値は4である(リストの先頭はインデックス0である)。
llGetListLength関数の戻り値は要素数の5である。
言い換えるなら、インデックスの最終値は要素数-1であると言える。
この関数はリスト内の項目についてforループ等で繰り返し処理を行う際には必ずと言っていいほど登場する。
list src = [
"one","two","three","four","five"
];
default {
state_entry(){
integer l = llGetListLength(src);
integer i;
for (i = 0; i < l; i ++){
llSay(0, "Index:" + (string)i + "=" + llList2String(src,i));
}
}
}
llGetLocalPos
vector llGetLocalPos()
子primに関してルートprimからの相対位置を得る。
つまり戻り値はルートprimの中心座標からのズレを示すvector値である。
例えばルートprimのZ軸方向に1m離れた位置でリンクされた子primでは、llGetLocalPos関数は常に<0., 0.0, 1.0>を返す。
オブジェクト全体がどこに移動しようともこの戻り値は変わらない。
であるが、この関数がルートprimや単一primにおいて使用された場合、例外的にワールド座標におけるオブジェクトの位置を返す。
アタッチメントにおいても使用することができるが、アタッチメントのルートprim内でこの関数を使った場合、戻り値はアタッチメントポイントからの相対座標である。
この辺り動作が複雑なので注意すること。
llGetPosも参照。
llGetLocalRot
rotation llGetLocalRot()
子primに関してルートprimからの相対的な回転値を得る。
つまり戻り値はルートprimに対してどのくらい回転しているかを示すrotation値である。
例えばルートprimが回転ゼロのとき、90度回転してリンクされた子primでは、llGetLocalPos関数は常に90度の回転値を返す。
オブジェクト全体がどう回転しようともこの戻り値は変わらない。
であるが、この関数がルートprimや単一primにおいて使用された場合、例外的にワールド座標におけるオブジェクトの回転値を返す。
アタッチメントにおいても使用することができるが、アタッチメントのルートprim内でこの関数を使った場合、戻り値はアタッチメントポイントに対する相対的な回転値である。
この辺り動作が複雑なので注意すること。
llGetRotも参照。
タグ :GET系関数
Posted by Miz at 12:15│Comments(2)
│リファレンス
この記事へのコメント
Mizさん こんばんわー
毎日欠かさず拝見させてもらってます〜^^
ちょと間違いを発見しちゃいました。
llGetGMTclockの分のところで
> 分:(integer)((jp_time % 3600) / 24)
割るのは60かと〜
つまんない指摘してすみませんです。
日本語リファレンス、めちゃくちゃ活用させてもらってます。
英語のはむずかしぃ。
ではでは〜。
毎日欠かさず拝見させてもらってます〜^^
ちょと間違いを発見しちゃいました。
llGetGMTclockの分のところで
> 分:(integer)((jp_time % 3600) / 24)
割るのは60かと〜
つまんない指摘してすみませんです。
日本語リファレンス、めちゃくちゃ活用させてもらってます。
英語のはむずかしぃ。
ではでは〜。
Posted by 河童@じょーろ at 2007年07月21日 08:05
>河童@じょーろさん
おっしゃるとおりでございます(><;
河童時間では1分=1/24時間なものでつい・・・。
人間時間に直しておきました。
おっしゃるとおりでございます(><;
河童時間では1分=1/24時間なものでつい・・・。
人間時間に直しておきました。
Posted by Miz at 2007年07月24日 12:29