class BCDice::GameSystem::SwordWorld
Constants
- HELP_MESSAGE
ダイスボットの使い方
- ID
ゲームシステムの識別子
- NAME
ゲームシステム名
- SORT_KEY
ゲームシステム名の読みがな
Public Class Methods
new(command)
click to toggle source
Calls superclass method
BCDice::Base::new
# File lib/bcdice/game_system/SwordWorld.rb, line 23 def initialize(command) super(command) @rating_table = 0 end
Public Instance Methods
eval_game_system_specific_command(command)
click to toggle source
# File lib/bcdice/game_system/SwordWorld.rb, line 42 def eval_game_system_specific_command(command) rating(command) end
result_2d6(total, dice_total, _dice_list, cmp_op, target)
click to toggle source
# File lib/bcdice/game_system/SwordWorld.rb, line 28 def result_2d6(total, dice_total, _dice_list, cmp_op, target) if dice_total >= 12 Result.critical("自動的成功") elsif dice_total <= 2 Result.fumble("自動的失敗") elsif cmp_op != :>= || target == "?" nil elsif total >= target Result.success("成功") else Result.failure("失敗") end end
Private Instance Methods
getNewRates(rate_sw2_0)
click to toggle source
# File lib/bcdice/game_system/SwordWorld.rb, line 260 def getNewRates(rate_sw2_0) rate_3 = [] rate_4 = [] rate_5 = [] rate_6 = [] rate_7 = [] rate_8 = [] rate_9 = [] rate_10 = [] rate_11 = [] rate_12 = [] zeroArray = [] rate_sw2_0.each do |rateText| rate_arr = rateText.split(/,/) zeroArray.push(0) rate_3.push(rate_arr[1].to_i) rate_4.push(rate_arr[2].to_i) rate_5.push(rate_arr[3].to_i) rate_6.push(rate_arr[4].to_i) rate_7.push(rate_arr[5].to_i) rate_8.push(rate_arr[6].to_i) rate_9.push(rate_arr[7].to_i) rate_10.push(rate_arr[8].to_i) rate_11.push(rate_arr[9].to_i) rate_12.push(rate_arr[10].to_i) end if @rating_table == 1 # 完全版準拠に差し替え rate_12[31] = rate_12[32] = rate_12[33] = 10 end newRates = [zeroArray, zeroArray, zeroArray, rate_3, rate_4, rate_5, rate_6, rate_7, rate_8, rate_9, rate_10, rate_11, rate_12] return newRates end
getResultText(rating_total, command, diceResults, diceResultTotals, rateResults, dice_total, round)
click to toggle source
@param rating_total [Integer] @param command [SwordWorld::RatingParsed] @param diceResults [Array<String>] @param diceResultTotals [Array<String>] @param rateResults [Array<String>] @param dice_total [Integer] @param round [Integer] @return [Array(String, Boolean, Boolean)] output, critical, fumble
# File lib/bcdice/game_system/SwordWorld.rb, line 313 def getResultText(rating_total, command, diceResults, diceResultTotals, rateResults, dice_total, round) sequence = [] sequence.push("2D:[#{diceResults.join(' ')}]=#{diceResultTotals.join(',')}") if dice_total <= 2 sequence.push(rateResults.join(',')) sequence.push("自動的失敗") return sequence.join(" > "), false, true end # rate回数が1回で、修正値がない時には途中式と最終結果が一致するので、途中式を省略する if rateResults.size > 1 || command.modifier != 0 text = rateResults.join(',') + Format.modifier(command.modifier) if command.half text = "(#{text})/2" if command.modifier_after_half != 0 text += Format.modifier(command.modifier_after_half) end end sequence.push(text) elsif command.half text = "#{rateResults.first}/2" if command.modifier_after_half != 0 text += Format.modifier(command.modifier_after_half) end sequence.push(text) end if round > 1 round_text = "#{round - 1}回転" sequence.push(round_text) end total = rating_total + command.modifier if command.half total = (total / 2.0).ceil if command.modifier_after_half != 0 total += command.modifier_after_half end end total_text = total.to_s sequence.push(total_text) return sequence.join(" > "), round > 1, false end
getSW2_0_RatingTable()
click to toggle source
# File lib/bcdice/game_system/SwordWorld.rb, line 142 def getSW2_0_RatingTable rate_sw2_0 = [ # 0 '*,0,0,0,1,2,2,3,3,4,4', '*,0,0,0,1,2,3,3,3,4,4', '*,0,0,0,1,2,3,4,4,4,4', '*,0,0,1,1,2,3,4,4,4,5', '*,0,0,1,2,2,3,4,4,5,5', '*,0,1,1,2,2,3,4,5,5,5', '*,0,1,1,2,3,3,4,5,5,5', '*,0,1,1,2,3,4,4,5,5,6', '*,0,1,2,2,3,4,4,5,6,6', '*,0,1,2,3,3,4,4,5,6,7', '*,1,1,2,3,3,4,5,5,6,7', # 11 '*,1,2,2,3,3,4,5,6,6,7', '*,1,2,2,3,4,4,5,6,6,7', '*,1,2,3,3,4,4,5,6,7,7', '*,1,2,3,4,4,4,5,6,7,8', '*,1,2,3,4,4,5,5,6,7,8', '*,1,2,3,4,4,5,6,7,7,8', '*,1,2,3,4,5,5,6,7,7,8', '*,1,2,3,4,5,6,6,7,7,8', '*,1,2,3,4,5,6,7,7,8,9', '*,1,2,3,4,5,6,7,8,9,10', # 21 '*,1,2,3,4,6,6,7,8,9,10', '*,1,2,3,5,6,6,7,8,9,10', '*,2,2,3,5,6,7,7,8,9,10', '*,2,3,4,5,6,7,7,8,9,10', '*,2,3,4,5,6,7,8,8,9,10', '*,2,3,4,5,6,8,8,9,9,10', '*,2,3,4,6,6,8,8,9,9,10', '*,2,3,4,6,6,8,9,9,10,10', '*,2,3,4,6,7,8,9,9,10,10', '*,2,4,4,6,7,8,9,10,10,10', # 31 '*,2,4,5,6,7,8,9,10,10,11', '*,3,4,5,6,7,8,10,10,10,11', '*,3,4,5,6,8,8,10,10,10,11', '*,3,4,5,6,8,9,10,10,11,11', '*,3,4,5,7,8,9,10,10,11,12', '*,3,5,5,7,8,9,10,11,11,12', '*,3,5,6,7,8,9,10,11,12,12', '*,3,5,6,7,8,10,10,11,12,13', '*,4,5,6,7,8,10,11,11,12,13', '*,4,5,6,7,9,10,11,11,12,13', # 41 '*,4,6,6,7,9,10,11,12,12,13', '*,4,6,7,7,9,10,11,12,13,13', '*,4,6,7,8,9,10,11,12,13,14', '*,4,6,7,8,10,10,11,12,13,14', '*,4,6,7,9,10,10,11,12,13,14', '*,4,6,7,9,10,10,12,13,13,14', '*,4,6,7,9,10,11,12,13,13,15', '*,4,6,7,9,10,12,12,13,13,15', '*,4,6,7,10,10,12,12,13,14,15', '*,4,6,8,10,10,12,12,13,15,15', # 51 '*,5,7,8,10,10,12,12,13,15,15', '*,5,7,8,10,11,12,12,13,15,15', '*,5,7,9,10,11,12,12,14,15,15', '*,5,7,9,10,11,12,13,14,15,16', '*,5,7,10,10,11,12,13,14,16,16', '*,5,8,10,10,11,12,13,15,16,16', '*,5,8,10,11,11,12,13,15,16,17', '*,5,8,10,11,12,12,13,15,16,17', '*,5,9,10,11,12,12,14,15,16,17', '*,5,9,10,11,12,13,14,15,16,18', # 61 '*,5,9,10,11,12,13,14,16,17,18', '*,5,9,10,11,13,13,14,16,17,18', '*,5,9,10,11,13,13,15,17,17,18', '*,5,9,10,11,13,14,15,17,17,18', '*,5,9,10,12,13,14,15,17,18,18', '*,5,9,10,12,13,15,15,17,18,19', '*,5,9,10,12,13,15,16,17,19,19', '*,5,9,10,12,14,15,16,17,19,19', '*,5,9,10,12,14,16,16,17,19,19', '*,5,9,10,12,14,16,17,18,19,19', # 71 '*,5,9,10,13,14,16,17,18,19,20', '*,5,9,10,13,15,16,17,18,19,20', '*,5,9,10,13,15,16,17,19,20,21', '*,6,9,10,13,15,16,18,19,20,21', '*,6,9,10,13,16,16,18,19,20,21', '*,6,9,10,13,16,17,18,19,20,21', '*,6,9,10,13,16,17,18,20,21,22', '*,6,9,10,13,16,17,19,20,22,23', '*,6,9,10,13,16,18,19,20,22,23', '*,6,9,10,13,16,18,20,21,22,23', # 81 '*,6,9,10,13,17,18,20,21,22,23', '*,6,9,10,14,17,18,20,21,22,24', '*,6,9,11,14,17,18,20,21,23,24', '*,6,9,11,14,17,19,20,21,23,24', '*,6,9,11,14,17,19,21,22,23,24', '*,7,10,11,14,17,19,21,22,23,25', '*,7,10,12,14,17,19,21,22,24,25', '*,7,10,12,14,18,19,21,22,24,25', '*,7,10,12,15,18,19,21,22,24,26', '*,7,10,12,15,18,19,21,23,25,26', # 91 '*,7,11,13,15,18,19,21,23,25,26', '*,7,11,13,15,18,20,21,23,25,27', '*,8,11,13,15,18,20,22,23,25,27', '*,8,11,13,16,18,20,22,23,25,28', '*,8,11,14,16,18,20,22,23,26,28', '*,8,11,14,16,19,20,22,23,26,28', '*,8,12,14,16,19,20,22,24,26,28', '*,8,12,15,16,19,20,22,24,27,28', '*,8,12,15,17,19,20,22,24,27,29', '*,8,12,15,18,19,20,22,24,27,30', ] return rate_sw2_0 end
rating(string)
click to toggle source
SWレーティング表 ########################
# File lib/bcdice/game_system/SwordWorld.rb, line 53 def rating(string) # レーティング表 debug("rating string", string) command = rating_parser.parse(string) unless command debug("not matched") return '1' end # 2.0対応 rate_sw2_0 = getSW2_0_RatingTable keyMax = rate_sw2_0.length - 1 debug("keyMax", keyMax) if command.rate > keyMax return "キーナンバーは#{keyMax}までです" end newRates = getNewRates(rate_sw2_0) output = "#{command} > " diceResultTotals = [] diceResults = [] rateResults = [] dice = 0 diceOnlyTotal = 0 totalValue = 0 round = 0 first_to = command.first_to first_modify = command.first_modify loop do dice_raw, diceText = rollDice(command) dice = dice_raw if first_to != 0 dice = dice_raw = first_to first_to = 0 elsif first_modify != 0 dice += first_modify first_modify = 0 end # 出目がピンゾロの時にはそこで終了 if dice_raw <= 2 diceResultTotals << dice_raw.to_s diceResults << diceText.to_s rateResults << "**" round += 1 break end dice += command.kept_modify if (command.kept_modify != 0) && (dice != 2) dice = 2 if dice < 2 dice = 12 if dice > 12 currentKey = [command.rate + round * command.rateup, keyMax].min debug("currentKey", currentKey) rateValue = newRates[dice][currentKey] debug("rateValue", rateValue) totalValue += rateValue diceOnlyTotal += dice diceResultTotals << dice.to_s diceResults << diceText.to_s rateResults << (dice > 2 ? rateValue : "**") round += 1 break unless dice >= command.critical end result_text, critical, fumble = getResultText( totalValue, command, diceResults, diceResultTotals, rateResults, diceOnlyTotal, round ) output += result_text return Result.new.tap do |r| r.text = output r.critical = critical r.fumble = fumble end end
rating_parser()
click to toggle source
# File lib/bcdice/game_system/SwordWorld.rb, line 48 def rating_parser return RatingParser.new end
rollDice(_command)
click to toggle source
# File lib/bcdice/game_system/SwordWorld.rb, line 298 def rollDice(_command) dice_list = @randomizer.roll_barabara(2, 6) total = dice_list.sum() dice_str = dice_list.join(",") return total, dice_str end