class BCDice::GameSystem::Villaciel
Constants
- ACCIDENT_CHART
- ARMESEAR_PETIT_QUEST_CHART
- ARMESEAR_PREVIOUS_JOB_CHART
- D6
- EDIBLE_PLANT2_CHARTS
- EDIBLE_PLANT_CHARTS
- FAILURE_STR
- FISHING_BLACK_CHART
- FISHING_COMMON_CHART
- FISHING_GRAY_CHART
- FISHING_LAKE_CHART
- FISHING_RIVER_CHART
- FISHING_SALT_LAKE_CHART
- FISHING_WHITE_CHART
- HELP_MESSAGE
ダイスボットの使い方
- ID
ゲームシステムの識別子
- IMPROVED_SPECIES_CHART
- INEDIBLE_PLANT2_CHART
- INEDIBLE_PLANT_CHART
- LEAST_GEM_SUCCESS_ROLL
- LEAST_MINING_SUCCESS_ROLL
- LEAST_SUCCESS_ROLL
- MOHUMOHU_ANIMAL_CHART
- MOHUMOHU_DRAGON_CHART
- MOHUMOHU_INSECT_CHART
- MOHUMOHU_VILLACIEL2_CHART
- MOHUMOHU_VILLACIEL_CHART
- MUTANT_PLANT_CHART
- NAME
ゲームシステム名
- SKILL_CHART
- SORT_KEY
ゲームシステム名の読みがな
- SUCCESS_STR
- VILLACIEL_PETIT_QUEST_CHART
- VILLACIEL_PREVIOUS_JOB_CHART
Public Class Methods
new(command)
click to toggle source
Calls superclass method
BCDice::Base::new
# File lib/bcdice/game_system/Villaciel.rb, line 52 def initialize(command) super(command) @d66_sort_type = D66SortType::NO_SORT # D66あり。ただし、現行ルールにある6x6の表については別のコマンドを用意 @round_type = RoundType::CEIL # 端数は切り上げ end
Public Instance Methods
eval_game_system_specific_command(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 59 def eval_game_system_specific_command(command) case command when /\d+VBS/ resolute_action(command) when /\d+VF/ resolute_frontier_action(command) when /\d+VM/ resolute_mining_action(command) when /\d+VG/ resolute_cutting_gem_action(command) when /PJ[VA]?/ use_previous_job_chart(command) when /PQ[VA]?/ use_petit_quest_chart(command) when 'AC' use_accident_chart(command) when /MM([IAD]|V[VA]?)/ use_mohumohu_chart(command) when /F[LRWGBCS]/ use_fishing_chart(command) when /IP[VA]?/ use_inedible_plant_chart(command) when /EP[VA]?\d?/ use_edible_plant_chart(command) when 'MP' use_mutant_plant_chart(command) when 'IS' use_improved_species_chart(command) end end
Private Instance Methods
derive_achievement(num_dices, command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 97 def derive_achievement(num_dices, command) # 達成数計算の際にはトライアンフ「出目が6だったダイスは達成数2としてカウントする」を考慮する必要があるが、要は「達成数=成功数+出目が最大値だったダイスの数」になる dice_list = @randomizer.roll_barabara(num_dices, D6) dice_str = dice_list.join(",") num_triumph_dices = dice_list.count(6) num_successes = dice_list.count { |dice| dice >= LEAST_SUCCESS_ROLL } achievement = num_successes + num_triumph_dices output = "(#{command}) > [#{dice_str}] > 達成数: #{achievement}" return achievement, output end
resolute_action(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 109 def resolute_action(command) match_data = command.match(/(\d+)VBS(>=(\d+))?/) num_dices = match_data[1].to_i achievement, output = derive_achievement(num_dices, command) return output unless match_data[2] difficulty = match_data[3].to_i output += achievement >= difficulty ? SUCCESS_STR : FAILURE_STR return output end
resolute_cutting_gem_action(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 171 def resolute_cutting_gem_action(command) num_dices = command.match(/(\d+)VG/)[1].to_i resolute_difficult_action(num_dices, LEAST_GEM_SUCCESS_ROLL, command)[0] end
resolute_difficult_action(num_dices, least_success_roll, command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 144 def resolute_difficult_action(num_dices, least_success_roll, command) # 1個でもleast_success_roll以上の出目が出たら成功となる判定 # 出目の最大値がnならば「1個でもn以上の出目が出た」ことになる dice_list = @randomizer.roll_barabara(num_dices, D6) dice_str = dice_list.join(',') largest_roll = dice_list.max() is_successful = largest_roll >= least_success_roll output = "(#{command}) > [#{dice_str}]" output += is_successful ? SUCCESS_STR : FAILURE_STR return output, is_successful end
resolute_frontier_action(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 124 def resolute_frontier_action(command) num_dices = command.match(/(\d+)VF/)[1].to_i achievement, output = derive_achievement(num_dices, command) chart_index = case achievement when 0..2 achievement when 3, 4 3 when 5..8 4 else 5 end skill = SKILL_CHART[chart_index] return "#{output} > #{skill}" end
resolute_mining_action(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 162 def resolute_mining_action(command) num_dices = command.match(/(\d+)VM/)[1].to_i output, is_successful = resolute_difficult_action(num_dices, LEAST_MINING_SUCCESS_ROLL, command) return output unless is_successful roll_result = @randomizer.roll_once(D6) "#{output} > (1D6) > [#{roll_result}] > アイテムを#{roll_result}個獲得" end
use_6x6_chart(chart, chart_name)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 303 def use_6x6_chart(chart, chart_name) # 6x6の表からランダムに参照する # chartは文字列の配列の配列であることを仮定 # D66ロールによる表参照と近いが、D66の方は13, 42などの数値に対応した表なのに対し、こちらは「下3マス、右2マス」という風にセルを参照する y_roll = @randomizer.roll_once(D6) cell_text, x_roll = get_table_by_1d6(chart[y_roll - 1]) "#{chart_name} > [#{y_roll},#{x_roll}] > 下#{y_roll}マス、右#{x_roll}マス > #{cell_text}" end
use_accident_chart(_command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 298 def use_accident_chart(_command) chart_text, roll_result = get_table_by_1d6(ACCIDENT_CHART) "アクシデント表 > [#{roll_result}] > #{chart_text}" end
use_armesear_edible_plant_chart(chart_id, output)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 495 def use_armesear_edible_plant_chart(chart_id, output) output + use_6x6_chart(EDIBLE_PLANT2_CHARTS[chart_id - 1], "可食植物表#{chart_id}(アルメサール)") end
use_edible_plant_chart(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 499 def use_edible_plant_chart(command) match_data = command.match(/EP([VA]?)(\d?)/) chart_symbol = match_data[1] == '' ? 'V' : match_data[1] case chart_symbol when 'V' case match_data[2] when '' roll_result = @randomizer.roll_once(D6) return '(1D6) > [6] > 好きな表を選んでおっけー!' if roll_result == D6 use_villaciel_edible_plant_chart(roll_result, "(1D6) > [#{roll_result}] > ") else chart_id = match_data[2].to_i return '' unless chart_id >= 1 && chart_id <= 5 use_villaciel_edible_plant_chart(chart_id, '') end when 'A' case match_data[2] when '' roll_result = @randomizer.roll_once(D6) use_armesear_edible_plant_chart(roll_result.even? ? 1 : 2, "(1D6) > [#{roll_result}] > ") else chart_id = match_data[2].to_i return '' unless [1, 2].include?(chart_id) use_armesear_edible_plant_chart(chart_id, '') end end end
use_fishing_chart(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 411 def use_fishing_chart(command) case command when 'FL' then use_6x6_chart(FISHING_LAKE_CHART, '釣り・湖表') when 'FR' then use_6x6_chart(FISHING_RIVER_CHART, '釣り・河表') when 'FW' then use_6x6_chart(FISHING_WHITE_CHART, '釣り・白雲表') when 'FG' then use_6x6_chart(FISHING_GRAY_CHART, '釣り・灰雲表') when 'FB' then use_6x6_chart(FISHING_BLACK_CHART, '釣り・黒雲表') when 'FC' then use_6x6_chart(FISHING_COMMON_CHART, '釣り・共通表') when 'FS' then use_6x6_chart(FISHING_SALT_LAKE_CHART, '釣り・塩湖表') end end
use_improved_species_chart(_command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 549 def use_improved_species_chart(_command) use_6x6_chart(IMPROVED_SPECIES_CHART, '改良種表') end
use_inedible_plant_chart(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 437 def use_inedible_plant_chart(command) match_data = command.match(/IP([VA]?)/) chart_symbol = match_data[1] == '' ? 'V' : match_data[1] case chart_symbol when 'V' then use_6x6_chart(INEDIBLE_PLANT_CHART, '不食植物表(ヴィラシエル)') when 'A' then use_6x6_chart(INEDIBLE_PLANT2_CHART, '不食植物表(アルメサール)') end end
use_mohumohu_chart(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 343 def use_mohumohu_chart(command) case command when 'MMI' then use_6x6_chart(MOHUMOHU_INSECT_CHART, 'もふもふ表・昆虫') when 'MMA' then use_6x6_chart(MOHUMOHU_ANIMAL_CHART, 'もふもふ表・動物') when /MMV[VA]?/ match_data = command.match(/MMV([VA]?)/) chart_symbol = match_data[1] == '' ? 'V' : match_data[1] case chart_symbol when 'V' y_roll = @randomizer.roll_once(D6) cell_text, x_roll = get_table_by_1d6(MOHUMOHU_VILLACIEL_CHART[1 - y_roll % 2]) "もふもふ表・ヴィラシエル種(ヴィラシエル) > [#{y_roll},#{x_roll}] > 下#{y_roll.even? ? '偶数' : '奇数'}、右#{x_roll}マス > #{cell_text}" when 'A' then use_6x6_chart(MOHUMOHU_VILLACIEL2_CHART, 'もふもふ表・ヴィラシエル種(アルメサール)') end when 'MMD' then use_6x6_chart(MOHUMOHU_DRAGON_CHART, 'もふもふ表・鋼龍種') end end
use_mutant_plant_chart(_command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 538 def use_mutant_plant_chart(_command) use_6x6_chart(MUTANT_PLANT_CHART, '変異植物表') end
use_petit_quest_chart(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 267 def use_petit_quest_chart(command) match_data = command.match(/PQ([VA]?)/) chart_symbol = match_data[1] == '' ? 'V' : match_data[1] roll_result1 = @randomizer.roll_once(D6) chart_text, roll_result2 = case chart_symbol when 'V' chart_index = case roll_result1 when 1, 2 then 0 when 3, 4 then 1 when 5 then 2 when 6 then 3 end get_table_by_1d6(VILLACIEL_PETIT_QUEST_CHART[chart_index]) when 'A' then get_table_by_1d6(ARMESEAR_PETIT_QUEST_CHART[(roll_result1 - 1) / 2]) end chart_title = case chart_symbol when 'V' then 'ぷちクエスト表(ヴィラシエル)' when 'A' then 'ぷちクエスト表(アルメサール)' end "#{chart_title} > [#{roll_result1},#{roll_result2}] > #{chart_text}" end
use_previous_job_chart(command)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 207 def use_previous_job_chart(command) match_data = command.match(/PJ([VA]?)/) chart_symbol = match_data[1] == '' ? 'V' : match_data[1] roll_result1 = @randomizer.roll_once(D6) chart_text, roll_result2 = case chart_symbol when 'V' then get_table_by_1d6(VILLACIEL_PREVIOUS_JOB_CHART[(roll_result1 - 1) / 3]) when 'A' then get_table_by_1d6(ARMESEAR_PREVIOUS_JOB_CHART[(roll_result1 - 1) / 2]) end chart_title = case chart_symbol when 'V' then '前職表(ヴィラシエル)' when 'A' then '前職表(アルメサール)' end "#{chart_title} > [#{roll_result1},#{roll_result2}] > #{chart_text}" end
use_villaciel_edible_plant_chart(chart_id, output)
click to toggle source
# File lib/bcdice/game_system/Villaciel.rb, line 491 def use_villaciel_edible_plant_chart(chart_id, output) output + use_6x6_chart(EDIBLE_PLANT_CHARTS[chart_id - 1], "可食植物表#{chart_id}(ヴィラシエル)") end