2007年08月13日
リファレンス【GetS-GetT】
llGetS・・・からllGetT・・・の関数リファレンスです。
llGetScale
llGetScriptName
llGetScriptState
llGetSimulatorHostname
llGetStartParameter
llGetStatus
llGetSubString
llGetSunDirection
llGetTexture
llGetTextureOffset
llGetTextureRot
llGetTextureScale
llGetTime
llGetTimeOfDay
llGetTimestamp
llGetTorque
llGetScale
vector llGetScale()
primのサイズを返す。
戻り値のvectorはprimのX,Y,Zのサイズを意味する。
単位はメートル。
llGetScriptName
string llGetScriptName()
現在実行中のスクリプト名を返す。
しばしば自動消滅ロジックを実装する際に利用する。
以下のコードは開始後30秒でスクリプトを自動消滅させる。
敵に秘密を知られたくない場合はこのような自爆装置を組み込むとMIっぽい。
llGetScriptState
integer llGetScriptState(string name)
引数nameに指定したスクリプトが稼働中なのか、それとも停止中なのかを判定する。
nameに指定するのはオブジェクトのコンテンツ内にある名前でなければならない。
戻り値がTRUEだった場合は、スクリプトは生きている。
FALSEだった場合は死んでいる。
死んでるスクリプトはllResetOtherScript関数などを使って蘇らせることが可能である。
llGetSimulatorHostname
string llGetSimulatorHostname()
SIMが稼動しているサーバーのホスト名を返す。
対象となるSIMは現在オブジェクトが存在しているSIMである。
ホスト名とは要するにサーバーの名前だと考えて良い。
名前がわかったら攻撃できるとか、陰陽師みたいなことを言い出してはいけない。
llGetStartParameter
integer llGetStartParameter()
スクリプトのスタートパラメータを返す。
スタートパラメータとはllRezObject関数やllRemoteLoadScriptPin関数で指定された整数値のことである。
on_rezイベントに渡される引数と同値。
通常の方法で(単純に保存した、インベントリからオブジェクトにドロップした等)スクリプトが開始されたときにはスタートパラメータはゼロである。
また、llRezObject関数などでスタートパラメータが指定されていた場合でも、スクリプトがリセットされるとスタートパラメータはゼロに戻る。
llGetStatus
integer llGetStatus(integer status)
引数statusに指定したオブジェクトの属性がONかOFFかを判定する。
引数に指定可能な定数値は以下の通り。
例えば、以下のようにしてオブジェクトが物理かどうかを判定することができる。
これらの属性をセットするにはllSetStatus関数を使う。
llGetSubString
string llGetSubString(string source, integer start, integer end)
文字列sourceのstart文字目からend文字目までの文字列を返す。
例えば"ABCDEFG"という文字列があったとき、startに2、endに4を指定すると、2番目~4番目の文字列"CDE"を返す。
llGetSubString("ABCDEFG", 2, 4) → "CDE"
文字列の先頭文字は0番目となるので注意すること。
startまたはendにマイナスの数値を指定した場合、「後ろから数えた位置」になる。
例えば-1であれば、後ろから1番目、すなわち最後の文字である。
従って、startが0、endが-1だった場合は最初から最後の文字全てが返る。
llGetSubString("ABCDEFG", 0, -1) → "ABCDEFG"
さらにややこしい話だが、startにendよりも大きい値を指定した場合、start以上、end以下の文字列が返る。
llGetSubString("ABCDEFG", 4, 1) → "ABEFG"
llGetSubString関数は引数に指定した文字列を変更するわけではない。
あくまでも元の文字列はそのままにして、結果を返すだけである。
元の文字列を変更したい場合は、llGetSubString関数の結果を元の変数に代入する必要がある。
src = llGetSubString(src, 3, 6);
このようにすると、変数srcに3番目~6番目の文字列が入る。
llGetSunDirection
vector llGetSunDirection()
太陽の位置を示す単位ベクトルを得る。
この関数はSL内で見かけ上の「昼」か「夜」かを判定するのに利用される。
すなわち、llGetSunDirection関数の戻り値のZ値(垂直方向)が、
・プラスであれば太陽は地平線よりも「上」=「昼」
・マイナスであれば太陽は地平線よりも「下」=「夜」
と判断できる。
この関数の戻り値は、クライアントから変更可能な太陽位置とは無関係である。
たとえクライアント側で太陽の位置を「真昼」に設定していたとしても、実際にはSIMでは太陽が沈んでいるかもしれない。
関数の戻り値は実際の太陽の位置のほうである。
以下の例は夜か昼かを太陽の位置で判断する。
llGetTexture
string llGetTexture(integer side)
引数sideで指定した面のテクスチャを返す。
テクスチャがオブジェクトのコンテンツ内にある場合は名前が返るが、そうではない場合はUUIDが返る。
なお、この関数でテクスチャを取得するにはmodify権限が必要。
テクスチャをセットするにはllSetTexture関数を使う。
llGetTextureOffset
vector llGetTextureOffset(integer side)
引数sideで指定した面のテクスチャオフセットを返す。
戻り値のvectorのX・Yは、horizontal・verticalのオフセット値を意味する。
通常オフセット値は-1.0~1.0の間である。
オフセットを設定するにはllOffsetTexture関数を使う。
llGetTextureRot
float llGetTextureRot(integer side)
引数sideで指定した面のテクスチャ回転値(ラジアン)を返す。
逆にテクスチャの回転を設定するにはllRotateTexture関数を使用する。
llGetTextureScale
vector llGetTextureScale(integer side)
引数sideで指定した面のテクスチャサイズを返す。
戻り値のvectorのX・Yは、テクスチャのXサイズ・Yサイズを意味する。
テクスチャサイズをセットするにはllScaleTexture関数を使う。
llGetTime
float llGetTime()
スクリプトが最後にリセットされてからの秒数、もしくは前にllResetTime関数やllGetAndResetTime関数を実行したときからの秒数を返す。
要するにスクリプトの稼動秒数を取得するための関数であると考えれば良い。
時刻や日付を取得する関数ではないので注意。
llGetTimeOfDay
float llGetTimeOfDay()
SIMがリブートされてからの秒数、もしくはSIMの真夜中(太陽が真裏を通過した瞬間)からの経過秒数を返す。
通常、SIMの太陽は4時間周期で一周するため、llGetTimeOfDay関数の戻り値は14,400を越えることはない。
ただし、SIMによっては太陽を固定している場合がある。
太陽が固定されている場合、SIMの真夜中の概念が消失するため、llGetTimeOfDay関数の戻り値はリセットされない(SIMがリブートされない限り、どんどん増加していく)。
リブートされてからの時間か、または真夜中からの時間のどちらか一方に統一してくれれば使いやすいのだが・・・どちらの秒数が返るかはSIMのリブート状況次第であるので、イマイチ使いにくい関数である。
llGetTimestamp
string llGetTimestamp()
現在時刻を返す。
形式は"YYYY-MM-DDThh:mm:ss.ff..fZ"である。
例えば"2007-08-12T13:16:21.785886Z"のようになる。
llGetTorque
vector llGetTorque()
トルクを得る。
トルクというのはオブジェクトの物理回転力のことである。
物理オブジェクトの「フォース」と言うと永続的なオブジェクトの運動力を指すが、フォースは直線的な力である。
トルクは同様に永続的な運動力だが、回転を与える力である。
llGetForce関数やllSetTorque関数も参照のこと。
llGetScriptName
llGetScriptState
llGetSimulatorHostname
llGetStartParameter
llGetStatus
llGetSubString
llGetSunDirection
llGetTexture
llGetTextureOffset
llGetTextureRot
llGetTextureScale
llGetTime
llGetTimeOfDay
llGetTimestamp
llGetTorque
llGetScale
vector llGetScale()
primのサイズを返す。
戻り値のvectorはprimのX,Y,Zのサイズを意味する。
単位はメートル。
llGetScriptName
string llGetScriptName()
現在実行中のスクリプト名を返す。
しばしば自動消滅ロジックを実装する際に利用する。
以下のコードは開始後30秒でスクリプトを自動消滅させる。
敵に秘密を知られたくない場合はこのような自爆装置を組み込むとMIっぽい。
default {
state_entry(){
llSetTimerEvent(30.0);
}
timer(){
llRemoveInventory(llGetScriptName());
}
}
llGetScriptState
integer llGetScriptState(string name)
引数nameに指定したスクリプトが稼働中なのか、それとも停止中なのかを判定する。
nameに指定するのはオブジェクトのコンテンツ内にある名前でなければならない。
戻り値がTRUEだった場合は、スクリプトは生きている。
FALSEだった場合は死んでいる。
死んでるスクリプトはllResetOtherScript関数などを使って蘇らせることが可能である。
llGetSimulatorHostname
string llGetSimulatorHostname()
SIMが稼動しているサーバーのホスト名を返す。
対象となるSIMは現在オブジェクトが存在しているSIMである。
ホスト名とは要するにサーバーの名前だと考えて良い。
名前がわかったら攻撃できるとか、陰陽師みたいなことを言い出してはいけない。
llGetStartParameter
integer llGetStartParameter()
スクリプトのスタートパラメータを返す。
スタートパラメータとはllRezObject関数やllRemoteLoadScriptPin関数で指定された整数値のことである。
on_rezイベントに渡される引数と同値。
通常の方法で(単純に保存した、インベントリからオブジェクトにドロップした等)スクリプトが開始されたときにはスタートパラメータはゼロである。
また、llRezObject関数などでスタートパラメータが指定されていた場合でも、スクリプトがリセットされるとスタートパラメータはゼロに戻る。
llGetStatus
integer llGetStatus(integer status)
引数statusに指定したオブジェクトの属性がONかOFFかを判定する。
引数に指定可能な定数値は以下の通り。
定数 | 値 | 初期値 | 説明 |
---|---|---|---|
STATUS_BLOCK_GRAB | 64 | FALSE | 重力遮断。この属性がTRUEの場合、オブジェクトは重力の影響を受けていない。 |
STATUS_DIE_AT_EDGE | 128 | FALSE | ワールド外生存不可。この属性がTRUEの場合、オブジェクトはワールドの境界を越えた時点で消滅する。 |
STATUS_PHANTOM | 16 | FALSE | ファントム。幻影。オブジェクトがファントムの場合はTRUEが返る。 |
STATUS_PHYSICS | 1 | FALSE | 物理。オブジェクトが物理オブジェクトの場合はTRUEが返る。 |
STATUS_RETURN_AT_EDGE | 256 | FALSE | この属性がTRUEの場合、オブジェクトはワールドの境界を越えた時点でリターンされる。 |
STATUS_ROTATE_X | 2 | TRUE | この属性がFALSEの場合、オブジェクトはローカルX軸の周囲を回転しない。 |
STATUS_ROTATE_Y | 4 | TRUE | この属性がFALSEの場合、オブジェクトはローカルY軸の周囲を回転しない。 |
STATUS_ROTATE_Z | 8 | TRUE | この属性がFALSEの場合、オブジェクトはローカルZ軸の周囲を回転しない。 |
STATUS_SANDBOX | 32 | FALSE | サンドボックス。この属性がTRUEの場合、オブジェクトは他の土地に移動不能なだけでなく、初期位置から10m以上動くことができない。 |
例えば、以下のようにしてオブジェクトが物理かどうかを判定することができる。
default {
state_entry(){
if (llGetStatus(STATUS_PHYSICS)){
llSay(0, "PHYSICS ON.");
}else{
llSay(0, "PHYSICS OFF.");
}
}
}
これらの属性をセットするにはllSetStatus関数を使う。
llGetSubString
string llGetSubString(string source, integer start, integer end)
文字列sourceのstart文字目からend文字目までの文字列を返す。
例えば"ABCDEFG"という文字列があったとき、startに2、endに4を指定すると、2番目~4番目の文字列"CDE"を返す。
llGetSubString("ABCDEFG", 2, 4) → "CDE"
文字列の先頭文字は0番目となるので注意すること。
startまたはendにマイナスの数値を指定した場合、「後ろから数えた位置」になる。
例えば-1であれば、後ろから1番目、すなわち最後の文字である。
従って、startが0、endが-1だった場合は最初から最後の文字全てが返る。
llGetSubString("ABCDEFG", 0, -1) → "ABCDEFG"
さらにややこしい話だが、startにendよりも大きい値を指定した場合、start以上、end以下の文字列が返る。
llGetSubString("ABCDEFG", 4, 1) → "ABEFG"
llGetSubString関数は引数に指定した文字列を変更するわけではない。
あくまでも元の文字列はそのままにして、結果を返すだけである。
元の文字列を変更したい場合は、llGetSubString関数の結果を元の変数に代入する必要がある。
src = llGetSubString(src, 3, 6);
このようにすると、変数srcに3番目~6番目の文字列が入る。
llGetSunDirection
vector llGetSunDirection()
太陽の位置を示す単位ベクトルを得る。
この関数はSL内で見かけ上の「昼」か「夜」かを判定するのに利用される。
すなわち、llGetSunDirection関数の戻り値のZ値(垂直方向)が、
・プラスであれば太陽は地平線よりも「上」=「昼」
・マイナスであれば太陽は地平線よりも「下」=「夜」
と判断できる。
この関数の戻り値は、クライアントから変更可能な太陽位置とは無関係である。
たとえクライアント側で太陽の位置を「真昼」に設定していたとしても、実際にはSIMでは太陽が沈んでいるかもしれない。
関数の戻り値は実際の太陽の位置のほうである。
以下の例は夜か昼かを太陽の位置で判断する。
default {
touch_start(integer detected){
vector sun = llGetSunDirection();
if (sun.z > 0.0){
llSay(0, "Daytime.");
}else{
llSay(0, "Nighttime.");
}
}
}
llGetTexture
string llGetTexture(integer side)
引数sideで指定した面のテクスチャを返す。
テクスチャがオブジェクトのコンテンツ内にある場合は名前が返るが、そうではない場合はUUIDが返る。
なお、この関数でテクスチャを取得するにはmodify権限が必要。
テクスチャをセットするにはllSetTexture関数を使う。
llGetTextureOffset
vector llGetTextureOffset(integer side)
引数sideで指定した面のテクスチャオフセットを返す。
戻り値のvectorのX・Yは、horizontal・verticalのオフセット値を意味する。
通常オフセット値は-1.0~1.0の間である。
オフセットを設定するにはllOffsetTexture関数を使う。
llGetTextureRot
float llGetTextureRot(integer side)
引数sideで指定した面のテクスチャ回転値(ラジアン)を返す。
逆にテクスチャの回転を設定するにはllRotateTexture関数を使用する。
llGetTextureScale
vector llGetTextureScale(integer side)
引数sideで指定した面のテクスチャサイズを返す。
戻り値のvectorのX・Yは、テクスチャのXサイズ・Yサイズを意味する。
テクスチャサイズをセットするにはllScaleTexture関数を使う。
llGetTime
float llGetTime()
スクリプトが最後にリセットされてからの秒数、もしくは前にllResetTime関数やllGetAndResetTime関数を実行したときからの秒数を返す。
要するにスクリプトの稼動秒数を取得するための関数であると考えれば良い。
時刻や日付を取得する関数ではないので注意。
llGetTimeOfDay
float llGetTimeOfDay()
SIMがリブートされてからの秒数、もしくはSIMの真夜中(太陽が真裏を通過した瞬間)からの経過秒数を返す。
通常、SIMの太陽は4時間周期で一周するため、llGetTimeOfDay関数の戻り値は14,400を越えることはない。
ただし、SIMによっては太陽を固定している場合がある。
太陽が固定されている場合、SIMの真夜中の概念が消失するため、llGetTimeOfDay関数の戻り値はリセットされない(SIMがリブートされない限り、どんどん増加していく)。
リブートされてからの時間か、または真夜中からの時間のどちらか一方に統一してくれれば使いやすいのだが・・・どちらの秒数が返るかはSIMのリブート状況次第であるので、イマイチ使いにくい関数である。
llGetTimestamp
string llGetTimestamp()
現在時刻を返す。
形式は"YYYY-MM-DDThh:mm:ss.ff..fZ"である。
例えば"2007-08-12T13:16:21.785886Z"のようになる。
llGetTorque
vector llGetTorque()
トルクを得る。
トルクというのはオブジェクトの物理回転力のことである。
物理オブジェクトの「フォース」と言うと永続的なオブジェクトの運動力を指すが、フォースは直線的な力である。
トルクは同様に永続的な運動力だが、回転を与える力である。
llGetForce関数やllSetTorque関数も参照のこと。
タグ :GET系関数
Posted by Miz at 13:49│Comments(4)
│リファレンス
この記事へのコメント
初めまして。
最近SLでスクリプトを書き始め、いろいろと調べているうちにここにたどり着きました。
さて、テクスチャ関係のリファレンスがあるので、ここで質問させていただきます。
今作っているスクリプトなのですが、「誰でもテクスチャを貼ることができるボードで、インベントリにあるテクスチャをスライドショウする」というものを作っています。
最初にオブジェクトのcontentsに登録しておいたものはスライドショウできるのですが、スクリプト実行中にテクスチャをドロップしても表示されません。
デバッグの為にchanged内(change & CHANGED_INVENTORYでインベントリの変更はチェックしている)でtimerを止めてインベントリの数と名前を表示させたりしているのですが、ドロップしたテクスチャがありませんでした。
オブジェクトの表示はドロップしたテクスチャが表示された状態になっています。
このテクスチャは、オブジェクトのどこにあるのでしょうか?テクスチャをドロップしただけではインベントリに入らないのでしょうか?
もしくはインベントリに登録処理が必要なのでしょうか?
お忙しいとは思いますがご教授いただければと思いコメントさせていただきました。
最近SLでスクリプトを書き始め、いろいろと調べているうちにここにたどり着きました。
さて、テクスチャ関係のリファレンスがあるので、ここで質問させていただきます。
今作っているスクリプトなのですが、「誰でもテクスチャを貼ることができるボードで、インベントリにあるテクスチャをスライドショウする」というものを作っています。
最初にオブジェクトのcontentsに登録しておいたものはスライドショウできるのですが、スクリプト実行中にテクスチャをドロップしても表示されません。
デバッグの為にchanged内(change & CHANGED_INVENTORYでインベントリの変更はチェックしている)でtimerを止めてインベントリの数と名前を表示させたりしているのですが、ドロップしたテクスチャがありませんでした。
オブジェクトの表示はドロップしたテクスチャが表示された状態になっています。
このテクスチャは、オブジェクトのどこにあるのでしょうか?テクスチャをドロップしただけではインベントリに入らないのでしょうか?
もしくはインベントリに登録処理が必要なのでしょうか?
お忙しいとは思いますがご教授いただければと思いコメントさせていただきました。
Posted by sasapy at 2007年08月17日 13:27
結局、なんとか解決しました。
1.テクスチャをドロップした面を見ていなかった
元々の表示がALL_SIDESで表示していたので、ドロップしてもALL_SIDESだと思っていたら、ドロップした面でllGetTextureしなければなかった。
2.ドロップしたテクスチャはどこにあるのか?
llGetTextureで取得できたのはドロップしたテクスチャの(string)keyでした。keyからllKey2Nameしても名前は""でした。
llSetTextureは(string)keyでも表示できるので、そのままkeyを保存してスライドショウの次回以降に表示可能となりました。
しかし、物がどこにあるのか分からないということは解決できていません。ownerがある部分をtouchするとリセットする仕掛けにしていたので、llResetScriptで無くなってもかまわないのでよしとしています。
ちなみにNortcardは、ちゃんとcontentsに入ったので、テクスチャは何かが違うということなんでしょう。
ということで、なんとか出来そうです。
1.テクスチャをドロップした面を見ていなかった
元々の表示がALL_SIDESで表示していたので、ドロップしてもALL_SIDESだと思っていたら、ドロップした面でllGetTextureしなければなかった。
2.ドロップしたテクスチャはどこにあるのか?
llGetTextureで取得できたのはドロップしたテクスチャの(string)keyでした。keyからllKey2Nameしても名前は""でした。
llSetTextureは(string)keyでも表示できるので、そのままkeyを保存してスライドショウの次回以降に表示可能となりました。
しかし、物がどこにあるのか分からないということは解決できていません。ownerがある部分をtouchするとリセットする仕掛けにしていたので、llResetScriptで無くなってもかまわないのでよしとしています。
ちなみにNortcardは、ちゃんとcontentsに入ったので、テクスチャは何かが違うということなんでしょう。
ということで、なんとか出来そうです。
Posted by sasapy at 2007年08月19日 19:30
>sasapyさん
レス遅くなりました、すみません(><;
そうですね、テクスチャをドロップして貼った場合は特定の面だけに貼られますので、取得する際には面の指定が必須です。
ドロップしたテクスチャは、オブジェクト側には存在しません。
あくまでもドロップした人のインベントリ内に残ります。
オブジェクトのコンテンツ内にテクスチャを保持したい場合は、llAllowInventoryDrop関数を使ってオブジェクトのコンテンツへのアイテムドロップを許可し、テクスチャをコンテンツ内にドロップしてもらうようにするしかないですねぇ。
>Nortcardは、ちゃんとcontentsに入ったので
そう言われるとそうですね・・・。
アニメーションとかサウンドなどはどうなるんでしょうねぇ~。
レス遅くなりました、すみません(><;
そうですね、テクスチャをドロップして貼った場合は特定の面だけに貼られますので、取得する際には面の指定が必須です。
ドロップしたテクスチャは、オブジェクト側には存在しません。
あくまでもドロップした人のインベントリ内に残ります。
オブジェクトのコンテンツ内にテクスチャを保持したい場合は、llAllowInventoryDrop関数を使ってオブジェクトのコンテンツへのアイテムドロップを許可し、テクスチャをコンテンツ内にドロップしてもらうようにするしかないですねぇ。
>Nortcardは、ちゃんとcontentsに入ったので
そう言われるとそうですね・・・。
アニメーションとかサウンドなどはどうなるんでしょうねぇ~。
Posted by Miz at 2007年08月20日 16:58
Mizさん
こんにちは。
実は state_entry() の一番最初で llAllowInventoryDrop(TRUE); は実行してます。
ドロップする側はボード上(薄っぺらいBoxプリム)にテクスチャをドロップするようにしてるのですが、ドロップする側がcontentsフォルダを意識するような物ではないので、このボード自体のインベントリには入らないままとなりますね。
たぶん実用に影響は無いので、これでよしとしました。
オブジェクトの形式によって処理を分けなければならないとなると、あとあと物作りをするときに面倒なことになりそうです。
単純な疑問ですが、ドロップした人が違うSIMに移動してしまったらどうなるんでしょうね。誰かに協力してもらって実験してみます。
コメントをいただきありがとうございました。
こんにちは。
実は state_entry() の一番最初で llAllowInventoryDrop(TRUE); は実行してます。
ドロップする側はボード上(薄っぺらいBoxプリム)にテクスチャをドロップするようにしてるのですが、ドロップする側がcontentsフォルダを意識するような物ではないので、このボード自体のインベントリには入らないままとなりますね。
たぶん実用に影響は無いので、これでよしとしました。
オブジェクトの形式によって処理を分けなければならないとなると、あとあと物作りをするときに面倒なことになりそうです。
単純な疑問ですが、ドロップした人が違うSIMに移動してしまったらどうなるんでしょうね。誰かに協力してもらって実験してみます。
コメントをいただきありがとうございました。
Posted by sasapy at 2007年08月20日 19:01