class BCDice::GameSystem::GardenOrder
Constants
- DAMAGE_TABLE
- HELP_MESSAGE
ダイスボットの使い方
- ID
ゲームシステムのの識別子
- NAME
ゲームシステム名
- SORT_KEY
ゲームシステム名の読みがな
Public Instance Methods
check_roll(success_rate, critical_border)
click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 69 def check_roll(success_rate, critical_border) success_rate = 0 if success_rate < 0 fumble_border = (success_rate < 100 ? 96 : 99) dice_value = @randomizer.roll_once(100) result = get_check_result(dice_value, success_rate, critical_border, fumble_border) result.text = "D100<=#{success_rate}@#{critical_border} > #{dice_value} > #{result.text}" return result end
check_roll_repeat_attack(success_rate, repeat_count, critical_border)
click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 59 def check_roll_repeat_attack(success_rate, repeat_count, critical_border) success_rate_per_one = success_rate / repeat_count # 連続攻撃は最終的な成功率が50%以上であることが必要 cf. p217 if repeat_count > 1 && success_rate_per_one < 50 return "D100<=#{success_rate_per_one}@#{critical_border} > 連続攻撃は成功率が50%以上必要です" end check_roll(success_rate_per_one, critical_border) end
eval_game_system_specific_command(command)
click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 33 def eval_game_system_specific_command(command) case command when %r{GO(-?\d+)(/(\d+))?(@(\d+))?}i success_rate = Regexp.last_match(1).to_i repeat_count = (Regexp.last_match(3) || 1).to_i critical_border_text = Regexp.last_match(5) critical_border = get_critical_border(critical_border_text, success_rate) return check_roll_repeat_attack(success_rate, repeat_count, critical_border) when /^DC(SL|BL|IM|BR|RF|EL)(\d+)/i type = Regexp.last_match(1) damage_value = Regexp.last_match(2).to_i return look_up_damage_chart(type, damage_value) end return nil end
get_check_result(dice_value, success_rate, critical_border, fumble_border)
click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 80 def get_check_result(dice_value, success_rate, critical_border, fumble_border) # クリティカルとファンブルが重なった場合は、ファンブルとなる。 cf. p175 return Result.fumble("ファンブル") if dice_value >= fumble_border return Result.critical("クリティカル") if dice_value <= critical_border return Result.success("成功") if dice_value <= success_rate return Result.failure("失敗") end
get_critical_border(critical_border_text, success_rate)
click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 52 def get_critical_border(critical_border_text, success_rate) return critical_border_text.to_i unless critical_border_text.nil? critical_border = [success_rate / 5, 1].max return critical_border end
get_damage_table_info_by_type(type)
click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 98 def get_damage_table_info_by_type(type) data = DAMAGE_TABLE[type] return nil if data.nil? return data[:name], data[:table] end
look_up_damage_chart(type, damage_value)
click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 89 def look_up_damage_chart(type, damage_value) name, table = get_damage_table_info_by_type(type) row = get_table_by_number(damage_value, table, nil) return nil if row.nil? "負傷表:#{name}[#{damage_value}] > #{row[:damage]} | #{row[:name]} … #{row[:text]}" end