bcdice 3.6.0 → 3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +56 -0
- data/i18n/Arianrhod/ja_jp.yml +3 -0
- data/i18n/Emoklore/ja_jp.yml +7 -0
- data/i18n/FutariSousa/ja_jp.yml +431 -0
- data/i18n/LogHorizon/ja_jp.yml +1 -1
- data/i18n/SwordWorld/ja_jp.yml +1 -0
- data/i18n/SwordWorld/zh_hans.yml +7 -0
- data/i18n/SwordWorld2_0/zh_hans.yml +37 -0
- data/i18n/SwordWorld2_5/ja_jp.yml +1 -1
- data/i18n/SwordWorld2_5/zh_hans.yml +57 -0
- data/lib/bcdice/arithmetic/parser.rb +1 -1
- data/lib/bcdice/command/parser.rb +1 -1
- data/lib/bcdice/common_command/add_dice/parser.rb +106 -74
- data/lib/bcdice/common_command/add_dice.rb +1 -1
- data/lib/bcdice/common_command/barabara_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/calc/parser.rb +1 -1
- data/lib/bcdice/common_command/d66_dice.rb +1 -1
- data/lib/bcdice/common_command/reroll_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/tally_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/upper_dice/parser.rb +1 -1
- data/lib/bcdice/game_system/AngelGear.rb +1 -1
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
- data/lib/bcdice/game_system/Arianrhod.rb +4 -4
- data/lib/bcdice/game_system/AssaultEngine.rb +3 -3
- data/lib/bcdice/game_system/Ayabito.rb +170 -4
- data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -1
- data/lib/bcdice/game_system/BeginningIdol.rb +4 -2
- data/lib/bcdice/game_system/BeginningIdol2022.rb +184 -0
- data/lib/bcdice/game_system/BladeOfArcana.rb +3 -3
- data/lib/bcdice/game_system/Bloodorium.rb +68 -0
- data/lib/bcdice/game_system/ConvictorDrive.rb +117 -0
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
- data/lib/bcdice/game_system/CyberpunkRed.rb +2 -6
- data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
- data/lib/bcdice/game_system/DungeonsAndDragons5.rb +196 -0
- data/lib/bcdice/game_system/EmbryoMachine.rb +4 -4
- data/lib/bcdice/game_system/Emoklore.rb +8 -8
- data/lib/bcdice/game_system/FutariSousa.rb +31 -5
- data/lib/bcdice/game_system/GURPS.rb +1 -1
- data/lib/bcdice/game_system/GehennaAn.rb +2 -2
- data/lib/bcdice/game_system/GhostLive.rb +144 -0
- data/lib/bcdice/game_system/GoblinSlayer.rb +30 -8
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +152 -0
- data/lib/bcdice/game_system/IfIfIf.rb +648 -0
- data/lib/bcdice/game_system/Kutulu.rb +95 -0
- data/lib/bcdice/game_system/LostRoyal.rb +1 -1
- data/lib/bcdice/game_system/NobunagasBlackCastle.rb +237 -0
- data/lib/bcdice/game_system/OracleEngine.rb +1 -1
- data/lib/bcdice/game_system/Raisondetre.rb +1 -1
- data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
- data/lib/bcdice/game_system/SajinsenkiAGuS.rb +154 -0
- data/lib/bcdice/game_system/Sengensyou.rb +59 -0
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
- data/lib/bcdice/game_system/ShinobiGami.rb +14 -1
- data/lib/bcdice/game_system/SkynautsBouken.rb +93 -2
- data/lib/bcdice/game_system/StellarLife.rb +1 -1
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +2 -2
- data/lib/bcdice/game_system/SwordWorld2_0_SimplifiedChinese.rb +84 -0
- data/lib/bcdice/game_system/SwordWorld2_5_SimplifiedChinese.rb +95 -0
- data/lib/bcdice/game_system/SwordWorld_SimplifiedChinese.rb +29 -0
- data/lib/bcdice/game_system/TherapieSein.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +54 -18
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +26 -12
- data/lib/bcdice/game_system/VisionConnect.rb +135 -0
- data/lib/bcdice/game_system/Warhammer4.rb +4 -0
- data/lib/bcdice/game_system/WorldOfDarkness.rb +54 -50
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
- data/lib/bcdice/game_system/filled_with/tresure_tables.rb +1 -1
- data/lib/bcdice/game_system/satasupe/tables.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
- data/lib/bcdice/game_system.rb +15 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +26 -6
@@ -0,0 +1,152 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class HunterTheReckoning5th < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'HunterTheReckoning5th'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'Hunter: The Reckoning 5th Edition'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'はんあたされこにんく5'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
・判定コマンド(nHRFx+x)
|
18
|
+
注意:難易度は必要成功数を表す
|
19
|
+
|
20
|
+
難易度指定:成功数のカウント、判定成功と失敗、Critical処理、Critical Winのチェックを行う
|
21
|
+
(Desperationダイスがある場合)OverreachとDespairの発生チェックを行う
|
22
|
+
例) (難易度)HRF(通常ダイス)+(Desperationダイス)
|
23
|
+
(難易度)HRF(通常ダイス)
|
24
|
+
|
25
|
+
難易度省略:成功数のカウント、判定失敗、Critical処理、(Desperationダイスがある場合)Despairチェックを行う
|
26
|
+
判定成功、Overreachのチェックを行わない
|
27
|
+
Critical Win、(Desperationダイスがある場合)Despair、Overreachのヒントを出力
|
28
|
+
例) HRF(通常ダイス)+(Desperationダイス)
|
29
|
+
HRF(通常ダイス)
|
30
|
+
|
31
|
+
難易度0指定:全てのチェックを行わない
|
32
|
+
例) 0HRF(通常ダイス)+(Desperationダイス)
|
33
|
+
0HRF(通常ダイス)
|
34
|
+
|
35
|
+
MESSAGETEXT
|
36
|
+
|
37
|
+
DIFFICULTY_INDEX = 1
|
38
|
+
DICE_POOL_INDEX = 3
|
39
|
+
DESPERATION_DICE_INDEX = 5
|
40
|
+
|
41
|
+
# 難易度に指定可能な特殊値
|
42
|
+
NOT_CHECK_SUCCESS = -1 # 判定成功にかかわるチェックを行わない(判定失敗に関わるチェックは行う)
|
43
|
+
|
44
|
+
# ダイスボットで使用するコマンドを配列で列挙する
|
45
|
+
register_prefix('\d*HRF')
|
46
|
+
|
47
|
+
def eval_game_system_specific_command(command)
|
48
|
+
m = /\A(\d+)?(HRF)(\d+)(\+(\d+))?$/.match(command)
|
49
|
+
unless m
|
50
|
+
return ''
|
51
|
+
end
|
52
|
+
|
53
|
+
dice_pool = m[DICE_POOL_INDEX].to_i
|
54
|
+
dice_text, success_dice, ten_dice, = make_dice_roll(dice_pool)
|
55
|
+
result_text = "(#{dice_pool}D10"
|
56
|
+
|
57
|
+
desperaton_dice_pool = m[DESPERATION_DICE_INDEX]&.to_i
|
58
|
+
if desperaton_dice_pool
|
59
|
+
desperaton_dice_text, desperaton_success_dice, desperaton_ten_dice, desperaton_botch_dice = make_dice_roll(desperaton_dice_pool)
|
60
|
+
|
61
|
+
ten_dice += desperaton_ten_dice
|
62
|
+
success_dice += desperaton_success_dice
|
63
|
+
|
64
|
+
result_text = "#{result_text}+#{desperaton_dice_pool}D10) > [#{dice_text}]+[#{desperaton_dice_text}] "
|
65
|
+
else
|
66
|
+
desperaton_ten_dice = 0
|
67
|
+
desperaton_botch_dice = 0
|
68
|
+
result_text = "#{result_text}) > [#{dice_text}] "
|
69
|
+
end
|
70
|
+
|
71
|
+
success_dice += get_critical_success(ten_dice)
|
72
|
+
|
73
|
+
difficulty = m[DIFFICULTY_INDEX] ? m[DIFFICULTY_INDEX].to_i : NOT_CHECK_SUCCESS
|
74
|
+
|
75
|
+
return get_roll_result(result_text, success_dice, ten_dice, desperaton_ten_dice, desperaton_botch_dice, difficulty)
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def get_roll_result(result_text, success_dice, ten_dice, _desperaton_ten_dice, desperaton_botch_dice, difficulty)
|
81
|
+
result_text = "#{result_text} 成功数=#{success_dice}"
|
82
|
+
is_critical = ten_dice >= 2
|
83
|
+
desperation_result = ""
|
84
|
+
|
85
|
+
if difficulty > 0
|
86
|
+
result_text = "#{result_text} 難易度=#{difficulty}"
|
87
|
+
|
88
|
+
if success_dice >= difficulty
|
89
|
+
result_text = "#{result_text} 差分=#{success_dice - difficulty}"
|
90
|
+
|
91
|
+
if desperaton_botch_dice > 0
|
92
|
+
desperation_result = " [Overreach or Despair?]"
|
93
|
+
end
|
94
|
+
|
95
|
+
if is_critical
|
96
|
+
return Result.critical("#{result_text}:判定成功! [Critical Win]#{desperation_result}")
|
97
|
+
else
|
98
|
+
return Result.success("#{result_text}:判定成功!#{desperation_result}")
|
99
|
+
end
|
100
|
+
|
101
|
+
else
|
102
|
+
if desperaton_botch_dice > 0
|
103
|
+
return Result.fumble("#{result_text}:判定失敗! [Despair]")
|
104
|
+
end
|
105
|
+
|
106
|
+
return Result.failure("#{result_text}:判定失敗!")
|
107
|
+
end
|
108
|
+
elsif difficulty < 0
|
109
|
+
if success_dice == 0
|
110
|
+
if desperaton_botch_dice > 0
|
111
|
+
return Result.fumble("#{result_text}:判定失敗! [Despair]")
|
112
|
+
end
|
113
|
+
|
114
|
+
return Result.failure("#{result_text}:判定失敗!")
|
115
|
+
else
|
116
|
+
if desperaton_botch_dice > 0
|
117
|
+
result_text = "#{result_text}\n 判定失敗なら [Despair]"
|
118
|
+
desperation_result = " [Overreach or Despair?]"
|
119
|
+
end
|
120
|
+
|
121
|
+
if is_critical
|
122
|
+
result_text = "#{result_text}\n 判定成功なら [Critical Win]"
|
123
|
+
elsif desperaton_botch_dice > 0
|
124
|
+
result_text = "#{result_text}\n 判定成功なら"
|
125
|
+
end
|
126
|
+
|
127
|
+
return "#{result_text}#{desperation_result}"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
# 難易度0指定(=全ての判定チェックを行わない)
|
132
|
+
return result_text.to_s
|
133
|
+
end
|
134
|
+
|
135
|
+
def get_critical_success(ten_dice)
|
136
|
+
# 10の目が2個毎に追加2成功
|
137
|
+
return ((ten_dice / 2) * 2)
|
138
|
+
end
|
139
|
+
|
140
|
+
def make_dice_roll(dice_pool)
|
141
|
+
dice_list = @randomizer.roll_barabara(dice_pool, 10)
|
142
|
+
|
143
|
+
dice_text = dice_list.join(',')
|
144
|
+
success_dice = dice_list.count { |x| x >= 6 }
|
145
|
+
ten_dice = dice_list.count(10)
|
146
|
+
botch_dice = dice_list.count(1)
|
147
|
+
|
148
|
+
return dice_text, success_dice, ten_dice, botch_dice
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|