Class: BCDice::GameSystem::TrinitySeven

Inherits:
Base
  • Object
show all
Defined in:
lib/bcdice/game_system/TrinitySeven.rb

Constant Summary collapse

ID =

ゲームシステムの識別子

'TrinitySeven'
NAME =

ゲームシステム名

'トリニティセブンRPG'
SORT_KEY =

ゲームシステム名の読みがな

'とりにていせふんRPG'
HELP_MESSAGE =

ダイスボットの使い方

<<~MESSAGETEXT
  クリティカルが変動した命中及び、7の出目がある場合のダメージ計算が行なえます。
  なお、通常の判定としても利用できます。

  ・発動/命中 [TR(±c*)<=(x)±(y*) 又は TR<=(x) など]*は必須ではない項目です。
  "TR(クリティカルの修正値*)<=(発動/命中)±(発動/命中の修正値*)"
  加算減算のみ修正値も付けられます。 [修正値]は必須ではありません。
  例)TR<=50 TR<=60+20 TR7<=40 TR-7<=80 TR+10<=80+20

  ・ダメージ計算 [(x)DM(c*)±(y*) 又は (x)DM(c*) 又は (x)DM±(y*)]*は必須ではない項目です。
  "(ダイス数)DM(7の出目の数*)+(修正*)"
  加算減算のみ修正値も付けられます。 [7の出目の数]および[修正値]は必須ではありません。
  例)6DM2+1 5DM2 4DM 3DM+3
  後から7の出目に変更する場合はC(7*6+5)のように入力して計算してください。

  ・名前表 [TRNAME]
  名字と名前を出します。PCや突然現れたNPCの名付けにどうぞ。

MESSAGETEXT
NAME1 =
DiceTable::Table.new(
  "名字表",
  "1D100",
  [
    '春日', # 1
    '浅見',
    '風間',
    '神無月',
    '倉田',
    '不動',
    '山奈',
    'シャルロック',
    '霧隠',
    '果心', # 10
    '今井',
    '長瀬',
    '明智',
    '風祭',
    '志貫',
    '一文字',
    '月夜野',
    '桜田門',
    '果瀬',
    '九十九', # 20
    '速水',
    '片桐',
    '葉月',
    'ウィンザー',
    '時雨里',
    '神城',
    '水際',
    '一ノ江',
    '仁藤',
    '北千住', # 30
    '西村',
    '諏訪',
    '藤宮',
    '御代',
    '',
    '霧生',
    '白石',
    '椎名',
    '綾小路',
    '二条', # 40
    '光明寺',
    '春秋',
    '雪見',
    '刀条院',
    'ランカスター',
    'ハクア',
    'エルタニア',
    'ハーネス',
    'アウグストゥス',
    '椎名町', # 50
    '鍵守',
    '茜ヶ崎',
    '鎮宮',
    '美柳',
    '鎖々塚',
    '櫻ノ杜',
    '鏡ヶ守',
    '輝井',
    '南陽',
    '雪乃城', # 60
    '六角屋',
    '鈴々',
    '東三条',
    '朱雀院',
    '青龍院',
    '白虎院',
    '玄武院',
    '麒麟院',
    'リーシュタット',
    'サンクチュアリ', # 70
    '六実',
    '須藤',
    'ミレニアム',
    '七里',
    '三枝',
    '八殿',
    '藤里',
    '久宝',
    '',
    '赤西', # 80
    '神ヶ崎',
    'グランシア',
    'ダークブーレード',
    '天光寺',
    '月見里',
    '璃宮',
    '藤見澤',
    '赤聖',
    '姫宮',
    '華ノ宮', # 90
    '"天才"',
    '"達人"',
    '"賢者"',
    '"疾風"',
    '"海の"',
    '"最強"',
    '"凶器"',
    '"灼熱"',
    '"人間兵器"',
    '"魔王"', # 100
  ]
)
NAME2 =
DiceTable::Table.new(
  "名字表",
  "1D100",
  [
    'アラタ/聖', # 1
    'アビィス/リリス',
    'ルーグ/レヴィ',
    'ラスト/アリン',
    'ソラ/ユイ',
    'イーリアス/アキオ',
    'アカーシャ/ミラ',
    'アリエス/リーゼロッテ',
    'ムラサメ/シャルム',
    '龍貴/竜姫',  # 10
    '英樹/春菜',
    '準一/湊',
    '急司郎/光理',
    '夕也/愛奈',
    '晴彦/アキ',
    '疾風/ヤシロ',
    'カガリ/灯花',
    '次郎/優都',
    '春太郎/静理',
    'ジン/時雨',  # 20
    'イオリ/伊織',
    'ユウヒ/優姫',
    'サツキ/翠名',
    'シュライ/サクラ',
    'ミナヅキ/姫乃',
    'カエデ/優樹菜',
    'ハル/フユ',
    'ドール/瑞江',
    'ニトゥレスト/キリカ',
    'スカー/綾瀬',  # 30
    '真夏/小夏',
    '光一/ののか',
    '彩/翠',
    'トウカ/柊花',
    '命/ミコト',
    '司/つかさ',
    'ゆとり/なごみ',
    '冬彦/観月',
    'カレン/華恋',
    '清次郎/亜矢',  # 40
    'サード/夢子',
    'ボックス/詩子',
    'ヘリオス/カエデ',
    'ゲート/京香',
    'オンリー/パトリシア',
    'ザッハーク/アーリ',
    'ラスタバン/ラスティ',
    '桜花/燁澄',
    '計都/リヴィア',
    'カルヴァリオ/香夜', # 50
    '悠人/夜々子',
    '太子/羽菜',
    '夕立/夕凪',
    'アルフ/愛美',
    'ファロス/灯利',
    'スプートニク/詩姫',
    'アーネスト/累',
    'ナイン/カグヤ',
    'クリア/ヒマワリ',
    'ウォーカー/オリビア', # 60
    'ダーク/クオン',
    'ウェイヴ/凛',
    'ルーン/マリエ',
    'エンギ/セイギ',
    'シラヌイ/ミライ',
    'ブライン/キズナ',
    'クロウ/カナタ',
    'スレイヤー/ヒカル',
    'レス/ミリアリア',
    'ミフユ/サリエル', # 70
    '鳴央/音央',
    'モンジ/理亜',
    'パルデモントゥム/スナオ',
    'ミシェル/詩穂',
    'フレンズ/サン',
    'サトリ/識',
    'ロード/唯花',
    'クロノス/久宝',
    'フィラデルフィア/冬海',
    'ティンダロス/美星',  # 80
    '勇弥/ユーリス',
    'エイト/アンジェラ',
    'サタン/ルシエル',
    'エース/小波',
    'セージ/胡蝶',
    '忍/千之',
    '重吾/キリコ',
    'マイケル/ミホシ',
    'カズマ/鶴香',
    'ヤマト/エリシエル',  # 90
    '歴史上の人物の名前(信長、ジャンヌなど)',
    'スポーツ選手の名前(ベッカム、沙保里など)',
    '学者の名前(ソクラテス、エレナなど)',
    'アイドルの名前(タクヤ、聖子など)',
    '土地、国、町の名前(イングランド、ワシントンなど)',
    'モンスターの名前(ドラゴン、ラミアなど)',
    '武器防具の名前(ソード、メイルなど)',
    '自然現象の名前(カザンハリケーンなど)',
    '機械の名前(洗濯機、テレビなど)',
    '目についた物の名前(シャーペン、メガネなど)',  # 100
  ]
)

Instance Attribute Summary

Attributes inherited from Base

#d66_sort_type, #default_cmp_op, #default_target_number, #randomizer, #reroll_dice_reroll_threshold, #round_type, #sides_implicit_d, #upper_dice_reroll_threshold

Instance Method Summary collapse

Methods inherited from Base

#change_text, #check_result, command_pattern, #enable_debug, #enabled_d9?, #eval, eval, #grich_text, #initialize, prefixes_pattern, register_prefix, register_prefix_from_super_class, #sort_add_dice?, #sort_barabara_dice?

Methods included from Translate

#translate

Constructor Details

This class inherits a constructor from BCDice::Base

Instance Method Details

#eval_game_system_specific_command(command) ⇒ Object

スパゲッティなコードだけど許して!!! → 絶対に許さない。全力でリファクタリングした。



41
42
43
44
45
46
47
# File 'lib/bcdice/game_system/TrinitySeven.rb', line 41

def eval_game_system_specific_command(command) # スパゲッティなコードだけど許して!!! → 絶対に許さない。全力でリファクタリングした。
  debug("eval_game_system_specific_command command", command)

  roll_hit(command) ||
    roll_damage(command) ||
    roll_name(command)
end

#get_hit_roll_result(total, target, critical) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/bcdice/game_system/TrinitySeven.rb', line 71

def get_hit_roll_result(total, target, critical)
  if total >= 96
    Result.fumble("ファンブル")
  elsif total <= critical
    Result.critical("クリティカル")
  elsif total <= target
    Result.success("成功")
  else
    Result.failure("失敗")
  end
end

#get_roll_damage_result(diceCount, critical, diceList, modify) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/bcdice/game_system/TrinitySeven.rb', line 104

def get_roll_damage_result(diceCount, critical, diceList, modify)
  if critical <= 0
    total = diceList.sum() + modify
    return total, nil
  end

  restDice = diceList.clone

  critical = diceCount if critical > diceCount

  critical.times do
    restDice.shift
    diceList.shift
    diceList.push(7)
  end

  max = restDice.pop
  max = 1 if max.nil?

  total = max * (7**critical) + restDice.sum() + modify

  return total, diceList
end

#result_1d100(_total, dice_total, _cmp_op, _target) ⇒ Object



128
129
130
131
132
133
134
# File 'lib/bcdice/game_system/TrinitySeven.rb', line 128

def result_1d100(_total, dice_total, _cmp_op, _target)
  if dice_total >= 96
    Result.fumble("ファンブル")
  elsif dice_total <= 7
    Result.critical("クリティカル")
  end
end

#roll_damage(command) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/bcdice/game_system/TrinitySeven.rb', line 83

def roll_damage(command)
  parser = Command::Parser.new(/\d+DM\d*/, round_type: round_type)
                          .restrict_cmp_op_to(nil)
  cmd = parser.parse(command)
  return nil unless cmd

  dice_count, critical = cmd.command.split("DM", 2).map(&:to_i)
  modify = cmd.modify_number

  dice_list = @randomizer.roll_barabara(dice_count, 6).sort
  dice_text = dice_list.join(",")

  total, additionalList = get_roll_damage_result(dice_count, critical, dice_list, modify)

  additionalListText = additionalList.nil? ? "" : "→[#{additionalList.join(',')}]"

  text = "(#{cmd}) > [#{dice_text}]#{additionalListText}#{Format.modifier(modify)}#{total}"

  return text
end

#roll_hit(command) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/bcdice/game_system/TrinitySeven.rb', line 49

def roll_hit(command)
  parser = Command::Parser.new(/TR\d*/, round_type: round_type)
                          .restrict_cmp_op_to(:<=)
  cmd = parser.parse(command)
  return nil unless cmd

  modify = cmd.command[2..-1].to_i + cmd.modify_number
  critical = 7 + modify
  target = cmd.target_number

  total = @randomizer.roll_once(100)
  result = get_hit_roll_result(total, target, critical)

  cmd.command = "TR"
  cmd.modify_number = modify

  result.text = "(#{cmd}) > #{total}#{result.text}"
  debug("eval_game_system_specific_command result text", result.text)

  result
end

#roll_name(command) ⇒ Object



136
137
138
139
140
141
142
143
144
145
146
# File 'lib/bcdice/game_system/TrinitySeven.rb', line 136

def roll_name(command)
  unless command == "TRNAME"
    return nil
  end

  first_name = NAME1.roll(@randomizer).last_body
  second_name = NAME2.roll(@randomizer).last_body

  text = "#{first_name} , #{second_name}"
  return text
end