ベネチアSIM のイベントのとき いつも宣伝看板をさげた飛行船を飛ばしていますが 何度かその時間に来れないことがあったので 事前に用意しておけばその時間に自動で飛ばせるようにしました。
やりかたは:
- 専用の箱をイベント会場の近くに置いて
- 箱に宣伝用画像を貼れば(Edit > Texture > Texture)準備完了!
(…準備ができると写真のようにミニ飛行船が出ます) - イベント開始時刻になれば飛行船が自動で飛び始め
- 終了時刻で飛行船も箱も消えます
開始と終了時刻はほとんど 22:00-24:00(JST) なのであらかじめ箱の説明のところに書いてあります。
もしも違う時間に開催されるならこれを書き直す(Edit > General > Description)だけでOK!
準備は超簡単なので誰でもできそうです。
イベントスタッフの人に渡しておけば当日 lovemax がいなくても飛行船が飛ばせるのでこれはサボれる!
飛行船を出したり消したりするきっかけを決めるスクリプトはこちら:
integer isNowArrive(integer time) { // TRUE: 指定時刻 time <= now < time+Margin に今到達した? integer now = getNowMin(); if (time <= now && now < time+Margin) return TRUE; else return FALSE; } integer getNowMin() { // time: "2022-06-09T00:01:43..." UTC → return 541 JST(+9:00) string time = llGetTimestamp(); // UTC 協定世界時 list info = llParseString2List(time,["T"],[]); // 日付と時刻を分ける time = llList2String(info,1); // UTC integer now = time2Min(time) + OffsetMin; // 分 JST 日本標準時 if (28*60 <= now) return now - 24*60; // 28時以降は早朝 4時〜 else return now; } integer time2Min(string time) { // time: "01:15:58" → return 75 分; 秒は無視 list info = llParseString2List(time,[":"],[]); integer hour = (integer)llList2String(info,0); integer min = (integer)llList2String(info,1); if (hour<0) min *= -1; // 時間がマイナスのときは分もマイナス return 60 * hour + min; }
時刻は全部分に換算して比較してます。
現在時刻は llGetTimestamp() で UTC (wikipedia 協定世界時) を調べて 時 x 60 + 分 に JST (wikipedia 日本標準時) オフセットの +9 x 60 を足します。
指定する時刻が真夜中以降の場合は 例えば正規の書き方 "00:30" ではなく "24:30" のように前日から続く深夜の書き方で前後を比べやすくしてます。
(…でも 28時以降はさすがに次の日の早朝 4時〜扱いに…)