シーンインした時に侵蝕率を計算するスクリプト(3)

先日、「シーンイン」と「リザレクト」のスクリプトを実プレイで使ってもらいました。
みんな快く使ってくれまして、反応も上々。うれしいです。
……自PCの時だけいよーに高い数値を出しよりまして、まだミドル終わってないというのにもうじき80%超えそうですが。これでクライマックスの衝動判定したら確実に100%超えますが。
しかも今度のGMは戦闘きつそうです。そして自PCはキュマピュアの典型的白兵型。……2倍振り、場合によっては3倍振りも覚悟しとこう。


さて、(2)からの続きです。
紆余曲折ありーの、いまだにいまいち理解し切れてないーのありますが、一応当初の目的どおりの進行なのでこのまま邁進しますw
というわけで今日は大詰め、現在侵蝕率に1d10プラスした値を出力です。

現在侵蝕率に1d10足した結果を整形して表示する

こんな感じで整えてみました。

  1. リザレクトもするスクリプト - ten-youの日記から1d10振る命令の行をコピペ
  2. 1d10の結果、現在侵蝕率、現在侵蝕率に1d10を足したものをそれぞれ変数に格納
  3. それぞれの変数、およびスクリプトを呼び出した参加者のニックを整形してNOTICEコマンドで出力

書き換えた結果が以下に↓

function event::onChannelText(prefix, channel, text)
{
	if (text.match(/#シーンイン\+[0-9]+/)) {
		//配列arrMatchedTextを定義。初期値としてマッチングしたデータを格納。
		var arrMatchedText = text.match(/#シーンイン\+[0-9]+/);
		//現在侵蝕率rateErodeOldを定義。初期値としてarrMatchedText[0]を数値型に変換したものを格納
		var rateErodeOld = parseInt(arrMatchedText[0].match(/[0-9]+/));
		
		//1d10をふり、結果をrolledDiceに格納
		var rolledDice = parseInt( Math.random() * 10 ) + 1;
		//現在侵蝕率rateErodeOldと1d10の結果rolledDiceを足した結果をrateErodeNewに格納
		var rateErodeNew = rolledDice + rateErodeOld;

		//全部の結果を表示
		send(channel, prefix.nick + 'さんの侵蝕率が1d10=(' 
			+ rolledDice + ')+' + rateErodeOld + '= ' 
			+ rateErodeNew + ' %になりました'); 
	}
}

実行結果はこんな感じに↓

09:10 (ten-you) #シーンイン+60
09:10 (ten-you) ten-youさんの侵蝕率が1d10=(7)+60= 67 %になりました

よしよし。

他のスクリプトとまとめる

せっかくなので、シーンインやリザレクトするスクリプトと一緒にしました。

function event::onChannelText(prefix, channel, text)
{
    //1d10をふり、結果をintDiceに格納
    var rolledDice = parseInt( Math.random() * 10 ) + 1;

    //シーンイン+数値という文字列が発言にあったら、現在侵蝕率に1d10を足して表示
    if (text.match(/#シーンイン\+[0-9]+/)){
        //配列arrMatchTextを定義。初期値としてマッチングした配列データを格納。
        var arrMatchText = text.match(/#シーンイン\+[0-9]+/);
        //今までの侵蝕率rateErodeOldを定義。初期値としてarrMatchText[0]を数値型に変換したものを格納
        var rateErodeOld = parseInt(arrMatchText[0].match(/[0-9]+/));
		
        //今までの侵蝕率rrateErodeOldと1d10の結果rolledDiceを足した結果を最新侵蝕率rateErodeNowに格納
        var rateErodeNow = rolledDice + rateErodeOld;
	
        //全部の結果を表示
        send(channel, prefix.nick + 'さんの侵蝕率が1d10=(' 
            + rolledDice + ')+' + rateErodeOld + '= ' 
            + rateErodeNow + ' %になりました'); 

    }

    //シーンインで侵蝕率がいくつ上昇したかを表示
    else if (text.match(/#シーンイン/)) {
        send(channel, prefix.nick + 'さんの侵蝕率が ' + rolledDice + ' 上昇しました');
	}

    //1Lvリザレクトをした結果を表示
    else if (text.match(/#リザレクト/)) {
        send(channel, prefix.nick + 'さんのHPが ' + rolledDice
            + ' 回復、侵蝕率が ' + rolledDice + ' 上昇しました');
    }
}

で、実行結果。

09:16 (ten-you) #シーンイン+60
09:16 (ten-you) ten-youさんの侵蝕率が1d10=(6)+60= 66 %になりました
09:16 (ten-you) #シーンイン
09:16 (ten-you) ten-youさんの侵蝕率が 3 上昇しました
09:16 (ten-you) #リザレクト
09:16 (ten-you) ten-youさんのHPが 9 回復、侵蝕率が 9 上昇しました

正規表現のあたりにかなりの不安を残すものの、とりあえずいったん終了。
次はまた別のことをやってみたいと思います。

追記(08-12-02)

スクリプトの一部を書き換えました。理由は後日。