Skip to content
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

一部のシステムで「2d>=」のように目標値無しにすると落ちる #273

Closed
blhsrwznrghfzpr opened this issue Sep 6, 2020 · 4 comments
Assignees
Labels
bug バグってる!

Comments

@blhsrwznrghfzpr
Copy link
Contributor

現象

特定システムで 2d>= のように目標値無しのコマンドで例外が発生する。

============================
input:
2d6>= 目標値無し
output:
Insane : (2D6>=) > 7[3,4] > 7 > 失敗
rand:3/6,4/6
============================
上記テストケースの結果
[Failures]
Game type: Insane
Index: 61
Exception: comparison of Integer with String failed
Backtrace:
  C:/Users/blhsr/workspace/BCDice/lib/bcdice/game_system/Insane.rb:72:in `>='
  C:/Users/blhsr/workspace/BCDice/lib/bcdice/game_system/Insane.rb:72:in `check_2D6'
  C:/Users/blhsr/workspace/BCDice/lib/bcdice/base.rb:306:in `check_result'
  C:/Users/blhsr/workspace/BCDice/lib/bcdice/common_command/add_dice.rb:49:in `eval'
  C:/Users/blhsr/workspace/BCDice/lib/bcdice/common_command.rb:16:in `block in eval'
  C:/Users/blhsr/workspace/BCDice/lib/bcdice/common_command.rb:14:in `each'
  C:/Users/blhsr/workspace/BCDice/lib/bcdice/common_command.rb:14:in `eval'
  C:/Users/blhsr/workspace/BCDice/lib/bcdice/base.rb:140:in `eval'
  C:/Users/blhsr/workspace/BCDice/test/DiceBotTest.rb:124:in `block in executeCommand'
  C:/Users/blhsr/workspace/BCDice/test/DiceBotTest.rb:123:in `each'
  C:/Users/blhsr/workspace/BCDice/test/DiceBotTest.rb:123:in `executeCommand'
  C:/Users/blhsr/workspace/BCDice/test/DiceBotTest.rb:90:in `block in doTests'
  C:/Users/blhsr/workspace/BCDice/test/DiceBotTest.rb:88:in `each'
  C:/Users/blhsr/workspace/BCDice/test/DiceBotTest.rb:88:in `doTests'
  C:/Users/blhsr/workspace/BCDice/test/DiceBotTest.rb:29:in `execute'
  C:/Users/blhsr/workspace/BCDice/test/testDiceBots.rb:2:in `<top (required)>'
  C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:17:in `require'
  C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:17:in `block in <main>'
  C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `select'
  C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `<main>'
Input:
  2d6>= 目標値無し
Expected:
  Insane : (2D6>=) > 7[3,4] > 7 > 失敗
Rands: 3/6, 4/6
SimpleCov failed with exit 1rake aborted!
Command failed with status (1)
ココフォリアでの表示

image

ユドナリウムでの表示

image

原因

インセインなどの特定システムだけ発生するので、 check_nDx 系メソッドを
実装しているシステムだけ発生するんだと思います。
インセインでは total >= target の箇所で例外が発生しています。

# ゲーム別成功度判定(2D6)
def check_2D6(total, dice_total, _dice_list, cmp_op, target)
return '' unless cmp_op == :>=
if dice_total <= 2
" > ファンブル(判定失敗。山札から【狂気】を1枚獲得)"
elsif dice_total >= 12
" > スペシャル(判定成功。【生命力】1点か【正気度】1点回復)"
elsif target == "?"
""
elsif total >= target
" > 成功"
else
" > 失敗"
end
end

関連issue) #243

目標値を"?"と比較している箇所で、機械的に""(空文字)とも比較するようにすれば
スタックトレースを抑制することができると思います。
もしくは不完全なコマンドを check_nDx 系メソッドに流さないようにするか

@ysakasin ysakasin self-assigned this Sep 6, 2020
@ysakasin ysakasin added the bug バグってる! label Sep 6, 2020
@ysakasin
Copy link
Member

ysakasin commented Sep 6, 2020

対処方針

加算ダイスのパーサーを修正して、中途半端な状態は受け付けないようにする

@ysakasin
Copy link
Member

なぜか知らんけど現状のv3だと動いちゃう

[DiceBot]> use Insane
[Insane]> 1D6>=
Insane : (1D6>=) > 6 > 失敗

@blhsrwznrghfzpr
Copy link
Contributor Author

なぜか知らんけど現状のv3だと動いちゃう

インセインは check_2d6 が実装されているので、2d6>= じゃないと落ちないです

@ysakasin
Copy link
Member

うっかりしてました……

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug バグってる!
Projects
None yet
Development

No branches or pull requests

2 participants