ステート
ステートという、LSLの状態を保持する便利な文法があります。 if文を使えば、ステートを使わなくても同じ処理を実現することは可能ですが、 スクリプトが見やすくなる、整理されるのでご紹介しておきます。
下記スクリプトでは、タッチするたびに日本時間ステート(japantime)とグリニッジ標準時間ステート(gmttime) と状態を変え、交互に表示します。見慣れたtouch_startなどのイベント処理がステート毎にコードを書くことが できるので長いスクリプトを書くときには非常に便利です。 ステートの変更は、「state ステート名;」と書きます。
default { state_entry() { state japantime; } } state japantime{ touch_start(integer total_number) { integer now =(integer)llGetGMTclock()+ 9 * 3600; llOwnerSay("JAPANhour=" + (string)(now / 3600) ); llOwnerSay("JAPANminute=" + (string)((now % 3600) / 60) ); llOwnerSay("JAPANsecond=" + (string)(now % 60) ); state gmttime; } } state gmttime{ touch_start(integer total_number) { integer now =(integer)llGetGMTclock(); llOwnerSay("GMThour=" + (string)(now / 3600 )); llOwnerSay("GMTminute=" + (string)((now % 3600) / 60) ); llOwnerSay("GMTsecond=" + (string)(now % 60 )); state japantime; } }
llGetGMTclock関数 現在時刻をグリニッジ標準時(世界標準時)で取得します。日本は9時間の時差があります。
japantimeステートの場合
gmttimeステートの場合