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,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/dice_table/chain_table"
|
|
4
|
+
require "bcdice/dice_table/sai_fic_skill_table"
|
|
5
|
+
require "bcdice/dice_table/table"
|
|
6
|
+
require "bcdice/format"
|
|
7
|
+
require "bcdice/game_system/StarryDolls"
|
|
8
|
+
|
|
9
|
+
module BCDice
|
|
10
|
+
module GameSystem
|
|
11
|
+
class StarryDolls_Korean < StarryDolls
|
|
12
|
+
# ゲームシステムの識別子
|
|
13
|
+
ID = "StarryDolls:Korean"
|
|
14
|
+
|
|
15
|
+
# ゲームシステム名
|
|
16
|
+
NAME = "스타리돌"
|
|
17
|
+
|
|
18
|
+
# ゲームシステム名の読みがな
|
|
19
|
+
SORT_KEY = "国際化:Korean:스타리돌"
|
|
20
|
+
|
|
21
|
+
# ダイスボットの使い方
|
|
22
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
23
|
+
・행위판정 nD6±m@s>=t
|
|
24
|
+
nD6의 행위판정을 실행합니다. 스페셜/펌블/성공/실패를 판정합니다.
|
|
25
|
+
n: 주사위 수
|
|
26
|
+
m: 수정치 (생략 가능)
|
|
27
|
+
s: 스페셜값 (생략 시 12)
|
|
28
|
+
t: 목표치 (?지정 가능)
|
|
29
|
+
・각종 표
|
|
30
|
+
・랜덤 특기 결정표 RTTn (n:분야 번호, 생략 가능)
|
|
31
|
+
1소원 2원소 3별다루기 4동작 5소환 6인간성
|
|
32
|
+
・랜덤 분야표 RCT
|
|
33
|
+
・랜덤 별자리표 HOR
|
|
34
|
+
랜덤 별자리표A HORA/랜덤 별자리표B HORB
|
|
35
|
+
・주인 관계표 MRT/관계 속성표 RAT
|
|
36
|
+
・종자 관계표 SRT
|
|
37
|
+
・기적표 MIR
|
|
38
|
+
・전과표 BRT
|
|
39
|
+
・사건표 TRO
|
|
40
|
+
・숲 사건표 TROF
|
|
41
|
+
・정원 사건표 TROG
|
|
42
|
+
・성내 사건표 TROC
|
|
43
|
+
・도시 사건표 TROT
|
|
44
|
+
・도서관 사건표 TROL
|
|
45
|
+
・역 사건표 TROS
|
|
46
|
+
・종자 트러블표 TRS
|
|
47
|
+
・리액션표 - 충성 RAL
|
|
48
|
+
・리액션표 - 냉정 RAC
|
|
49
|
+
・리액션표 - 모성 RAM
|
|
50
|
+
・리액션표 - 연장자 RAO
|
|
51
|
+
・리액션표 - 천진난만 RAI
|
|
52
|
+
・리액션표 - 장로 RAE
|
|
53
|
+
・조우표 ENC
|
|
54
|
+
・치명상 표 FWT
|
|
55
|
+
・카타스트로피 표 CAT
|
|
56
|
+
・회상표
|
|
57
|
+
〈마술사의 정원〉 회상표 JDSRT/〈세븐스 헤븐〉 회상표 SHRT
|
|
58
|
+
/〈축복의 종〉 회상표 BCRT/〈오메가 탐정사〉 회상표 ODRT
|
|
59
|
+
・출장표
|
|
60
|
+
〈마술사의 정원〉 출장표 JDSBT/〈세븐스 헤븐〉 출장표 SHBT
|
|
61
|
+
/〈축복의 종〉 출장표 BCBT/〈오메가 탐정사〉 출장표 ODBT
|
|
62
|
+
/〈은하수 상점가〉 출장표 ASBT/〈폴라리스 성학원〉 출장표 PABT
|
|
63
|
+
/〈인형 기사단〉 출장표 SCBT/〈인형 기사단〉으로의 출장표 TOSCBT
|
|
64
|
+
・D66 다이스 있음
|
|
65
|
+
INFO_MESSAGE_TEXT
|
|
66
|
+
|
|
67
|
+
register_prefix_from_super_class()
|
|
68
|
+
|
|
69
|
+
def initialize(command)
|
|
70
|
+
super(command)
|
|
71
|
+
|
|
72
|
+
@d66_sort_type = D66SortType::ASC
|
|
73
|
+
@locale = :ko_kr
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
TABLES = translate_tables(:ko_kr).freeze
|
|
77
|
+
RTT = translate_rtt(:ko_kr)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -17,7 +17,7 @@ module BCDice
|
|
|
17
17
|
|
|
18
18
|
VOT, GUT, BAT, KEYT, DRT: (ボーカル、ギター、ベース、キーボード、ドラム)トラブル表
|
|
19
19
|
EMO: 感情表
|
|
20
|
-
ATn, RTTn: 特技表(n=分野。空:ランダム 1:主義 2:身体 3:モチーフ 4
|
|
20
|
+
ATn, RTTn: 特技表(n=分野。空:ランダム 1:主義 2:身体 3:モチーフ 4:情緒 5:行動 6:逆境)
|
|
21
21
|
RCT: 分野ランダム表
|
|
22
22
|
SCENE, MACHI, GAKKO, BAND: (汎用、街角、学校、バンド)シーン表 接近シーンで使用
|
|
23
23
|
TENKAI: シーン展開表 奔走シーン 練習シーンで使用
|
|
@@ -119,7 +119,12 @@ module BCDice
|
|
|
119
119
|
|
|
120
120
|
currentKey = (command.rate + round * command.rateup).clamp(0, keyMax)
|
|
121
121
|
debug("currentKey", currentKey)
|
|
122
|
-
rateValue =
|
|
122
|
+
rateValue =
|
|
123
|
+
if dice > command.set_zero_val
|
|
124
|
+
newRates[dice][currentKey]
|
|
125
|
+
else
|
|
126
|
+
0
|
|
127
|
+
end
|
|
123
128
|
debug("rateValue", rateValue)
|
|
124
129
|
|
|
125
130
|
totalValue += rateValue
|
|
@@ -321,6 +326,8 @@ module BCDice
|
|
|
321
326
|
def getResultText(rating_total, command, diceResults, diceResultTotals,
|
|
322
327
|
rateResults, dice_total, round)
|
|
323
328
|
sequence = []
|
|
329
|
+
critical_count = [round - 1, 0].max
|
|
330
|
+
additional_damage = command.add_damage * critical_count
|
|
324
331
|
|
|
325
332
|
sequence.push("2D:[#{diceResults.join(' ')}]=#{diceResultTotals.join(',')}")
|
|
326
333
|
|
|
@@ -333,6 +340,9 @@ module BCDice
|
|
|
333
340
|
# rate回数が1回で、修正値がない時には途中式と最終結果が一致するので、途中式を省略する
|
|
334
341
|
if rateResults.size > 1 || command.modifier != 0
|
|
335
342
|
text = rateResults.join(',') + Format.modifier(command.modifier)
|
|
343
|
+
if additional_damage != 0
|
|
344
|
+
text += "+#{command.add_damage}*#{critical_count}"
|
|
345
|
+
end
|
|
336
346
|
if command.half
|
|
337
347
|
text = "(#{text})/2"
|
|
338
348
|
if command.modifier_after_half != 0
|
|
@@ -343,6 +353,11 @@ module BCDice
|
|
|
343
353
|
if command.modifier_after_one_and_a_half != 0
|
|
344
354
|
text += Format.modifier(command.modifier_after_one_and_a_half)
|
|
345
355
|
end
|
|
356
|
+
elsif command.double
|
|
357
|
+
text = "(#{text})*2"
|
|
358
|
+
if command.modifier_after_double != 0
|
|
359
|
+
text += Format.modifier(command.modifier_after_double)
|
|
360
|
+
end
|
|
346
361
|
end
|
|
347
362
|
sequence.push(text)
|
|
348
363
|
elsif command.half
|
|
@@ -357,6 +372,12 @@ module BCDice
|
|
|
357
372
|
text += Format.modifier(command.modifier_after_one_and_a_half)
|
|
358
373
|
end
|
|
359
374
|
sequence.push(text)
|
|
375
|
+
elsif command.double
|
|
376
|
+
text = "#{rateResults.first}*2"
|
|
377
|
+
if command.modifier_after_double != 0
|
|
378
|
+
text += Format.modifier(command.modifier_after_double)
|
|
379
|
+
end
|
|
380
|
+
sequence.push(text)
|
|
360
381
|
end
|
|
361
382
|
|
|
362
383
|
if round > 1
|
|
@@ -364,7 +385,7 @@ module BCDice
|
|
|
364
385
|
sequence.push(round_text)
|
|
365
386
|
end
|
|
366
387
|
|
|
367
|
-
total = rating_total + command.modifier
|
|
388
|
+
total = rating_total + command.modifier + additional_damage
|
|
368
389
|
if command.half
|
|
369
390
|
total = (total / 2.0).ceil
|
|
370
391
|
if command.modifier_after_half != 0
|
|
@@ -375,6 +396,11 @@ module BCDice
|
|
|
375
396
|
if command.modifier_after_one_and_a_half != 0
|
|
376
397
|
total += command.modifier_after_one_and_a_half
|
|
377
398
|
end
|
|
399
|
+
elsif command.double
|
|
400
|
+
total = (total * 2).ceil
|
|
401
|
+
if command.modifier_after_double != 0
|
|
402
|
+
total += command.modifier_after_double
|
|
403
|
+
end
|
|
378
404
|
end
|
|
379
405
|
|
|
380
406
|
total_text = total.to_s
|
|
@@ -34,18 +34,25 @@ module BCDice
|
|
|
34
34
|
|
|
35
35
|
・レーティング表の半減 (HKx, KxH+N)
|
|
36
36
|
レーティング表の先頭または末尾に"H"をつけると、レーティング表を振って最終結果を半減させます。
|
|
37
|
-
|
|
37
|
+
末尾につけた場合、直後に修正をつけることで、半減後の加減算を行うことができます。
|
|
38
38
|
この際、複数の項による修正にはカッコで囲うことが必要です(カッコがないとパースに失敗します)
|
|
39
39
|
クリティカル値を指定しない場合、クリティカルなしと扱われます。
|
|
40
40
|
例)HK20 K20h HK10-5@9 K10-5@9H K20gfH K20+8H+2 K20+8H+(1+1)
|
|
41
41
|
|
|
42
42
|
・レーティング表の1.5倍 (OHKx, KxOH+N)
|
|
43
43
|
レーティング表の先頭または末尾に"OH"をつけると、レーティング表を振って最終結果を1.5倍します。
|
|
44
|
-
|
|
44
|
+
末尾につけた場合、直後に修正をつけることで、1.5倍後の加減算を行うことができます。
|
|
45
45
|
この際、複数の項による修正にはカッコで囲うことが必要です(カッコがないとパースに失敗します)
|
|
46
46
|
クリティカル値を指定しない場合、クリティカルなしと扱われます。
|
|
47
47
|
例)OHK20 K20oh OHK10-5@9 K20+8OH+2 K20+8OH+(1+1)
|
|
48
48
|
|
|
49
|
+
・レーティング表の2倍 (DBKx, KxDB+N)
|
|
50
|
+
レーティング表の先頭または末尾に"DB"をつけると、レーティング表を振って最終結果を2倍します。
|
|
51
|
+
末尾につけた場合、直後に修正をつけることで、2倍後の加減算を行うことができます。
|
|
52
|
+
この際、複数の項による修正にはカッコで囲うことが必要です(カッコがないとパースに失敗します)
|
|
53
|
+
クリティカル値を指定しない場合、クリティカル値10と扱われます。
|
|
54
|
+
例)DBK20 K20db DBK10-5@9 K20+8DB+2 K20+8DB+(1+1)
|
|
55
|
+
|
|
49
56
|
・ダイス目の修正(運命変転やクリティカルレイ、魔女の火用)
|
|
50
57
|
末尾に「$修正値」でダイス目に修正がかかります。
|
|
51
58
|
$+1と修正表記ならダイス目に+修正、$9のように固定値ならダイス目をその出目に差し替え。
|
|
@@ -61,6 +68,9 @@ module BCDice
|
|
|
61
68
|
・首切り刀用レーティング上昇 r5
|
|
62
69
|
例)K20r5 K30+24@8R5 K40+24@8$12r5
|
|
63
70
|
|
|
71
|
+
・肉喰む顎用クリティカルごと追加ダメージ ad2
|
|
72
|
+
例)K20ad2 K30+24@8D2 K40+24@8$12ad2
|
|
73
|
+
|
|
64
74
|
・グレイテストフォーチュンは末尾に gf
|
|
65
75
|
例)K20gf K30+24@8GF K40+24@8$12r5gf
|
|
66
76
|
|
|
@@ -70,6 +80,9 @@ module BCDice
|
|
|
70
80
|
・威力表を1d+tfで参照 クリティカル後は2dで参照 tf3
|
|
71
81
|
例)k10tf3 k0+5tf4@13 k70+26tf3@9
|
|
72
82
|
|
|
83
|
+
・アビスカース「難しい」用に KxSZy 表記でy以下の出目の威力表を0に書き換え。
|
|
84
|
+
例) k10SZ4 k0+5@13sz6 k40+26@9sz3
|
|
85
|
+
|
|
73
86
|
・超越判定用に2d6ロールに 2D6@10 書式でクリティカル値付与が可能に。
|
|
74
87
|
例)2D6@10 2D6@10+11>=30
|
|
75
88
|
|
|
@@ -86,11 +99,17 @@ module BCDice
|
|
|
86
99
|
・ドルイドの物理魔法用表 (Dru[2-6の値,7-9の値,10-12の値])
|
|
87
100
|
例)Dru[0,3,6]+10-3
|
|
88
101
|
|
|
102
|
+
・ビブリオマンサーの応急行使判定用 (Bib[特殊失敗値])
|
|
103
|
+
例)Bib[6]+8 Bib[9]+10-1>=17
|
|
104
|
+
|
|
89
105
|
・アビスカース表 (ABT)
|
|
90
106
|
アビスカース表を出すことができます。
|
|
107
|
+
|
|
108
|
+
・追加アビスカース表(AABT)
|
|
109
|
+
追加アビスカース表を出すことができます。
|
|
91
110
|
INFO_MESSAGE_TEXT
|
|
92
111
|
|
|
93
|
-
register_prefix('H?K', 'OHK', 'Gr', '2D6?@\d+', 'FT', 'TT', 'Dru', 'ABT')
|
|
112
|
+
register_prefix('H?K', 'OHK', 'DBK', 'Gr', '2D6?@\d+', 'FT', 'TT', 'Dru', 'Bib', 'ABT', 'AABT')
|
|
94
113
|
|
|
95
114
|
def eval_game_system_specific_command(command)
|
|
96
115
|
case command
|
|
@@ -104,8 +123,24 @@ module BCDice
|
|
|
104
123
|
end
|
|
105
124
|
|
|
106
125
|
druid_dice(cmd, power_list)
|
|
126
|
+
|
|
127
|
+
when /^bib\[(\d+)\]/i
|
|
128
|
+
failure_num = Regexp.last_match(1).to_i
|
|
129
|
+
biblio_parser = Command::Parser.new(/^bib\[\d+\]/i, round_type: BCDice::RoundType::CEIL)
|
|
130
|
+
cmd = biblio_parser.parse(command)
|
|
131
|
+
|
|
132
|
+
if !cmd || !failure_num
|
|
133
|
+
return nil
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
biblio_emergency_dice(cmd, failure_num)
|
|
137
|
+
|
|
107
138
|
when 'ABT'
|
|
108
139
|
get_abyss_curse_table
|
|
140
|
+
|
|
141
|
+
when 'AABT'
|
|
142
|
+
get_additional_abyss_curse_table
|
|
143
|
+
|
|
109
144
|
else
|
|
110
145
|
super(command)
|
|
111
146
|
end
|
|
@@ -139,6 +174,31 @@ module BCDice
|
|
|
139
174
|
return sequence.join(" > ")
|
|
140
175
|
end
|
|
141
176
|
|
|
177
|
+
def biblio_emergency_dice(command, failure_num)
|
|
178
|
+
dice_list = @randomizer.roll_barabara(2, 6)
|
|
179
|
+
dice_total = dice_list.sum()
|
|
180
|
+
total = dice_total + command.modify_number
|
|
181
|
+
|
|
182
|
+
result =
|
|
183
|
+
if dice_total == failure_num
|
|
184
|
+
Result.fumble(translate('SwordWorld2_5.special_failure'))
|
|
185
|
+
else
|
|
186
|
+
result_2d6(total, dice_total, dice_list, command.cmp_op, command.target_number)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
result ||= Result.new
|
|
190
|
+
|
|
191
|
+
sequence = [
|
|
192
|
+
"(#{command.command.capitalize}#{Format.modifier(command.modify_number)}#{command.cmp_op}#{command.target_number})",
|
|
193
|
+
"#{dice_total}[#{dice_list.join(',')}]#{Format.modifier(command.modify_number)}",
|
|
194
|
+
total,
|
|
195
|
+
result.text
|
|
196
|
+
]
|
|
197
|
+
|
|
198
|
+
result.text = sequence.compact.join(" > ")
|
|
199
|
+
return result
|
|
200
|
+
end
|
|
201
|
+
|
|
142
202
|
def get_abyss_curse_table
|
|
143
203
|
table_result = DiceTable::D66GridTable.from_i18n('SwordWorld2_5.AbyssCurseTable', @locale).roll(@randomizer)
|
|
144
204
|
additional =
|
|
@@ -155,6 +215,10 @@ module BCDice
|
|
|
155
215
|
|
|
156
216
|
return final_result.join("\n")
|
|
157
217
|
end
|
|
218
|
+
|
|
219
|
+
def get_additional_abyss_curse_table
|
|
220
|
+
return DiceTable::D66GridTable.from_i18n('SwordWorld2_5.AdditionalAbyssCurseTable', @locale).roll(@randomizer).to_s
|
|
221
|
+
end
|
|
158
222
|
end
|
|
159
223
|
end
|
|
160
224
|
end
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bcdice/game_system/NinjaSlayer2'
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class TacticalExorcist < NinjaSlayer2
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = "TacticalExorcist"
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = "タクティカル祓魔師TRPG"
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = "たくていかるふつましTRPG"
|
|
16
|
+
|
|
17
|
+
HELP_MESSAGE = <<~TEXT
|
|
18
|
+
--- 成功判定コマンド ---
|
|
19
|
+
通常のダイスの「{ダイス個数}B6>={難易度ごとの目標出目}」を実行するための簡易入力コマンドです。
|
|
20
|
+
|
|
21
|
+
- K{x}
|
|
22
|
+
難易度K([K]ids/目標値=2)の成功判定をダイス{x}個で実行します。
|
|
23
|
+
先頭の文字を変えることで、難易度E([E]asy/目標値=3),N([N]ormal/目標値=4),H([H]ard/目標値=5),U([U]ltra-hard/目標値=6)もしくはUH([U]ltra-[H]ard/目標値=6)でも実行可能です。
|
|
24
|
+
|
|
25
|
+
- K{x1},N{x2},...,U{xn}
|
|
26
|
+
K{x}の複数ロール版。
|
|
27
|
+
カンマ(,)で区切って複数回入力すると、区切られたセットごとに成功判定を行います。
|
|
28
|
+
2回目以降は難易度指定を省略可能で、省略した場合はひとつ前の難易度を引き継いで判定を行います。
|
|
29
|
+
以下のコマンドについても同様の書式で複数ロールしての同時判定が可能です。
|
|
30
|
+
|
|
31
|
+
- K{x1},{x2},...,{xn}@{y1},{y2},...,{yn}
|
|
32
|
+
K{x1},{x2},...,{xn}の判定を行い、出目の中で{y1}から{yn}のいずれかの値と一致した出目を列挙して追加で出力します。(追加判定コマンドの簡易入力版です)
|
|
33
|
+
|
|
34
|
+
--- 追加判定コマンド ---
|
|
35
|
+
以下のコマンド群は、成功判定コマンドの後ろに付けて実行してください。
|
|
36
|
+
|
|
37
|
+
- [>={y}]
|
|
38
|
+
- [>{y}]
|
|
39
|
+
- [<={y}]
|
|
40
|
+
- [<{y}]
|
|
41
|
+
- [={y}]
|
|
42
|
+
- [!={y}]
|
|
43
|
+
成功判定コマンドでカンマ区切りで指定した各ロール結果に対して、[]内で指定された条件で追加判定を行います。
|
|
44
|
+
それぞれ、{y}以上(>=)、{y}より大きい(>)、{y}以下(<=)、{y}未満(<)、{y}のみ(=)、{y}以外(!=)を判定し、
|
|
45
|
+
ロール結果の中で条件を満たしたダイスの個数を「追加判定」というテキストと共に出力します。
|
|
46
|
+
[=5][=6]のように複数記述することで、ひとつのロールに対して複数パターンでの追加判定が可能です。
|
|
47
|
+
※ 条件は一括でしか指定できないため、ロールごとに異なる条件を指定したい場合はコマンドを分けてください。以下も同様です。。
|
|
48
|
+
|
|
49
|
+
- [>={y1}{y2}...{yn}+]
|
|
50
|
+
成功判定コマンドでカンマ区切りで指定した各ロール結果に対して、[>={y1}]~[>={yn}]の各条件で追加判定を行います。
|
|
51
|
+
出目の中に条件を満たしたダイスが**全て**含まれていた場合、「追加判定成功!」というテキストを出力します。
|
|
52
|
+
例えば[>=665+]とした場合、出目の中に6以上のダイスが2つと5以上のダイスが1つ含まれていれば成功扱いになります。
|
|
53
|
+
TEXT
|
|
54
|
+
|
|
55
|
+
# Base::eval_game_system_specific_commandの実装
|
|
56
|
+
# @param command [String]
|
|
57
|
+
# @return [String, nil]
|
|
58
|
+
def eval_game_system_specific_command(command)
|
|
59
|
+
# @debug = true
|
|
60
|
+
debug("input: #{command}")
|
|
61
|
+
|
|
62
|
+
begin
|
|
63
|
+
case command
|
|
64
|
+
when RE_JUDGE_DICEROLL_TE
|
|
65
|
+
# タクティカル祓魔師TRPGで追加されたコマンド
|
|
66
|
+
proc_result = proc_dice_command_with_at(command)
|
|
67
|
+
|
|
68
|
+
# 結果は文字列と達成値という形で受け取る
|
|
69
|
+
if proc_result[1] > 0
|
|
70
|
+
return Result.success(proc_result[0])
|
|
71
|
+
else
|
|
72
|
+
return Result.failure(proc_result[0])
|
|
73
|
+
end
|
|
74
|
+
when RE_JUDGE_DICEROLL
|
|
75
|
+
# ソウルワイヤードTRPGフレームワーク2版(ニンジャスレイヤーTRPG第2版)用のダイス判定
|
|
76
|
+
proc_result = proc_dice_2nd(Regexp.last_match)
|
|
77
|
+
|
|
78
|
+
# 結果は文字列と達成値という形で受け取る
|
|
79
|
+
if proc_result[1] > 0
|
|
80
|
+
return Result.success(proc_result[0])
|
|
81
|
+
else
|
|
82
|
+
return Result.failure(proc_result[0])
|
|
83
|
+
end
|
|
84
|
+
else
|
|
85
|
+
# ダイスでなければ定型文処理
|
|
86
|
+
return proc_text(command)
|
|
87
|
+
end
|
|
88
|
+
rescue StandardError => e
|
|
89
|
+
# 解析できずにエラーが出たら構文ミスと皆してnilを返す
|
|
90
|
+
debug("#{e.message} \n#{e.backtrace}")
|
|
91
|
+
return nil
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
|
|
97
|
+
# 難易度判定の成功数を返す。
|
|
98
|
+
# @param dice_array [Array<Integer>]
|
|
99
|
+
# @param difficultys [String]
|
|
100
|
+
# @param cmp_op [String]
|
|
101
|
+
# @return Integer
|
|
102
|
+
def check_difficulty_te(dice_array, difficultys, cmp_op)
|
|
103
|
+
success_dice = []
|
|
104
|
+
diff_array = difficultys.split(",")
|
|
105
|
+
dice_array.each do |dice_value|
|
|
106
|
+
diff_array.each do |diff_value|
|
|
107
|
+
if dice_value.send(Normalize.comparison_operator(cmp_op), diff_value.to_i)
|
|
108
|
+
success_dice.push(dice_value)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
return success_dice
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# 追加判定の処理
|
|
117
|
+
# @param roll_result 判定対象とするロール結果の配列
|
|
118
|
+
# @param ap_commanc 追加判定のコマンド
|
|
119
|
+
# @return String
|
|
120
|
+
def proc_appendix(roll_result, ap_command)
|
|
121
|
+
debug("----- ap_command: #{ap_command}")
|
|
122
|
+
output_text = ''
|
|
123
|
+
case ap_command
|
|
124
|
+
when RE_COUNT_SATZ_BATZ
|
|
125
|
+
diff_condition = Regexp.last_match[1]
|
|
126
|
+
if ap_command.end_with?("+")
|
|
127
|
+
# サツバツ発生チェック
|
|
128
|
+
sb_condition = diff_condition.sub("\+", "").split("/")[0]
|
|
129
|
+
nm_condition = diff_condition.sub("\+", "").split("/")[1]
|
|
130
|
+
debug("sb_condition: #{sb_condition}")
|
|
131
|
+
debug("nm_condition: #{nm_condition}")
|
|
132
|
+
|
|
133
|
+
if check_difficulty_new(roll_result.last_dice_list, nm_condition, ">=")
|
|
134
|
+
output_text += ", ナムアミダブツ![#{ap_command}]"
|
|
135
|
+
elsif check_difficulty_new(roll_result.last_dice_list, sb_condition, ">=")
|
|
136
|
+
output_text += ", サツバツ![#{ap_command}]"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
else
|
|
140
|
+
# サツバツ数カウント
|
|
141
|
+
diff_result_array = check_difficulty(roll_result.last_dice_list, s_to_i(diff_condition, 6), ">=")
|
|
142
|
+
output_text += ", サツバツ判定[#{ap_command}]:#{diff_result_array.size}"
|
|
143
|
+
unless diff_result_array.empty?
|
|
144
|
+
output_text += "[#{diff_result_array.sort.reverse.join(',')}]"
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
when RE_COUNT_CRITICAL
|
|
148
|
+
diff_condition = Regexp.last_match[1]
|
|
149
|
+
if ap_command.end_with?("+")
|
|
150
|
+
# クリティカル発生チェック
|
|
151
|
+
if check_difficulty_new(roll_result.last_dice_list, diff_condition.sub("\+", ""), ">=")
|
|
152
|
+
output_text += ", クリティカル![#{ap_command}]"
|
|
153
|
+
end
|
|
154
|
+
else
|
|
155
|
+
# クリティカル数カウント
|
|
156
|
+
diff_result_array = check_difficulty(roll_result.last_dice_list, s_to_i(diff_condition, 6), ">=")
|
|
157
|
+
output_text += ", クリティカル判定[#{ap_command}]:#{diff_result_array.size}"
|
|
158
|
+
unless diff_result_array.empty?
|
|
159
|
+
output_text += "[#{diff_result_array.sort.reverse.join(',')}]"
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
when RE_COUNT_JUDGE_TE
|
|
163
|
+
diff_type = Regexp.last_match[1]
|
|
164
|
+
diff_condition = Regexp.last_match[2]
|
|
165
|
+
# 追加判定カウント
|
|
166
|
+
diff_result_array = check_difficulty_te(roll_result.last_dice_list, diff_condition, diff_type)
|
|
167
|
+
output_text += ", 追加判定[#{ap_command}]:#{diff_result_array.size}"
|
|
168
|
+
unless diff_result_array.empty?
|
|
169
|
+
output_text += "[#{diff_result_array.sort.reverse.join(',')}]"
|
|
170
|
+
end
|
|
171
|
+
when RE_COUNT_JUDGE
|
|
172
|
+
diff_type = Regexp.last_match[1]
|
|
173
|
+
diff_condition = Regexp.last_match[2]
|
|
174
|
+
debug("#{diff_type} / #{diff_condition}")
|
|
175
|
+
if ap_command.end_with?("+")
|
|
176
|
+
# 追加判定チェック
|
|
177
|
+
if check_difficulty_new(roll_result.last_dice_list, diff_condition.sub("\+", ""), diff_type)
|
|
178
|
+
output_text += ", 追加判定成功![#{ap_command}]"
|
|
179
|
+
end
|
|
180
|
+
else
|
|
181
|
+
# 追加判定カウント
|
|
182
|
+
diff_result_array = check_difficulty(roll_result.last_dice_list, s_to_i(diff_condition, 6), diff_type)
|
|
183
|
+
output_text += ", 追加判定[#{ap_command}]:#{diff_result_array.size}"
|
|
184
|
+
unless diff_result_array.empty?
|
|
185
|
+
output_text += "[#{diff_result_array.sort.reverse.join(',')}]"
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
return output_text
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# @付き追加判定の処理
|
|
193
|
+
# @param at_command String 追加判定のコマンド
|
|
194
|
+
# @return [String, Integer]
|
|
195
|
+
def proc_dice_command_with_at(at_command)
|
|
196
|
+
# コマンドを作り直して
|
|
197
|
+
command = at_command.split("@")[0]
|
|
198
|
+
eq_param = at_command.split("@")[1]
|
|
199
|
+
command += "[=#{eq_param}]"
|
|
200
|
+
|
|
201
|
+
# しれっと投げる
|
|
202
|
+
case command
|
|
203
|
+
when RE_JUDGE_DICEROLL
|
|
204
|
+
return proc_dice_2nd(Regexp.last_match)
|
|
205
|
+
else
|
|
206
|
+
return nil
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
RE_COUNT_JUDGE_TE = /(=)([1-6](,[1-6])+)/.freeze
|
|
211
|
+
|
|
212
|
+
RE_JUDGE_DICEROLL_TE = /^((?:(?:UH|[KENHU])?\d+,?)+)(@[1-6](,[1-6])*)$/i.freeze
|
|
213
|
+
# RE_JUDGE_DICEROLL = %r{^((?:(?:UH|[KENHU])?\d+,?)+)(?:\[((?:(?:S([1-6]|[1-6]+(?:/[1-6]+)?\+)?|C([1-6]*\+?)?|(=|!=|>=|>|<=|<)([1-6]+\+?)|(=)([1-6](,[1-6])+))(?:\]\[)?)+)\])?$}i.freeze
|
|
214
|
+
RE_JUDGE_DICEROLL = /^((?:(?:UH|[KENHU])?\d+,?)+)(?:\[((?:(?:(=|!=|>=|>|<=|<)([1-6]+\+?)|(=)([1-6](,[1-6])+))(?:\]\[)?)+)\])?$/i.freeze
|
|
215
|
+
|
|
216
|
+
register_prefix(
|
|
217
|
+
"UH",
|
|
218
|
+
"[KENHU]"
|
|
219
|
+
)
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bcdice/game_system/TenkaRyouran'
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class TenkaRyouran_Korean < TenkaRyouran
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'TenkaRyouran:Korean'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = '천하요란'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = '国際化:Korean:천하요란'
|
|
16
|
+
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = help_message()
|
|
19
|
+
|
|
20
|
+
set_aliases_for_srs_roll('TR')
|
|
21
|
+
|
|
22
|
+
register_prefix_from_super_class()
|
|
23
|
+
|
|
24
|
+
def initialize(command)
|
|
25
|
+
super(command)
|
|
26
|
+
@locale = :ko_kr
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|