-
Notifications
You must be signed in to change notification settings - Fork 185
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
寄稿:ゲームシステムの追加「サイバーパンクRED」 #540
Conversation
Codecov Report
@@ Coverage Diff @@
## master #540 +/- ##
==========================================
+ Coverage 95.57% 95.60% +0.03%
==========================================
Files 323 325 +2
Lines 18874 19028 +154
==========================================
+ Hits 18039 18192 +153
- Misses 835 836 +1
Continue to review full report at Codecov.
|
素早い寄稿お疲れ様です!該当ルールブックを所持していないので、誤りがあったらすいません。 BCDiceでは、
足し算はArithmeticEvaluator.evalを使うか、Command::Parserでいい感じにできるかと思います。 単純に数字を取るところは、シンプルにしたほうが見通しがよいかと思います。
|
CPx>=t にまとめる形と、 Command::Parser を使うように修正しました。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
見通しが良くなったかと思います!
また一部コメントつけました。好みが分かれる箇所もあるかと思うので、適宜無視してください。
|
||
result.text = '' | ||
result.text += "(#{dice_cnt}D#{dice_face}" | ||
result.text += "+#{modify_number}" unless modify_number.zero? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
modify_numberがマイナスになることは無いでしょうか?
負の可能性があるなら、Format.modifier
がいい感じに処理してくれます。
result.text += ' > 失敗!' | ||
end | ||
|
||
return result.text |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
result
自体を返す必要があります。また、テストケースもクリティカル、ファンブルに合わせて修正が必要です。
HELP | ||
|
||
# 判定の正規表現 | ||
CP_RE = /^CP(?<ability>\d+)?(?<modifier>[+-]\d+)?(?<target>>=\d+)?/.freeze |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
定数が外部から参照できてしまうので、多分private_constantにする必要があります。
好みですが、定数の近くにコメントを書いておくのが意外と単純です。
dice.first == 10 # critical
def eval_game_system_specific_command(command) | ||
debug("eval_game_system_specific_command begin string", command) | ||
|
||
case command |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cp_roll_resultやini_roll_resultの戻り地を、処理できなかった際はnilとすることで、全体が単純になります。
cp_roll_result(command) || ini_roll_result(command) || roll_table(command, TABLES)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@saronpasu GenKuzumochiさんが指摘している方式にしてください。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ありがとうございます。いくつかコードの指摘をしましたので、修正お願いします。
また、表についてですが、明らかな誤植がある2件は今回は追加せずに削除してください。誤植が修正され次第追加して欲しいです。
private_constant :CP_RE, :INI_RE | ||
|
||
def cp_roll_result(command) | ||
parser = Command::Parser.new('CP', round_type: RoundType::FLOOR).enable_suffix_number.enable_question_target |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
parser = Command::Parser.new('CP', round_type: RoundType::FLOOR).enable_suffix_number.enable_question_target | |
parser = Command::Parser.new('CP', round_type: RoundType::FLOOR) | |
.enable_suffix_number | |
.restrict_cmp_op_to(nil, :>=) |
enable_question_target
を使うのは >=?
のような記述を許容してしまうので、ふさわしくありません。
また、コマンドの使用を見る限り、比較演算子は >=
のみ許容されるので、restrict_cmp_op_to
で制限するのが良いです。
dices = [] | ||
dices << @randomizer.roll_once(dice_face) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dices = [] | |
dices << @randomizer.roll_once(dice_face) | |
dices = [@randomizer.roll_once(dice_face)] |
result.text = '' | ||
result.text += "(#{dice_cnt}D#{dice_face}" | ||
result.text += Format.modifier(modify_number) unless modify_number.zero? | ||
result.text += "#{parsed.cmp_op}#{parsed.target_number}" if parsed.target_number | ||
result.text += ') > ' | ||
result.text += "#{dices.first}[#{dices.first}]" | ||
result.text += "+#{modify_number}" unless modify_number.zero? | ||
result.text += ' > ' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
result.text = '' | |
result.text += "(#{dice_cnt}D#{dice_face}" | |
result.text += Format.modifier(modify_number) unless modify_number.zero? | |
result.text += "#{parsed.cmp_op}#{parsed.target_number}" if parsed.target_number | |
result.text += ') > ' | |
result.text += "#{dices.first}[#{dices.first}]" | |
result.text += "+#{modify_number}" unless modify_number.zero? | |
result.text += ' > ' | |
result.text = "(#{dice_cnt}D#{dice_face}#{Format.modifier(modify_number)}#{parsed.cmp_op}#{parsed.target_number})" | |
result.text += ' > ' | |
result.text += "#{dices.first}[#{dices.first}]#{Format.modifier(modify_number)}" | |
result.text += ' > ' |
result.text += ' > 成功!' | ||
end | ||
if result.failure? | ||
result.text += ' > 失敗!' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
!
はつけずに単に成功
, 失敗
が良いと思います。
def eval_game_system_specific_command(command) | ||
debug("eval_game_system_specific_command begin string", command) | ||
|
||
case command |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@saronpasu GenKuzumochiさんが指摘している方式にしてください。
@ysakasin 指摘いただいた箇所を修正しました。確認お願いします。 |
INIコマンドは |
@GenKuzumochi おっしゃる通り、 |
@saronpasu ありがとうございます! マージしました。 |
新規にダイスボットを寄稿します。
対象のルールは「サイバーパンクRED」です。
公式サイト
主な判定ダイスは「CP+x+y+z>=t」としています。
x 能力値
y 技能
z 修正値
t 難易度
難易度より大きい場合に成功
出目10で決定的成功、1回のみ追加ダイスを振り、その値だけ加算します。
出目1で決定的失敗、1回のみ追加ダイスを振り、その値だけ減算します。
頻繁に使うことを考えて、イニシアティブロールのコマンド「INIx」も備えました。
各種ランダム表については、ダイスボットだけでプレイ可能にならないように表の結果詳細については、ルールのページ参照する形にしたのと
キャラメイクに関わるランダム表はほとんど掲載していません。
また、一部の表には初版のためか誤植と思われる不整合がありました。
ルール準拠で実装するとエラーになるため、動作するように変更しています。
・ナイトシティにおける夜間の遭遇表
ルールP.421-422
ルール記載では、出目:70-72が「ソロのチーム」結果となっていますが
出目:72-77は「ブースターギャング」結果となっており、ランダム表の72が2つの結果となるように重複しています。
このまま実装するとエラーになるため、出目:73-77、結果「ブースターギャング」となるように修正しています。
・ナイトマーケット表
ルールP.338
1D100のランダム表ですが、出目:0-5と、出目:96-100の項目がありました。
注釈として「00は100とみなす」と但書があったので、こちらの表については
出目100の場合のみ、出目:0-5の結果と、出目:96-100の結果をどちらも選べるように表示しています。
誤植訂正が公開されたら、修正するつもりです。
よろしくおねがいします。