Class: BCDice::GameSystem::Ventangle
- Defined in:
- lib/bcdice/game_system/Ventangle.rb
Constant Summary collapse
- ID =
ゲームシステムの識別子
'Ventangle'
- NAME =
ゲームシステム名
'Ventangle'
- SORT_KEY =
ゲームシステム名の読みがな
「ゲームシステム名の読みがなの設定方法」(docs/dicebot_sort_key.md)を参考にして 設定してください
'うえんたんくる'
- HELP_MESSAGE =
ダイスボットの使い方
<<~MESSAGETEXT 基本書式 VTn@s#f$g>=T n=ダイス数(省略時2) s=スペシャル値(省略時12) f=ファンブル値(省略時2) g=レベルギャップ判定値(省略可) T=目標値(省略可) 例: VT デフォルトのスペシャル値・ファンブル値の判定を行う VT@10#3 スペシャル値10、ファンブル値3の判定を行う VT3@10#3 スペシャル値10、ファンブル値3の判定を、アドバンテージを1点消費してダイス3つで行う VT>=5 デフォルトのスペシャル値・ファンブル値で目標値5の判定を行う VT@10#3>=5 スペシャル値10、ファンブル値3で目標値5の判定を行う VT@10#3$5>=5 スペシャル値10、ファンブル値3で目標値5の判定を行う。この際達成値が目標値より5以上大きい場合、ギャップボーナスを表示する VT3@10#3>=5 スペシャル値10、ファンブル値3で目標値5の判定を、アドバンテージを1点消費してダイス3つで行う VT3@10#3$4>=5 スペシャル値10、ファンブル値3で目標値5の判定を、アドバンテージを1点消費してダイス3つで行う。この際達成値が目標値より4以上大きい場合、ギャップボーナスを表示する MESSAGETEXT
- DEFAULT_SPECIAL_VALUE =
既定のスペシャル値
12
- DEFAULT_FUMBLE_VALUE =
既定のファンブル値
2
- DEFAULT_DICE_NUM =
規定のダイス個数
2
Instance Attribute Summary
Attributes inherited from Base
#d66_sort_type, #default_cmp_op, #default_target_number, #randomizer, #reroll_dice_reroll_threshold, #round_type, #sides_implicit_d, #upper_dice_reroll_threshold
Instance Method Summary collapse
Methods inherited from Base
#change_text, #check_result, command_pattern, #enable_debug, #enabled_d9?, #eval, eval, #grich_text, #initialize, prefixes_pattern, register_prefix, register_prefix_from_super_class, #sort_add_dice?, #sort_barabara_dice?
Methods included from Translate
Constructor Details
This class inherits a constructor from BCDice::Base
Instance Method Details
#compare(dice_total, total, cmd) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/bcdice/game_system/Ventangle.rb', line 111 def compare(dice_total, total, cmd) special = cmd.critical || DEFAULT_SPECIAL_VALUE fumble = cmd.fumble || DEFAULT_FUMBLE_VALUE if dice_total <= fumble return Result.fumble('ファンブル') elsif dice_total >= special return Result.critical('スペシャル') end if cmd.target_number if total.send(cmd.cmp_op, cmd.target_number) return Result.success('成功') else return Result.failure('失敗') end else return Result.new(nil) end end |
#eval_game_system_specific_command(command) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/bcdice/game_system/Ventangle.rb', line 46 def eval_game_system_specific_command(command) debug("eval_game_system_specific_command Begin") parser = Command::Parser.new('VT', round_type: round_type) .enable_critical .enable_fumble .enable_dollar .enable_suffix_number .restrict_cmp_op_to(nil, :>=) cmd = parser.parse(command) unless cmd return nil end dice_num = cmd.suffix_number || DEFAULT_DICE_NUM if dice_num < DEFAULT_DICE_NUM return nil end dice_list = @randomizer.(dice_num, 6) if dice_num > 2 # 出目の順序を保存して上位2つの出目を取得 j = 0 # 安定ソートのために利用 cf. https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/sort_by.html using_list = dice_list.map.with_index { |x, i| {index: i, value: x} } .sort_by { |x| [x[:value], j += 1] }.reverse.take(2) .sort_by { |x| x[:index] }.map { |x| x[:value] } else using_list = dice_list end dice_total = using_list.sum total = dice_total + cmd.modify_number result = compare(dice_total, total, cmd) advantage_str = if dice_num > 2 using_list.to_s end modifier_str = if cmd.modify_number > 0 "#{dice_total}#{Format.modifier(cmd.modify_number)}" end level_gap_str = if cmd.target_number && cmd.dollar && result.success? && (gap = total - cmd.target_number) >= cmd.dollar "ギャップボーナス(#{gap})" end sequence = [ cmd.to_s, dice_list.to_s, advantage_str, modifier_str, total.to_s, result.text, level_gap_str, ].compact result.text = sequence.join(" > ") return result end |