問題発生

年明けからかなり間が空いてしまいましたが、あけましておめでとうございますといまさらご挨拶をしてみたり。


オンセの方は途中いろいろありましたが順調に(?)セッション進行中です。
しかしいまさら自分のS具合に気付いてみたりして。
いや、GMってのはすべからくSなんだよ。たぶん。
……PLの皆様、こんなGMですみません。


で、その問題ですが。

問題

オンセでGMで、ということで、LimeChatを多重起動させ、片方はGMとして、もう片方はDiceとしてチャンネルに入室しています。なので、ダイススクリプト等はぜんぶDice側が持つ寸法です。
のですが。どういうわけかDice側がよく落ちるのです。
シナリオの進行にもよりますが、1回のセッションでダイスをふるのは数回、場合によっては1時間以上ダイスをふらない(したがってDiceは何にも発言しない)こともあります。
すると、落ちてしまうんです。
あんまりよく落ちるんで先日は同一窓で多重ログインしたのですが、落ちない代わりに発言者を間違うこと複数回。GMの代わりにダイスがしゃべるよ!(泣)

対処してみる

というわけで。
LimeChatのヘルプに例示されていた、「時報スクリプトを動かした上で窓を最小化して長時間動かしてみました。
こういうのです(ヘルプよりコピペ)↓

var interval = 10 * 60 * 1000; // 10分
var where = '#limechat';

function showTime()
{
  send(where, new Date().toString() + ' になりました');
  setNextTimer();
}

function setNextTimer()
{
  var now = new Date().getTime();
  var next = (Math.floor(now / interval) +1) * interval;
  setTimeout(showTime, next - now)
  //グローバル関数。
  //intervalミリ秒後に1度だけfunc(showTime)を呼ぶ。
}

function event::onLoad()
{
  setNextTimer();
}

途中のコメント行だけ私が勝手に挿入です。
スクリプト内にsetTimeoutなんてファンクションないのに動くよ!?」とか寝ぼけたことを思ったので、一応注意書き。

実験結果

今まで落ちたのがだいたいチャット開始後1〜2時間くらいだったので、とりあえず2時間ネットだらだらしてる裏で動かしてみましたが、これだと落ちませんでした。よしよし。
ちなみに時報を流すチャンネルにちゃんと入室しないでこのスクリプトを実行すると、なぜか時報が3回連続で流れます。……チャンネルに蹴られるんでしょうか。