リザレクトもするスクリプト

シーンインするスクリプトからの続きで、リザレクトでも反応するように書き加えます。


リザレクトはレベルのあるエフェクトなんで、PCによって使用するダイス数が違う可能性があります。が、
「リザレクトのレベル上げる人は普通いないよ」
という力強いお言葉をDX歴長い面子から賜ったので、全員1レベル決めうちで作ってみようと思いますw。
……「1レベルでも侵蝕率によってはレベル上がるんじゃね!?」と思ってあわててレコードシート見て、リザレクトが出来る100%未満までは侵蝕率によるレベル上昇がない、と気づいたのは内緒。

「#リザレクト」と入力するとダイスを振るようにする

前回からの変更点はこんな感じ。

  1. else if{}を加える。
  2. リザレクトの際のNOTICEコマンドで送る文字列を「 'さんのHPが ' + intDice + ' 回復、侵蝕率が ' + intDice + ' %上昇しました'」に変更

リザレクトは回復したHP分だけ侵蝕率が上がるので、ダイスを振る回数はシーンインと変わりません。
というわけでこんな感じに↓

function event::onChannelText(prefix, channel, text)
{
    var rolledDice = parseInt(Math.random() * 10 )+ 1;
    if (text.match(/#シーンイン/)) {
      send(channel, prefix.nick + 'さんの侵蝕率が ' 
            + rolledDice + ' %上昇しました');
    } else if (text.match(/#リザレクト/)) {
      send(channel, prefix.nick + 'さんのHPが ' + rolledDice + 
            ' 回復、侵蝕率が ' + rolledDice + ' %上昇しました');
    }
}


実行結果はこんなかんじ。

13:03 (ten-you) #リザレクト
13:03 (ten-you) ten-youさんのHPが 3 回復、侵蝕率が 3 %上昇しました


最初は、

function event::onChannelText(prefix, channel, text)
{
    if (text.match(/#シーンイン/)) {
      var rolledDice = parseInt(Math.random() * 10 )+ 1;
      send(channel, prefix.nick + 'さんの侵蝕率が '
                         + rolledDice + ' %上昇しました');
    } else if (text.match(/#リザレクト/)) {
      var rolledDice = parseInt(Math.random() * 10 )+ 1;
      send(channel, prefix.nick + 'さんのHPが ' + rolledDice + 
            ' 回復、侵蝕率が ' + rolledDice + ' %上昇しました');
    }
}

と書くのがスジかなあと思ったのですが、1つのスクリプトの中で同じ変数を何回も宣言するのはいかにもおかしい感じがしたので、冒頭の1回でまとめてしまいました。
今後拡張していく際に邪魔になる可能性もあるのですが、その時はその時で。

ここで今日の疑問

文字列連結でスクリプトの1文が長くなった時、VBAだと「&_」でつなぐけど、JavaScriptでこういうのないんでしょうか?

↑に対する回答

■ 文
(中略)
ひとつの文を複数の行に分けて記述することもできます。

JavaScriptの基本文法 - とほほのJavaScriptリファレンス

だそうで。以下がその例示。

xx =
   5;
yy =
   3;
window.alert(xx + yy);


というわけで上のスクリプトにも改行を加えました。
とほほ様様です。