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

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

Closed
ysakasin opened this issue Jul 16, 2020 · 6 comments · Fixed by #244
Closed

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

ysakasin opened this issue Jul 16, 2020 · 6 comments · Fixed by #244
Labels
bug バグってる!

Comments

@ysakasin
Copy link
Member

ysakasin commented Jul 16, 2020

問題点

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

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

報告者

くずもちさん

解決案

  • 地道に全てのcheck_2D6 を返す
  • 目標値の?を許容するか、システムごとにインスタンスメソッドに持っておいて、BCDiceクラスの方で cehck_2D6?を渡すか判別する

所感

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

@ysakasin ysakasin added the bug バグってる! label Jul 16, 2020
@ochaochaocha3
Copy link
Member

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
Copy link
Member

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

@ysakasin
Copy link
Member Author

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

@ysakasin
Copy link
Member Author

ysakasin commented Jul 16, 2020

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

def check_2D6(total, dice_total, _dice_list, cmp_op, target)
if dice_total <= 2
" > クリティカル"
elsif dice_total >= 12
" > ファンブル"
elsif cmp_op == :<= && target != "?"
if total <= target
" > #{target - total}成功"
else
" > 失敗"
end
end
end

@ysakasin
Copy link
Member Author

ysakasin commented Jul 16, 2020

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

  • Arianrhod
    • クリティカル/ファンブル, nD6
  • DemonParasite
    • クリティカル/ファンブル, nD6
  • GranCrest
    • クリティカル, nD6
  • NightmareHunterDeep
    • 特殊処理, nD6
  • SwordWorld
    • クリティカル/ファンブル, 2D6
  • TunnelsAndTrolls
    • 特殊処理, 2D6
  • WARPS
    • クリティカル/ファンブル, 2D6

@ysakasin
Copy link
Member Author

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

ysakasin added a commit that referenced this issue Jul 18, 2020
各システムで独自に成否判定を実装するBCDice#check_nDx系のメソッドで、
多くのシステムで目標値に?が来ることを想定していない書き方がされており、
目標値?とすると例外が発生してしまっていた。

これを、目標値?の時には空白文字列を返すように修正した。
空白文字列が返されると他のcheck系メソッドにフォールバックされ、最終的に
BCDice#check_nDxから "失敗" が返される。

目標値を?にできるのはほとんどのマニュアルに書かれておらず、認知度も低いが、
TunnelsAndTrollsやNightmareHunterDeepで積極的に利用される可能性が高いため、
引き続きサポートする必要があった。

Fix #243
ysakasin added a commit that referenced this issue Aug 30, 2020
各システムで独自に成否判定を実装するBCDice#check_nDx系のメソッドで、
多くのシステムで目標値に?が来ることを想定していない書き方がされており、
目標値?とすると例外が発生してしまっていた。

これを、目標値?の時には空白文字列を返すように修正した。
空白文字列が返されると他のcheck系メソッドにフォールバックされ、最終的に
BCDice#check_nDxから "失敗" が返される。

目標値を?にできるのはほとんどのマニュアルに書かれておらず、認知度も低いが、
TunnelsAndTrollsやNightmareHunterDeepで積極的に利用される可能性が高いため、
引き続きサポートする必要があった。

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