=============================================================================== 【ソフト名】 ゲーム設定型ダイスボット「ボーンズ&カーズ(bcdice.pl)」Ver.1.1.3 【著作権者】 Faceless 【対応環境】 Perl 5.8以降の動作可能な環境。 Net::IRC 及び Math::Random::MT::Perl モジュールが必要 【開発言語】 Perl 5.10.0 【開発環境】 WindowsXP + P4 【 種 別 】 フリーウエア(修正BSDライセンスに準拠) 【転載条件】 修正BSDライセンス上で許可 【連絡先 及び 1次配布】 http://faceless-tools.cocolog-nifty.com/blog/ =============================================================================== 1.概要  Perlで動くIRCのダイスボットです。  ダイス機能とソードワールドのレーティング機能があります。  ゲーム設定によって成功度も自動判定します。  ベースのボットに機能を追加しまくって、すっかり多機能になってます。 2.使用方法  このプログラムはローカルで動かすことを前提にしています。  そのため、自分のパソコンにPerlがインストールされている必要があります。  WindowsはActivePerl(無料)を利用すると便利です。  http://aspn.activestate.com/ASPN/Downloads/ActivePerl/  ダウンロードしてインストーラをダブルクリック、画面の指示に従うだけ。  さて、Perlのインストールが終わったら、次はいくつかのモジュールが必要です。  なんとバージョン4.0からはPPM(Perl Package Manager)がGUIになりました。  スタートメニューのプログラムから「Active Perl」の所を探してみると「Perl Package Manager」があるはず。  これを立ち上げて、モジュールをインストールしてしまいましょう。  まずはアイコンの左端(灰色)を選んで「全てのモジュール」を表示させます。  次に、虫眼鏡アイコンの右にあるテキストボックスに「NET-IRC」と打ってリターンを押すと、NET-IRC関連だけ表示されるはず。  NET-IRCにもいくつか種類がありますが、とりあえず「NET-IRC」を選んで「Action」メニューから「Install」をクリック。  これでインストールマーカーが付きました。  お次にMath::Random::MT::Perlです。  これはメルセンヌ・ツイスターという乱数モジュールで、より自然に近い乱数が使えるようになる物です。  「Math-Random-MT」で検索したら、同じようにインストールマーカーを付けてください。  他にもインストールしたいモジュールがあれば、どんどんマークしてしまうと良いと思います。  マークが終わったら、「File」メニューの「Run Marked Action」でマークしたパッケージをインストールしてしまいましょう。 ---< 蛇足 >  メルセンヌ・ツイスターが不要な人は、プログラムを書き替えてメルセンヌ・ツイスターを使わなくすることも出来ます。  25行目の行頭に「#」を入れてコメントアウトしてください。 use Math::Random::MT::Perl qw(srand rand); # メルセンヌ・ツイスターを通常の乱数とコンパチで使う  ↓ #use Math::Random::MT::Perl qw(srand rand); # メルセンヌ・ツイスターを通常の乱数とコンパチで使う  これで一行まるまるコメント扱いになるので、メルセンヌ・ツイスターは使いません。  当然、Math::Random::MT::Perlのインストールは不要です。 ---< 蛇足終わり >  環境が整ったので、次はプログラムを動かしますが...その前に一度再起動しておきましょう。  OSによってはパスの設定が再起動しないと反映されない事があります。  プログラムをメモ帳やテキストエディタで開き、先頭部分にある「設定」の部分を自分のプレイ環境に合わせて変更します。  殆どの人は「いつも使うサーバーとポート、チャンネル」の指定で十分です。  IRCではサーバ群でNickがユニークな(他と重複しない)必要があるので、ニックネームも変更しておくと良いかもしれません。  後は実行するだけです。  拡張子plが関連づけされている場合はダブルクリックでも起動しますが、最初はオーソドックスにコマンドラインからの実行をお勧めします。  特に最初はモジュールのインストール忘れなどで起動しないことがありますが、コマンドラインから起動するとエラー表示されるので判りやすいからです。  コマンドラインの起動は 「スタートメニュー」→「ファイル名を指定して実行」→「cmd.exe」と入力して「OK」 が簡単です。  私はスタートメニューの「アクセサリ」から、「コマンドプロンプト」を右クリックしてツールバーにコピーしてしまっています。  コマンドラインが起動したら、プログラムが置かれている場所に移動して、  perl bcdice.pl  で起動するのが良いでしょう。  コマンドラインでの移動方法が判らない場合は「perl」と打ったら半角スペースを開けて、コマンドプロンプトの窓に「bcdice.pl」をドラッグ&ドロップするとずらずら〜っと長いファイル名(フルパス)で入力されますので、そのままリターンでOKです。  起動しない場合は perl -v とタイプしていろいろと表示されるかチェックしてください。  なにも表示されないようであれば、Perlのインストールが正しく行われていません。  パスの設定を見直すか、プログラムをPerl-bin以下に移動して実行しましょう。  それでも出来ない場合は、Perlのインストール方法がより詳しく書かれているサイトを探してPerlのスクリプトの動かし方を調べると良いでしょう。  また、サーバーなどはコマンドラインからも指定できます。  指定した場合、初期設定部分で指定した物よりも優先されます。  書式は -s サーバ設定 「-s(サーバ):(ポート番号)」 (ex. -sirc.trpg.net:6667 ) -c チャンネル設定 「-c(チャンネル名)」 (ex. -c#Dice_test ) -n Nick設定 「-n(Nick)」 (ex. -nFDiceCOC ) -m メッセージ設定 「-m(Notice_flgの番号)」 (ex. -m0 ) -g ゲーム設定 「-g(ゲーム指定文字列)」 (ex. -gCthulhu ) -e 拡張カード読込 「-e(ファイル名)」 (ex. -etestset.txt ) -i IRC文字コード 「-i(文字コード名称)」 (ex. -iISO-2022-JP )  となります。必要な部分だけ書いて、後の部分を省略してもかまいません。  順序は自由ですが、各引数の間は半角スペースが必要です。  また、eコマンドを使うときはカードファイルをこのスクリプトと同じフォルダに置いてください。 # サンプルに「testset.txt」を添付しました。読み込ませるとジョ−カー2枚のトランプが使えるはずです。  例)  perl bcdice.pl -sirc.trpg.net:6667 -c#OnlineTRPG -gCthulhu -nfDICE_CoC  プレイ環境ごとにバッチファイルを作っておくと便利です。  複数のチャンネルで利用するときは、「招待(invite)」すると飛んできます。  終了時はボットにTalkで「お疲れ様」と発言するとボットがサーバから切断して終了します。 3.ボットの利用法  1.ダイス    注意:イタズラ防止に、ダイスは一度に200個まで、面数は1000面体までに制限しています。   ・加算ロール (xDn)    発言中に半角で"個数dダイスの目+ボーナス"の形で記述することでダイスが    振られます。    ダイスロールを足したり引いたり、ボーナスを足したり引いたりも出来ます。    例)    2d6  3d10+1  4d8+2D6 3d6+2d10+4  6D4-3  6d6+4d8+6d10+3d20+4d4    3d6-1d4+1  2d6-1d6    本来、書き連ねるダイスの数に制限はありません(1行がIRCで扱える長さであること)し、    Perlで扱える数値の範囲内であれば、ダイスの最大値も任意ですが、イタズラ防止に    ダイスは一度に200個まで、面数は1000面体までに制限しています。(変更可能)    dは大文字でも小文字でもかまいません。    ただし、これらのダイスは「必ず半角で」記述してください。    ダイスロール結果を整数倍(自然数倍)することも出来ます。    例)    3d6*2  2d6*3-1d6+1    また、同じダイスを複数使うときには"(3+5)d6"というように()でくくっておくと    先に計算してから処理されるようにしてみました。    括弧内の算術記号は加算(+)、減算(-)、乗算(*)、除算(/)に対応しています。    また"((1+2)*3)"のように、入れ子構造になっていても計算されます。    これを「括弧内前処理」と呼ぶことにします。    例)    (2+3)d6-1+3d6+2   (2*3-4)d6-1d4+1   ((2+3)*4/3)d6*2+5    加算ロールの結果に条件式で目標値を指定して、ゲーム固有の成功度判定を    自動表示することができます。    現在は"<="と">="のみ対応。判定のためにはゲーム設定を行う必要があります。    成功度を必要としない成功か失敗のみの判定は、ゲーム設定無しでも出来ます。    例)    1d100<=50   1D100<=25   ・バラバラロール (xBn)    ダイスの値の和を使うのではなく「ある値以上のダイスの個数」を使うゲーム    (シャドウランなど)にも対応しました。    Dの代わりにBを使うことで、合計ではなくバラバラの値が表示されます。    ボーナスを記入することは出来ません。    例)    3b6   10b6   8B10    最後に条件を指定すると、条件にあうダイスがいくつあるのか数えます。    使える条件は、以上(>=)、以下(<=)、未満(<)、より大(>)、以外(<>)、同じ(=)    です。    ダイス同士の加算式のみ使えます。ただしダイスの面数は揃えてください。    条件の数値に計算式は使えません。ただし括弧内前処理は可能です。    例)    10b6>=4   3B6<=3   2b6+3b6>=4   (3-2)b6=6   ・個数振り足しロール (xRn)    ダイスをバラバラにロールして、その成功数の個数分さらにロールして成功度を    加算するロール(天羅万象など)にも対応しました。    振り足し回数はゲーム設定で対応になっています。(デフォルトは無限)    BのかわりにRを使うことで使用できます。    条件式は必須で、ダイスの括弧内前処理も使えます。    例)    3r6>=4   3R6=6   3r6+2r6<=2   (3+2)r6>=5   ・上方無限ロール (xUn)    ダイスをバラバラにロールして、その結果が上方無限境界値以上になると    再度振り、その値をダイス目に加えることができるロール(ロールマスターや    シャドウランなど)にも対応しました。    これは上方無限が成立し続ける限り振り続けます。    BのかわりにUを使うことで使用できます。    境界値は"[境界値]"で指定するほかにマスターコマンドで自動設定もできます。    条件式がない場合は、合計値が出るようにしました。    条件式をつけると目標値にいくつ達したかも表示します。    例)    3u6[6]   1U100[96]   3u6+5u6[6]>=7   (5+6)u10[10]>=8    (マスターコマンドで境界値登録してある場合は 3u6>=6 と記述できます。)   ・クローズドロール (Sダイスコマンド)    さらにこれらのダイスロールは他のプレイヤーに隠れてロールすることも可能    です。    ダイスコマンドの先頭に「S」をつけてロールすると本人だけに返事が    返ってきます。    マスターを設定していた場合、マスターにも自動的に結果が通知されます。    例)    S3D6   S3B6   S6R6>=5   S3u6+5u6[6]>=7  2.ゲーム固有の処理用コマンド   ・ソードワールドのレーティング (Kx)    "Kキーナンバー+ボーナス"の形で記入します。    ボーナスの部分に「K20+K30」のようにレーティングを取ることは出来ません。    また、ボーナスは複数取ることが出来ます。    レーティング表もダイスロールと同様に、他のプレイヤーに隠れてロール    することも可能です。    例)    K20   K10+5   k30   k10+10   Sk10-1   k10+5+2    クリティカル値の設定も出来ます。    クリティカル値は"[クリティカル値]"で指定します。    指定しない場合はクリティカル処理をしません。(防御時などの対応)    またタイプの軽減化のために末尾に「@クリティカル値」でも処理するようにしました。    例)    K20[10]   K10+5[9]   k30[10]   k10[9]+10   k10-5@9   ・『Chill』のストライク・ランク (SRx)    "SRストライク・ランク"の形で記入します。    ストライク・ランク・チャートに従って自動でダイスロールを行い、    負傷とスタミナロスを計算します。    ダイスロールと同様に、他のプレイヤーに隠れてロールすることも可能です。    例)    SR7   sr13   SR(7+4)   Ssr10   ・『デモンパラサイト』の衝動表 (URGEx)    "URGE衝動レベル"の形で指定します。    衝動表に従って自動でダイスロールを行い、結果を表示します。    ダイスロールと同様に、他のプレイヤーに隠れてロールすることも可能です。    例)    URGE1   urge5   Surge2   ・『ウォーハンマーFRP』のクリティカル表 (WHpx)    "WH部位 クリティカル値"の形で指定します。    部位は「H(頭部)」「A(腕)」「B(胴体)」「L(足)」の4カ所です。    クリティカル表を参照して結果を表示します。    例)    whH10   whA5   WHL4   ・『ウォーハンマーFRP』の命中判定 (WHx@t)    "WH(命中値)@(種別)"の形で指定します。    部位は脚の数を数字、翼が付いているものは「W」、手が付いているものは「H」で書きます。    「2H(二足)」「2W(有翼二足)」「4(四足)」「4H(半人四足)」「4W(有翼四足)」「W(鳥類)」となります。    命中判定を行って、当たれば部位も表示します。    なお、種別指定を省略すると「二足」、「@」だけにすると全種別の命中部位を表示します。(コマンドを忘れた時の対応です)    例)    wh60   wh43@4W   WH65@  3.四則計算(端数切捨て) (C(x))    経験値の計算などで四則計算を行うときにボットが計算してくれます。    括弧内前処理を利用しているので、数式は必ず括弧「()」で囲んでください。    もちろん入れ子にしても計算します。    例)    C(20+10)   C(10*5)   c(30-10/2)   c((10+10)*9)  4.カード機能    ゴーストハンターなどのようにプレイヤーにカードを配るシステム用の機能です。    通常カードを引くと、内容がプライベートメッセージで送られます。    オープンで引いた場合は通常メッセージとなります。    ┌─────────────┬──────────┐    │全カードのシャッフル   │c-shuffle c-sh   │    ├─────────────┼──────────┤    │カードを引く       │c-draw[n]      │    │ex. c-draw[5]       │ nは枚数(省略時1)  │    ├─────────────┼──────────┤    │オープンでカードを引く  │c-odraw[n]      │    │             │c-opend[n]      │    │ex. c-odraw[3]      │ nは枚数(省略時1)  │    ├─────────────┼──────────┤    │カードを選んで引く    │c-pick[c[,c]]    │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-pick[S1,H1,C1]   │      J1〜J4  │    ├─────────────┼──────────┤    │誤って捨てたカードを戻す │c-back[c[,c]]    │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-back[S1]      │      J1〜J4  │    ├─────────────┼──────────┤    │場に置いたカードを戻す  │c-back1[c[,c]]   │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-back1[S1]      │      J1〜J4  │    ├─────────────┼──────────┤    │カードを渡す       │c-pass[c[,c]]相手  │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │             │      J1〜J4  │    │ex. c-pass[J1]PL1     │(省略時はランダム) │    ├─────────────┼──────────┤    │場のカードを相手に渡す  │c-pass1[c[,c]]相手 │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │             │      J1〜J4  │    │ex. c-pass1[J1]PL1    │(省略時はランダム) │    ├─────────────┼──────────┤    │カードを出す       │c-play[c[,c]]    │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-play[C13,S8]    │      J1〜J4  │    ├─────────────┼──────────┤    │カードを場に出す     │c-play1[c[,c]]   │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-play1[C13,S8]    │      J1〜J4  │    ├─────────────┼──────────┤    │カードを捨てる      │  (talk可能)   │    │             │c-discard[c[,c]]  │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-discard[H1,D1]   │      J1〜J4  │    │  c-dis[H1,D1]     │カンマで複数指定可 │    ├─────────────┼──────────┤    │場のカードを選んで捨てる │c-discard1[c[,c]]  │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-discard1[H1,D1]   │      J1〜J4  │    │  c-dis1[H1,D1]     │カンマで複数指定可 │    ├─────────────┼──────────┤    │山札からめくってすぐ捨てる│c-milstone[n]    │    │             │c-mil[n]       │    │ex. c-milstone[3]     │ nは枚数(省略時1)  │    ├─────────────┼──────────┤    │カードを相手の場に出す  │c-place[c[,c]]相手 │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-place[C13,S8]PL1  │      J1〜J4  │    ├─────────────┼──────────┤    │場のカードを相手の場に出す│c-place1[c[,c]]相手 │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-place1[C13,S8]PL1  │      J1〜J4  │    ├─────────────┼──────────┤    │場のカードをタップする  │c-tap1[c[,c]]相手  │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-tap1[C13,S8]    │      J1〜J4  │    ├─────────────┼──────────┤    │場のカードをアンタップする│c-untap1[c[,c]]相手 │    │             │ cはH1〜13,D1〜13  │    │             │  S1〜13,C1〜13  │    │ex. c-untap1[C13,S8]   │      J1〜J4  │    ├─────────────┼──────────┤    │捨て札を山に戻す     │c-rshuffle c-rsh  │    ├─────────────┼──────────┤    │カードを相手に配る    │c-deal[n]相手    │    │ex. c-deal[3]PL1     │ nは枚数(省略時1)  │    ├─────────────┼──────────┤    │カードを見てから相手に配る│c-vdeal[n]相手   │    │ex. c-vdeal[3]PL1     │ nは枚数(省略時1)  │    ├─────────────┼──────────┤    │手札を見る        │c-hand       │    ├─────────────┼──────────┤    │PLの手札を見る      │c-vhand 相手    │    ├─────────────┼──────────┤    │カード配置を見る     │c-check       │    ├─────────────┼──────────┤    │全員の場札を捨てる    │c-clean       │    ├─────────────┼──────────┤    │カード配置復活の呪文   │c-spell[呪文]    │    │             │(省略時は呪文表示) │    │ex. c-spell        │※ゲーム設定に注意 │    └─────────────┴──────────┘    このボットはカードファイルを作成することで、独自カードを使うゲームにも対応可能です。    カードファイルの書き方はシンプルです。    カード1枚あたり1行で、カード番号とタイトルを「->」で繋げたテキストファイルを作るだけです。    文字コードはダイスボットに設定した文字コードと同じ物を使ってください。(デフォルトはShift-Jis)    ex. 143->【やられてたまるか!】FEA # エクセルでカード一覧を作成してCSV形式で書きだした後で、メモ帳やテキストエディタで読み込んで # 「,(カンマ)」を「->」に置換すると簡単です。    注意点は2つです。    ・カード番号は連番である必要はありませんが、ユニークな(重複しない)必要があります。     つまり、同じカードが3枚ある場合でも、番号は変えなければなりません。    ・タイトルに文字数制限はありませんが、表示が一行半角400文字までに制限してあります。     枚数を多く使うものでは、あまりに長くすると表示できなくなる可能性があります。  5.マスターコマンド    マスターコマンドはプライベートメッセージをダイスボットに送ることで、いくつかの設定を行うことが出来ます。   ・マスターの設定         "Set Master->マスター名"    マスターを設定しておくことで、いくつかの機能が追加・制限できるようになります。    プライベートメッセージで"Set Master"と入力すると、入力した人をマスター    として登録します。再度入力するとマスター登録が解除されます。    また、マスターを誰かに移行する時には"Set Master->ニックネーム"と「プライベートメッセージ(Talk)」を送ると、指定したニックネームの人がマスターに設定されます。    一度設定するとマスター以外からの変更を受け付けません。   ・隠しダイスの自動通知    マスター設定をするとマスターに自動的に結果が通知されます。   ・上方無限ロールの境界値設定   "Set Upper->境界値"    "Set Uppwer->境界値"で、上方無限ロールの境界値をあらかじめ設定しておくと、ロールの度に境界値を書かなくてもよくなります。    なお結果表示の時には、確認のため境界値も表示されます。   ・個数振り足しロールの回数制限設定   "Set Reroll->上限値"    "Set Reroll->上限値"で、回数上限値をあらかじめ設定しておくと、個数振り足しロール時の振り足し回数を制限できます。   ・ロールのソート設定   "Set Sort->モード番号"    "Set Sort->モード番号"で、ソートを設定しておくと、ロール時の表示をソート(昇順)できます。    ・mode0 (ソート無し)     デフォルトに設定してあります。    ・mode1 (加算のみソート有り)     昇順にソートして表示します。    ・mode2 (バラバラ系のみソート有り)     昇順にソートして表示します。    ・mode3 (加算とバラバラ系どちらもソート有り)     昇順にソートして表示します。   ・モード変更           "Set ViewMode->モード番号"    "Set ViewMode->モード番号"とプライベートメッセージを送ると表示モードを変更できます。    マスター設定すると変更がマスターからだけに制限されます。    ・mode0 (最終結果モード)     ダイスの合計ロール(xDn)やレーティング表ロールの時に、個々のダイスの目を表示しなくなります。    ・mode1 (ロール結果モード)     加算ロールや上方無限ロールの時に、ダイスロールごとの合計値のみ表示します。     デフォルトに設定してあります。    ・mode2 (ダイス目モード)     個々のダイスの目を全て表示します。     デバッグ用およびダイス目にこだわりがある(詳細表示された方が盛り上がる)人用。   ・送信モード変更          "Set SendMode->モード番号"    "Set SendMode->モード番号"とプライベートメッセージを送ると表示モードを変更できます。    マスター設定すると変更がマスターからだけに制限されます。    ・mode0 (msgモード)     ボットからの返事がmsg(通常のメッセージ)で送信されます。     Noticeによるメッセージ受信に不具合のあるIRCクライアントを使っている場合は、こちらで使用してください。    ・mode1 (noticeモード)     ボットからの返事がnotice(お知らせ)で送信されます。     他のボットやマクロが反応しないので安全です。     デフォルトに設定してあります。   ・レーティング表選択        "Set RatingTable->モード番号"    "Set RatingTable->モード番号"とプライベートメッセージを送るとレーティング表を変更できます。    マスター設定すると変更がマスターからだけに制限されます。    ・mode0 (旧版準拠)     キーナンバー31〜33のダイス12のレーティングが11になっている表を使います。     デフォルトに設定してあります。    ・mode1 (完全版準拠)     キーナンバー31〜33のダイス12のレーティングが10になっている表を使います。    ・mode2 (2.0ルールブックII準拠)     旧版にキーナンバー51〜100までが追加されています。   ・カードモード変更         "Set CardPlace->モード番号"    "Set CardPlace->モード番号"とプライベートメッセージを送るとカードモードを変更できます。    マスター設定すると変更がマスターからだけに制限されます。    ・mode0 (カード置き場無しモード)     カードを場に置く必要が無いゲームの時に。プレイするとすぐに捨て札になります。     デフォルトに設定してあります。    ・mode1 (カード置き場ありモード)     表にして場に出すと効果があるゲームなどに。プレイすると表にして場に出されます。     c-cleanかc-shuffleコマンドを使うと場のカードが無くなります。   ・呪文モード変更         "Set ShortSpell->モード番号"    "Set ShortSpell->モード番号"とプライベートメッセージを送ると呪文モードを変更できます。    マスター設定すると変更がマスターからだけに制限されます。    ・mode0 (通常呪文モード)     全員の手札を呪文にします。    ・mode1 (短縮呪文モード)     全員の手札を呪文にしますが、重複カードを削除して短く切りつめます。     デフォルトに設定してあります。   ・タップモード変更         "Set Tap->モード番号"    "Set Tap->モード番号"とプライベートメッセージを送ると呪文モードを変更できます。    マスター設定すると変更がマスターからだけに制限されます。    ・mode0 (タップ不可モード)     場札のタップを扱いません。     デフォルトに設定してあります。    ・mode1 (タップ可能モード)     場札のタップが可能です。   ・カードセット読み込み        "Set CardSet->ファイル名"    "Set CardSet->ファイル名"とプライベートメッセージを送るとカードセットを読み込みます。    マスター設定すると変更がマスターからだけに制限されます。    タップモードやカードモードなどは変更されませんので、新規にゲームモードをプログラム追加するのをお勧めします。   ・ゲーム設定           "Set Game->ゲーム識別名"    "Set Game->識別名"とプライベートメッセージを送ると、ゲーム設定を行うことが出来ます。    ・Cthulhu (クトゥルフの呼び声 および クトゥルフ神話TRPG)     クリティカル(決定的成功)、スペシャル、ファンブル(致命的失敗)の自動判定を行います。    ・Hieizan (クトゥルフ神話TRPG「比叡山炎上」)     大成功、自動成功、失敗、自動失敗、大失敗の自動判定を行います。    ・RuneQuest (ルーンクエスト)     クリティカル、エフェクティブ(効果的成功)、ファンブルの自動判定を行います。    ・Elric! (エルリック!)     貫通、クリティカル、ファンブルの自動判定を行います。    ・Chill (CHILL)     コロッサル、ハイ、ミディアム、ライト、ファンブルの自動判定を行います。     SRコマンドでストライク・ランクからダメージを自動計算します。    ・RoleMaster (ロールマスター)     上方無限ロールの境界値を96にセットします。    ・ShadowRun (シャドウラン)     上方無限ロールの境界値を6にセットします。    ・ShadowRun4 (シャドウラン第4版)     個数振り足しロールの閾値を6にセット、バラバラロールの目標値を5以上にセットします。     BコマンドとRコマンド時に、グリッチの表示を行います。    ・Pendragon (ペンドラゴン)     クリティカル、成功、失敗、ファンブルの自動判定を行います。    ・SwordWorld (ソードワールド)     自動的成功、成功、失敗、自動的失敗の自動判定を行います。(レーティング表も実装済み)    ・SwordWorld2.0 (ソードワールド2.0)     自動的成功、成功、失敗、自動的失敗の自動判定を行います。(0〜80までのレーティング表も実装済み)    ・Arianrhod (アリアンロッド)     クリティカル、ファンブルの自動判定を行います。(クリティカル時の追加ダメージも表示されます)    ・Infinite Fantasia (無限のファンタジア)     失敗、成功レベルの自動判定を行います。    ・WARPS (ワープス)     失敗、成功度の自動判定を行います。    ・DemonParasite (デモンパラサイト)     失敗、成功、効果的成功、致命的失敗の自動判定を行います。     urgeコマンドで衝動表をロールできます。    ・Gundog (ガンドッグ)     失敗、成功、クリティカル、ファンブルとロールの達成値の自動判定を行います。     nD9ロールも対応。    ・Tunnels&Trolls (トンネルズ&トロールズ)     失敗、成功、自動失敗の自動判定とゾロ目の振り足し経験値の自動計算を行います。     SAVEの難易度を「レベル」で表記することが出来ます。     例えば「2Lv」と書くと「25」に置換されます。    ・NightmareHunterDeep (ナイトメアハンター=ディープ)     加算ロール時に6の個数をカウントして、その4倍を自動的に加算します。     (出目はそのまま表示で合計値が6→10の読み替えになります)    ・Warhammer (ウォーハンマーFRP)     成功度、失敗度表示とクリティカル表の実装。     命中判定用コマンドは成功すると命中部位を表示します。     WHpxコマンドでクリティカル表が引けます。    ・PhantasmAdventure (ファンタズムアドベンチャー)     成功、失敗、決定的成功、決定的失敗の表示とクリティカル・ファンブル値計算の実装。    ・Chaos Flare (カオスフレア)     失敗、成功(差分値の計算も)の自動判定を行います。     カードセットをジョーカー2枚のデッキ2セットに拡張します。     復活の呪文を使うときは、先にゲーム設定を行う必要があります。    ・CthulhuTech (クトゥルフ・テック)     テストのダイス計算を実装。     成功、失敗、クリティカル、ファンブルの自動判定。     コンバットテスト(防御側有利なので「>=」ではなく「>」で入力)の時はダメージダイスも表示。    ・None (ゲーム設定解除)     ゲーム設定を解除します。     トランプは1セット+ジョーカー1枚になります。 4.更新履歴: Ver1.1.3 2008/12/03 ・CthulhuTechのテストダイス計算を実装。 Ver1.1.2 2008/11/20 ・レーティング処理のバグを修正。 Ver1.1.1 2008/11/17 ・追加カードセットの読み込み処理のバグを修正。 Ver1.1.0 2008/09/23 ・Perl5.10対策にコードを追加。  メルセンヌツイスタのモジュール名が変わったため、(使う側からみて)モジュール変更と同等という判断でVer1.1に移行。 Ver1.0.28 2008/09/12 ・IRCサーバとの通信に使う文字コードが出力時だけ'iso-2022-jp'に固定されていたバグを修正。 Ver1.0.27 2008/08/26 ・レーティング表でボーナスが複数指定すると読み飛ばすバグを修正。 Ver1.0.26 2008/08/21 ・ソードワールド2.0の威力表100までに対応。 Ver1.0.25 2008/08/06 ・ソードワールド2.0の威力表80までに対応。 ・レーティング表の指定を 0=旧文庫版, 1=完全版, 2=SW2.0ルールブック2に変更した。 ・ゲーム設定にソードワールド2.0を追加。 Ver1.0.24 2008/05/17 ・WHコマンドで未対応種別を入力したときに対応種別一覧で表示する部分が抑制されていたバグを修正した。 Ver1.0.23 2008/03/23 ・SR4モード時に、SR4用ボットのSコマンドをBに読み替えて処理する機能の実装。 ・終了時のメッセージを先頭で定義出来るようにした。 Ver1.0.22 2008/03/22 ・ゴーストハンターの恐怖判定用にPLの手札を見る機能(c-vhand)を実装した。 ・ボットのユーザ名がVerUpしてなかった不具合の修正。 Ver1.0.21 2008/03/22 ・ゴーストハンターの恐怖判定用にカードを見てから配る機能(c-vdeal)を実装した。 Ver1.0.20 2008/03/01 ・ナイトメアハンター=ディープ用判定表示を専用ダイス準拠にした。 Ver1.0.19 2008/02/23 ・カード機能の指定漏れを修正。 Ver1.0.18 2008/02/22 ・汎用カード用カードセットの文字コードを、ダイスボットの文字コードと一致させるようにした。 ・カード関係のコードを公開用に若干書き直して実装。使用上は変更無し。 ・カオスフレアを復活。 Ver1.0.17 2008/02/10 ・NHDのD6の目の読み替えロジックの制限強化。 Ver1.0.16 2008/02/03 ・WHpxコマンド及びWHx@tコマンドの表示抑制を強化。 Ver1.0.15 2008/02/03 ・私家版から未改修のカード機能を抜き出して暫定公開版とした。(Ver.No.は私家版と同一とした) ・カードを使うDeadlandsとカオスフレアのゲーム設定を削除。 ・ウェルカムメッセージ機能のコメントアウト。 5.謝辞  私がPerlのダイスボットを作り始めたきっかけは http://www.new-f.com/ にて「いつき」様より配布されているものの改造でした。  多くのコマンドや出力表示に名残があるはずです。  ボットを公開している「いつき」様に深い謝辞を表します。  いつき様がPerlBotを公開していなければ、私がPerlを覚えることは無かったでしょう。 6.著作権表記と免責事項  修正BSDライセンスに準拠します。 ===== 「ボーンズ&カーズ(bcdice.pl)」Copyright (c) Faceless All rights reserved.  ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、作者の名前またはコントリビューターの名前を使用してはならない。  本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。  著作権者もコントリビューターも、事由のいかんを問わず、損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 ===== 7.未公開版更新履歴  参考のため未公開版の更新履歴を記載しておきます。  使いながら継ぎ足し継ぎ足し作っているのが良く判るかと思います(滝汗 7.1.私家版更新履歴 Ver1.0.15 2008/01/18 ・衝動表の出力で、誰の処理かを併記するようにした。 Ver1.0.14 2008/01/03 ・WHFRPモードのWHコマンドで、ダイス目をひっくり返す処理を忘れていた。 ・同じくWHコマンドで、「部位指定無し=二足」「@のみ=全部位」にコマンド変更した。 Ver1.0.13 2008/01/03 ・起動オプションでIRCサーバの文字コードを変更出来るようにした。 Ver1.0.12 2008/01/01 ・ウォーハンマーモード時にWHコマンドで命中判定を出来るようにした。  この際に相手の種別を指定すると、命中部位を表示するようにした。 Ver1.0.11 2008/01/01 ・ウォーハンマーモード時に判定成功時に自動的に命中部位も表示するようにした。 Ver1.0.10 2007/12/09 ・Cコマンドの入力が拾えない時があるバグを修正。 Ver1.0.9 2007/12/02 ・ゲームモードにファンタズムアドベンチャーを実装。 Ver1.0.8 2007/11/30 ・ウォーハンマーFRPのクリティカル表処理を一部変更。 Ver1.0.7 2007/11/11 ・ゲームモードにウォーハンマーFRPを実装。 Ver1.0.6 2007/11/10 ・SR4モードにグリッチ処理を実装。 Ver1.0.5 2007/09/30 ・IRCのNick判定正規表現が不十分だったバグを修正。 Ver1.0.4 2007/09/23 ・カードを山札からめくってすぐ捨てる「c-milstone」コマンド実装。 Ver1.0.3 2007/09/16 ・カード関係の機能強化。  汎用カードも使用出来るようにした(カードセットの読み出しと番号と内容の対照ルーチンの実装) Ver1.0.2 2007/09/10 ・dxと記述した時に自動で「1dx」になるように置きかえるようにした。 Ver1.0.1 2007/08/30 ・NHDの結果表示を変更した。 Ver1.0.0 2007/08/16 ・コードをほぼ新規に書き直してリニューアル。 ・ナイトメアハンター=ディープとSR4に対応。 7.2.旧版「dicebot.pl」更新履歴 R4.1.9 2007/08/11 ・ダイスロールが規定の面数よりも大きかったときの処理を強化した。 R4.1.8 2007/06/20 ・カードコマンドのシークレット処理の出力を「最初にドローしたチャンネル」に限定。 ・オープンドロウのバグフィクス R4.1.7 2007/06/19 ・カードコマンドに復活の呪文の短縮機能を実装。 ・タップ処理、アンタップ処理を実装した。 R4.1.6 2007/06/11 ・カードコマンドにさらに機能追加。  相手の場に出したり、場札から場札に移動したりする操作を追加。 R4.1.5 2007/06/07 ・カードコマンドに機能追加。  場に出す事が出来るようになりました。またc-checkで場のカードを表示します。 R4.1.4 2007/04/03 ・デモンパラサイトの衝動表を公式エラッタ通りに修正。 R4.1.3 2007/02/11 ・レーティング表のクリティカル指定を「@x」でも出来るようにした。 ・T&T関係のバグを修正。 R4.1.2 2007/01/29 ・T&Tに対応し、ゾロ目で振り足しするようにした。 R4.1.1 2007/01/22 ・バラバラ以外のダイス表示もソートできるようにした。 R4.1.0 2007/01/21 ・バラバラダイス表示をソートする設定を付けた。 R4.0.7 2007/01/08 ・URGEコマンドの間にスペースを挟むミスを受け付けるようにした。 R4.0.6 2006/12/20 ・サーバがメッセージ・オブ・ザ・デイ(MOTD)を登録していない場合に対応した。 ・ゲーム設定に応じて、d66ロールを2B6に自動的に差し替えるようにした。 R4.0.5 2006/10/09 ・デモンパラサイトなどのnDロールを自動的にnD6に変換するようにした。 R4.0.4 2006/10/01 ・ガンドッグのnD9ロールのバグを修正。 R4.0.3 2006/09/22 ・ゲーム設定にガンドッグを追加。 R4.0.2 2006/09/13 ・トピック周りのBugFix R4.0.1 2006/08/20 ・各種ゲーム専用処理を該当ゲームに設定されていないときに暴発しないようにした。 ・Perlが5.8以降かチェックするようにした。 ・細かいBugFix。 R4.0.0 2006/08/19 ・多バイト文字モジュールをJcodeからEncodeに変更しました。  インストールがちょびっと楽になりました。 R3.1.1 2006/08/18 ・デモンパラサイトの衝動表を出力するコマンドを追加した。 R3.1.0 2006/08/06 ・加算ダイス処理の表示モード2の出力を変更。出力が変わったのでV3.1系に移行。 R3.0.22 2006/08/04 ・加算ダイス処理のコマンド判定部分を強化。 R3.0.21 2006/08/03 ・ダイス処理の機能強化(3.0.20も同じ) R3.0.19 2006/07/31 ・ダイスルーチン呼び出しのバグを修正。 R3.0.18 2006/07/22 ・上方無限ロールのバグを修正。 ・イタズラ防止にダイスの個数を200個まで、面数を1000までに制限した。 R3.0.17 2006/07/20 ・内部の変数を見直し。リファクタリングの時期か? R3.0.16 2006/07/15 ・オンラインヘルプメッセージを一部変更。 ・talkで「c-hand」コマンドを受け付けるようにした。 R3.0.15 2006/07/13 ・「デモンパラサイト」の成功判定に対応した。 R3.0.14 2006/06/24 ・「WARPS」の成功判定に対応した。 R3.0.13 2006/05/21 ・「比叡山炎上」の成功判定に対応した。 R3.0.12 2006/04/16 ・カードを間違って捨てた(プレイした)時の「待ったコマンド(c-back)」を追加しました。  捨て札からカードを回収できます。 R3.0.11 2006/04/11 ・括弧内前処理で「最初の値がマイナスだとプラスと評価されてしまうバグ」を修正。 R3.0.10 2006/01/18 ・トランプセットの設定を戻す機能入れるの忘れていたので追加。(笑 R3.0.9 2006/01/16 ・ゲーム設定に「カオスフレア」を実装。  トランプを2セットに拡張して使用する。 ・トランプ機能のシャッフルに「捨てた枚数が0にならない」バグを発見。修正。 R3.0.8 2005/12/31 ・カード配置の復活の呪文を実装。 R3.0.7 2005/12/24 ・カードを渡す時に、カードを指定しないとランダムに1枚配るようにした。 R3.0.6 2005/12/15 ・細かいバグフィクス。 ・カードを渡す相手の指定を大文字小文字の区別なく受け付けるようにした。 R3.0.5 2005/12/15 ・現在のカードの枚数配置を出力する機能を追加。 ・カードを一枚渡す機能を追加した。 ・カードをデッキから選んで引く機能を追加した。 ・カードを誰かにn枚配る機能を追加した。 R3.0.4 2005/11/24 ・Chillのストライク・ランクからダメージを求める機能を追加。 R3.0.3 2005/11/21 ・ソードワールドのレイティング表が、完全版が誤植という公式発表があったのを確認。  デフォルトを文庫版準拠とした。 R3.0.2 2005/11/06 ・正規表現の扱いを変えて若干速度向上。 ・括弧内演算の数値がゼロになると正しく動作していない不具合を修正。 R3.0.1 2005/10/27 ・他者がキックされたときに、その部屋にメッセージを出せないバグがあったので修正。 R3.0.0 2005/10/24 ・Jcode.plをJcode.pmのモジュールに置き換えることにした。 R2.2.7 2005/09/02 ・レーティング表が間違っている箇所を数カ所発見。修正。(文庫版初版と完全版初版で相互参照、確認) ・レーティング表が完全版以降変わっているのをベーシックでも確認、  誤植じゃないのが判ったので完全版準拠を正式に採用し、設定で古いレーティング表も選べるようにした。 R2.2.6 2005/09/01 ・クトゥルフ神話TRPGの成功度判定を修正。  決定的成功と致命的失敗は武器技能使用時にしか使われないので、 決定的成功の時もスペシャルの表示を行うようにした。 R2.2.5 2005/08/29 ・加算ダイスロールで条件式を入れたときに常に成功失敗を表示するようにした。 R2.2.4 2005/08/23 ・理論上、ダイスの次の目が計算で予測出来る(=完全にランダムにならない)ので、 発言の度に捨てダイスを振ってちょっとだけランダム性を向上させました。 R2.2.3 2005/08/11 ・出力が長くなりすぎる結果を単純に廃棄するとクリティカル等で奇跡的に ダイスが回ったときの結果が出ないことに気が付きました。  というわけで制限を400文字にすると同時に、回りすぎたときは短縮メッセージを 出すように改造。 R2.2.2 2005/08/10 ・出力が長くなりすぎるとIRCサーバから落とされる事が判明。  上限が全角220文字なようですので、ボットは出力が200文字を超える入力を イタズラとみなして廃棄する事にしました。 R2.2.1 2005/08/08 ・MuriChatでNoticeが短時間に連続すると受け取れなくなるバグがあることを発見。  表示モード変更でNoticeとPrivmsgを変更できるようにした。  表示フォーマットもダイスボットで拾いにくい物に再度変更。 R2.2.0 2005/08/08 ・表示メッセージをすべてnoticeで出力、すべてのボットやマクロで出力を拾えないようにした。  フォーマットは使い慣れた以前の物に戻した。(笑 R2.1.0 2005/08/08 ・表示メッセージを変えて、ボットの出力したダイスコマンドを別のボットで拾えないようにした。 R2.0 2005/08/07 ・乱数の発生に「メルセンヌ・ツイスター」というパッケージを採用しました。  これで乱数が飛躍的に自然っぽくなってるはずです。  必要なパッケージが増えたのでVerを2に移行。 R1.35 2005/07/07 ・jcode.plの使い方を変更。  いい加減今のJcodeとかに移行しないといけない気もしますが...。(滝汗 R1.34 2005/06/21 ・kick時に現在入室しているチャンネルリストを処理するルーチンを実装。 R1.33 2005/06/08 ・個数振り足しロールの振り足し回数上限を設定可能にした。(無限も可能) R1.32 2005/04/24 ・レーティング表のボーナスを複数表記可能にした。 R1.31 2005/04/17 ・引き算ルーチンのバグフィクス。 R1.30 2005/03/31 ・無限のファンタジアの成功度レベル計算に対応。 R1.29 2005/03/29 ・四則計算代行を追加。 R1.28 2005/03/27 ・アリアンロッドのクリティカルとファンブル表示に対応。 R1.27 2005/03/19 ・ソードワールドのレーティングロールで表記が不適切だったのを訂正。(自動的失敗がファンブルと表記)。 ・ダイスロール判定にSwordWorldの自動的成功、自動的失敗を追加。 ・バラバラロール時のゲーム固有の成功度判定処理を無くした。 R1.26 2005/03/10 ・マスターのナレーション開始記号「<」が2連続したら終了記号「>」のタイプミスと突っ込みいれる機能搭載。 R1.25 2005/02/24 ・ソードワールドのレーティング表に[]でクリティカル値を設定できるようにした。 R1.24 2005/02/23 ・括弧内演算の除算処理を改善。  除算と乗算をまとめておいて最後に計算するようにした。 R1.23 2005/02/17 ・括弧内演算に除算処理を追加。  ただし逐次処理なので除算と乗算が連続する場合は乗算を先に記述しないと端数切捨ての誤差が出る。 R1.22 2004/11/19 ・ダイスの判定処理の順序を変更して厳密にした。 R1.21 2004/11/10 ・ゲーム設定に「Pendragon」追加。 R1.20 2004/10/27 ・隠しダイスのコマンド変更。ロールしたのが判っても結果が他に判らないようにした。  マスター以外が使うことは皆無なので、宛先指定も削除した。  なるべくTalkで打ち込むコマンドを減らすように考慮中。  (チャンネルごとに独立してカードセットやルールセットを使えるように拡張するときにジャマになる) R1.19 2004/10/26 ・Deadlands用のダメージ算出ルーチンを追加。 R1.18 2004/10/24 ・ゲーム設定に「Deadlands」を追加。 ・成功度表示が出るので、ダイス目の表示でヒットしたものを()で囲むのをやめた。 R1.17 2004/10/20 ・チャンネルを退出するキーワードを設定。  キーワードを発言することでBotをそのチャンネルからだけ退出させることが  できます。(マスター登録するとマスターのみ可能) ・ゲーム設定に「Elric!」を追加。 R1.16 2004/10/18 ・結果表記を日本語にした。(英語の方がカッコよかったかな?) ・結果表示のエクスクラメーション(!)を削除。 ・加算ロールを表示モード2で表示すると[]で表示されるために表示抑制が  上手くかかってなかったのを修正。 R1.15 2004/10/18 ・カードのドローを複数枚一度に引けるように機能追加。 ・もともとのドロールーチンの記述ミスを修正。  (元のボットの作者、文字列比較と数値比較よく間違う...) ・レーティング表(Rating)の記述が間違っていた(Lating表記)になっていたのを  修正して、コマンドをKに変更。 ・メッセージの全参加窓表示が上手く機能していなかったのを修正。  (Unicode->Jis変換忘れ) R1.14 2004/10/17 ・Joinを監視してウエルカムメッセージを出すようにした。  (非アクティヴ時に来て沈黙している人の発見用) ・バラバラにロールする部分をサブルーチン化。  (将来的に最大値、最小値、1の個数のカウントも考慮) R1.13 2004/10/14 ・ゲーム設定に「ロールマスター」と「シャドウラン」追加。 ・ゲーム設定で対象システムを「none」と指定すると解除できるようにした。 ・バラバラロールにも成功度自動判定をつけた。 R1.12 2004/10/13 ・ゲーム設定を実装。現在は「クトゥルフの呼び声」「ルーンクエスト」「CHILL」の  3種類。 ・ゲーム設定を行うと加算ロールで「<=目標値」で、目標値指定して成功度判定を  行うことが出来ます。 R1.11 2004/09/29 ・inviteの動作が揺れるので安定化してみた。  (NET::IRCでArgsで戻る部屋名が配列になる場合がある) R1.10 2004/09/27 ・カードを裏にしたまま捨てる機能実装。 ・inviteに対応。呼べば部屋にやってきます。 ・modeとカードのストックを部屋ごとに管理する必要あるかな? R1.9 2004/09/24 ・ViewModeを3パターンにして「ロール結果モード」を実装。普段はこれで十分かと。(笑 R1.8 2004/09/24 ・()内演算を加減算の他に乗算も使えるようにした。 ・加算ロールでダイスロールの結果に乗算できるようにした。(xDn*mの実装)  これでダイスの数をn倍したロールとダイスロール結果のn倍の両方に  対応したことになります。 R1.7 2004/09/23 ・上方無限ロール「xUn」実装。 ・段々複雑になってきたので、いっそのこと「ゲームごとのモード変更」で  セットの切り替えやった方が早いような気がしてきた。(^^;  「天羅万象モード」とか「ヴァンパイアモード」とかってね。 ・()内に加減算の式を書くと先に計算してからダイス処理をするようにした。 R1.6 2004/09/22 ・マスターの設定を実装してみた。 ・mode切り替えを実装。mode0で結果のみの表示。mode1で現在のデフォルト。 ・成功数分のリロールありのロール「xRn」を実装。  そのうち1のルールや6のルールあるロールも実装か。(--; R1.5 2004/09/21 ・加算ロールの計算部分を強化して、ダイスの加減算を実装。  それに伴って、ボーナスの加減算が先頭以外のどこにでも記述可能になった。 R1.3-4 2004/09/20 ・細かいロジックのバグフィクス。 ・隠しダイスをプライベートメッセージで振れるようにしてみた。 R1.1 2004/09/19 ・バラバラロールの条件式拡張。 ・ダイス目を表示すると空白をあけると冗長になるので、ダイス目の間の空白を削除。 ・結果表示を他の書式と揃えた。 R1.0 2004/09/18 ・ダイスロールの結果しか見えないのに不満が出たので、それぞれのダイス目を  表示するように改造した。 ・バラバラのダイスの時には、条件判断でヒット数が出るようにした。 その原型 http://www.new-f.com/ にて配布されているPerlのダイスボット。