ステートという、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ステートの場合