# -*- coding: utf-8 -*-
# frozen_string_literal: true

class LogHorizon_Korean < DiceBot
  # ゲームシステムの識別子
  ID = 'LogHorizon:Korean'

  # ゲームシステム名
  NAME = '로그 호라이즌'

  # ゲームシステム名の読みがな
  SORT_KEY = '国際化:Korean:로그 호라이즌'

  # ダイスボットの使い方
  HELP_MESSAGE = <<MESSAGETEXT
・판정(xLH±y>=z)
　xD6의 판정.크리티컬, 펌블의 자동 판정을 실시합니다.
　x：x로 굴릴 주사위의 수를 입력합니다.
　±y：y로 수정치를 입력합니다. ±의 계산에 대응하며 생략이 가능합니다.
  >=z：z로 목표값을 입력합니다. ±의 계산에 대응하며 생략이 가능합니다.
　예시） 3LH　2LH>=8　3LH+1>=10
・소모표(tCTx±y$z)
　PCT 체력／ECT 기력／GCT 물품／CCT 금전
　x:CR을 지정합니다.
　±y:수정치, ＋와 －의 계산에 대응하며 생략이 가능합니다.
　$z：$를 붙이면 주사위 눈을 z고정합니다. 표의 특정 값 참조용으로 사용하며.생략 가능.
　例） PCT1　ECT2+1　GCT3-1　CCT3$5
・재물표(tTRSx±y$)
　CTRS 금전／MTRS 마법소재／ITRS 환전 아이템／※HTRS 히로인／GTRS 고블린 재보표
　x：CR을 지정합니다. 생략시에는 다이치 0고정으로 수정치의 표를 참조.《골드 핑거》사용 시 등.
　±y：수정치, ＋와 －의 계산에 대응하며 생략이 가능합니다.
　$：＄을 붙이면 재물표의 다이스를 7로 고정합니다.（1차 분량의 프라이즈 용도）생략이 가능합니다.
　예시） CTRS1　MTRS2+1　ITRS3-1　ITRS+27　CTRS3$
・퍼스널리티 태그 표(PTAG)
・교우표(KOYU)
・이스탈 탐색표(ESTLx) x는 CR을 지정합니다.
・프리픽스드 매직아이템 효과 표(MGRx) x는 MG를 지정합니다.
†악기 종류 표(MIIx) x는 악기의 종류를 지정합니다.(1~6를 지정) 생략이 가능합니다.
　1 타악기1／2 건반악기／3 현악기1／4 현악기2／5 관악기1／6 관악기2
☆특수 소모표(tSCTx±y$z)　소모표와 마찬가지로 지정합니다. 다만 CR은 생략이 가능합니다.
　ESCT 로데릭 연구소는 폭발했다!／CSCT 알브의 저주다!
※공격 명중 장소 랜덤 결정표(HLOC)
※PC명 랜덤 결정표(PCNM)
※로데릭 연구소의 새로운 발명 랜덤 결정표(IATt)
  IATA 특징A(장점)／IATB 특징B(단점)／IATL 외형／IATT 종류
  t를 생략할 경우 모두 표시합니다. t에 A/B/L/T를 임의의 순서로 연결 할 수 있습니다.
  例）IAT　IATALT  IATABBLT  IATABL
※아키바 거리에서 발생하는 문제 랜덤결정 표(TIAS)
※버려진 아이 랜덤 결정 표(ABDC)
†표시와 ☆표시는「인투・더・셀덴시아 새로운 빌드의 날개짓(1)」에서、
☆표시는 셀덴시아・가제트「D 되기는 할까? 66」Vol.1에서、
※표시는「실록・칠면체공방 좌담회(여름의 장)」에서 참조했습니다. 이용법은 항목을 참조해주세요.
・D66다이스도 있습니다.

・역자의 말 : 「실록・칠면체공방 좌담회(여름의 장)」은 한국에서 발매하지 않습니다. 참고해주세요.
・이니티움님, 광황님, CoC방 여러분 감사합니다. by호흡도의식하면귀찮아
MESSAGETEXT

  setPrefixes(['\d+LH.*', 'PC.*', 'EC.*', 'GC.*', 'CC.*', 'CTR.*', 'MTR.*', 'ITR.*', 'HTR.*', 'GTR.*', 'PTAG', 'KOYU', 'MGR.', 'HLOC', 'PCNM', 'IAT.*', 'TIAS', 'ABDC', 'MII.*', 'ESCT.*', 'CSCT.*', 'ESTL.*'])

  def initialize
    super
    @d66Type = 1
  end

  def rollDiceCommand(command)
    # get～DiceCommandResultという名前のメソッドを集めて実行、
    # 結果がnil以外の場合それを返して終了。
    return analyzeDiceCommandResultMethod(command)
  end

  def getCheckRollDiceCommandResult(command)
    return nil unless /(\d+)LH([\+\-\d]*)(>=([\+\-\d]*))?/i === command

    diceCount = Regexp.last_match(1).to_i
    modifyText = (Regexp.last_match(2) || '')
    difficultyText = Regexp.last_match(4)

    # 修正値の計算
    modify = getValue(modifyText, 0)

    # 目標値の計算
    difficulty = getValue(difficultyText, nil)

    # ダイスロール
    dice, dice_str = roll(diceCount, 6)
    diceList = dice_str.split(/,/).collect { |i| i.to_i }.sort

    total = dice + modify

    # 出力用ダイスコマンドを生成
    command =  "#{diceCount}LH#{modifyText}"
    command += ">=#{difficulty}" unless difficulty.nil?

    # 출력문 생성
    result = "(#{command}) ＞ #{dice}[#{dice_str}]#{modifyText} ＞ #{total}"

    # クリティカル・ファンブルチェック
    if isCritical(diceList)
      result += " ＞ 크리티컬！"
    elsif isFamble(diceList, diceCount)
      result += " ＞ 펌블！"
    else
      result += getJudgeResultString(difficulty, total)
    end

    return result
  end

  # 成否判定
  def getJudgeResultString(difficulty, total)
    return '' if difficulty.nil?

    if total >= difficulty
      return " ＞ 성공"
    else
      return " ＞ 실패"
    end
  end

  def getValue(text, defaultValue)
    return defaultValue if text.nil? || text.empty?

    parren_killer("(0" + text + ")").to_i
  end

  def isCritical(diceList)
    (diceList.select { |i| i == 6 }.size >= 2)
  end

  def isFamble(diceList, diceCount)
    (diceList.select { |i| i == 1 }.size >= diceCount)
  end

  # 消耗表
  def getConsumptionDiceCommandResult(command)
    return nil unless /(P|E|G|C|ES|CS)CT(\d+)?([\+\-\d]*)(\$(\d+))?/ === command

    type = Regexp.last_match(1)
    is_special = (Regexp.last_match(1) && Regexp.last_match(1).length > 1)
    rank = Regexp.last_match(2) && Regexp.last_match(2) != '' ? Regexp.last_match(2).to_i : nil
    return nil if !rank && !is_special

    rank ||= 0
    is_choice = !Regexp.last_match(4).nil?
    dice_value = Regexp.last_match(5)
    modifyText = Regexp.last_match(3)
    modify = getValue(modifyText, 0)

    tableName = ""
    tables = nil

    case type
    when "P"
      tableName, tables = getPhysicalConsumptionResultTables
    when "E"
      tableName, tables = getEnergyConsumptionResultTables
    when "G"
      tableName, tables = getGoodsConsumptionResultTables
    when "C"
      tableName, tables = getCashConsumptionResultTables
    when "ES"
      tableName, tables = getExplosionSpecialConsumptionResultTables
    when "CS"
      tableName, tables = getCurseSpecialConsumptionResultTables
    else
      return nil
    end

    table = getTableByRank(rank, tables)

    number, dice_str = is_choice ? [dice_value.to_i, dice_value] : roll(1, 6)
    number += modify

    adjustedNumber = getAdjustNumber(number, table)

    result = get_table_by_number(adjustedNumber, table)

    text = "#{tableName}(#{number}[#{dice_str}])：#{result}"

    return text
  end

  def getPhysicalConsumptionResultTables()
    tableName = "체력 소모표"
    tables = [[
      [0, '소모없음'],
      [1, '[피로:5]를 받는다'],
      [2, '[피로:8]을 받는다'],
      [3, '[피로:10]을 받는다'],
      [4, '[피로:13]을 받는다'],
      [5, '[피로:15]를 받는다'],
      [6, '[피로:18]을 받는다'],
      [7, '[피로:20]을 받는다'],
    ],
              [
                [0, '소모없음'],
                [1, '[피로:10]을 받는다'],
                [2, '[피로:15]를 받는다'],
                [3, '[피로:20]을 받는다'],
                [4, '[피로:25]를 받는다'],
                [5, '[피로:30]을 받는다'],
                [6, '[피로:35]를 받는다'],
                [7, '[피로:40]을 받는다'],
              ],]

    return tableName, tables
  end

  def getEnergyConsumptionResultTables()
    tableName = "기력 소모표"
    tables = [[
      [0, '소모없음'],
      [1, '【인과력】을 1점 잃는다'],
      [2, '【인과력】을 1점 잃는다'],
      [3, '【인과력】을 1점 잃는다'],
      [4, '【인과력】을 1점 잃는다'],
      [5, '【인과력】을 2점 잃는다'],
      [6, '【인과력】을 2점 잃는다'],
      [7, '【인과력】을 2점 잃는다'],
    ],
              [
                [0, '소모없음'],
                [1, '【인과력】을 1점 잃는다'],
                [2, '【인과력】을 1점 잃는다'],
                [3, '【인과력】을 1점 잃는다'],
                [4, '【인과력】을 2점 잃는다'],
                [5, '【인과력】을 2점 잃는다'],
                [6, '【인과력】을 2점 잃는다'],
                [7, '【인과력】을 3점 잃는다'],
              ],]

    return tableName, tables
  end

  def getGoodsConsumptionResultTables()
    tableName = "물품 소모표"
    tables = [[
      [0, '소모없음'],
      [1, '[소모품] 아이템을 1개 잃는다.'],
      [2, '[소모품] 아이템을 1개 잃는다.'],
      [3, '[소모품] 아이템을 1개 잃는다.'],
      [4, '[소모품] 아이템을 2개 잃는다.'],
      [5, '[소모품] 아이템을 2개 잃는다.'],
      [6, '[소모품] 아이템을 2개 잃는다.'],
      [7, '[소모품] 아이템을 2개 잃는다.'],
    ],
              [
                [0, '소모없음'],
                [1, '[소모품] 아이템을 1개 잃는다.'],
                [2, '[소모품] 아이템을 1개 잃는다.'],
                [3, '[소모품] 아이템을 2개 잃는다.'],
                [4, '[소모품] 아이템을 2개 잃는다.'],
                [5, '[소모품] 아이템을 3개 잃는다.'],
                [6, '[소모품] 아이템을 3개 잃는다.'],
                [7, '[소모품] 아이템을 4개 잃는다.'],
              ],]

    return tableName, tables
  end

  def getCashConsumptionResultTables()
    tableName = "금전 소모표"
    tables = [[
      [0, '소모없음'],
      [1, '소지금 10G 잃는다.'],
      [2, '소지금 15G 잃는다.'],
      [3, '소지금 20G 잃는다.'],
      [4, '소지금 25G 잃는다.'],
      [5, '소지금 30G 잃는다.'],
      [6, '소지금 35G 잃는다.'],
      [7, '소지금 40G 잃는다.'],
    ],
              [
                [0, '소모없음'],
                [1, '소지금 25G 잃는다.'],
                [2, '소지금 35G 잃는다.'],
                [3, '소지금 50G 잃는다.'],
                [4, '소지금 60G 잃는다.'],
                [5, '소지금 75G 잃는다.'],
                [6, '소지금 90G 잃는다.'],
                [7, '소지금 100G 잃는다.'],
              ],]

    return tableName, tables
  end

  def getExplosionSpecialConsumptionResultTables
    tableName = "특수 소모표 : 로데릭 연구소는 폭발했다!"
    tables = [[
      [0, '……하지만 아무 일도 일어나지 않았다!: 효과 없음'],
      [1, '당신의 머리카락이 폭발했다! 멋진 아프로 헤어다: 시나리오가 끝날 때까지 [머리] 태그를 가진 장비는 장비 불가'],
      [2, '예술은 폭발이다: 소지하고 있는 아이템 중 랜덤으로 정한 하나가 예술품이 되어 [환전] 아이템이 된다.'],
      [3, '반응 기폭 장갑: 방어구 슬롯에 장비하고 있는 아이템이 쵸밤 아머가 된다. 다음에 당신이 【HP】 대미지를 받았을 때, 그 대미지를 무효로 하고 이 아이템을 잃는다.'],
      [4, '산양 슬라임이 폭발적으로 증식한다: [소지품] 슬롯을 모두 산양 슬라임([거래 불가], 가격50)으로 채운다.'],
      [5, '당신의 리얼이 폭발한다: 커넥션 하나를 시나리오가 끝날 때까지 잃는다.'],
      [6, '공장이 폭발한다: [소모품] 태그를 가진 아이템을 구입할 수 없게 된다.'],
      [7, '보스 에너미가 폭발한다: 시나리오는 클라이맥스를 맞이하지 않고 종료된다. 수고하셨습니다.'],
    ]]
    return tableName, tables
  end

  def getCurseSpecialConsumptionResultTables
    tableName = "특수 소모표: 알브의 저주다!"
    tables = [[
      [0, '「축복해주지!」 축복을 받는다: 당신의 【인과력】+1'],
      [1, '공복의 저주: 즉시 식량 아이템 하나를 먹는다. 배가 고프니 엄청 맛있어!'],
      [2, '무직의 저주: 서브 직업이 강제로〈니트〉로 변경된다.'],
      [3, '종족 변경의 저주: 랜덤으로 다이스를 굴려 다른 종족으로 변한다. 종족특기를 사용할 수 없게 된다.'],
      [4, '배리어 프리의 저주: [경감], [장벽]상태가 될 수 없게 된다.'],
      [5, '집중력을 흐트리는 속삭임의 저주:자세가 무너져 [태세] 태그를 가진 특기를 사용할 수 없게 된다.'],
      [6, '맹목의 저주: 당신이 소지한 커넥션 중 랜덤으로 선택한 관계 하나가 「열애」로 변한다.'],
      [7, '의욕이 사라지는 저주: 아~ 진짜 의욕이 안 나네. 아무 것도 하기 싫어.【인과력】 사용 불가.'],
    ]]
    return tableName, tables
  end

  def getTableByRank(rank, tables)
    index = (rank - 1) / 5

    index = [0, index].max
    index = [index, (tables.size - 1)].min

    return tables[index]
  end

  def getAdjustNumber(number, table)
    number = getAdjustNumberMin(number, table)
    number = getAdjustNumberMax(number, table)
    return number
  end

  # 최소치의 조정(값이 너무 작은경우 표의 최소)
  def getAdjustNumberMin(number, table)
    value = getTableMinimum(table)
    return [number, value].max
  end

  def getTableMinimum(table)
    table.first.first
  end

  # 최대치의 조정(값이 너무 큰 경우 표의 최대)
  def getAdjustNumberMax(number, table)
    value = table.last.first
    return [number, value].min
  end

  # 재보표
  def getTresureDiceCommandResult(command)
    return nil unless (m = /(C|M|I|H|G)TRS(\d*)([\+\-\d]*)(\$)?/.match(command))

    type = m[1]
    rank = m[2].to_i
    is_choice = (m[2].empty? || !m[4].nil?)
    modifyText = m[3]
    modify = getValue(modifyText, 0)
    is_prize = (m[4] == "$")
    dice_value = nil
    dice_value = '7' if is_prize
    is_rank_enable = (!is_choice || is_prize)

    tableName, table =
      case type
      when "C"
        getCashTresureResultTable
      when "M"
        getMagicTresureResultTable
      when "I"
        getItemTresureResultTable
      when "H"
        getHeroineTresureResultTable
      when "G"
        getGoblinTresureResultTable
      end

    return nil if table.nil?

    number, dice_str, =
      if is_choice
        [dice_value.to_i, dice_value]
      else
        roll(2, 6)
      end

    number += (rank * (is_rank_enable ? 5 : 0)) + modify

    return command if is_choice && (number < getTableMinimum(table))

    number = [getAdjustNumberMin(number, table), 87].min

    result =
      if type == "H"
        getHiroineTresureResultString(table, number)
      else
        getOtherTresureResultString(table, number)
      end

    return "#{tableName}(#{number}#{dice_str ? '[' + dice_str + ']' : ''})：#{result}"
  end

  def getHiroineTresureResultString(table, number)
    table_max_number = table.map { |e| e.first }.max

    result =
      if number <= table_max_number
        get_table_by_number(number, table)
      else
        "※ #{table_max_number + 1}이후는 미정입니다 ※"
      end

    return result
  end

  def getOtherTresureResultString(table, number)
    result =
      case number
      when 63..72
        get_table_by_number(number - 10, table) + '&80G'
      when 73..82
        get_table_by_number(number - 20, table) + '&160G'
      when 83..87
        get_table_by_number(number - 30, table) + '&260G'
      else
        get_table_by_number(number, table)
      end

    return result
  end

  def getCashTresureResultTable
    tableName = "금전 재보표"
    table = [
      [ 7, '39G'],
      [ 8, '40G'],
      [ 9, '42G'],
      [10, '43G'],
      [11, '45G'],
      [12, '46G'],
      [13, '48G'],
      [14, '50G'],
      [15, '52G'],
      [16, '54G'],
      [17, '57G'],
      [18, '59G'],
      [19, '61G'],
      [20, '64G'],
      [21, '67G'],
      [22, '70G'],
      [23, '72G'],
      [24, '75G'],
      [25, '79G'],
      [26, '82G'],
      [27, '85G'],
      [28, '89G'],
      [29, '92G'],
      [30, '96G'],
      [31, '100G'],
      [32, '104G'],
      [33, '108G'],
      [34, '112G'],
      [35, '117G'],
      [36, '121G'],
      [37, '126G'],
      [38, '130G'],
      [39, '135G'],
      [40, '140G'],
      [41, '145G'],
      [42, '150G'],
      [43, '155G'],
      [44, '161G'],
      [45, '166G'],
      [46, '172G'],
      [47, '178G'],
      [48, '183G'],
      [49, '189G'],
      [50, '195G'],
      [51, '201G'],
      [52, '208G'],
      [53, '214G'],
      [54, '221G'],
      [55, '227G'],
      [56, '234G'],
      [57, '241G'],
      [58, '248G'],
      [59, '255G'],
      [60, '262G'],
      [61, '269G'],
      [62, '277G'],
    ]

    return tableName, table
  end

  def getMagicTresureResultTable
    tableName = "마법소재 재물표"
    table = [
      [ 7, '마촉매2[마촉매2](20G)x2'],
      [ 8, '마촉매2[마촉매2](20G)x2'],
      [ 9, '마촉매1[마촉매1](15G)x3'],
      [10, '마촉매1[마촉매1](15G)x3'],
      [11, '마촉매1[마촉매1](15G)x3'],
      [12, '코발트조각[코어소재](30G)&광석 샘플[환전](15G)'],
      [13, '신록의 떡잎[코어소재](30G)&조그만 꽃씨[환전](20G)'],
      [14, '생명의 잎[코어소재](40G)&강인한 넝쿨[환전](10G)'],
      [15, '날카로운 송곳니[코어소재](40G)&잘 길든 나이프[환전](10G)'],
      [16, '마촉매3[마촉매3](25G)x2'],
      [17, '오래된 해골[코어소재](40G)&검은 시집[환전](15G)'],
      [18, '흑수련꽃잎[코어소재](40G)&물곰방대[환전](20G)'],
      [19, '순백색깃털[코어소재](40G)&조그만 고글[환전](20G)'],
      [20, '진홍색 발톱[코어소재](50G)&조그만 거울[환전](15G)'],
      [21, '적열의 작은 발톱[코어소재](50G)&세공 화로[환전](20G)'],
      [22, '자성의 작은덩쿨[코어소재](50G)&그을린 용가죽[환전](20G)'],
      [23, '유성 조각[코어소재](50G)&소박한 반지[환전](10G)x2'],
      [24, '성스러운 섬유[코어소재](50G)&흠짓 난 메달[환전](25G)'],
      [25, '부러진 축[코어소재](60G)&잡동산이 무더기[환전](5G)x4'],
      [26, '거인의 머리카락[코어소재](50G)&조그만 빗[환전](20G)'],
      [27, '정밀한 톱니바퀴[코어소재](60G)&공구강 파편[환전](25G)'],
      [28, '뾰족한 발톱[코어소재](60G)&자수 장식띠[환전](30G)'],
      [29, '촉매 플라스크[코어소재](60G)&작은 초상화[환전](30G)'],
      [30, '액화마정[코어소재](60G)&정밀한 인형[환전](35G)'],
      [31, '마촉매5[코어소재](40G)&마촉매4[마촉매4](30G)x2'],
      [32, '부드러운 돌[코어소재](80G)&소형증류기[환전](20G)'],
      [33, '수수께끼의 모피[코어소재](80G)&기묘한 두개골[환전](30G)'],
      [34, '별똥별 은사[코어소재](80G)&주석 도금 별자리판[환전](30G)'],
      [35, '마촉매5[마촉매5](40G)x3'],
      [36, '소형연성진[코어소재](100G)&기괴한 오브제[환전](20G)'],
      [37, '마촉매6[마촉매6](50G)&마촉매5[마촉매5](40G)x2'],
      [38, '주문의 씨앗[코어소재](100G)&부서진 보석[환전](30G)'],
      [39, '은제원반[코어소재](100G)&순백색 코사주[환전](30G)'],
      [40, '잠자는 씨앗[코어소재](100G)&정원사의 장식끈[환전](40G)'],
      [41, '물엿색 점액[코어소재](1210G)&극채색 입자[환전](5G)x5'],
      [42, '마촉매6[마촉매6](50G)x3'],
      [43, '납색갑각[코어소재](120G)&향긋한 꽃봉오리[환전](10G)x4'],
      [44, '마촉매7[마촉매7](60G)&마촉매6[마촉매6](50G)x2'],
      [45, '커다란 마력결정[코어소재](120G)&요정의 낙서[환전](40G)'],
      [46, '권사의 백(魄)조각[코어소재](140G)&백지 두루마리[환전](40G)'],
      [47, '마촉매7[마촉매7](60G)x3'],
      [48, '푸른광석[코어소재](140G)&천연 유리덩어리[환전](25G)x2'],
      [49, '거대한 날개깃[코어소재](140G)&두꺼운 알껍질[환전](50G)'],
      [50, '마촉매8[마촉매8](70G)x2&마촉매7[마촉매7](60G)'],
      [51, '끊임 없는 불씨[코어소재](180G)&漆黒のスス[환전](20G)'],
      [52, '마촉매8[마촉매8](70G)x3'],
      [53, '마도 정제[코어소재](180G)&つくりかけの錠前[환전](10G)x3'],
      [54, '일곱색깔 투명나사[코어소재](180G)&열리지 않는 세공상자[환전](40G)'],
      [55, '편속성 마법결정[코어소재](220G)&보고서 다발[환전](10G)'],
      [56, '마촉매9[마촉매9](90G)&마촉매8[마촉매8](70G)x2'],
      [57, '마촉매9[마촉매9](90G)&마촉매8[마촉매8](70G)x2'],
      [58, '화려한 깃털장식[코어소재](220G)&공상동물 도감[환전](30G)'],
      [59, '모래장미[코어소재](220G)&바늘 같은 수정[환전](10G)x5'],
      [60, '마촉매9[마촉매9](90G)x3'],
      [61, '튼튼한 위장[코어소재](220G)&기묘한 표본[환전](50G)'],
      [62, '마촉매10[마촉매10](110G)&마촉매9[마촉매9](90G)x2'],
    ]

    return tableName, table
  end

  def getItemTresureResultTable
    tableName = "환전아이템 재물표"
    table = [
      [ 7, '그림이 들어간 머그컵[환전](40G)'],
      [ 8, '목재 기사상[환전](40G)'],
      [ 9, '조그만 풍경화[환전](50G)'],
      [10, '기묘한 초상화[환전](50G)'],
      [11, '무도회 가면[환전](50G)'],
      [12, '주석 식기 세트[환전](50G)'],
      [13, '낡은 시집[환전](50G)'],
      [14, '화려한 자수 손수건[환전](50G)'],
      [15, '큰 도자기 접시[환전](60G)'],
      [16, '그림 두루마리[환전](60G)'],
      [17, '도자기 수반[환전](60G)'],
      [18, '세공 귀걸이[환전](60G)'],
      [19, '숙녀의 초상화[환전](70G)'],
      [20, '조그만 보석상자[환전](70G)'],
      [21, '놋쇠 촛대[환전](70G)'],
      [22, '귀족의 오래된 일기[환전](70G)'],
      [23, '기사의 초상화[환전](80G)'],
      [24, '옷칠 나막신[환전](80G)'],
      [25, '정밀한 게임 보드[환전](80G)'],
      [26, '정밀한 정물화[환전](90G)'],
      [27, '떡갈나무 의자[환전](90G)'],
      [28, '오래된 비스크 돌(러시아인형)[환전](90G)'],
      [29, '현란한 가면[환전](100G)'],
      [30, '토끼 봉제인형[환전](100G)'],
      [31, '놋쇠 몬스터상[환전](100G)'],
      [32, '지방 역사서[환전](110G)'],
      [33, '무도회 장갑[환전](110G)'],
      [34, '하이힐[환전](120G)'],
      [35, '동화책[환전](120G)'],
      [36, '소녀의 초상화[환전](130G)'],
      [37, '작은 목각인형[환전](130G)'],
      [38, '등나무 의자[환전](130G)'],
      [39, '개와 고양이 꼭두각시 인형[환전](140G)'],
      [40, '족자[환전](G140)'],
      [41, '곰 봉제인형[환전](150G)'],
      [42, '고양이 변장탈[환전](150G)'],
      [43, '학술서[환전](160G)'],
      [44, '매 박제[환전](170G)'],
      [45, '대리석 현자상[환전](170G)'],
      [46, '자수가 들어간 쿠션[환전](180G)'],
      [47, '개 변장 탈[환전](180G)'],
      [48, '대형 떡갈나무 테이블[환전](190G)'],
      [49, '조각 반지[환전](190G)'],
      [50, '화조화 족자[환전](200G)'],
      [51, '최상급 모피[환전](210G)'],
      [52, '질 좋은 백분[환전](210G)'],
      [53, '자기 찻잔[환전](220G)'],
      [54, '간소한 티아라[환전](230G)'],
      [55, '조각 귀걸이[환전](230G)'],
      [56, '화려한 목걸이[환전](240G)'],
      [57, '질 좋은 향수[환전](250G)'],
      [58, '산수화 족자[환전](250G)'],
      [59, '섬세한 드레스/예복[환전](260G)'],
      [60, '도자기 그림접시[환전](270G)'],
      [61, '여우 봉제인형[환전](270G)'],
      [62, '오래된 역사서[환전](280G)'],
    ]

    return tableName, table
  end

  def getHeroineTresureResultTable
    tableName = "히로인 재보표"
    table = [
      [ 7, '쓰러져 있는 초라한 말라깽이의 유녀'], # 라스트오더
      [ 8, '돈을 밝히는 경단머리인 차이나 아가씨'],
      [ 9, '응석부리고고 캐미솔을 어깨에 한 스웨터의 요술사'],
      [10, '작은 등으로 모두를 지키는 장면의 청바지를 입은 무투가'],
      [11, '오징어 모자를 쓴 도짓코 침략자'], # 이카무스메
      [12, '지나치게 긍정적인 자칭 명탐정씨'],
      [13, '중요한 곳에서 실수하는 부스스한 포니테일의 클레릭'],
      [14, '계란밥 좋아하는 빈유의 칸나기'],
      [15, '보석을 너무 좋아하는 억척스런 큰 리본의 이도류 세검사'],
      [16, '오크에게서 간신히 도망쳐온 검의 처녀'], # 큿 코로
      [17, '당신을 맹목적으로 찬미하는 자칭 여동생'],
      [18, '어필을 하지만 인식되지 않는 칸나기'], # 금서목록 히메가미아이사
      [19, '밝고 긍정적인 분홍색 리본의 소녀'], # 카나메 마도카(?)
      [20, '마법을 사용할수 없는 가슴이 작은게 컴플렉스인 마녀'], # 루이즈
      [21, '식욕에 일체 주저함이 없는 포동포동한 가슴의 아이돌'], # 미무라 카나코
      [22, '눈물점이 매혹의 저주인 누님계의 스워시버클러 '], # FATE 시리즈 랜서(4차)TS?!?!
      [23, '집착심이 강한 젊게 차려입은 노처녀 신화생무'], # 알퀘이드
      [24, '시가를 사랑하는 헤이안 히키코모리 공주'], # NEET히메
      [25, '병약하지만 프라이드있는 몰락귀족 아가씨'],
      [26, '활기가득! 왜소한 낭아족 야생 소녀'], # 원령공주 산
      [27, '빚더미에 올라 골판지 상자에서 사는 리코핀(로그호라 엑스트라 캐릭터)'], # 로그호라이즌 리코핀
      [28, '귀국자녀인 무녀복 스타일의 마포소녀에YO!'], # 콩고
      [29, '붙어 왔다갔다 하기만 할 수 있는 좀비 아가씨'], # 유클리우드 헬사이즈
      [30, '꿈에 한결같은 녹색머리 초시공 아이돌 후보생'], # 란카 리
      [31, '바로 발이 올라가는 뾰족한 이빨의 불량소녀'],
      [32, '지치지 않는 방패'],
      [33, '외환거래에 가진 돈을 전부 잃어 공허한 선배'], # 아이마이미의 포노카선배
      [34, '팔뚝이 말랑말랑하지만 가계부를 쓰는 마왕'], # 마오유우 마왕
      [35, '그 가슴 실로 풍만하였다는 기억상실의 여자 닌자'], # 닌자 슬레이어 유카노
      [36, '잘 옷자락을 붙잡는 양갈래 땋은 머리의 빵집 소녀'],
      [37, '「더럽다는건 칭찬이다!」라는 주관의 여자 암살자'], # 파이널 판타지 11
      [38, '단추가 터질것 같고 울상인 길드 창구의 간판아가씨'],
      [39, '뭐든지 오컬트에 아수라장이 되는 소녀'],
      [40, '전투 때마다 많이 먹어지게 되는게 고민인 궁술소녀'],
      [41, '사소한 것에 바로 얽메이게 되는 금발소녀'],
      [42, '함께 돌아가는 것을 부끄럽게 생각하는 핑크머리 소꿉친구'],
      [43, '배가 안좋아서 화장실에 상주하게 되는 엘프소녀'],
      [44, '응시하면 얼굴이 빨개지는 앞머리 법의족 소녀'],
      [45, '바로 파밧하고 겁먹는 소동물계 소녀'],
      [46, '키가 크고 신사적인 여성 극단의 왕자님역의 기사녀'],
      [47, '올곧은 성격의 근육이 있는 드워프 여자'],
      [48, '항상 꿈에서 당신을 보는 포니테일의 소녀'],
      [49, '선진선구, 심야에서 새벽까지 달리는 잠꾸러기 언니인 사무라이'],
      [50, '뭐든지 깊이 파고들려 하는 방랑자 로리BBA'],
      [51, '항상 밝은 남국의 갈색피부 소녀'],
      [52, '당신의 첫사랑과 닮은 그녀'],
    ]

    return tableName, table
  end

  def getGoblinTresureResultTable
    tableName = "고블린 재물표"
    table = [
      [ 7, '라이트메이스'],
      [ 8, '백과사전'],
      [ 9, '42G'],
      [10, '오래된 해골[코어소재](40G)'],
      [11, '가속의 두루마리(초급)'],
      [12, '46G'],
      [13, '48G'],
      [14, '50G'],
      [15, '유리구슬[환전](60G)'],
      [16, '피로 얼룩진 칼[코어소재](50G)'],
      [17, '찌그러진 금접시[환전](60G)'],
      [18, '59G'],
      [19, '모피로 된 깔개[환전](60G)'],
      [20, '뾰족한 발톱[코어소재](60G)'],
      [21, '67G'],
      [22, '흠집투성이의 상아상[환전](70G)'],
      [23, '72G'],
      [24, '라이트 랜스[파손]'],
      [25, '골제 목걸이[환전](80G)'],
      [26, '사금이 섞인 돌[환전](80G)'],
      [27, '85G'],
      [28, '향나무 파편[환전](90G)'],
      [29, '기묘한 가면[환전](90G)'],
      [30, '96G'],
      [31, '시미터'],
      [32, '우든 라운드'],
      [33, '바람 소리의 방울[코어소재](80G)&철제 전립[코어소재](30G)'],
      [34, '112G'],
      [35, '산양슬라임(라지사이즈)[환전](120G)'],
      [36, '121G'],
      [37, '고급 노송나무[환전](125G)'],
      [38, '130G'],
      [39, '크리스탈제 체스말[환전](135G)'],
      [40, '140G'],
      [41, '텐트(캠핑용)'],
      [42, '이상한 환약[코어소재](30G)×2&100G'],
      [43, '수수께끼의 모피[코어소재](80G)&원한의 고리[코어소재](80G)'],
      [44, '의식용 뼈 검[환전](160G)'],
      [45, '낡은 동전[환전](165G)'],
      [46, '낭아봉'],
      [47, '법리회로[코어소재](60G)&120G'],
      [48, '커다란 마력회로[코어소재](120G)&60G'],
      [49, '189G'],
      [50, '고급 통술[환전](200G)'],
      [51, '201G'],
      [52, '백색 반지'],
      [53, '비취 목걸이[환전](210G)'],
      [54, '황금 고블린상[환전](220G)'],
      [55, '샤벨'],
      [56, '진철 검신[코어소재](120G)&120G'],
      [57, '지저분한청자[환전](240G)'],
      [58, '톤스톤의 모듬 꼬치구이×2'],
      [59, '고블린 왕의 훈장[환전](255G)'],
      [60, '실눈뜨기의 두루마리(중급)×2'],
      [61, '269G'],
      [62, '백랑의 모피[환전](280G)'],
    ]

    return tableName, table
  end

  # パーソナリティタグ表
  def getPersonalityTagDiceCommandResult(command)
    return nil unless "PTAG" === command

    tableName = "퍼스널리티 태그"
    table = [
      '[조숙]',
      '[호기심왕성]',
      '[외로움쟁이]',
      '[지극성실]',
      '[먹보]',
      '[개구쟁이]또는[말괄량이]',

      '[사람좋음]',
      '[정열]',
      '[남챙겨주기]',
      '[이지적]',
      '[벽창호]',
      '[형님 기질]또는[누님 기질]',

      '[의리투철]',
      '[변덕쟁이]',
      '[장인기질]',
      '[열혈한]',
      '[노력가]',
      '[남자밝힘]또는[여자밝힘]',

      '[가정적]',
      '[호승심]',
      '[순진]',
      '[무뚝뚝이]',
      '[자비로움]',
      '[마이페이스]',

      '[낙천가]',
      '[동료애]',
      '[자긍심]',
      '[사교적]',
      '[냉정침착]',
      '[로맨티스트]',

      '[학구적]',
      '[내향적]',
      '[사서고생]',
      '[허영심]',
      '[용맹과감]',
      '[미스테리어스]',
    ]

    result, number = get_table_by_d66(table)

    text = "#{tableName}(#{number})：#{result}"
    return text
  end

  # 交友表
  def getFriendlyChartDiceCommandResult(command)
    return nil unless "KOYU" === command

    tableName = "교우표"
    table = [
      "교우대상에 대한 보호\n당신은 교우대상을 보호하고 싶다. 당신에게는 지켜줄수 있는 강함이 있다.",
      "교우대상에 대한 친애\n당신은 교우대상에게 호감을 가지고 있다. 그 마음을 상대에게 전했을지 아닐지는 임의. ",
      "교우대상에 대한 의형제\n당신은 교우대상과 형제나 다름없는 사이다. 물론 피는 이어지지 않았지만 그런것은 사소한 일이다.",
      "교우대상의 영웅\n당신은 교우대상에게서 영웅시되고 있다. 설령 당신이 부정하더라도 상관 없다.",
      "교우대상에 대한 존경\n당신은 교우대상을 존경한다. 그의 기술, 강인한 마음. 그것이 무엇이든 그에대한 경의는 변함이 없다.",
      "교우대상의 파트너\n당신은 교우대상을 파트너라고 생각한다. 그라면 자신과 함께 가 줄 것이다.",

      "교우대상에 대한 보호\n당신은 교우대상을 보호하고 싶다. 당신에게는 지켜줄수 있는 강함이 있다.",
      "교우대상에 대한 친애\n당신은 교우대상에게 호감을 가지고 있다. 그 마음을 상대에게 전했을지 아닐지는 임의. ",
      "교우대상에 대한 의형제\n당신은 교우대상과 형제나 다름없는 사이다. 물론 피는 이어지지 않았지만 그런것은 사소한 일이다.",
      "교우대상의 영웅\n당신은 교우대상에게서 영웅시되고 있다. 설령 당신이 부정하더라도 상관 없다.",
      "교우대상에 대한 존경\n당신은 교우대상을 존경한다. 그의 기술, 강인한 마음. 그것이 무엇이든 그에대한 경의는 변함이 없다.",
      "교우대상의 파트너\n당신은 교우대상을 파트너라고 생각한다. 그라면 자신과 함께 가 줄 것이다.",

      "교우대상의 은혜\n당신은 교우대상에게 큰 은혜를 입었다.",
      "교우대상의 라이벌\n당신은 교우대상을 라이벌이라고 생각한다. 이는 일반적인 감정일 수도 있고, 서로 절차탁마 하는 관계일 수도 있다.",
      "교우대상에 대한 흥미\n당신은 교우대상에게 흥미를 품고 있다. 그를 보는것이 재미있어서 그의 행동을 지켜보고 싶다.",
      "교우대상에 대한 우정\n당신은 교우대상을 벗이라고 생각한다. 언제 어디서나 그 마음은 변하지 않을 것이다.",
      "교우대상의 동지\n당신은 교우대상과 뜻을 함께 한다. 언제나 어디서나 그 마음은 변하지 않을 것이다.",
      "교우대상에 대한 이해\n당신은 교우대상을 이해하고 싶다. 그는 당신과는 다른 새로운 관점을 보여준다.",

      "교우대상의 은혜\n당신은 교우대상에게 큰 은혜를 입었다.",
      "교우대상의 라이벌\n당신은 교우대상을 라이벌이라고 생각한다. 이는 일반적인 감정일 수도 있고, 서로 절차탁마 하는 관계일 수도 있다.",
      "교우대상에 대한 흥미\n당신은 교우대상에게 흥미를 품고 있다. 그를 보는것이 재미있어서 그의 행동을 지켜보고 싶다.",
      "교우대상에 대한 우정\n당신은 교우대상을 벗이라고 생각한다. 언제 어디서나 그 마음은 변하지 않을 것이다.",
      "교우대상의 동지\n당신은 교우대상과 뜻을 함께 한다. 언제나 어디서나 그 마음은 변하지 않을 것이다.",
      "교우대상에 대한 이해\n당신은 교우대상을 이해하고 싶다. 그는 당신과는 다른 새로운 관점을 보여준다.",

      "교우대상에 대한 진력\n당신은 교우대상을 힘껏 돕고 싶다. 그것은 그의 인품 때문일 수도, 당신의 집착 때문일 수도 있다.",
      "교우대상과의 사제관계\n당신은 교우대상과 사제관계를 맺었다. 어느쪽이라도 상관은 없지만 많은 것을 가르치거나 배울 수 있을 것이다.",
      "교우대상과의 고용관계\n당신은 교우대상과 고용관계에 있다. 당신과 그는 ",
      "교우대상의 이웃\n당신은 교우대상의 이웃이다. 매일 아침 인사를 나누는 정도일 수도 있고, 함께 저녁을 먹는 사이일 수도 있다.",
      "교우대상과의 거래\n당신은 교우대상과 장사를 한다. 서로에게 이익이 있는 좋은 거래를 할 수 있는 상대다.",
      "교우대상의 가족\n당신은 교우대상과 함께 살고 있다. 같은집에 누군가 있으면 쓸쓸하지 않을 것이다.",

      "교우대상에 대한 진력\n당신은 교우대상을 힘껏 돕고 싶다. 그것은 그의 인품 때문일 수도, 당신의 집착 때문일 수도 있다.",
      "교우대상과의 사제관계\n당신은 교우대상과 사제관계를 맺었다. 어느쪽이라도 상관은 없지만 많은 것을 가르치거나 배울 수 있을 것이다.",
      "교우대상과의 고용관계\n당신은 교우대상과 고용관계에 있다. 당신과 그는 ",
      "교우대상의 이웃\n당신은 교우대상의 이웃이다. 매일 아침 인사를 나누는 정도일 수도 있고, 함께 저녁을 먹는 사이일 수도 있다.",
      "교우대상과의 거래\n당신은 교우대상과 장사를 한다. 서로에게 이익이 있는 좋은 거래를 할 수 있는 상대다.",
      "교우대상의 가족\n당신은 교우대상과 함께 살고 있다. 같은집에 누군가 있으면 쓸쓸하지 않을 것이다.",
    ]

    result, number = get_table_by_d66(table)

    text = "#{tableName}([#{number}]) ＞ #{result}"
    return text
  end

  # プレフィックスドマジックアイテム表
  def getPrefixedMagickItemDiceCommandResult(command)
    return nil unless /MGR([1-3])/ === command

    rank = Regexp.last_match(1).to_i

    table_1 = [
      "접두어：기합의　해당태그：모든 무기\n아이템 효과：이 무기의【공격력】에 ＋１한다.",
      "접두어：비술의　해당태그：[지팡이][마석]\n아이 템효과：이 아이템의【마력】에 ＋１한다.",
      "접두어：일격의　해당태그：[백병공격]가능한 무기\n아이템 효과：〔기동：대미지굴림〕이 무기에 의한 [백병공격]의 대미지 굴림에 ＋７. 시나리오 당 1회 사용 가능.",
      "접두어：저격의　해당태그：[활][투척]\n아이템 효과：〔기동：행동〕이 무기에 의한 [사격공격]과 동시에 사용한다. 공격의 사정거리에 ＋２Ｓｑ. 시나리오당 1회사용가능",
      "접두어：필살의　해당태그：모든 무기\n아이템 효과：〔기동：판정 직후〕이 무기에 의한[무기공격]의 [명중판정] 다이스에 ６이 하나 이상 있다면 판정을 크리티컬로 간주한다. 시나리오당 1회 사용 가능.",
      "접두어：화염의　해당태그：모든 무기, [악기]\n아이템 효과：아이템에 [화염]태그를 추가한다.（이 효과를 선택할 때 태그를[냉기][전격][광휘][사독][정신] 중 하나로 바뀌어도 좋다. 그 경우「냉기의」「전격의」와 같이 변경할 것）",

      "접두어：기합의　해당태그：모든 무기\n아이템 효과：이 무기의【공격력】에 ＋１한다.",
      "접두어：비술의　해당태그：[지팡이][마석]\n아이 템효과：이 아이템의【마력】에 ＋１한다.",
      "접두어：일격의　해당태그：[백병공격]가능한 무기\n아이템 효과：〔기동：대미지굴림〕이 무기에 의한 [백병공격]의 대미지 굴림에 ＋７. 시나리오 당 1회 사용 가능.",
      "접두어：저격의　해당태그：[활][투척]\n아이템 효과：〔기동：행동〕이 무기에 의한 [사격공격]과 동시에 사용한다. 공격의 사정거리에 ＋２Ｓｑ. 시나리오당 1회사용가능",
      "접두어：필살의　해당태그：모든 무기\n아이템 효과：〔기동：판정 직후〕이 무기에 의한[무기공격]의 [명중판정] 다이스에 ６이 하나 이상 있다면 판정을 크리티컬로 간주한다. 시나리오당 1회 사용 가능.",
      "접두어：화염의　해당태그：모든 무기, [악기]\n아이템 효과：아이템에 [화염]태그를 추가한다.（이 효과를 선택할 때 태그를[냉기][전격][광휘][사독][정신] 중 하나로 바뀌어도 좋다. 그 경우「냉기의」「전격의」와 같이 변경할 것）",

      "접두어：화염술사의　해당태그：[지팡이][마석][다리]\n아이템 효과：〔기동：대미지 굴림〕당신이 행할 [화염]태그를 가진 대미지굴림에 +7, 시나리오당 1회 사용가능 (이 효과를 선택할 때에는 태그를 [냉기], [전격], [광휘], [사독], [정신] 중 하나로 바꾸어도 좋다. 그 경우 접두어도 [빙술사의], [뇌술사의]와 같이 플레이 할것)",
      "접두어：철신의　해당태그：[방패][중갑][경갑]\n아이템 효과：당신은 장면이 시작될 때[경감(지근거리부터의 공격) ：３]을 얻는다.",
      "접두어：화살막이의　해당태그：[盾][中鎧][軽鎧]\n아이템 효과：당신은 장면이 시작될 때[경감(지근거리 이외로부터의 공격) ：３]을 얻는다.",
      "접두어：화염막이의　해당태그：[중갑][경갑][연갑]\n아이템 효과：당신은 장면 개시시에 [경감（화염）：１０]을 받는다.（이 효과를 선택할 때 경감할 태그를 [냉기], [전격], [사독], [광휘] [정신] 중 하나로 바꾸어도 좋다. 그 경우 접두어도「얼음막이의」,「벼락막이의」와 같이 변경할 것）",
      "접두어：근성의　해당태그：[중갑][머리]\n아이템 효과：〔기동：본문〕당신이 BS를 입은 직후에 사용한다. 직전에 입은 BS에서 하나를 선택해 해제한다. 시나리오당 1회 사용 가능",
      "접두어：치유의　해당태그：[팔]\n아이템 효과：당신의【회복력】에 ＋２한다.",

      "접두어：화염술사의　해당태그：[지팡이][마석][다리]\n아이템 효과：〔기동：대미지 굴림〕당신이 행할 [화염]태그를 가진 대미지굴림에 +7, 시나리오당 1회 사용가능 (이 효과를 선택할 때에는 태그를 [냉기], [전격], [광휘], [사독], [정신] 중 하나로 바꾸어도 좋다. 그 경우 접두어도 [빙술사의], [뇌술사의]와 같이 플레이 할것)",
      "접두어：철신의　해당태그：[방패][중갑][경갑]\n아이템 효과：당신은 장면이 시작될 때[경감(지근거리부터의 공격) ：３]을 얻는다.",
      "접두어：화살막이의　해당태그：[盾][中鎧][軽鎧]\n아이템 효과：당신은 장면이 시작될 때[경감(지근거리 이외로부터의 공격) ：３]을 얻는다.",
      "접두어：화염막이의　해당태그：[중갑][경갑][연갑]\n아이템 효과：당신은 장면 개시시에 [경감（화염）：１０]을 받는다.（이 효과를 선택할 때 경감할 태그를 [냉기], [전격], [사독], [광휘] [정신] 중 하나로 바꾸어도 좋다. 그 경우 접두어도「얼음막이의」,「벼락막이의」와 같이 변경할 것）",
      "접두어：근성의　해당태그：[중갑][머리]\n아이템 효과：〔기동：본문〕당신이 BS를 입은 직후에 사용한다. 직전에 입은 BS에서 하나를 선택해 해제한다. 시나리오당 1회 사용 가능",
      "접두어：치유의　해당태그：[팔]\n아이템 효과：당신의【회복력】에 ＋２한다.",

      "접두어：모래쥐의　해당태그：[다리][외투]\n아이템 효과：〔기동：클린업〕당신의【헤이트】에 ー２한다. 시나리오당１회 사용가능.",
      "접두어：올뺴미의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：인스턴트〕당신은 [암시]태그를 얻는다. 이 효과는 CS로 간주한다. 시나리오당 1회 사용가능.",
      "접두어：곤들매기의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：인스턴트〕당신은 [수생]태그를 얻는다. 이 효과는 CS로 간주한다. 시나리오당 １회 사용가능.",
      "접두어：눈썰미의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：본문〕당신이 드롭 아이템 굴림을 한 직후에 사용해 해당 굴림을 다시 굴린다. 시나리오당 １회 사용가능.",
      "접두어：보물 찾기의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：본문〕당신이 재물표 굴림을 한 직후에 사용해 해당 굴림을 다시 굴린다.. 시나리오당 １회 사용가능.",
      "접두어：돌변의　해당태그：[가방]\n아이템 효과：〔기동：인스턴트〕당신은 곧바로《장비 변경》을 한다. 시나리오당 １회 사용가능.",

      "접두어：모래쥐의　해당태그：[다리][외투]\n아이템 효과：〔기동：클린업〕당신의【헤이트】에 ー２한다. 시나리오당１회 사용가능.",
      "접두어：올뺴미의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：인스턴트〕당신은 [암시]태그를 얻는다. 이 효과는 CS로 간주한다. 시나리오당 1회 사용가능.",
      "접두어：곤들매기의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：인스턴트〕당신은 [수생]태그를 얻는다. 이 효과는 CS로 간주한다. 시나리오당 １회 사용가능.",
      "접두어：눈썰미의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：본문〕당신이 드롭 아이템 굴림을 한 직후에 사용해 해당 굴림을 다시 굴린다. 시나리오당 １회 사용가능.",
      "접두어：보물 찾기의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：본문〕당신이 재물표 굴림을 한 직후에 사용해 해당 굴림을 다시 굴린다.. 시나리오당 １회 사용가능.",
      "접두어：돌변의　해당태그：[가방]\n아이템 효과：〔기동：인스턴트〕당신은 곧바로《장비 변경》을 한다. 시나리오당 １회 사용가능.",
    ]

    table_2 = [
      "접두어：분노의　해당태그：[양손]무기\n아이템 효과：〔기동：대미지굴림〕이 무기에 의한 [무기공격]의 대미지 굴림에＋[당신의【헤이트】]. 장면에 1회 사용가능.",
      "접두어：연격의　해당태그：[한손]무기\n아이템 효과：〔기동：판정 직후〕이 무기에 의한 [무기공격]의 [명중판정]을 다시 굴린다. 장면에 1회 사용가능.",
      "접두어：예리한　해당태그：[검][카타나][창]\n아이템 효과：이 무기에 의한 [무기공격]의 대미지 굴림에 ＋１Ｄ",
      "접두어：치명타의　해당태그：[둔기/도끼][격투][채찍][지팡이]\n아이템 효과：이 무기에 의한 [무기공격]의 대미지 굴림에 ＋１Ｄ",
      "접두어：마탄의　해당태그：[활][투척]\n아이템 효과：이 무기에 의한 [무기공격]의 대미지 굴림에 ＋１Ｄ",
      "접두어：지력의　해당태그：모든무기, [마석][악기]\n아이템 효과：당신의 [마법공격], [특수공격]의 대미지 굴림에 ＋１Ｄ. 이 효과는 중첩되지 않는다.",

      "접두어：분노의　해당태그：[양손]무기\n아이템 효과：〔기동：대미지굴림〕이 무기에 의한 [무기공격]의 대미지 굴림에＋[당신의【헤이트】]. 장면에 1회 사용가능.",
      "접두어：연격의　해당태그：[한손]무기\n아이템 효과：〔기동：판정 직후〕이 무기에 의한 [무기공격]의 [명중판정]을 다시 굴린다. 장면에 1회 사용가능.",
      "접두어：예리한　해당태그：[검][카타나][창]\n아이템 효과：이 무기에 의한 [무기공격]의 대미지 굴림에 ＋１Ｄ",
      "접두어：치명타의　해당태그：[둔기/도끼][격투][채찍][지팡이]\n아이템 효과：이 무기에 의한 [무기공격]의 대미지 굴림에 ＋１Ｄ",
      "접두어：마탄의　해당태그：[활][투척]\n아이템 효과：이 무기에 의한 [무기공격]의 대미지 굴림에 ＋１Ｄ",
      "접두어：지력의　해당태그：모든무기, [마석][악기]\n아이템 효과：당신의 [마법공격], [특수공격]의 대미지 굴림에 ＋１Ｄ. 이 효과는 중첩되지 않는다.",

      "접두어：악귀퇴치의　해당태그：모든 무기\n아이템 효과：이 무기에 의한 [인간형]에 대한 [무기공격]의 대미지에 ＋１0 (이효과를 선택할 때 태그를 [자연],[정령],[환수],[불사],[인조],[인간]중 하나로 바꾸어도 좋다. 그 경우 접두어도「정령퇴치의」 「환수퇴치의」와 같이 변경할 것)",
      "접두어：견고한　해당태그：[중갑][경갑][연갑]\n아이템 효과：이 방어구의 【물리방어력】에 ＋４",
      "접두어：항마의　해당태그：[중갑][경갑][연갑]\n아이템 효과：이 방어구의 【마법방어력】에 ＋４",
      "접두어：방벽의　해당태그：[방패][머리]\n아이템 효과：당신은 장면이 시작될 때 [장벽：１０]을 얻는다.",
      "접두어：인내의　해당태그：[방패][머리]\n아이템 효과：〔기동：본문〕당신이 강제적인 이동을 받았을 때에 사용해 해당 거리를ー１Ｓｑ한다.",
      "접두어：호법의　해당태그：[팔]\n아이템 효과：당신이 부여할 [장벽]의 강도에 ＋５.",

      "접두어：악귀퇴치의　해당태그：모든 무기\n아이템 효과：이 무기에 의한 [인간형]에 대한 [무기공격]의 대미지에 ＋１0 (이효과를 선택할 때 태그를 [자연],[정령],[환수],[불사],[인조],[인간]중 하나로 바꾸어도 좋다. 그 경우 접두어도「정령퇴치의」 「환수퇴치의」와 같이 변경할 것)",
      "접두어：견고한　해당태그：[중갑][경갑][연갑]\n아이템 효과：이 방어구의 【물리방어력】에 ＋４",
      "접두어：항마의　해당태그：[중갑][경갑][연갑]\n아이템 효과：이 방어구의 【마법방어력】에 ＋４",
      "접두어：방벽의　해당태그：[방패][머리]\n아이템 효과：당신은 장면이 시작될 때 [장벽：１０]을 얻는다.",
      "접두어：인내의　해당태그：[방패][머리]\n아이템 효과：〔기동：본문〕당신이 강제적인 이동을 받았을 때에 사용해 해당 거리를ー１Ｓｑ한다.",
      "접두어：호법의　해당태그：[팔]\n아이템 효과：당신이 부여할 [장벽]의 강도에 ＋５.",

      "접두어：맥동하는　해당태그：[팔]\n아이템 효과：당신이 부여하는 [재생]의 강도에＋３.",
      "접두어：질주하는　해당태그：[다리][외투]\n아이템 효과：〔기동：행동〕당신이 《런》, 《대시》를 사용했을  때에 사용해 이동거리를 +1Sq 한다. ",
      "접두어：신속의　해당태그：[다리][외투]\n아이템 효과：이 아이템의 [행동수정]에 ＋３.",
      "접두어：역경의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：본문〕당신이 [전투불능]이 된 직후 사용할 수 있다.당신은 【인과력】１점 얻는다. 장면에 1회사용 가능",
      "접두어：숲지름　해당태그：[보조장비][악기][가방]\n아이템 효과：당신이 장면을 시작 될 때 [경감([천연]프롭, 기믹에서 오는 데미지): 15]를 얻는다.(이 효과를 선택할 때 태그를[마법], [기계] 중 하나로 바꾸어도 좋다. 그 경우 접두어도 [지옥지름], [함정지름]과 같이 변경할 것)",
      "접두어：여행자의　해당태그：[가방]\n아이템 효과：이 아이템에 [소지품 슬롯] 4개를 추가한다.",

      "접두어：맥동하는　해당태그：[팔]\n아이템 효과：당신이 부여하는 [재생]의 강도에＋３.",
      "접두어：질주하는　해당태그：[다리][외투]\n아이템 효과：〔기동：행동〕당신이 《런》, 《대시》를 사용했을  때에 사용해 이동거리를 +1Sq 한다. ",
      "접두어：신속의　해당태그：[다리][외투]\n아이템 효과：이 아이템의 [행동수정]에 ＋３.",
      "접두어：역경의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：본문〕당신이 [전투불능]이 된 직후 사용할 수 있다.당신은 【인과력】１점 얻는다. 장면에 1회사용 가능",
      "접두어：숲지름　해당태그：[보조장비][악기][가방]\n아이템 효과：당신이 장면을 시작 될 때 [경감([천연]프롭, 기믹에서 오는 데미지): 15]를 얻는다.(이 효과를 선택할 때 태그를[마법], [기계] 중 하나로 바꾸어도 좋다. 그 경우 접두어도 [지옥지름], [함정지름]과 같이 변경할 것)",
      "접두어：여행자의　해당태그：[가방]\n아이템 효과：이 아이템에 [소지품 슬롯] 4개를 추가한다.",
    ]

    table_3 = [
      "접두어：기백의　해당태그：모든 무기\n아이템 효과：이 무기의【공격력】에 ＋３한다.",
      "접두어：신비의　해당태그：[지팡이][마석]\n아이템 효과：이 무기의【마력】에 ＋３한다.",
      "접두어：원격의　해당태그：[활][트착]\n아이템 효과：이 무기의 사정거리에 ＋１Ｓｑ한다.",
      "접두어：흡혈의　해당태그：[백병공격]가능한 무기\n아이템 효과：이 무기에의한[백병공격]으로 데미지를 입혔을 때【HP】는５점 회복된다.",
      "접두어：충격의　해당태그：[한손]무기\n아이템 효과：이 무기에 의한《기본무기공격》으로 데미지를 입혔을 때 공격 대상에게 [멍함]을 입힌다.",
      "접두어：노호의　해당태그：[양손]무기\n아이템 효과：이 무기에 의한《기본무기공격》으로 데미지를 입혔을 때 공격 대상에게 [위축]을 입힌다.",

      "접두어：기백의　해당태그：모든 무기\n아이템 효과：이 무기의【공격력】에 ＋３한다.",
      "접두어：신비의　해당태그：[지팡이][마석]\n아이템 효과：이 무기의【마력】에 ＋３한다.",
      "접두어：원격의　해당태그：[활][트착]\n아이템 효과：이 무기의 사정거리에 ＋１Ｓｑ한다.",
      "접두어：흡혈의　해당태그：[백병공격]가능한 무기\n아이템 효과：이 무기에의한[백병공격]으로 데미지를 입혔을 때【HP】는５점 회복된다.",
      "접두어：충격의　해당태그：[한손]무기\n아이템 효과：이 무기에 의한《기본무기공격》으로 데미지를 입혔을 때 공격 대상에게 [멍함]을 입힌다.",
      "접두어：노호의　해당태그：[양손]무기\n아이템 효과：이 무기에 의한《기본무기공격》으로 데미지를 입혔을 때 공격 대상에게 [위축]을 입힌다.",

      "접두어：갑주비늘　해당태그：[방패][중갑][경갑]\n아이템 효과：당신은 장면이 시작 될 때 [경감(지근거리로부터의 공격)：10]을 얻는다.",
      "접두어：화살반사　해당태그：[방패][경갑][연갑]\n아이템 효과：당신은 장면이 시작 될 때 [경감(지근거리 이외로부터의 공격) ：10]을 얻는다.",
      "접두어：내화의　	해당태그：[중갑][경갑][연갑]\n아이템 효과：당신은 장면이 시작 될 때 [경감(화염) ：25]를 얻는다. (이 효과를 선택할 때 경감할 태그를 [냉기], [전격], [사독], [광휘], [정신]중 하나로 바꾸어도 좋다. 이경우 접두어도「내빙의」「내전의」와 같이 변경했어)",
      "접두어：성채의　	해당태그：[방패][머리]\n아이템 효과：당신은 장면이 시작 될 때 【장벽：２０】을 얻는다.",
      "접두어：정찰의　	해당태그：[머리]\n아이템 효과：당신이 행할[정찰]태그를 가진 행동 및《이상탐지》판정에＋１Ｄ.",
      "접두어：쾌유의　	해당태그：[머리]\n아이템 효과：당신의【회복력】에＋５.",

      "접두어：갑주비늘　해당태그：[방패][중갑][경갑]\n아이템 효과：당신은 장면이 시작 될 때 [경감(지근거리로부터의 공격：10]을 얻는다.",
      "접두어：화살반사　해당태그：[방패][경갑][연갑]\n아이템 효과：당신은 장면이 시작 될 때 [경감(지근거리 이외로부터의 공격) ：10]을 얻는다.",
      "접두어：내화의　	해당태그：[중갑][경갑][연갑]\n아이템 효과：당신은 장면이 시작 될 때 [경감(화염) ：25]를 얻는다. (이 효과를 선택할 때 경감할 태그를 [냉기], [전격], [사독], [광휘], [정신]중 하나로 바꾸어도 좋다. 이경우 접두어도「내빙의」「내전의」와 같이 변경했어)",
      "접두어：성채의　	해당태그：[방패][머리]\n아이템 효과：당신은 장면이 시작 될 때 【장벽：２０】을 얻는다.",
      "접두어：정찰의　	해당태그：[머리]\n아이템 효과：당신이 행할[정찰]태그를 가진 행동 및《이상탐지》판정에＋１Ｄ.",
      "접두어：쾌유의　	해당태그：[머리]\n아이템 효과：당신의【회복력】에＋５.",

      "접두어：함정해제의　해당태그：[팔]\n아이템 효과：〔기동：판정 직전〕당신이 《프롭 해제》를 행할 때 사용하며그 판정은 크리티컬이 된다. 장면에１회 사용 가능",
      "접두어：부동의	　해당태그：[다리][외투]\n아이템 효과：당신은 [멍함],[경직]상태가 되어도 [저지능력]을 잃지 않는다.",
      "접두어：그림자질주　해당태그：[다리][외투]\n아이템 효과：당신이 [은밀상태]일 때《런》을 해도 [은밀상태]는 해제되지 않는다.",
      "접두어：심해의	　해당태그：[보조장비][악기][가방]\n아이템 효과： 당신은 [암시],[수생]태그를 얻는다.",
      "접두어：금전운의	　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：본문〕당신이 재물표 굴림 또는 드롭 아이템 굴림을 한 직후에 사용하며 해당 굴림을 다시 굴린다. 장면에１회 사용할 수 있다.",
      "접두어：함정회피의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：데미지 적용 직전〕당신에게 적용될 예정인 프롭 및[기믹]에 의한 데미지를 무효로 할 수 있다. 시나리오당１회 사용할 수 있다.",

      "접두어：함정해제의　해당태그：[팔]\n아이템 효과：〔기동：판정 직전〕당신이 《프롭 해제》를 행할 때 사용하며그 판정은 크리티컬이 된다. 장면에１회 사용 가능",
      "접두어：부동의	　해당태그：[다리][외투]\n아이템 효과：당신은 [멍함],[경직]상태가 되어도 [저지능력]을 잃지 않는다.",
      "접두어：그림자질주　해당태그：[다리][외투]\n아이템 효과：당신이 [은밀상태]일 때《런》을 해도 [은밀상태]는 해제되지 않는다.",
      "접두어：심해의	　해당태그：[보조장비][악기][가방]\n아이템 효과： 당신은 [암시],[수생]태그를 얻는다.",
      "접두어：금전운의	　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：본문〕당신이 재물표 굴림 또는 드롭 아이템 굴림을 한 직후에 사용하며 해당 굴림을 다시 굴린다. 장면에１회 사용할 수 있다.",
      "접두어：함정회피의　해당태그：[보조장비][악기][가방]\n아이템 효과：〔기동：데미지 적용 직전〕당신에게 적용될 예정인 프롭 및[기믹]에 의한 데미지를 무효로 할 수 있다. 시나리오당１회 사용할 수 있다.",
    ]

    tableName = "프리픽스드 아이템 효과표"
    table = nil

    case rank
    when 1
      tableName += "（매직 그레이드１）"
      table = table_1
    when 2
      tableName += "（매직 그레이드２）"
      table = table_2
    when 3
      tableName += "（매직그레이드３）"
      table = table_3
    end

    result, number = get_table_by_d66(table)

    text = "#{tableName}([#{number}]) ＞ #{result}"
    return text
  end

  # 공격 명중 장소 랜덤결정표
  def getHitLocationDiceCommandResult(command)
    return nil unless "HLOC" === command

    tableName = "공격명중장소"
    table = [
      '이마',
      '뺨',
      '코',
      '턱',
      '뒷통수',
      '목',

      '귀',
      '눈',
      '관자놀이',
      '팔',
      '팔꿈치',
      '손',

      '손가락',
      '심장',
      '위',
      '폐',
      '갈비',
      '어깨',

      '등',
      '옆구리',
      '허리',
      '아랫배',
      '허벅지',
      '목',

      '장딴지',
      '아킬레스건',
      '발 뒤꿈치',
      '정강이',
      '새끼 발가락',
      '무릅',

      '사회적 신용',
      '인간관계',
      '첫사랑의 추억',
      '완벽한 예측',
      '마음',
      '안경',
    ]
    result, number = get_table_by_d66(table)
    "#{tableName}(#{number})：#{result}"
  end

  # PC명 랜덤 결정표
  def getPCNameDiceCommandResult(command)
    return nil unless "PCNM" === command

    tableName = "PC名"
    table = [
      'Kuraudo',
      'Sefirosu',
      'Kirito',
      'Asuna',
      'Leeroy Jenkins',
      'Buront',

      '의사양반',
      '거대도너츠',
      '이등병가민',
      '버섯대위',
      '∃@ㅏ이돌전도사E',
      '작업장',

      '크로울리',
      '다이테스',
      '타츠야',
      '미유키',
      '슬레인',
      '타카본씨',

      '흑의 연금술사',
      '†사랑의천사네코히메†',
      '데스★건',
      '卍칠흑의타천사卍',
      '광속의이명을가지고중력을자유자재로조종하는고귀한기사',
      '신세계†영걸살해자',

      '로그호라',
      'ㄱㄱㄱㄱ',
      '창고',
      '은행',
      '보관',
      '위탁',

      '사스케',
      '라파엘로',
      '도나텔로',
      '미켈란젤로',
      '센다이',
      '후지키도',
    ]

    result, number = get_table_by_d66(table)

    return "#{tableName}(#{number})：#{result}"
  end

  # ロデ研の新発明ランダム決定表
  def getInventionAttributeTextDiceCommandResult(command)
    return nil unless /IAT([ABMDLT]*)/ === command

    tableName = "로데릭 연구소의 새로운 발명"

    table_indicate_string = Regexp.last_match(1) && Regexp.last_match(1) != '' ? Regexp.last_match(1) : 'MDLT'
    is_single = (table_indicate_string.length == 1)

    result = []
    number = []

    table_indicate_string.split(//).each do |char|
      dice_result, dice_str = roll(1, 6)
      number << dice_str
      result << case char
                when 'A', 'M'
                  [
                    '빛나고 돌며 소리가 울리는',
                    '무언가를 자각한',
                    '단단하고 강한',
                    '굉장히 빠르거나 거친',
                    '대량 생산이 가능한',
                    '좋은 감촉의',
                  ].map { |e| (is_single ? '특징A(장점)：' : '') + e }
                when 'B', 'D'
                  [
                    '중독성 있는',
                    '굉장히 무거운',
                    '굉장히 냄새나는',
                    '망가지기 쉬운',
                    '설명할 것이 많은',
                    '버려도 버려도 되돌아오는	',
                  ].map { |e| (is_single ? '특징B(단점)：' : '') + e }
                when 'L'
                  [
                    '아름다운',
                    '소박한',
                    '풍류있는',
                    '참신한',
                    '형언할 수 없는',
                    '목숨을 깍는 형태를 한',
                  ].map { |e| (is_single ? '형용：' : '') + e }
                when 'T'
                  [
                    '무기',
                    '방어구',
                    '악세사리',
                    '식량',
                    '약품',
                    '장난감',
                  ].map { |e| (is_single ? '발명품의 종류：' : '') + e }
                end[dice_result - 1]
    end

    return "#{tableName}([#{number.join(',')}])：#{result.join(' ')}"
  end

  # 아키바 거리에서 발생하는 문제 랜덤결정 표
  def getTroubleInAkibaStreetDiceCommandResult(command)
    return nil unless command === "TIAS"

    tableName = "아키바 거리에서 발생하는 문제"

    number = []
    result = []

    [
      [
        '〈로그 호라이즌〉이',
        '〈초승달 동맹〉이',
        '〈Ｄ．Ｄ．Ｄ〉가',
        '〈흑검기사단〉이',
        '〈서풍여단〉이',
        '〈로데릭 상회〉가'
      ],
      [
        '길드 회관에서',
        '무위도식 골목에서',
        '거리 한가운데에서',
        '수풍관에서',
        '공중목욕탕에서',
        '하수구에서'
      ],
      [
        '불합리한',
        '겸손',
        '달콤한',
        '부자연스러운',
        '위험한',
        '머리 나쁜'
      ],
      [
        '싸움',
        '연애소식',
        '장난',
        '음모',
        '사고',
        '분실물'
      ]
    ].each do |table|
      dice_result, dice_str = roll(1, 6)
      number << dice_str
      result << table[dice_result - 1]
    end

    return "#{tableName}([#{number.join(',')}])：#{result.join(' ')}"
  end

  # 버림받은 아이 랜덤결정표
  def getAbandonedChildDiceCommandResult(command)
    return nil unless command === "ABDC"

    tableName = "버림받은 아이"

    number = []
    result = []

    [
      [
        '꽃의 이름',
        '별의 이름',
        '색깔 종류',
        '돌의 이름',
        '동물 이름',
        '번호'
      ].map { |e| '이름：' + e },
      [
        '폐 건물',
        '길가',
        '식객',
        '나무 위',
        '공원',
        '하수도'
      ].map { |e| '주거：' + e },
      [
        '무언가를 찾기',
        '요리',
        '노래',
        '장사',
        '손재주있는',
        '약삭빠른 행동'
      ].map { |e| '특기：' + e },
      [
        '깡마른',
        '키작은',
        '발육이 좋은',
        '키가 큰',
        '부드럽고 탄력있는',
        '근육질의'
      ].map { |e| '체형：' + e },
      [
        '과일',
        '고기',
        '신선한 야채',
        '생선',
        '과자',
        '벌레'
      ].map { |e| '좋아하는 음식：' + e },
      [
        '말이 서툰',
        '사투리',
        '일반적인 말투',
        '사극체',
        '3인칭',
        '귀국자녀'
      ].map { |e| '말투：' + e }
    ].each do |table|
      dice_result, dice_str = roll(1, 6)
      number << dice_str
      result << table[dice_result - 1]
    end

    return "#{tableName}([#{number.join(',')}])：#{result.join('　')}"
  end

  # 楽器種別表
  def getMusicalInstrumentTypeDiceCommandResult(command)
    return nil unless /MII(\d?)/ === command

    type, is_roll = if Regexp.last_match(1) && Regexp.last_match(1) != ''
                      [Regexp.last_match(1).to_i, false]
                    else
                      roll(1, 6)
                    end
    return nil if type < 1 || 6 < type

    tableName = "악기 종류 표"
    type_name = ['타악기１', '건반악기', '현악기１', '현악기２', '관악기１', '관악기２'][type - 1]

    dice, = roll(1, 6)
    result = [
      ['캐스터네츠', '마라카스', '심벌즈', '트라이앵글', '북', '드럼'],
      ['목제 실로폰', '철제 실로폰', '하모늄', '하프시 코드', '피아노', '클라비코드'],
      ['하프', '류트', '기타', '바이올린', '첼로', '리라'],
      ['비파', '6현금', '호금', '샤미센', '시타르', '덜시머'],
      ['트럼펫', '호른', '트럼본', '튜바', '피리', '클라리넷'],
      ['리코더', '오카리나', '오보에', '하모니카', '아코디언', '퉁소']
    ][type - 1][dice - 1]

    return tableName.to_s + (is_roll ? "(#{type})" : '') + "：#{type_name}(#{dice})：#{result}"
  end

  def getEastalDiceCommandResult(command)
    return nil unless command =~ /ESTL(\d+)/

    cr = Regexp.last_match(1).to_i
    return nil unless cr >= 1 && cr <= 10

    tableName = "이스탈 탐색표"

    table = ["숲 베리 따기: 여러분은 베리가 열린 수풀을 발견한다. 탐색을 하는 PC는 난이도 8의 [지각판정]을 한다(한 명당 1회만). 성공한 사람은 「숲 베리 (맘대로 샌드위치에 상당)」를 하나 입수한다.",
             "나뭇잎 사이로 햇빛이 비치는 산책길: 나뭇잎 사이로 햇빛이 비치는 밝은 잡목림이 이어진다. 적당히 사람의 손이 닿아서 산책하는 기분으로 걸을 수 있다.",
             "군생지에는 주의: 여러분은 트리피드의 군생지에 들어오고 말았다! 힘겨운 싸움 끝에 다행히도 승리를 거머쥐었지만, 여러분 전원은 [피로: 10]을 입는다.",
             "페어 트레이드: 여러분은 〈대지인〉 농부를 만났다. 20G를 내면 「계절야채 포토푀」를 구입할 수 있다(다 합쳐서 PC와 같은 수까지).",
             "강에서의 삶: 제방을 따라 강 근처를 걷는다. 작은 선착장에서 위세 좋은 목소리가 들린다. 물고기를 잡고 있는 모양이다.",
             "건너려 해도 건널 수 없는: 강물이 붇는 바람에 여러분은 강을 건널 곳을 찾느라 고생한다. [수생] 태그를 소지하고 있거나 얻을 수 있는 수단이 있는 PC가 한 명이라도 있다면 아무 문제 없다. 없다면 멀리 우회하여 전원 [피로: 10]을 입는다.",
             "코볼트 조우전: 여러분은 코볼트 무리를 물리쳤다! 전원 10G를 손에 넣는다. 쫓아가서 섬멸한다면 전원 [피로: 10]을 입는 대신 추가로 「코볼트의 이빨 [환전](10G)」를 한 사람당 1개 손에 넣는다.",
             "풍요로운 전원 풍경: 큰 논이 몇 자리나 펼쳐져 있다. 가을이라면 황금색 벼 이삭이 바람에 흔들릴 것이다.",
             "불운한 예감: 검은 고양이가 눈앞을 가로지르고, 까마귀가 머리 위에서 울고, 신발 끈이 뚝 끊어졌다. 왠지 모를 한기까지. 여러분 전원은 【인과력】을 1점 잃는다.",
             "친구의 친구는 친구: PC 전원은 2D를 굴린다. 가장 큰 눈이 나온 「당신」은 가장 적은 눈이 나온 「대상」과 공통의 지인에 대한 화제로 이야기꽃을 피운다. 당신과 대상은 「인과력 티켓」 한 장으로 각자 서로에 대한 커넥션을 취할 수 있다. 관계는「우정, 이해」 중 하나가 된다.",
             "시간은 흐른다: 길을 따라 외벽만 남은 철근 빌딩이 서 있다. 지금은 새의 둥지가 된 듯하다.",
             "갑작스러운 폭우!: 여러분은 갑작스러운 폭우를 만나, 고생 끝에 폐가에 도착했다. 여러분 전원은 [식량] 아이템을 하나 소비해야 한다. 단, [피로] 회복량은 절반이다. [식량] 아이템을 소비할 수 없는 경우는【인과력】 1점을 잃는다.",
             "들꽃이 만발하다: 여러분은 넓은 꽃밭에 도착한다. 탐색을 하는 PC는 목표치 9의 [지식판정을 한다(한 명당 1회만). 성공한 사람은 「귀중한 약초 [환전] (20G)」를 하나 입수한다.",
             "녹색 터널: 멋진 할엽수가 나란히 늘어서서 녹색의 천장을 이루고 있다. 발치에는 부엽토가 두껍게 깔렸고, 곳곳에서 나무뿌리가 모습을 드러내고 있다.",
             "고블린 강습 부대: 여러분은 고블린 강습부대와의 조우전에 휘말렸다. 여러분 전원은 [피로: 20]을 입거나, 또는 [시나리오n회]형 특기의 사용횟수를 소비한다(여러분이 선택).",
             "정보교환: 여러분은 모험자 집단과 만났다. 대표자는 목표 10의 [교섭판정]을 한다(적절한 서브 직업이 있다면 +2의 보너스를 얻을 수도 있다). 성공하면 부근의 정보를 들을 수 있다. 여러분 중 하나는 다음에 하는 [정찰] 행동에 +2를 얻는다.",
             "못의 어부: 물이 가득한 못에 나왔다. 어부가 투망을 던지는 모습이 보인다.",
             "토막난 샛길: 산사태로 길이 무너져 내리고 말았다. 이 길은 사용할 수 없을 것 같다. [비행] 상태이거나 [비행] 상태를 얻을 수 있는 수단을 가진 PC가 한 명이라도 있다면 주변을 탐색할 수 있으므로 문제는 없다. 그렇지 않다면 여러분은 아주 멀리 돌아가야 한다. 여러분 전원은 [피로:25]를 입는다.",
             "코볼트를 물리쳐라!: 여러분은 코볼트 순찰대를 물리쳤다. 전원 [피로: (1D6+5)]를 입는 대신, 전리품으로 1인당 20G를 입수한다.",
             "대지의 은총: 이랑을 따라 채소의 파릇파릇한 잎이 무성하다. 맛있는 요리를 만들 수 있을 것 같다.",
             "미끄러져 굴러서: 가도를 걷고 있는데 갑자기 거대한 와일드 보어가 튀어나온다. 피하던 찰나에 넘어져서 여러분 전원은 [소모품] 아이템을 하나 잃는다. [소모품]아이템을 가지고 있지 않다면 【인과력】 1점을 잃는다.",
             "빙글빙글 꽈당: PC 전원은 2D를 굴린다. 가장 작은 눈의 「당신」은 젖은 풀에 발이 미끄러져 굴러떨어지고 만다. 구해준 동료는 「인과력 티켓」 한 장으로 「당신」에 대해 커넥션을 얻을 수 있다. 관계는 「비호, 친애」 중 하나가 된다.",
             "무인들이 꾼 꿈의 흔적: 반쯤 무너진 돌담이 이어진다. 아인과의 격렬한 싸움의 흔적도 지금은 희미하게 남아있을 뿐이다.",
             "오리무중: 짙은 안개가 낀다. 팔을 뻗으면 손끝이 안 보일 정도다. 여러분 전원은 [피로: 25]를 입거나 【인과력】 1점을 잃는다(여러분이 선택).",
             "치유의 샘물: 여러분은 세차게 솟구치는 맑은 물을 발견한다. 목표치 13의 [지각판정]을 한다. 누구든 한 명이라도 성공하면 이것이 매우 맑으며 마력이 있는 물이라는 것을 알게 된다. 길어 담아갈 수는 없지만, 마시면 즉석에서 【인과력】 1점을 얻는다.",
             "침엽수 숲: 침엽수가 울퉁불퉁한 나무껍질을 드러내고 있다. 그늘에 잡초가 적어 조금 쌀쌀한 인상을 받는다.",
             "어인의 습격: 여러분은 사하긴 순찰소대와 격렬한 싸움을 벌였다! 여러분 전원은 [피로: 25]를 입거나 [소모품] 아이템 2개를 잃는다(여러분이 선택).",
             "상부상조: 여러분은 꼼짝도 못 하고 서 있는 마차에 탄 여행자를 만났다. 그들을 돕는 경우, 도우려는 멤버 전원이 [조작판정]을 한다. 달성치 합계가 (PC 수ⅹ10)이상이라면 마차를 길에 되돌린다. 그 경우 1인당 20G의 사례금을 받는다.",
             "시냇물과 산들바람: 잔잔하게 흐르는 작은 시냇가로 나왔다. 수면을 스쳐 지나가는 산들바람에 기분이 상쾌하다.",
             "파이팅 일발!: 여러분은 절벽을 따라 난 좁은 통로를 나아가느라 체력만이 아니라 기력까지 소모한다. 여러분 전원은 [피로:15]를 입는다. 거기에 더하여 [피로: 15]를 입거나 【인과력】 1점을 잃는다(여러분이 선택).",
             "거인과 만나다: 숲 위로 불쑥 머리를 내민 것은 대머리 거인이었다. 전투에 승리한 여러분은 전원 25G를 입수한다. 거인의 보금자리를 찾으려면 대표자가 목표치 12의 [해석판정]에 성공해야 한다. 성공한 경우 거인의 보금자리에서 [마촉매6]을 1D6+1개 입수한다.",
             "휴식 장소: 쉬기 딱 좋은 도로 가의 공터를 발견한다. 예전에 누군가 같은 생각을 한 사람이 있었는지 모닥불을 피운 흔적도 있다.",
             "그럴 리가: 길을 잃고 말았다. 여러분 전원은 【인과력】을 2점 잃는다. 【인과력】을 잃을 수 없는 경우, 부족한 【인과력】 1점당 [피로: 15]를 입는다. 여러분의 동료중에 [지도 제작자]나 [척후]가 있다면 [피로: 15]는 [피로: 10]으로 그친다.",
             "좋아하는 애 있어?: 무슨 영문인지 여러분은 휴식 중에 좋아하는 이성에 대한 화제에 돌입하고 말았다. [애정] 또는 [사랑], [설렘]에 준하는 커넥션을 가지고 있는 PC는 그 사실을 고백할 수 있다. 그 경우, GM은 그 PC의 용기에 깊이 감동하며【인과력】 1점을 주자. 만약 고백 상대가 지금 파티에 있는 동료라면, 롤플레이에 따라서는 그 상대에게도 준다.",
             "저 다리를 건너서: 붉게 녹슨 철교가 강 위로 그림자를 드리우고 있다. 예전에는 전차가 이 다리 위를 건넜는지 이끼 사이로 레일이 엿보인다.",
             "얼음덩어리: 큼직한 우박이 내려 사정없이 여러분을 두들긴다. 주위는 탁 트인 토지라서 피할 수도 없다. 여러분 전원은 [피로: 30]을 입는다.",
             "두근두근 동굴: 여러분은 기분 나쁜 동굴을 발견한다. 탐색을 하는 PC는 목표치 12의 [지각판정]을 한다. 실패한 사람은 [피로: 10]을 입는다. 한 사람이라도 성공한 경우, 동굴 안에서 금화 100G가 들어있는 자루를 발견한다. 공평하게 나누자!",
             "수풀을 헤치고: 낮은 관목이 곳곳에 수풀을 이루고 있어 똑바로 전진하기 힘들다.하지만 누군가가 지나간 길이 있어서 헤매지 않고 끝날 것 같다.",
             "이곳에서 저지하라!: 여러분은 〈대지인〉의 마을 주변에서 와이번과의 전투에 돌입했다! 여러분 전원은 [피로: 30]을 입거나 【인과력】 2점을 잃는다(여러분이 선택).",
             "언젠가 지나온 길: 여러분은 아직 신출내기인 〈모험자〉들과 만났다. 뭔가 도움을 주고 싶다면 [소모품]을 몇 개쯤 건네줄 수도 있고, 뭐든 조언을 해줄 수도 있다. 그들은 거듭 감사하며 길을 떠난다. GM은 PC들의 롤플레이에 따라 【인과력】 1점을 줄 수 있다.",
             "계곡에 울리는 물소리: 가파른 골짜기 밑에서 기세 좋게 물이 흐른다. 그리 멀지않은 곳에서 폭포 소리가 들려온다.",
             "독 늪: 여러분은 썩은 내가 풍기는 늪지를 가로질렀다. 여러분 전원은 목표치 14의 [운동판정]을 해야 한다. 실패한 PC는 [소모품] 아이템을 2개 잃는다.",
             "고르곤 슬레이어: 여러분은 쇠로 된 피부	를 지닌 소를 물리쳤다! 전원 【인과력】 1점을 잃는다. 전리품으로 【철우의 비늘 [환전] (35G)】를 인원수만큼 손에 넣는다.",
             "개척자들: 몇 명의 대지인이 숲을 개간하고 있다. 씨를 뿌리려면 조금 더 걸릴 것 같다.",
             "예상 밖의 조우: 10m가 넘는 녹색 드래곤과 우연히 마주친다. 왜 이런 곳에! 여러분은 전력을 다해 도망쳤다. 여러분 전원은 【인과력】을 2점 잃거나, [보조장비] 하나에 [파손] 태그를 입는다. 둘 다 할 수 없다면 [피로: 35]를 입는다.",
             "끝말잇기는 귀문: 여러분은 여행의 흥을 돋우기 위해 다 함께 끝말잇기를 하면서 걷고 있다. PC 전원은 「누」(GM은 다른걸로 바꿔도 좋다)로 시작하는 단어를 하나 발표한다. 가장 창피한 단어를 발표한 PC를 다 함께 결정한다. 그 PC에 대한 커넥션을 가지고 있는 다른 PC는 커넥션의 관계를 [동정], [실망], [재미있음]으로 변경할 수 있다.",
             "오래된 신역: 커다란 석제 토리이가 오랜세월의 풍파를 견디며 우뚝 솟아있다. 주위에 엄숙한 분위기가 가득했다.",
             "난기류: 돌풍은 회오리가 되었다! 여러분은 간신히 통과할 수 있었지만 멀쩡하지는 않았다. 여러분은 [피로: 35]를 입거나 [소모품] 2개를 잃는다(여러분이 선택).",
             "노리려면 월척을: 여러분은 멋진 낚시터를 발견한다. 탐색을 하는 PC는 [식량] 아이템을 하나 소비해서 목표치 13의 [조작판정]을 한다(어부나 그에 준하는 서브 직업에겐 +2를 줘도 좋다). 성공한 사람은「기름이 오른 송어 (정석 카레에 상당)」를 [1D/2]마리(최저 1마리) 입수한다.",
             "고목 미궁: 울퉁불퉁한 고목이 서로 얽혀 압박감을 느끼게 한다. 숲이 보내온 세월의 무게가 어깨를 짓누르는 듯하다.",
             "중과부적: 여러분은 무수한 구렁이에게 둘러싸였다! 여러분 전원은 [피로: 40]을 입거나 보조장비 하나에 [파손] 태그를 붙인다(여러분이 선택).",
             "축복의 고리: 여러분은 대지인의 마을에서 결혼을 축하하는 조촐한 연회를 접한다. 축복을 해주고 싶다면 대표 PC가 난이도 14의 [교섭] 판정을 한다. 선물로 [식량] 태그를 가진 아이템을 하나 내놓을 때마다 +2의 보너스를 얻는다. 성공한 경우, 어딘가에서 상쾌한 바람이 불어 여러분 전원은 【인과력】 1점을 얻는다. 그렇지 않은 경우라도 연회에는 초대받으며, 소박한 만찬을 먹고 전원의 [피로]가 -20 줄어든다.",
             "큰 강을 이루는 한 방울: 깨끗한 물이 세차게 솟아난다. 이 물은 분명 저 큰 강으로 이어질 것이다.",
             "냉랭한 산길: 여러분은 바람이 세차게 부는, 얼어붙을 듯한 산길을 걸어간다. [경감(냉기)를 가지고 있거나, 혹은 얻을 수 있는 PC는 이 영향을 받지 않는다. 그렇지 않은 PC는 【인과력】 2점을 잃거나 보조장비 하나에 [파손] 태그를 입는다(여러분이 선택). 양쪽 모두 선택할 수 없는 경우, [피로: 50]을 입는다.",
             "고블린의 야영지: 여러분은 야영 중인 고블린들을 물리쳤다! 전원 50G를 손에 넣는다. 목표치 14의 [지각판정]을 한다(한사람당 1회). 성공한 사람은 「고브 영웅상[환전] (60G)」을 하나 입수한다.",
             "줄곧 이어지는 생활: 산비탈의 한 면 전체에 밭들이 계단처럼 펼쳐져 있다. 이 정도의 논밭을 일구는 데 도대체 얼마나 많은 시간이 들었을까? 근처에는 틀림없이 〈대지인〉의 마을이 있을 것이다."]

    d1, = roll(1, 6)
    d2, = roll(1, 6)
    value = (d1.to_i + d2.to_i - 2 + (cr - 1) * 5)

    result = table[value]

    return "#{tableName}CR#{cr}(#{value + 7}[#{d1},#{d2}])\n#{result}"
  end
end
