bcdice / BCDice

The most popular TRPG dice command engine in Japan
https://bcdice.org
BSD 3-Clause "New" or "Revised" License
140 stars 184 forks source link

一部のシステムで目標値に?を使うと落ちる #243

Closed ysakasin closed 4 years ago

ysakasin commented 4 years ago

問題点

目標値が定まらない判定のために加算ダイスでは 2D6>=? というような目標値に?を入力することを許している。

check_2D6 等を加算ダイスから呼び出すが、これを実装している多くのクラスで目標値に?がくることを想定しておらず、エラー落ちする。

報告者

くずもちさん

解決案

所感

辛い。加算ダイスで目標値に ? を許容したくないなぁ……

ochaochaocha3 commented 4 years ago

check_2D6 をgrepすると、以下のダイスボットが該当しました。

Arianrhod.rb:45:  alias check_2D6 check_nD6
BeginningIdol.rb:167:  alias check_2D6 check_nD6
BeginningIdol_Korean.rb:162:  alias check_2D6 check_nD6
BloodCrusade.rb:46:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
BloodMoon.rb:43:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
CardRanker.rb:38:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
ChaosFlare.rb:58:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
DarkDaysDrive.rb:52:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
Gorilla.rb:30:  def check_2D6(total, _dice_total, dice_list, cmp_op, target)
GranCrest.rb:69:  alias check_2D6 check_nD6
HuntersMoon.rb:53:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
Insane.rb:60:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
Insane_Korean.rb:59:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
KanColle.rb:51:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
KillDeathBusiness.rb:51:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
KillDeathBusiness_Korean.rb:94:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
MagicaLogia.rb:56:  def check_2D6(total, dice_total, dice_list, cmp_op, target)
MeikyuDays.rb:53:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
MeikyuDays.rb:119:      output += check_2D6(total_n, dice_now, dice_num, cmp_op, diff)
MeikyuKingdom.rb:90:  alias check_2D6 check_nD6
MetalHead.rb:64:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
NjslyrBattle.rb:23:  def check_2D6(total, _dice_total, dice_list, cmp_op, target)
Peekaboo.rb:46:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
SharedFantasia.rb:36:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
ShinobiGami.rb:43:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
StratoShout.rb:48:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
SwordWorld.rb:52:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
TunnelsAndTrolls.rb:63:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
WARPS.rb:17:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
YankeeYogSothoth.rb:50:  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
ochaochaocha3 commented 4 years ago

READMEに「?」のコマンドが明記されているのは、トンネルズ&トロールズのみのようでした。

ysakasin commented 4 years ago

?を受け付けるの、専用コマンド化して一部のシステムのみ受け入れるのはアリそうですね

ysakasin commented 4 years ago

?を受け入れるコマンドが結構多くて、専用コマンド化は辛いかもしれない

https://github.com/bcdice/BCDice/blob/b13803589b1f96d7a4a2ac420026480c128d82d4/src/diceBot/WARPS.rb#L17-L29

ysakasin commented 4 years ago

?に意味があるシステムリスト

ysakasin commented 4 years ago

なんだかんだ、 check_2D6 を全部直すというのが有力かな