class BCDice::GameSystem::EarthDawn3
Constants
- HELP_MESSAGE
ダイスボットの使い方
- ID
ゲームシステムの識別子
- NAME
ゲームシステム名
- SORT_KEY
ゲームシステム名の読みがな
Public Class Methods
new(command)
click to toggle source
Calls superclass method
BCDice::GameSystem::EarthDawn::new
# File lib/bcdice/game_system/EarthDawn3.rb, line 29 def initialize(command) super(command) @sort_add_dice = true end
Public Instance Methods
addStepToResult(result, step)
click to toggle source
# File lib/bcdice/game_system/EarthDawn3.rb, line 164 def addStepToResult(result, step) result.size.times do |i| result[i] += step[i] end return result end
ed_step(str)
click to toggle source
アースドーンステップ表
# File lib/bcdice/game_system/EarthDawn3.rb, line 40 def ed_step(str) output = getStepResult(str) return output end
eval_game_system_specific_command(command)
click to toggle source
# File lib/bcdice/game_system/EarthDawn3.rb, line 35 def eval_game_system_specific_command(command) return ed_step(command) end
getBaseStepTable()
click to toggle source
# File lib/bcdice/game_system/EarthDawn3.rb, line 107 def getBaseStepTable stepTable = [ # dice # D20 D12 D10 D8 D6 D4 mod [1, [0, 0, 0, 0, 1, 0, -3]], [2, [0, 0, 0, 0, 1, 0, -2]], [3, [0, 0, 0, 0, 1, 0, -1]], [4, [0, 0, 0, 0, 1, 0, 0]], [5, [0, 0, 0, 1, 0, 0, 0]], [6, [0, 0, 1, 0, 0, 0, 0]], [7, [0, 1, 0, 0, 0, 0, 0]], ] return stepTable end
getModifyText(modify)
click to toggle source
# File lib/bcdice/game_system/EarthDawn3.rb, line 98 def getModifyText(modify) @string = "" return @string if modify == 0 @string += "+" if modify > 0 @string += modify.to_s return @string end
getStepInfo(step)
click to toggle source
# File lib/bcdice/game_system/EarthDawn3.rb, line 124 def getStepInfo(step) baseStepTable = getBaseStepTable baseMaxStep = baseStepTable.last.first if step <= baseMaxStep return get_table_by_number(step, baseStepTable) end baseStepInfo = [0, 1, 0, 0, 0, 0, 0] overStep = step - baseMaxStep - 1 stepRythm = [ # dice # D20 D12 D10 D8 D6 D4 mod [0, 0, 0, 0, 2, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0], ] result = [0, 0, 0, 0, 0, 0, 0] loopCount = (overStep / stepRythm.size) loopCount.times do addStepToResult(result, baseStepInfo) end index = (overStep % stepRythm.size) restStepInfo = stepRythm[index] addStepToResult(result, restStepInfo) return result end
getStepResult(str)
click to toggle source
# File lib/bcdice/game_system/EarthDawn3.rb, line 46 def getStepResult(str) return nil unless /^(\d+)E(\d+)?(\+(\d*)D(\d+))?(\+\d)?/i =~ str stepTotal = 0 @isFailed = true step = Regexp.last_match(1).to_i # ステップ targetNumber = [Regexp.last_match(2).to_i, 20].min # 目標値 hasKarmaDice = !Regexp.last_match(3).nil? # カルマダイスの有無 karmaDiceCount = [1, Regexp.last_match(4).to_i].max # カルマダイスの個数 karmaDiceType = Regexp.last_match(5).to_i # カルマダイスの種類 diceModify = Regexp.last_match(6).to_i karmaDiceInfo = Hash.new(0) if hasKarmaDice karmaDiceInfo[karmaDiceType] = karmaDiceCount end return nil if targetNumber < 0 stepInfo = getStepInfo(step) debug('stepInfo', stepInfo) @string = "" diceTypes = [20, 12, 10, 8, 6, 4] diceTypes.each do |type| stepTotal += rollStep(type, stepInfo.shift) end modify = stepInfo.shift karmaDiceInfo.each do |diceType, diceCount| stepTotal += rollStep(diceType, diceCount) end @string += (getModifyText(modify) + getModifyText(diceModify)) stepTotal += (modify + diceModify) # ステップ判定終了 @string += " > #{stepTotal}" output = "ステップ#{step} > #{@string}" return output if targetNumber == 0 # 結果判定 @string += ' > ' + getSuccess(targetNumber, stepTotal) output = "ステップ#{step}>=#{targetNumber} > #{@string}" return output end
getSuccess(targetNumber, stepTotal)
click to toggle source
# File lib/bcdice/game_system/EarthDawn3.rb, line 172 def getSuccess(targetNumber, stepTotal) return '自動失敗' if @isFailed successTable = getSuccessTable successInfo = get_table_by_number(targetNumber, successTable) pathetic, poor, average, good, excelent, extraordinary = successInfo return 'Extraordinary(極上)' if stepTotal >= extraordinary return 'Excelent(最高)' if stepTotal >= excelent return 'Good(上出来)' if stepTotal >= good return 'Average(そこそこ)' if stepTotal >= average return 'Poor(お粗末)' if stepTotal >= poor return 'Pathetic(惨め)' if stepTotal >= pathetic end
getSuccessTable()
click to toggle source
# File lib/bcdice/game_system/EarthDawn3.rb, line 188 def getSuccessTable successTable = [ # Pathetic Poor Average Good Excellent Extraordinary [2, [0, 1, 2, 5, 7, 9]], [3, [0, 1, 3, 6, 8, 10]], [4, [0, 1, 4, 7, 10, 12]], [5, [1, 2, 5, 8, 11, 14]], [6, [1, 2, 6, 9, 13, 17]], [7, [1, 3, 7, 11, 15, 19]], [8, [1, 4, 8, 13, 16, 20]], [9, [1, 5, 9, 15, 18, 22]], [10, [1, 6, 10, 16, 20, 24]], [11, [1, 6, 11, 17, 21, 25]], [12, [1, 7, 12, 18, 23, 27]], [13, [1, 7, 13, 20, 25, 29]], [14, [1, 8, 14, 21, 26, 31]], [15, [1, 9, 15, 23, 27, 31]], [16, [1, 10, 16, 24, 28, 33]], [17, [1, 11, 17, 25, 30, 34]], [18, [1, 12, 18, 26, 31, 36]], [19, [1, 12, 19, 28, 33, 37]], [20, [1, 13, 20, 29, 34, 39]], [21, [1, 14, 21, 30, 36, 41]], [22, [1, 15, 22, 31, 37, 42]], [23, [1, 16, 23, 33, 38, 43]], [24, [1, 16, 24, 34, 39, 44]], [25, [1, 17, 25, 35, 41, 46]], [26, [1, 18, 26, 36, 42, 47]], [27, [1, 19, 27, 37, 43, 49]], [28, [1, 19, 28, 39, 45, 50]], [29, [1, 21, 29, 40, 46, 51]], [30, [1, 21, 30, 41, 47, 53]], [31, [1, 22, 31, 42, 48, 54]], [32, [1, 23, 32, 43, 49, 55]], [33, [1, 24, 33, 45, 51, 57]], [34, [1, 24, 34, 46, 52, 58]], [35, [1, 25, 35, 47, 53, 60]], [36, [1, 26, 36, 48, 54, 60]], [37, [1, 27, 37, 49, 56, 62]], [38, [1, 28, 38, 51, 57, 63]], [39, [1, 29, 39, 52, 58, 64]], [40, [1, 30, 40, 53, 59, 66]], ] return successTable end
rollStep(diceType, diceCount)
click to toggle source
# File lib/bcdice/game_system/EarthDawn3.rb, line 236 def rollStep(diceType, diceCount) debug('rollStep diceType, diceCount, @string', diceType, diceCount, @string) stepTotal = 0 return stepTotal unless diceCount > 0 # diceぶんのステップ判定 @string += "+" unless @string.empty? @string += "#{diceCount}d#{diceType}[" debug('rollStep @string', @string) diceCount.times do |i| dice_now = @randomizer.roll_once(diceType) if dice_now != 1 @isFailed = false end dice_in = dice_now while dice_now == diceType dice_now = @randomizer.roll_once(diceType) dice_in += dice_now end stepTotal += dice_in @string += ',' if i != 0 @string += dice_in.to_s end @string += "]" return stepTotal end