bcdice 3.6.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +56 -0
  3. data/i18n/Arianrhod/ja_jp.yml +3 -0
  4. data/i18n/Emoklore/ja_jp.yml +7 -0
  5. data/i18n/FutariSousa/ja_jp.yml +431 -0
  6. data/i18n/LogHorizon/ja_jp.yml +1 -1
  7. data/i18n/SwordWorld/ja_jp.yml +1 -0
  8. data/i18n/SwordWorld/zh_hans.yml +7 -0
  9. data/i18n/SwordWorld2_0/zh_hans.yml +37 -0
  10. data/i18n/SwordWorld2_5/ja_jp.yml +1 -1
  11. data/i18n/SwordWorld2_5/zh_hans.yml +57 -0
  12. data/lib/bcdice/arithmetic/parser.rb +1 -1
  13. data/lib/bcdice/command/parser.rb +1 -1
  14. data/lib/bcdice/common_command/add_dice/parser.rb +106 -74
  15. data/lib/bcdice/common_command/add_dice.rb +1 -1
  16. data/lib/bcdice/common_command/barabara_dice/parser.rb +1 -1
  17. data/lib/bcdice/common_command/calc/parser.rb +1 -1
  18. data/lib/bcdice/common_command/d66_dice.rb +1 -1
  19. data/lib/bcdice/common_command/reroll_dice/parser.rb +1 -1
  20. data/lib/bcdice/common_command/tally_dice/parser.rb +1 -1
  21. data/lib/bcdice/common_command/upper_dice/parser.rb +1 -1
  22. data/lib/bcdice/game_system/AngelGear.rb +1 -1
  23. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  24. data/lib/bcdice/game_system/Arianrhod.rb +4 -4
  25. data/lib/bcdice/game_system/AssaultEngine.rb +3 -3
  26. data/lib/bcdice/game_system/Ayabito.rb +170 -4
  27. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -1
  28. data/lib/bcdice/game_system/BeginningIdol.rb +4 -2
  29. data/lib/bcdice/game_system/BeginningIdol2022.rb +184 -0
  30. data/lib/bcdice/game_system/BladeOfArcana.rb +3 -3
  31. data/lib/bcdice/game_system/Bloodorium.rb +68 -0
  32. data/lib/bcdice/game_system/ConvictorDrive.rb +117 -0
  33. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  34. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  35. data/lib/bcdice/game_system/CyberpunkRed.rb +2 -6
  36. data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
  37. data/lib/bcdice/game_system/DungeonsAndDragons5.rb +196 -0
  38. data/lib/bcdice/game_system/EmbryoMachine.rb +4 -4
  39. data/lib/bcdice/game_system/Emoklore.rb +8 -8
  40. data/lib/bcdice/game_system/FutariSousa.rb +31 -5
  41. data/lib/bcdice/game_system/GURPS.rb +1 -1
  42. data/lib/bcdice/game_system/GehennaAn.rb +2 -2
  43. data/lib/bcdice/game_system/GhostLive.rb +144 -0
  44. data/lib/bcdice/game_system/GoblinSlayer.rb +30 -8
  45. data/lib/bcdice/game_system/HunterTheReckoning5th.rb +152 -0
  46. data/lib/bcdice/game_system/IfIfIf.rb +648 -0
  47. data/lib/bcdice/game_system/Kutulu.rb +95 -0
  48. data/lib/bcdice/game_system/LostRoyal.rb +1 -1
  49. data/lib/bcdice/game_system/NobunagasBlackCastle.rb +237 -0
  50. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  51. data/lib/bcdice/game_system/Raisondetre.rb +1 -1
  52. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  53. data/lib/bcdice/game_system/SajinsenkiAGuS.rb +154 -0
  54. data/lib/bcdice/game_system/Sengensyou.rb +59 -0
  55. data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
  56. data/lib/bcdice/game_system/ShinobiGami.rb +14 -1
  57. data/lib/bcdice/game_system/SkynautsBouken.rb +93 -2
  58. data/lib/bcdice/game_system/StellarLife.rb +1 -1
  59. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
  60. data/lib/bcdice/game_system/SwordWorld.rb +2 -2
  61. data/lib/bcdice/game_system/SwordWorld2_0_SimplifiedChinese.rb +84 -0
  62. data/lib/bcdice/game_system/SwordWorld2_5_SimplifiedChinese.rb +95 -0
  63. data/lib/bcdice/game_system/SwordWorld_SimplifiedChinese.rb +29 -0
  64. data/lib/bcdice/game_system/TherapieSein.rb +2 -2
  65. data/lib/bcdice/game_system/Torg.rb +1 -1
  66. data/lib/bcdice/game_system/TorgEternity.rb +54 -18
  67. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +26 -12
  68. data/lib/bcdice/game_system/VisionConnect.rb +135 -0
  69. data/lib/bcdice/game_system/Warhammer4.rb +4 -0
  70. data/lib/bcdice/game_system/WorldOfDarkness.rb +54 -50
  71. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
  72. data/lib/bcdice/game_system/filled_with/tresure_tables.rb +1 -1
  73. data/lib/bcdice/game_system/satasupe/tables.rb +1 -1
  74. data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
  75. data/lib/bcdice/game_system.rb +15 -0
  76. data/lib/bcdice/version.rb +1 -1
  77. 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