nR10ロール(1):書いてみた
セッションの方がとりあえず戦闘まで終わりました。現在エンディングが進行中です。とか言ってるうちにきっと終わります。
……かなりアレな戦闘になってしまいましたが、そして一人帰ってこれなくなりかけましたが、一応終われました。
PLの皆様には多大なる感謝とお詫びをしつつ。
書いてみた
セッションが一段落ということで、こちらも再開。
夢と妄想を垂れ流すのもいいけど、とりあえずDX2nd基本のRダイスくらいは組もうよ、と。
いろいろ理屈並べ立てようかと思いましたが、その間にコード書いちゃいました。
function event::onChannelText(prefix, channel, text) { if (text.match(/#\d+R\d+/ig)){ //該当文字列を配列matchedTextに格納 var matchedText = text.match(/#(\d+)R(\d+)/i); //サブファンクションに飛ばす var achieveValue = renegadeDice(matchedText[1],matchedText[2], channel, prefix.nick); send(channel, prefix.nick + 'の達成値は' + achieveValue ); } } function renegadeDice(diceNumber, critNumber, channel, nickName) { var diceRolled = 0; //ダイス1個振った結果 var faceDice = 10; //ダイスの面数(DXなので10面で固定) var criticalDice; //クリットしたダイスの個数をカウント var preAchieveValue = 0; //プレ達成値 var achieveValue = 0; //達成値 var achieveString = ""; //達成値が出るまでの過程の文字列 do { //変数のリセット criticalDice = 0; preAchieveValue = 0; achieveString = nickName + ':' + diceNumber + 'R' + critNumber + '=['; //ダイス振るループ開始 for (var i = 0; i < diceNumber; i++){ //ダイス振る diceRolled = parseInt(Math.random() * faceDice)+ 1; if (diceRolled >= critNumber){ criticalDice++; preAchieveValue = 10; } else if (preAchieveValue < diceRolled){ preAchieveValue = diceRolled; } achieveString += diceRolled + ','; } //一通り振ったところで結果を格納 achieveValue += preAchieveValue; achieveString = achieveString.substr(0, (achieveString.length - 1)) + ']=' + achieveValue; if (criticalDice !== 0){ achieveString += ' Critical!!'; diceNumber = criticalDice; } //結果を出力 send(channel, achieveString); } while (criticalDice !== 0); return(achieveValue); }
これの実行結果は以下の通り。
00:52 (ten-you) #12r10
00:52 (ten-you) ten-you:12R10=[6,6,2,4,9,7,7,4,9,7,3,3]=9
00:52 (ten-you) ten-youの達成値は9
00:45 (ten-you) #2r8
00:45 (ten-you) ten-you:2R8=[10,7]=10 Critical!!
00:45 (ten-you) ten-you:1R8=[8]=20 Critical!!
00:45 (ten-you) ten-you:1R8=[6]=26
00:45 (ten-you) ten-youの達成値は26
わざわざサブファンクションに飛ばしているのは、後日サブファンクション部分だけ「いぬい」に移植することをたくらんでいるからです。
あとは「途中経過表示のON、OFF」を選べるスイッチ(?)とか付けといて、必要な時だけ出力したいところ。
……ぬー、サブファンクション呼び出し時にchannelやnickNameを省略したら出力しない、とかすれば余計な引数増やさないでいいか。