bcdice 3.16.1 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +111 -0
- data/i18n/Airgetlamh/ja_jp.yml +5 -0
- data/i18n/Airgetlamh/ko_kr.yml +5 -0
- data/i18n/Alsetto/ja_jp.yml +5 -0
- data/i18n/Alsetto/ko_kr.yml +5 -0
- data/i18n/AnimaAnimus/ja_jp.yml +28 -0
- data/i18n/AnimaAnimus/ko_kr.yml +28 -0
- data/i18n/BlackJacket/ja_jp.yml +79 -0
- data/i18n/BlackJacket/ko_kr.yml +79 -0
- data/i18n/Bloodorium/ja_jp.yml +3 -0
- data/i18n/Bloodorium/ko_kr.yml +3 -0
- data/i18n/Cthulhu/ko_kr.yml +1 -1
- data/i18n/Dracurouge/ko_kr.yml +1284 -205
- data/i18n/Emoklore/ja_jp.yml +1 -0
- data/i18n/Emoklore/ko_kr.yml +1 -0
- data/i18n/FutariSousa/ja_jp.yml +70 -0
- data/i18n/FutariSousa/ko_kr.yml +157 -0
- data/i18n/HatsuneMiku/ja_jp.yml +579 -0
- data/i18n/HatsuneMiku/ko_kr.yml +579 -0
- data/i18n/Irisbane/ja_jp.yml +27 -0
- data/i18n/Irisbane/ko_kr.yml +27 -0
- data/i18n/JuinKansen/ja_jp.yml +168 -0
- data/i18n/JuinKansen/ko_kr.yml +168 -0
- data/i18n/KemonoNoMori/ja_jp.yml +229 -0
- data/i18n/KemonoNoMori/ko_kr.yml +229 -0
- data/i18n/KizunaBullet/ko_kr.yml +653 -0
- data/i18n/MagicPunk/ja_jp.yml +5 -0
- data/i18n/MagicPunk/ko_kr.yml +5 -0
- data/i18n/MorkBorg/ja_jp.yml +34 -0
- data/i18n/MorkBorg/ko_kr.yml +34 -0
- data/i18n/Nechronica/ko_kr.yml +43 -0
- data/i18n/NegikureNegimaki/ja_jp.yml +6 -0
- data/i18n/NegikureNegimaki/ko_kr.yml +6 -0
- data/i18n/Nuekagami/ja_jp.yml +219 -0
- data/i18n/Nuekagami/ko_kr.yml +219 -0
- data/i18n/Revulture/ja_jp.yml +8 -0
- data/i18n/Revulture/ko_kr.yml +8 -0
- data/i18n/SRS/ja_jp.yml +4 -0
- data/i18n/SRS/ko_kr.yml +4 -0
- data/i18n/ShinobiGami/ja_jp.yml +879 -0
- data/i18n/ShinobiGami/ko_kr.yml +876 -0
- data/i18n/StarryDolls/ja_jp.yml +456 -0
- data/i18n/StarryDolls/ko_kr.yml +456 -0
- data/i18n/StratoShout/ja_jp.yml +8 -8
- data/i18n/SwordWorld2_5/ja_jp.yml +48 -0
- data/i18n/Ventangle/ja_jp.yml +4 -0
- data/i18n/Ventangle/ko_kr.yml +4 -0
- data/i18n/YearZeroEngine/ja_jp.yml +12 -0
- data/i18n/YearZeroEngine/ko_kr.yml +12 -0
- data/i18n/ZombiLine/ja_jp.yml +27 -0
- data/i18n/ZombiLine/ko_kr.yml +27 -0
- data/i18n/ko_kr.yml +2 -0
- data/i18n/zh_hant.yml +2 -2
- data/lib/bcdice/dice_table/d66_left_range_table.rb +21 -0
- data/lib/bcdice/game_system/Aionia.rb +68 -19
- data/lib/bcdice/game_system/Airgetlamh.rb +64 -41
- data/lib/bcdice/game_system/Airgetlamh_Korean.rb +53 -0
- data/lib/bcdice/game_system/Alsetto.rb +63 -50
- data/lib/bcdice/game_system/Alsetto_Korean.rb +51 -0
- data/lib/bcdice/game_system/AnimaAnimus.rb +15 -32
- data/lib/bcdice/game_system/AnimaAnimus_Korean.rb +39 -0
- data/lib/bcdice/game_system/BlackJacket.rb +57 -113
- data/lib/bcdice/game_system/BlackJacket_Korean.rb +8 -206
- data/lib/bcdice/game_system/Bloodorium.rb +1 -1
- data/lib/bcdice/game_system/Bloodorium_Korean.rb +34 -0
- data/lib/bcdice/game_system/ChroniclesOfDarkness2e.rb +163 -0
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +471 -300
- data/lib/bcdice/game_system/DeadlineHeroes_Korean.rb +273 -0
- data/lib/bcdice/game_system/Dracurouge_Korean.rb +25 -19
- data/lib/bcdice/game_system/DungeonsAndDragons5.rb +106 -73
- data/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb +53 -0
- data/lib/bcdice/game_system/DungeonsAndDragons_Korean.rb +61 -0
- data/lib/bcdice/game_system/Emoklore.rb +34 -9
- data/lib/bcdice/game_system/Emoklore_Korean.rb +10 -2
- data/lib/bcdice/game_system/FateCoreSystem.rb +10 -6
- data/lib/bcdice/game_system/FullMetalPanic_Korean.rb +28 -0
- data/lib/bcdice/game_system/FutariSousa.rb +37 -12
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +25 -8
- data/lib/bcdice/game_system/GaiaCare.rb +40 -0
- data/lib/bcdice/game_system/GardenOrder.rb +2 -2
- data/lib/bcdice/game_system/GardenOrderReEdit.rb +849 -0
- data/lib/bcdice/game_system/GardenOrder_Korean.rb +839 -0
- data/lib/bcdice/game_system/HatsuneMiku.rb +51 -605
- data/lib/bcdice/game_system/HatsuneMiku_Korean.rb +56 -0
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +15 -11
- data/lib/bcdice/game_system/Irisbane.rb +17 -30
- data/lib/bcdice/game_system/Irisbane_Korean.rb +52 -0
- data/lib/bcdice/game_system/JuinKansen.rb +41 -208
- data/lib/bcdice/game_system/JuinKansen_Korean.rb +8 -213
- data/lib/bcdice/game_system/KemonoNoMori.rb +67 -276
- data/lib/bcdice/game_system/KemonoNoMori_Korean.rb +62 -0
- data/lib/bcdice/game_system/KinAriel.rb +117 -0
- data/lib/bcdice/game_system/KizunaBullet_Korean.rb +109 -0
- data/lib/bcdice/game_system/KutuluRevised.rb +94 -0
- data/lib/bcdice/game_system/LiverLabyrinth.rb +321 -0
- data/lib/bcdice/game_system/Lost.rb +89 -0
- data/lib/bcdice/game_system/MagicPunk.rb +85 -0
- data/lib/bcdice/game_system/MagicPunk_Korean.rb +39 -0
- data/lib/bcdice/game_system/MarvelHeroicRoleplaying.rb +144 -0
- data/lib/bcdice/game_system/MetallicGuardian_Korean.rb +28 -0
- data/lib/bcdice/game_system/MorkBorg.rb +170 -0
- data/lib/bcdice/game_system/MorkBorg_Korean.rb +49 -0
- data/lib/bcdice/game_system/NanimonaiMura.rb +112 -0
- data/lib/bcdice/game_system/Nechronica_Korean.rb +6 -6
- data/lib/bcdice/game_system/NegikureNegimaki.rb +140 -0
- data/lib/bcdice/game_system/NegikureNegimaki_Korean.rb +48 -0
- data/lib/bcdice/game_system/NeonUnderRealm.rb +122 -0
- data/lib/bcdice/game_system/NinjaSlayer2.rb +170 -49
- data/lib/bcdice/game_system/Nuekagami.rb +19 -261
- data/lib/bcdice/game_system/Nuekagami_Korean.rb +43 -0
- data/lib/bcdice/game_system/ParanoiaPerfect.rb +74 -0
- data/lib/bcdice/game_system/PastFutureParadox.rb +2245 -55
- data/lib/bcdice/game_system/PreciousDays.rb +170 -0
- data/lib/bcdice/game_system/Revulture.rb +8 -5
- data/lib/bcdice/game_system/Revulture_Korean.rb +7 -81
- data/lib/bcdice/game_system/Ryutama.rb +46 -46
- data/lib/bcdice/game_system/SRS.rb +4 -4
- data/lib/bcdice/game_system/SRS_Korean.rb +67 -0
- data/lib/bcdice/game_system/ShinobiGami.rb +154 -1047
- data/lib/bcdice/game_system/ShinobiGami_Korean.rb +102 -0
- data/lib/bcdice/game_system/StarryDolls.rb +70 -508
- data/lib/bcdice/game_system/StarryDolls_Korean.rb +80 -0
- data/lib/bcdice/game_system/StratoShout.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +28 -2
- data/lib/bcdice/game_system/SwordWorld2_0.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld2_5.rb +67 -3
- data/lib/bcdice/game_system/TacticalExorcist.rb +222 -0
- data/lib/bcdice/game_system/TenkaRyouran_Korean.rb +30 -0
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +38 -33
- data/lib/bcdice/game_system/Ventangle.rb +8 -7
- data/lib/bcdice/game_system/Ventangle_Korean.rb +6 -95
- data/lib/bcdice/game_system/Warhammer4.rb +202 -6
- data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +20 -15
- data/lib/bcdice/game_system/WorldEndScrapyard.rb +333 -0
- data/lib/bcdice/game_system/WorldsEndFrontline_Korean.rb +26 -0
- data/lib/bcdice/game_system/YearZeroEngine.rb +7 -7
- data/lib/bcdice/game_system/YearZeroEngine_Korean.rb +46 -0
- data/lib/bcdice/game_system/ZombiLine.rb +29 -36
- data/lib/bcdice/game_system/ZombiLine_Korean.rb +37 -0
- data/lib/bcdice/game_system/cthulhu7th_Korean/full_auto.rb +294 -0
- data/lib/bcdice/game_system/cthulhu7th_Korean/rollable.rb +43 -0
- data/lib/bcdice/game_system/sword_world/rating_options.rb +9 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +19 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +229 -149
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -0
- data/lib/bcdice/game_system.rb +42 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +87 -2
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class DeadlineHeroes_Korean < Base
|
|
6
|
+
ID = "DeadlineHeroes:Korean"
|
|
7
|
+
NAME = "데드라인 히어로즈 RPG"
|
|
8
|
+
SORT_KEY = "国際化:Korean:데드라인 히어로즈 RPG"
|
|
9
|
+
|
|
10
|
+
HELP_MESSAGE = <<~TEXT
|
|
11
|
+
・행위판정(DLHx)
|
|
12
|
+
x:성공률 (%)
|
|
13
|
+
예) DLH80
|
|
14
|
+
크리티컬, 펌블을 자동으로 판정합니다.
|
|
15
|
+
「DLH50+20-30」처럼 가산, 감산 기재도 가능.
|
|
16
|
+
성공률은 상한 100%, 하한 0%
|
|
17
|
+
|
|
18
|
+
・데스차트(DCxY)
|
|
19
|
+
x:L=육체 / S=정신 / C=환경
|
|
20
|
+
Y:수치
|
|
21
|
+
예)
|
|
22
|
+
DCL-5 → 라이프 -5로 판정
|
|
23
|
+
DCS-3 → 새니티 -3으로 판정
|
|
24
|
+
DCC0 → 크레딧 0으로 판정
|
|
25
|
+
|
|
26
|
+
・히어로 네임 차트(HNC)
|
|
27
|
+
|
|
28
|
+
・리얼 네임 차트:일본(RNCJ) / 해외(RNCO)
|
|
29
|
+
|
|
30
|
+
TEXT
|
|
31
|
+
|
|
32
|
+
register_prefix('DLH', 'DCL', 'DCS', 'DCC', 'HNC', 'RNCO', 'RNCJ')
|
|
33
|
+
|
|
34
|
+
def eval_game_system_specific_command(command)
|
|
35
|
+
roll_check(command) ||
|
|
36
|
+
death_chart(command) ||
|
|
37
|
+
hero_name_chart(command) ||
|
|
38
|
+
real_name_chart_overseas(command) ||
|
|
39
|
+
real_name_chart_jp(command)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def roll_check(command)
|
|
43
|
+
# 1. /i 를 추가해 대소문자 무시
|
|
44
|
+
m = /^DLH([0-9+-]+)$/i.match(command)
|
|
45
|
+
return nil unless m
|
|
46
|
+
|
|
47
|
+
expr = m[1]
|
|
48
|
+
parts = expr.scan(/[+-]?\d+/)
|
|
49
|
+
target = parts.map(&:to_i).sum
|
|
50
|
+
target = [[target, 0].max, 100].min
|
|
51
|
+
|
|
52
|
+
roll = @randomizer.roll_once(100)
|
|
53
|
+
roll_str = format("%02d", roll)
|
|
54
|
+
is_double = roll_str[0] == roll_str[1]
|
|
55
|
+
|
|
56
|
+
# 2. 문자열을 먼저 조합
|
|
57
|
+
text = "성공률#{target}% > #{roll_str}"
|
|
58
|
+
|
|
59
|
+
# 3. 문자열이 아닌 Result 객체를 반환
|
|
60
|
+
if is_double && roll <= target
|
|
61
|
+
return Result.critical("#{text} > 크리티컬")
|
|
62
|
+
elsif is_double && roll > target
|
|
63
|
+
return Result.fumble("#{text} > 펌블")
|
|
64
|
+
elsif roll <= target
|
|
65
|
+
return Result.success("#{text} > 성공")
|
|
66
|
+
else
|
|
67
|
+
return Result.failure("#{text} > 실패")
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def death_chart(command)
|
|
72
|
+
m = /^DC([LSC])([+-]?\d+)$/i.match(command)
|
|
73
|
+
return nil unless m
|
|
74
|
+
|
|
75
|
+
type = m[1]
|
|
76
|
+
base_value = m[2].to_i
|
|
77
|
+
base_value = -base_value
|
|
78
|
+
roll = @randomizer.roll_once(10)
|
|
79
|
+
total = base_value + roll
|
|
80
|
+
total = [total, 20].min # 21 이상은 20으로 보정
|
|
81
|
+
|
|
82
|
+
table =
|
|
83
|
+
case type
|
|
84
|
+
when "L"
|
|
85
|
+
[
|
|
86
|
+
"",
|
|
87
|
+
"",
|
|
88
|
+
"아무 일도 일어나지 않는다. 당신은 기적적으로 목숨을 부지했다. 싸움은 계속된다.", # 2
|
|
89
|
+
"아무 일도 일어나지 않는다. 당신은 기적적으로 목숨을 부지했다. 싸움은 계속된다.", # 3
|
|
90
|
+
"아무 일도 일어나지 않는다. 당신은 기적적으로 목숨을 부지했다. 싸움은 계속된다.", # 4
|
|
91
|
+
"아무 일도 일어나지 않는다. 당신은 기적적으로 목숨을 부지했다. 싸움은 계속된다.", # 5
|
|
92
|
+
"아무 일도 일어나지 않는다. 당신은 기적적으로 목숨을 부지했다. 싸움은 계속된다.", # 6
|
|
93
|
+
"아무 일도 일어나지 않는다. 당신은 기적적으로 목숨을 부지했다. 싸움은 계속된다.", # 7
|
|
94
|
+
"아무 일도 일어나지 않는다. 당신은 기적적으로 목숨을 부지했다. 싸움은 계속된다.", # 8
|
|
95
|
+
"아무 일도 일어나지 않는다. 당신은 기적적으로 목숨을 부지했다. 싸움은 계속된다.", # 9
|
|
96
|
+
"아무 일도 일어나지 않는다. 당신은 기적적으로 목숨을 부지했다. 싸움은 계속된다.", # 10
|
|
97
|
+
"격통이 인다. 이후 이벤트 종료 시까지 모든 판정 성공률 -10%.", # 11
|
|
98
|
+
"당신은 [경직] 포인트 2점을 얻는다. [경직] 포인트를 소지하는 동안, 당신은 모든 파워를 사용할 수 없으며 자신의 턴도 얻을 수 없다. 각 라운드 종료 시, 당신이 소지한 [경직] 포인트를 1점 줄여도 좋다.", # 12
|
|
99
|
+
"혼신의 일격!! 당신은 <생존> 판정을 한다. 실패한 경우 [사망] 한다.", # 13
|
|
100
|
+
"당신은 [기절] 포인트를 2점 얻는다. [기절] 포인트를 소지하는 동안, 당신은 모든 파워를 사용할 수 없으며 자신의 턴도 얻을 수 없다. 각 라운드 종료 시, 당신이 소지한 [기절] 포인트를 1점 줄여도 좋다.", # 14
|
|
101
|
+
"이후 이벤트 종료 시까지 모든 판정의 성공률 -20%.", # 15
|
|
102
|
+
"기록적 일격!! 당신은 <생존>-20% 판정을 한다. 실패한 경우 [사망] 한다.", # 16
|
|
103
|
+
"당신은 [빈사] 포인트 2점을 얻는다. [빈사] 포인트를 소지하는 동안, 당신은 모든 파워를 사용할 수 없으며 자신의 턴도 얻을 수 없다. 각 라운드 종료 시, 당신이 소지한 [빈사] 포인트를 1점 잃는다. 모든 [빈사] 포인트를 잃기 전에 전투가 끝나지 않았을 경우, 당신은 [사망] 한다.", # 17
|
|
104
|
+
"서사시적 일격!! 당신은 <생존>-30% 판정을 한다. 실패한 경우 [사망] 한다.", # 18
|
|
105
|
+
"이후 이벤트 종료 시까지 모든 판정의 성공률 -30%.", # 19
|
|
106
|
+
"신화적 일격!! 당신은 하늘을 날아 3회전 정도 한 뒤, 지면에 내리꽂힌다. 눈뜨고 볼 수 없는 무참한 모습. 육체는 원형을 유지하지 못하고, 당신은 [사망] 했다." # 20
|
|
107
|
+
]
|
|
108
|
+
when "S"
|
|
109
|
+
["", "",
|
|
110
|
+
"아무 일도 일어나지 않는다. 당신은 이를 악물고 스트레스를 버텼다.", # 2
|
|
111
|
+
"아무 일도 일어나지 않는다. 당신은 이를 악물고 스트레스를 버텼다.", # 3
|
|
112
|
+
"아무 일도 일어나지 않는다. 당신은 이를 악물고 스트레스를 버텼다.", # 4
|
|
113
|
+
"아무 일도 일어나지 않는다. 당신은 이를 악물고 스트레스를 버텼다.", # 5
|
|
114
|
+
"아무 일도 일어나지 않는다. 당신은 이를 악물고 스트레스를 버텼다.", # 6
|
|
115
|
+
"아무 일도 일어나지 않는다. 당신은 이를 악물고 스트레스를 버텼다.", # 7
|
|
116
|
+
"아무 일도 일어나지 않는다. 당신은 이를 악물고 스트레스를 버텼다.", # 8
|
|
117
|
+
"아무 일도 일어나지 않는다. 당신은 이를 악물고 스트레스를 버텼다.", # 9
|
|
118
|
+
"아무 일도 일어나지 않는다. 당신은 이를 악물고 스트레스를 버텼다.", # 10
|
|
119
|
+
"이후 이벤트 종료 시까지 모든 판정 성공률 -10%.", # 11
|
|
120
|
+
"당신은 [공포] 포인트 2점을 얻는다. [공포] 포인트를 소지하는 동안, 당신은 [속성:공격]인 파워를 사용할 수 없다. 각 라운드 종료 시, 당신이 소지한 [공포] 포인트를 1점 줄여도 좋다.", # 12
|
|
121
|
+
"매우 상처입었다. 당신은 <의지> 판정을 한다. 실패한 경우 [절망]해 NPC가 된다.", # 13
|
|
122
|
+
"당신은 [기절] 포인트를 2점 얻는다. [기절] 포인트를 소지하는 동안, 당신은 모든 파워를 사용할 수 없으며 자신의 턴도 얻을 수 없다. 각 라운드 종료 시, 당신이 소지한 [기절] 포인트를 1점 줄여도 좋다.", # 14
|
|
123
|
+
"이후 이벤트 종료 시까지 모든 판정의 성공률 -20%.", # 15
|
|
124
|
+
"믿고 있던 사람에게 배신당한 듯한 아픔. 당신은 <의지>-20% 판정을 한다. 실패한 경우 [절망]해 NPC가 된다.", # 16
|
|
125
|
+
"당신은 [혼란] 포인트 2점을 얻는다. [혼란] 포인트를 소지하는 동안, 당신은 원래 동료였던 캐릭터에게, 가능한 한 최대의 피해를 입히도록 행동을 계속한다. 각 라운드 종료 시, 당신이 소지한 [혼란] 포인트를 1점 줄여도 좋다.", # 17
|
|
126
|
+
"너무나도 잔혹한 현실. 당신은 <의지>-30% 판정을 한다. 실패한 경우 [절망]해 NPC가 된다.", # 18
|
|
127
|
+
"이후 이벤트 종료 시까지 모든 판정의 성공률 -30%.", # 19
|
|
128
|
+
"우주의 섭리를 마주하나, 그것은 인류의 인식 한계를 뛰어넘는 무언가였다. 당신은 [절망]해 이후 NPC가 된다."] # 20
|
|
129
|
+
when "C"
|
|
130
|
+
["", "",
|
|
131
|
+
"아무 일도 일어나지 않는다. 당신은 수상한 소문을 불식시켰다.", # 2
|
|
132
|
+
"아무 일도 일어나지 않는다. 당신은 수상한 소문을 불식시켰다.", # 3
|
|
133
|
+
"아무 일도 일어나지 않는다. 당신은 수상한 소문을 불식시켰다.", # 4
|
|
134
|
+
"아무 일도 일어나지 않는다. 당신은 수상한 소문을 불식시켰다.", # 5
|
|
135
|
+
"아무 일도 일어나지 않는다. 당신은 수상한 소문을 불식시켰다.", # 6
|
|
136
|
+
"아무 일도 일어나지 않는다. 당신은 수상한 소문을 불식시켰다.", # 7
|
|
137
|
+
"아무 일도 일어나지 않는다. 당신은 수상한 소문을 불식시켰다.", # 8
|
|
138
|
+
"아무 일도 일어나지 않는다. 당신은 수상한 소문을 불식시켰다.", # 9
|
|
139
|
+
"아무 일도 일어나지 않는다. 당신은 수상한 소문을 불식시켰다.", # 10
|
|
140
|
+
"이후 이벤트 종료 시까지 모든 판정 성공률 -10%.", # 11
|
|
141
|
+
"핀치! 이후 이벤트 종료 시까지 당신은 《지원》을 사용할 수 없다.", # 12
|
|
142
|
+
"배신!! 당신은 <경제> 판정을 한다. 실패한 경우 당신은 히어로로서의 명성을 잃고 [오명]을 뒤집어쓴다.", # 13
|
|
143
|
+
"이후 시나리오 종료 시까지 대가로 크레딧을 소비하는 파워를 사용할 수 없다.", # 14
|
|
144
|
+
"당신의 악평이 상당한 모양이다. 이후 시나리오 종료 시까지 모든 판정의 성공률 -20%.", # 15
|
|
145
|
+
"신뢰의 실추!! 당신은 <경제>-20% 판정을 한다. 실패한 경우 당신은 히어로로서의 명성을 잃고 [오명]을 뒤집어쓴다.", # 16
|
|
146
|
+
"이후 시나리오 종료 시까지 【환경】계열 기능의 레벨이 모두 0이 된다.", # 17
|
|
147
|
+
"날조 보도!! 저지른 적 없는 범죄에 대한 가담이 특종으로 보도된다. 당신은 <경제>-30% 판정을 한다. 실패한 경우 당신은 히어로로서의 명성을 잃고 [오명]을 뒤집어쓴다.", # 18
|
|
148
|
+
"이후 이벤트 종료 시까지 모든 판정의 성공률 -30%.", # 19
|
|
149
|
+
"당신의 이름은 사상 최악의 오점으로 영원히 역사에 기록된다. 더이상 당신을 믿는 동료는 없으며, 당신을 도와줄 사회도 없다. 당신은 [오명]을 뒤집어쓴다."] # 20
|
|
150
|
+
end
|
|
151
|
+
result_text = table[total] || "(결과 없음)"
|
|
152
|
+
|
|
153
|
+
"(#{type} 데스차트 > #{result_text}"
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def hero_name_chart(command)
|
|
157
|
+
return nil unless command == "HNC"
|
|
158
|
+
|
|
159
|
+
combo_roll = @randomizer.roll_once(9)
|
|
160
|
+
combo_pattern = [
|
|
161
|
+
"베이스A+베이스B", "베이스B", "베이스B×2회", "베이스B+베이스C",
|
|
162
|
+
"베이스A+베이스B+베이스C", "베이스A+베이스B×2회",
|
|
163
|
+
"베이스B×2회+베이스C", "베이스B·오브·베이스B", "베이스B·더·베이스B"
|
|
164
|
+
][combo_roll - 1]
|
|
165
|
+
base_a = get_from_table(:A)
|
|
166
|
+
base_b1 = get_from_table(:B)
|
|
167
|
+
base_b2 = get_from_table(:B)
|
|
168
|
+
base_c = get_from_table(:C)
|
|
169
|
+
result_name = case combo_roll
|
|
170
|
+
when 1 then "#{base_a}#{base_b1}"
|
|
171
|
+
when 2 then base_b1
|
|
172
|
+
when 3 then "#{base_b1}#{base_b2}"
|
|
173
|
+
when 4 then "#{base_b1}#{base_c}"
|
|
174
|
+
when 5 then "#{base_a}#{base_b1}#{base_c}"
|
|
175
|
+
when 6 then "#{base_a}#{base_b1}#{base_b2}"
|
|
176
|
+
when 7 then "#{base_b1}#{base_b2}#{base_c}"
|
|
177
|
+
when 8 then "#{base_b1}·오브·#{base_b2}"
|
|
178
|
+
when 9 then "#{base_b1}·더·#{base_b2}"
|
|
179
|
+
end
|
|
180
|
+
"히어로 네임 차트 > 조합식: #{combo_pattern} > 결과: #{result_name}"
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# ========== [베이스 및 세부표] ==========
|
|
184
|
+
def get_from_table(type)
|
|
185
|
+
case type
|
|
186
|
+
when :A
|
|
187
|
+
roll = @randomizer.roll_once(10)
|
|
188
|
+
case roll
|
|
189
|
+
when 1 then "더·"
|
|
190
|
+
when 2 then "캡틴·"
|
|
191
|
+
when 3 then sample(["미스터·", "미스·", "미세스·"])
|
|
192
|
+
when 4 then sample(["닥터·", "프로페서·"])
|
|
193
|
+
when 5 then sample(["로드·", "바론·", "제네럴·"])
|
|
194
|
+
when 6 then "맨·오브·"
|
|
195
|
+
when 7 then get_from_table(:STR)
|
|
196
|
+
when 8 then get_from_table(:COLOR)
|
|
197
|
+
when 9 then sample(["마담·", "미들·"])
|
|
198
|
+
when 10 then @randomizer.roll_once(10).to_s
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
when :B
|
|
202
|
+
roll = @randomizer.roll_once(10)
|
|
203
|
+
case roll
|
|
204
|
+
when 1 then get_from_table(:MYTH)
|
|
205
|
+
when 2 then get_from_table(:WEAPON)
|
|
206
|
+
when 3 then get_from_table(:ANIMAL)
|
|
207
|
+
when 4 then get_from_table(:BIRD)
|
|
208
|
+
when 5 then get_from_table(:BUG)
|
|
209
|
+
when 6 then get_from_table(:BODY)
|
|
210
|
+
when 7 then get_from_table(:LIGHT)
|
|
211
|
+
when 8 then get_from_table(:ATTACK)
|
|
212
|
+
when 9 then get_from_table(:ETC)
|
|
213
|
+
when 10 then @randomizer.roll_once(10).to_s
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
when :C
|
|
217
|
+
roll = @randomizer.roll_once(10)
|
|
218
|
+
case roll
|
|
219
|
+
when 1 then sample(["맨", "우먼"])
|
|
220
|
+
when 2 then sample(["보이", "걸"])
|
|
221
|
+
when 3 then sample(["마스크", "후드"])
|
|
222
|
+
when 4 then "라이더"
|
|
223
|
+
when 5 then "마스터"
|
|
224
|
+
when 6 then sample(["파이터", "솔저"])
|
|
225
|
+
when 7 then sample(["킹", "퀸"])
|
|
226
|
+
when 8 then get_from_table(:COLOR)
|
|
227
|
+
when 9 then sample(["히어로", "스페셜"])
|
|
228
|
+
when 10 then @randomizer.roll_once(10).to_s
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
when :COLOR then sample(['블랙', '그린', '블루', '옐로', '레드', '바이올렛', '실버', '골드', '화이트', '클리어'])
|
|
232
|
+
when :WEAPON then sample(['나이브스', '소드', '해머', '건', '스틸', '터스크', '뉴', '애로', '소', '레이저'])
|
|
233
|
+
when :BODY then sample(['하트', '페이스', '암', '숄더', '헤드', '아이', '피스트', '핸드', '클로', '본'])
|
|
234
|
+
when :ATTACK then sample(['스트로크', '크래시', '블로', '히트', '펀치', '킥', '슬래시', '베네트레이트', '샷', '킬'])
|
|
235
|
+
when :MYTH then sample(['아포칼립스', '워', '이터널', '엔젤', '데블', '이모탈', '데스', '드림', '고스트', '데드'])
|
|
236
|
+
when :ANIMAL then sample(['버니', '타이거', '샤크', '캣', '콩', '도그', '폭스', '팬서', '애스', '배트'])
|
|
237
|
+
when :LIGHT then sample(['라이트', '섀도우', '파이어', '다크', '나이트', '팬텀', '토치', '플래시', '랜턴', '선'])
|
|
238
|
+
when :BIRD then sample(['호크', '팔콘', '캐너리', '로빈', '이글', '아울', '레이븐', '덕', '펭귄', '피닉스'])
|
|
239
|
+
when :ETC then sample(['휴먼', '에이전트', '부스터', '아이언', '선더', '워처', '풀', '머신', '콜드', '사이드'])
|
|
240
|
+
when :STR then sample(['슈퍼', '원더', '얼티밋', '판타스틱', '마이티', '인크레더블', '어메이징', '와일드', '그레이티스트', '마벨러스'])
|
|
241
|
+
when :BUG then sample(['비틀', '버터플라이', '스네이크', '엘리게이터', '로커스트', '리자드', '터틀', '스파이더', '앤트', '맨티스'])
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def sample(array)
|
|
246
|
+
index = @randomizer.roll_once(array.size) - 1
|
|
247
|
+
array[index]
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def real_name_chart_overseas(command)
|
|
251
|
+
return nil unless command == "RNCO"
|
|
252
|
+
return "무명(모종의 이유로 이름이 없다. 혹은 잃었다)" if @randomizer.roll_once(10) == 1
|
|
253
|
+
|
|
254
|
+
first_male = sample(['알버스', '크리스', '사뮤엘', '시드니', '스파이크', '데미안', '딕', '덴젤', '돈', '니콜라스', '네빌', '발리', '빌리', '브루스', '마브', '라이언'])
|
|
255
|
+
first_female = sample(['아이리스', '올리브', '카라', '킬스틴', '그웬', '사만사', '저스티나', '타바사', '나딘', '노엘', '할린', '마르셀라', '라나', '린디', '로잘리', '원더'])
|
|
256
|
+
last_name = sample(['알렌', '워큰', '울프먼', '오르센', '카터', '캐러딘', '지겔', '존스', '파커', '프리먼', '머피', '밀러', '무어', '리브', '레이놀즈', '워드'])
|
|
257
|
+
|
|
258
|
+
"이름(남):#{first_male}\n이름(여):#{first_female}\n성:#{last_name}"
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def real_name_chart_jp(command)
|
|
262
|
+
return nil unless command == "RNCJ"
|
|
263
|
+
return "무명(모종의 이유로 이름이 없다. 혹은 잃었다)" if @randomizer.roll_once(10) == 1
|
|
264
|
+
|
|
265
|
+
last_name = sample(['아이카와', '아마미야', '이부키', '오가미', '카이', '사카키', '시시도', '타치바나', '츠부라야', '하야카와', '하라다', '후지카와', '호시', '미조구치', '야시다', '유우키'])
|
|
266
|
+
first_male = sample(['아키라', '에이지', '카즈키', '긴가', '켄이치로', '고우', '지로', '타케시', '츠바사', '테츠', '히데오', '마사무네', '야마토', '류세이', '레츠', '렌'])
|
|
267
|
+
first_female = sample(['안', '이노리', '에마', '카논', '사라', '시즈쿠', '치즈루', '나오미', '하루', '히카루', '베니', '마치', '미아', '유리코', '루이', '레나'])
|
|
268
|
+
|
|
269
|
+
"성:#{last_name}\n이름(남):#{first_male}\n이름(여):#{first_female}"
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
@@ -16,32 +16,36 @@ module BCDice
|
|
|
16
16
|
|
|
17
17
|
# ダイスボットの使い方
|
|
18
18
|
HELP_MESSAGE = <<~MESSAGETEXT
|
|
19
|
-
|
|
19
|
+
・행동 판정(DRx+y)
|
|
20
20
|
x:굴리는 주사위의 수(생략시4), y:갈증수정(생략시0)
|
|
21
21
|
예) DR DR6 DR+1 DR5+2
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
|
|
23
|
+
・저항 판정(DRRx)
|
|
24
|
+
x:굴리는 주사위의 수
|
|
24
25
|
예) DRR3
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
|
|
27
|
+
・원풍경 표(ST), 서훈 표(CO), 서훈 후 표(CA), 까마득한 과거 표(EP)
|
|
28
|
+
원죄 표(OS), 수난 표(PN), 근황 표(RS), 평화로운 과거 표(PP)
|
|
27
29
|
・타락표(CTx) x:갈증(예) CT3
|
|
28
|
-
・타락의
|
|
29
|
-
|
|
30
|
+
・타락의 조짐표(CS), 확장·타락의 조짐표(ECS)
|
|
31
|
+
・유대 내용 결정표(BT)
|
|
32
|
+
|
|
30
33
|
・반응표(RTxy)x:혈통, y:길 xy생략으로 일괄표시
|
|
31
|
-
혈통 D:드라크, R:로젠부르크, H
|
|
34
|
+
혈통 D:드라크, R:로젠부르크, H:헬즈가르드, M:더스트하임
|
|
32
35
|
A:아발롬 N:노스페라스
|
|
33
|
-
길 F:영주, G:근위, R
|
|
36
|
+
길 F:영주, G:근위, R:편력, W:현자, J:엽사, N:야수
|
|
37
|
+
E:장군, B:승정, H:공구(환기수), K:선장, L:총동(미동), V:중립, U:기사(공예사), D:박사
|
|
38
|
+
S:성독(별읽기), G2:후견
|
|
34
39
|
예)RT(일괄표시), RTDF(드라크 영주), RTAN(아발롬 야수)
|
|
35
|
-
・異端の反応表(HRTxy)x:血統, y:道 xy省略で一括表示
|
|
36
|
-
血統 L:異端卿, V:ヴルコラク, N:ナハツェーラ, K:カルンシュタイン
|
|
37
|
-
G:グリマルキン, S:ストリガ, M:メリュジーヌ, F:フォーン
|
|
38
|
-
H:ホムンクルス, E:エナメルム, S2:サングィナリエ, A:アールヴ
|
|
39
|
-
V2:ヴィーヴル, L2:ルーガルー, A2:アルラウネ, F2:フリッガ
|
|
40
|
-
道 W:野伏, N:流浪, S:密使, H:魔女, F:剣士, X:検体
|
|
41
|
-
・D66 다이스 있음
|
|
42
|
-
MESSAGETEXT
|
|
43
40
|
|
|
44
|
-
|
|
41
|
+
・이단의 반응 표(HRTxy)x:혈통, y:길 xy생략으로 일괄표시
|
|
42
|
+
혈통 L:이단경, V:바르콜락, N:나흐체러, K:카른슈타인
|
|
43
|
+
G:그리말킨, S:스트리가, M:멜뤼진, F:폰
|
|
44
|
+
H:호문클루스, E:에나멜룸, S2:생귀나리에, A:알브
|
|
45
|
+
V2:뷔블, L2:루갈루, A2:알라우네, F2:프리가
|
|
46
|
+
길 W:야생, N:유랑, S:밀사, H:마녀, F:검사, X:검체(실험체)
|
|
47
|
+
・D66 주사위 있음
|
|
48
|
+
MESSAGETEXT
|
|
45
49
|
|
|
46
50
|
def initialize(command)
|
|
47
51
|
super(command)
|
|
@@ -49,7 +53,9 @@ module BCDice
|
|
|
49
53
|
@locale = :ko_kr
|
|
50
54
|
end
|
|
51
55
|
|
|
52
|
-
TABLES = translate_tables(:ko_kr)
|
|
56
|
+
TABLES = translate_tables(:ko_kr).freeze
|
|
57
|
+
|
|
58
|
+
register_prefix_from_super_class()
|
|
53
59
|
end
|
|
54
60
|
end
|
|
55
61
|
end
|
|
@@ -14,17 +14,20 @@ module BCDice
|
|
|
14
14
|
|
|
15
15
|
# ダイスボットの使い方
|
|
16
16
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
17
|
-
・攻撃ロール AT[x][@c][>=t][y]
|
|
17
|
+
・攻撃ロール AT[x][@c][>=t][y][B]
|
|
18
18
|
x:+-修正。省略可。
|
|
19
19
|
c:クリティカル値。省略可。
|
|
20
20
|
t:敵のアーマークラス。>=を含めて省略可。
|
|
21
21
|
y:有利(A), 不利(D)。省略可。
|
|
22
|
+
B:ブレスやガイダンス等によるボーナス。省略可。
|
|
23
|
+
Bだけを書くと+1d4、B[1D4+1D8]などと書くと[]内のロールをボーナスとしてロールします。
|
|
22
24
|
ファンブル/失敗/成功/クリティカル を自動判定。
|
|
23
25
|
例)AT AT>=10 AT+5>=18 AT-3>=16 ATA AT>=10A AT+3>=18A AT-3>=16 ATD AT>=10D AT+5>=18D AT-5>=16D
|
|
24
|
-
AT@19 AT+5@18 AT-2@19>=15
|
|
25
|
-
・能力値判定 AR[x][>=t][y]
|
|
26
|
+
AT@19 AT+5@18 AT-2@19>=15 AT+3>=18AB AT+3>=18DB[1D6]
|
|
27
|
+
・能力値判定 AR[x][>=t][y][b]
|
|
26
28
|
攻撃ロールと同様。失敗/成功を自動判定。
|
|
27
29
|
例)AR AR>=10 AR+5>=18 AR-3>=16 ARA AR>=10A AR+3>=18A AR-3>=16 ARD AR>=10D AR+5>=18D AR-5>=16D
|
|
30
|
+
AR+3>=18AB AR+3>=18DB[1D6]
|
|
28
31
|
・両手持ちのダメージ 2HnDx[m]
|
|
29
32
|
n:ダイスの個数
|
|
30
33
|
x:ダイスの面数
|
|
@@ -33,7 +36,7 @@ module BCDice
|
|
|
33
36
|
例)2H3D6 2H1D10+3 2H2D8-1
|
|
34
37
|
INFO_MESSAGE_TEXT
|
|
35
38
|
|
|
36
|
-
register_prefix('AT
|
|
39
|
+
register_prefix('AT', 'AR', '2H')
|
|
37
40
|
|
|
38
41
|
def initialize(command)
|
|
39
42
|
super(command)
|
|
@@ -55,32 +58,47 @@ module BCDice
|
|
|
55
58
|
end
|
|
56
59
|
end
|
|
57
60
|
|
|
58
|
-
#
|
|
59
|
-
def
|
|
60
|
-
m = /^AT([
|
|
61
|
+
# ロール処理
|
|
62
|
+
def exec_roll(command)
|
|
63
|
+
m = /^(AT|AR)([-+\d]+)?(@(\d+))?(>=(\d+))?([AD]?)6?(B(\[(\d+D\d+([-+]\d+D\d+)*)\])?)?/.match(command)
|
|
61
64
|
unless m
|
|
62
65
|
return nil
|
|
63
66
|
end
|
|
64
67
|
|
|
65
|
-
modify =
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
modify = 0
|
|
69
|
+
mod_str = ""
|
|
70
|
+
unless m[2].nil?
|
|
71
|
+
if Arithmetic.eval(m[2], @round_type).nil?
|
|
72
|
+
return nil
|
|
73
|
+
else
|
|
74
|
+
modify = Arithmetic.eval(m[2], @round_type)
|
|
75
|
+
mod_str = number_with_sign_from_int(modify).to_s
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
critical_no = m[4].to_i
|
|
79
|
+
difficulty = m[6].to_i
|
|
80
|
+
advantage = m[7].to_s
|
|
81
|
+
bonus = m[8].to_s
|
|
82
|
+
bonus_dice = m[10].to_s
|
|
69
83
|
|
|
70
84
|
usedie = 0
|
|
85
|
+
bonus_mod = 0
|
|
86
|
+
bonus_str = ""
|
|
87
|
+
bonus_mod_arr = []
|
|
71
88
|
roll_die = ""
|
|
72
89
|
|
|
73
|
-
dice_command = "
|
|
74
|
-
|
|
90
|
+
dice_command = "#{m[1]}#{number_with_sign_from_int(modify)}"
|
|
91
|
+
unless critical_no < 1
|
|
75
92
|
dice_command += "@#{critical_no}"
|
|
76
|
-
else
|
|
77
|
-
critical_no = 20
|
|
78
93
|
end
|
|
79
94
|
if difficulty > 0
|
|
80
95
|
dice_command += ">=#{difficulty}"
|
|
81
96
|
end
|
|
82
97
|
unless advantage.empty?
|
|
83
|
-
dice_command += advantage
|
|
98
|
+
dice_command += advantage
|
|
99
|
+
end
|
|
100
|
+
unless bonus.empty?
|
|
101
|
+
dice_command += bonus
|
|
84
102
|
end
|
|
85
103
|
|
|
86
104
|
output = ["(#{dice_command})"]
|
|
@@ -96,32 +114,72 @@ module BCDice
|
|
|
96
114
|
else
|
|
97
115
|
usedie = dice.min
|
|
98
116
|
end
|
|
117
|
+
roll_die = "#{usedie}#{roll_die}"
|
|
99
118
|
end
|
|
100
119
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
120
|
+
unless bonus.empty?
|
|
121
|
+
if bonus == "B"
|
|
122
|
+
bonus_mod = @randomizer.roll_once(4).to_i
|
|
123
|
+
bonus_str = number_with_sign_from_int(bonus_mod).to_s
|
|
124
|
+
else
|
|
125
|
+
unless bonus_dice.empty?
|
|
126
|
+
bonus_dice_arr = bonus_dice.gsub(/([+-])/, ",\\1").split(',')
|
|
127
|
+
bonus_dice_arr.each do |i|
|
|
128
|
+
now_bonus_dice = i.split("D")
|
|
129
|
+
now_dice_count = now_bonus_dice[0].to_i
|
|
130
|
+
now_dice_number = now_bonus_dice[1].to_i
|
|
131
|
+
dice = @randomizer.roll_barabara(now_dice_count.abs, now_dice_number)
|
|
132
|
+
if now_dice_count.positive?
|
|
133
|
+
bonus_mod_arr.push(dice.sum())
|
|
134
|
+
else
|
|
135
|
+
bonus_mod_arr.push(-dice.sum())
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
bonus_mod = bonus_mod_arr.sum()
|
|
139
|
+
bonus_str = "#{number_with_sign_from_int(bonus_mod)}[#{bonus_mod_arr.join(',')}]"
|
|
140
|
+
end
|
|
107
141
|
end
|
|
108
|
-
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
output.push("#{roll_die}#{mod_str}#{bonus_str}")
|
|
145
|
+
unless mod_str.empty? && advantage.empty? && bonus.empty?
|
|
146
|
+
output.push((usedie + modify + bonus_mod).to_s)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
return usedie, (usedie + modify + bonus_mod), difficulty, output
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# 攻撃ロール
|
|
153
|
+
def attack_roll(command)
|
|
154
|
+
m = /^AT([-+\d]+)?(@(\d+))?(>=(\d+))?([AD]?)6?(B(\[(\d+D\d+([-+]\d+D\d+)*)\])?)?/.match(command)
|
|
155
|
+
unless m
|
|
156
|
+
return nil
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
critical_no = 20
|
|
160
|
+
unless m[3].nil?
|
|
161
|
+
critical_no = m[3].to_i
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
usedie, dice_result, difficulty, output = exec_roll(command)
|
|
165
|
+
if usedie.nil?
|
|
166
|
+
return nil
|
|
109
167
|
end
|
|
110
168
|
|
|
111
169
|
result = Result.new
|
|
112
170
|
if usedie >= critical_no
|
|
113
171
|
result.critical = true
|
|
114
172
|
result.success = true
|
|
115
|
-
output.push(
|
|
173
|
+
output.push(translate('critical'))
|
|
116
174
|
elsif usedie == 1
|
|
117
175
|
result.fumble = true
|
|
118
|
-
output.push(
|
|
176
|
+
output.push(translate('fumble'))
|
|
119
177
|
elsif difficulty > 0
|
|
120
|
-
if
|
|
178
|
+
if dice_result >= difficulty
|
|
121
179
|
result.success = true
|
|
122
|
-
output.push(
|
|
180
|
+
output.push(translate('success'))
|
|
123
181
|
else
|
|
124
|
-
output.push(
|
|
182
|
+
output.push(translate('failure'))
|
|
125
183
|
end
|
|
126
184
|
end
|
|
127
185
|
|
|
@@ -139,58 +197,23 @@ module BCDice
|
|
|
139
197
|
|
|
140
198
|
# 能力値ロール
|
|
141
199
|
def ability_roll(command)
|
|
142
|
-
m = /^AR([
|
|
200
|
+
m = /^AR([-+\d]+)?(>=(\d+))?([AD]?)6?(B(\[(\d+D\d+([-+]\d+D\d+)*)\])?)?/.match(command)
|
|
143
201
|
unless m
|
|
144
202
|
return nil
|
|
145
203
|
end
|
|
146
204
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
usedie = 0
|
|
152
|
-
roll_die = ""
|
|
153
|
-
|
|
154
|
-
dice_command = "AR#{number_with_sign_from_int(modify)}"
|
|
155
|
-
if difficulty > 0
|
|
156
|
-
dice_command += ">=#{difficulty}"
|
|
157
|
-
end
|
|
158
|
-
unless advantage.empty?
|
|
159
|
-
dice_command += advantage.to_s
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
output = ["(#{dice_command})"]
|
|
163
|
-
|
|
164
|
-
if advantage.empty?
|
|
165
|
-
usedie = @randomizer.roll_once(20)
|
|
166
|
-
roll_die = usedie
|
|
167
|
-
else
|
|
168
|
-
dice = @randomizer.roll_barabara(2, 20)
|
|
169
|
-
roll_die = "[" + dice.join(",") + "]"
|
|
170
|
-
if advantage == "A"
|
|
171
|
-
usedie = dice.max
|
|
172
|
-
else
|
|
173
|
-
usedie = dice.min
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
if modify != 0
|
|
178
|
-
output.push("#{roll_die}#{number_with_sign_from_int(modify)}")
|
|
179
|
-
output.push((usedie + modify).to_s)
|
|
180
|
-
else
|
|
181
|
-
unless advantage.empty?
|
|
182
|
-
output.push(roll_die)
|
|
183
|
-
end
|
|
184
|
-
output.push(usedie.to_s)
|
|
205
|
+
usedie, dice_result, difficulty, output = exec_roll(command)
|
|
206
|
+
if usedie.nil?
|
|
207
|
+
return nil
|
|
185
208
|
end
|
|
186
209
|
|
|
187
210
|
result = Result.new
|
|
188
211
|
if difficulty > 0
|
|
189
|
-
if
|
|
212
|
+
if dice_result >= difficulty
|
|
190
213
|
result.success = true
|
|
191
|
-
output.push(
|
|
214
|
+
output.push(translate('success'))
|
|
192
215
|
else
|
|
193
|
-
output.push(
|
|
216
|
+
output.push(translate('failure'))
|
|
194
217
|
end
|
|
195
218
|
end
|
|
196
219
|
|
|
@@ -208,15 +231,25 @@ module BCDice
|
|
|
208
231
|
|
|
209
232
|
# 武器の両手持ちダメージ
|
|
210
233
|
def twohands_damage_roll(command)
|
|
211
|
-
m = /^2H(\d+)D(\d+)([
|
|
234
|
+
m = /^2H(\d+)D(\d+)([-+\d]+)?/.match(command)
|
|
212
235
|
unless m
|
|
213
236
|
return nil
|
|
214
237
|
end
|
|
215
238
|
|
|
216
239
|
dice_count = m[1].to_i
|
|
217
240
|
dice_number = m[2].to_i
|
|
218
|
-
|
|
219
|
-
|
|
241
|
+
|
|
242
|
+
modify = 0
|
|
243
|
+
mod_str = ""
|
|
244
|
+
unless m[3].nil?
|
|
245
|
+
if Arithmetic.eval(m[3], @round_type).nil?
|
|
246
|
+
return nil
|
|
247
|
+
else
|
|
248
|
+
modify = Arithmetic.eval(m[3], @round_type)
|
|
249
|
+
mod_str = number_with_sign_from_int(modify).to_s
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
220
253
|
output = ["(2H#{dice_count}D#{dice_number}#{mod_str})"]
|
|
221
254
|
|
|
222
255
|
dice = @randomizer.roll_barabara(dice_count, dice_number)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/game_system/DungeonsAndDragons5"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class DungeonsAndDragons5_Korean < DungeonsAndDragons5
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'DungeonsAndDragons5:Korean'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = '던전 앤 드래곤 5판'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = '国際化:Korean:던전 앤 드래곤 5판'
|
|
16
|
+
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
19
|
+
・명중 굴림 AT[x][@c][>=t][y]
|
|
20
|
+
x: +- 수정치 (생략 가능)
|
|
21
|
+
c: 크리티컬 수치 (생략 가능)
|
|
22
|
+
t: 목표 AC (>= 포함, 생략 가능)
|
|
23
|
+
y: 유리(A), 불리(D) (생략 가능)
|
|
24
|
+
B: 브레스나 가이던스 등의 보너스 (생략 가능)
|
|
25
|
+
※보충 설명: B만 입력하면 +1d4를, B[1D4+1D8] 와 같이 입력하면 []안의 주사위를 추가로 굴립니다.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
펌블/실패/성공/크리티컬을 자동으로 판정합니다.
|
|
29
|
+
예시)AT AT>=10 AT+5>=18 AT-3>=16 ATA AT>=10A AT+3>=18A AT-3>=16 ATD AT>=10D AT+5>=18D AT-5>=16D
|
|
30
|
+
AT@19 AT+5@18 AT-2@19>=15
|
|
31
|
+
|
|
32
|
+
・능력 판정 AR[x][>=t][y]
|
|
33
|
+
명중 굴림과 동일. 성공/실패 결과를 자동 판정합니다.
|
|
34
|
+
예시)AR AR>=10 AR+5>=18 AR-3>=16 ARA AR>=10A AR+3>=18A AR-3>=16 ARD AR>=10D AR+5>=18D AR-5>=16D
|
|
35
|
+
|
|
36
|
+
・대형 무기 전투술 대미지 계산(베이직 룰북 32p) 2HnDx[m]
|
|
37
|
+
n: 주사위 개수
|
|
38
|
+
x: 주사위 면수(1d6의 6, 1d8의 8 등)
|
|
39
|
+
m: +- 수정치 (생략 가능)
|
|
40
|
+
팔라딘과 파이터의 무기를 양손으로 사용할 경우, 대미지 주사위에서 1 또는 2가 나오면 다시 굴립니다.
|
|
41
|
+
예시)2H3D6 2H1D10+3 2H2D8-1
|
|
42
|
+
INFO_MESSAGE_TEXT
|
|
43
|
+
|
|
44
|
+
register_prefix_from_super_class()
|
|
45
|
+
|
|
46
|
+
def initialize(command)
|
|
47
|
+
super(command)
|
|
48
|
+
|
|
49
|
+
@locale = :ko_kr # i18n ko_kr 참조
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|