2014/04/30

10日おきに通知する

ひさびさのスクリプトネタです。
個人的に10日おきに通知がほしいことがあって、そういうのを作りました。
毎月10、20、30日にメッセージを送ります。
2月は30日がありませんが、代わりに3月1日に送ります。

仕組みは、タイムスタンプを調べて、日付の1の位の数が減ると通知します。
10日おきに「9」→「0」となって1の位の数が減ることを利用するのです。
default {
  state_entry() {
    llSetTimerEvent(TimeCycle);
      // 一定時間ごとに
  }
  timer() {
    integer date1 = (integer)llGetSubString(llGetTimestamp(),9,9);
      // タイムスタンプから数字をとりだす;書式は"2014-04-30..."
    if (date1 < Date1) llInstantMessage(llGetOwner(),Message);
      // 前回より減ったらメッセージを送信
    Date1 = date1; // 数字を記録
  }
}
2月の終わりでは、2「8」(閏年は「9」)日から3月「1」日に変わるので、やはり1の位の数が減ります。
他の月では、30日にメッセージを出したあと、月末3「0」または3「1」→翌月「1」となって、数字は減りません。

タイムスタンプは世界標準時間なので、日本時間やSL時間とは時差があります。
また、もし、2月でも月末までに通知が必要な場合などでは、別の条件を考えないといけません。
というわけで、このスクリプトは「だいたい10日おき」と条件がゆるいときにしか使えないかも(^^;;