From a91c21eefb50048ad29be32c27bfe3ea95c94ed9 Mon Sep 17 00:00:00 2001 From: MY4k Date: Thu, 26 Feb 2026 00:45:15 +0900 Subject: [PATCH 01/11] =?UTF-8?q?=E9=9F=93=E5=9B=BD=E8=AA=9E=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C=E3=82=92=E8=BF=BD=E5=8A=A0=20&=20i18n=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/Alsetto/ja_jp.yml | 5 + i18n/Alsetto/ko_kr.yml | 5 + lib/bcdice/game_system.rb | 1 + lib/bcdice/game_system/Alsetto.rb | 12 +- lib/bcdice/game_system/Alsetto_Korean.rb | 51 ++++ test/data/Alsetto_Korean.toml | 330 +++++++++++++++++++++++ 6 files changed, 399 insertions(+), 5 deletions(-) create mode 100644 i18n/Alsetto/ja_jp.yml create mode 100644 i18n/Alsetto/ko_kr.yml create mode 100644 lib/bcdice/game_system/Alsetto_Korean.rb create mode 100644 test/data/Alsetto_Korean.toml diff --git a/i18n/Alsetto/ja_jp.yml b/i18n/Alsetto/ja_jp.yml new file mode 100644 index 000000000..db10e3e0a --- /dev/null +++ b/i18n/Alsetto/ja_jp.yml @@ -0,0 +1,5 @@ +ja_jp: + Alsetto: + damage: "%{total_damage}ダメージ" + success_count: "成功数:%{success_count}" + triumph: " / %{critical_count}トライアンフ" diff --git a/i18n/Alsetto/ko_kr.yml b/i18n/Alsetto/ko_kr.yml new file mode 100644 index 000000000..053845b1a --- /dev/null +++ b/i18n/Alsetto/ko_kr.yml @@ -0,0 +1,5 @@ +ko_kr: + Alsetto: + damage: "%{total_damage} 대미지" + success_count: "성공 수 : %{success_count}" + triumph: " / %{critical_count} 트라이엄프" diff --git a/lib/bcdice/game_system.rb b/lib/bcdice/game_system.rb index 7bfaa1c16..aa93fcb45 100644 --- a/lib/bcdice/game_system.rb +++ b/lib/bcdice/game_system.rb @@ -8,6 +8,7 @@ require "bcdice/game_system/Airgetlamh" require "bcdice/game_system/AlchemiaStruggle" require "bcdice/game_system/Alsetto" +require "bcdice/game_system/Alsetto_Korean" require "bcdice/game_system/Alshard" require "bcdice/game_system/AlterRaise" require "bcdice/game_system/Amadeus" diff --git a/lib/bcdice/game_system/Alsetto.rb b/lib/bcdice/game_system/Alsetto.rb index 97939e03d..6f02fa4a2 100644 --- a/lib/bcdice/game_system/Alsetto.rb +++ b/lib/bcdice/game_system/Alsetto.rb @@ -50,7 +50,7 @@ def eval_game_system_specific_command(command) private - def parce_check_roll(command) + def parse_check_roll(command) m = /(\d+)AL(C|G)?(\d+)?((x|\*)(\d+))?$/i.match(command) unless m return nil @@ -80,7 +80,7 @@ def parce_check_roll(command) end def check_roll(command) - parsed = parce_check_roll(command) + parsed = parse_check_roll(command) unless parsed return nil end @@ -119,13 +119,15 @@ def check_roll(command) if is_damage total_damage = total_success_count * damage - result = "(#{rapid}D6\<\=#{target}) > #{text} > Hits:#{total_success_count}*#{damage} > #{total_damage}ダメージ" + damage_text = translate("Alsetto.damage", total_damage: total_damage) + result = "(#{rapid}D6\<\=#{target}) > #{text} > Hits:#{total_success_count}*#{damage} > #{damage_text}" else - result = "(#{rapid}D6\<\=#{target}) > #{text} > 成功数:#{total_success_count}" + success_text = translate("Alsetto.success_count", success_count: total_success_count) + result = "(#{rapid}D6\<\=#{target}) > #{text} > #{success_text}" end if enable_critical - result += " / #{total_critical_count}トライアンフ" + result += translate("Alsetto.triumph", critical_count: total_critical_count) end return result diff --git a/lib/bcdice/game_system/Alsetto_Korean.rb b/lib/bcdice/game_system/Alsetto_Korean.rb new file mode 100644 index 000000000..d0ffd483b --- /dev/null +++ b/lib/bcdice/game_system/Alsetto_Korean.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require 'bcdice/game_system/Alsetto' + +module BCDice + module GameSystem + class Alsetto_Korean < Alsetto + # ゲームシステムの識別子 + ID = 'Alsetto:Korean' + + # ゲームシステム名 + NAME = '시편의 알세토' + + # ゲームシステム名の読みがな + SORT_KEY = '国際化:Korean:시편의 알세토' + + # ダイスボットの使い方 + HELP_MESSAGE = <<~MESSAGETEXT + ・성공 판정:nAL[m]    ・트라이엄프 없음:nALC[m] + ・명중 판정:nAL[m]*p   ・트라이엄프 없음:nALC[m]*p + ・명중 판정(건슬링거의 근원시):nALG[m]*p + [] 내부는 생략 가능. + + AL 커맨드는 트라이엄프 수만큼, 자동으로 추가 주사위 굴림 처리를 수행합니다. + 「n」으로 주사위 수를 지정. + 「m」으로 목표치를 지정. 생략 시에는 기본값인 「3」이 사용됩니다. + 「p」로 공격력을 지정. 「*」 대신 「x」도 사용 가능. + 공격력을 지정하면 명중 판정이 되며, 성공수가 아닌 대미지를 결과로 표시합니다. + + ALC 커맨드는 트라이엄프 없이 성공수, 대미지를 결과로 표시합니다. + ALG 커맨드는 「2 이하」에서 트라이엄프 처리를 수행합니다. + + 【사용 예시】 + ・5AL → 5d6에서 목표치 3. + ・5ALC → 5d6에서 목표치 3. 트라이엄프 없음. + ・6AL2 → 6d6에서 목표치 2. + ・4AL*5 → 4d6에서 목표치 3, 공격력 5의 명중 판정. + ・7AL2x10 → 7d6에서 목표치 2, 공격력 10의 명중 판정. + ・8ALC4x5 → 8d6에서 목표치 4, 공격력 5, 트라이엄프 없는 명중 판정. + MESSAGETEXT + + register_prefix_from_super_class() + + def initialize(command) + super(command) + + @locale = :ko_kr + end + end + end +end diff --git a/test/data/Alsetto_Korean.toml b/test/data/Alsetto_Korean.toml new file mode 100644 index 000000000..88b87d933 --- /dev/null +++ b/test/data/Alsetto_Korean.toml @@ -0,0 +1,330 @@ +[[ test ]] +game_system = "Alsetto:Korean" +input = "6AL" +output = "(6D6<=3) > 0[6,6,6,6,6,6] > 성공 수 : 0 / 0 트라이엄프" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6AL" +output = "(6D6<=3) > 2[2,3,4,5,6,6] > 성공 수 : 2 / 0 트라이엄프" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6AL" +output = "(6D6<=3) > 3[1,2,3,4,5,6]+0[6] > 성공 수 : 3 / 1 트라이엄프" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6AL" +output = "(6D6<=3) > 3[1,1,3,4,5,6]+1[3,6] > 성공 수 : 4 / 1 트라이엄프" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6AL" +output = "(6D6<=3) > 3[1,1,3,4,5,6]+1[1,6]+1[3] > 성공 수 : 5 / 2 트라이엄프" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6AL4" +output = "(6D6<=4) > 0[6,6,6,6,6,6] > 성공 수 : 0 / 0 트라이엄프" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6AL4" +output = "(6D6<=4) > 3[2,3,4,5,6,6] > 성공 수 : 3 / 0 트라이엄프" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6AL4" +output = "(6D6<=4) > 4[1,2,3,4,5,6]+0[6] > 성공 수 : 4 / 1 트라이엄프" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6AL4" +output = "(6D6<=4) > 4[1,1,3,4,5,6]+1[4,6] > 성공 수 : 5 / 1 트라이엄프" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "4AL*5" +output = "(4D6<=3) > 0[6,6,6,6] > Hits:0*5 > 0 대미지 / 0 트라이엄프" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "4ALx5" +output = "(4D6<=3) > 0[6,6,6,6] > Hits:0*5 > 0 대미지 / 0 트라이엄프" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "4ALX5" +output = "(4D6<=3) > 0[6,6,6,6] > Hits:0*5 > 0 대미지 / 0 트라이엄프" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "4AL*5" +output = "(4D6<=3) > 2[2,3,4,5] > Hits:2*5 > 10 대미지 / 0 트라이엄프" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "4AL*5" +output = "(4D6<=3) > 2[1,1,6,6]+1[3,6] > Hits:3*5 > 15 대미지 / 1 트라이엄프" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "5AL4*10" +output = "(5D6<=4) > 0[6,6,6,6,6] > Hits:0*10 > 0 대미지 / 0 트라이엄프" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "5AL4x10" +output = "(5D6<=4) > 3[2,3,4,5,6] > Hits:3*10 > 30 대미지 / 0 트라이엄프" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "5AL4X10" +output = "(5D6<=4) > 4[1,2,3,4,5]+0[6] > Hits:4*10 > 40 대미지 / 1 트라이엄프" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "5AL4*10" +output = "(5D6<=4) > 3[1,1,1,6,6]+2[1,1,6]+1[4,6] > Hits:6*10 > 60 대미지 / 2 트라이엄프" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 1 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6ALC" +output = "(6D6<=3) > 3[1,2,3,4,5,6] > 성공 수 : 3" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6ALC4" +output = "(6D6<=4) > 4[1,2,3,4,5,6] > 성공 수 : 4" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6ALC*5" +output = "(6D6<=3) > 3[1,2,3,4,5,6] > Hits:3*5 > 15 대미지" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6ALC4X5" +output = "(6D6<=4) > 4[1,2,3,4,5,6] > Hits:4*5 > 20 대미지" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6ALG*5" +output = "(6D6<=3) > 0[6,6,6,6,6,6] > Hits:0*5 > 0 대미지 / 0 트라이엄프" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6ALG*5" +output = "(6D6<=3) > 3[3,3,3,6,6,6] > Hits:3*5 > 15 대미지 / 0 트라이엄프" +rands = [ + { sides = 6, value = 3 }, + { sides = 6, value = 3 }, + { sides = 6, value = 3 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "Alsetto:Korean" +input = "6ALG*5" +output = "(6D6<=3) > 3[1,2,3,6,6,6]+1[2,6]+1[3] > Hits:5*5 > 25 대미지 / 2 트라이엄프" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, +] From 76d6d30bd9c4fb05d0bdb040de4c66810b99a6f0 Mon Sep 17 00:00:00 2001 From: MY4k Date: Fri, 27 Feb 2026 20:23:11 +0900 Subject: [PATCH 02/11] =?UTF-8?q?Revulture:i18n=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/Revulture/ja_jp.yml | 8 ++ i18n/Revulture/ko_kr.yml | 8 ++ lib/bcdice/game_system/Revulture.rb | 13 ++-- lib/bcdice/game_system/Revulture_Korean.rb | 88 ++-------------------- 4 files changed, 31 insertions(+), 86 deletions(-) create mode 100644 i18n/Revulture/ja_jp.yml create mode 100644 i18n/Revulture/ko_kr.yml diff --git a/i18n/Revulture/ja_jp.yml b/i18n/Revulture/ja_jp.yml new file mode 100644 index 000000000..cf16c91e4 --- /dev/null +++ b/i18n/Revulture/ja_jp.yml @@ -0,0 +1,8 @@ +ja_jp: + Revulture: + error: + no_dice: "ダイス数が 0 です" + no_border: "目標値が指定されていないため、追加ダメージを算出できません" + critical: "クリティカル %d" + hit_count: "ヒット数 %d" + damage: "ダメージ %d" \ No newline at end of file diff --git a/i18n/Revulture/ko_kr.yml b/i18n/Revulture/ko_kr.yml new file mode 100644 index 000000000..2721ebaf9 --- /dev/null +++ b/i18n/Revulture/ko_kr.yml @@ -0,0 +1,8 @@ +ko_kr: + Revulture: + error: + no_dice: "주사위가 0개 입니다." + no_border: "목표값이 지정되지 않아 추가 대미지를 계산할 수 없습니다." + critical: "크리티컬 %d" + hit_count: "히트 수 %d" + damage: "대미지 %d" \ No newline at end of file diff --git a/lib/bcdice/game_system/Revulture.rb b/lib/bcdice/game_system/Revulture.rb index 539c27ac3..5d7c74ba5 100644 --- a/lib/bcdice/game_system/Revulture.rb +++ b/lib/bcdice/game_system/Revulture.rb @@ -1,5 +1,8 @@ # frozen_string_literal: true +require "bcdice/base" +require "bcdice/format" + module BCDice module GameSystem class Revulture < Base @@ -56,9 +59,9 @@ def roll_attack(dice_count_expression, border_expression, additional_damage_rule command = make_command_text(dice_count, border, additional_damage_rules) if dice_count <= 0 - return "#{command} > ダイス数が 0 です" + return "#{command} > #{translate('Revulture.error.no_dice')}" elsif border.nil? && additional_damage_rules - return "#{command} > 目標値が指定されていないため、追加ダメージを算出できません" + return "#{command} > #{translate('Revulture.error.no_border')}" end dices = @randomizer.roll_barabara(dice_count, 6).sort @@ -70,9 +73,9 @@ def roll_attack(dice_count_expression, border_expression, additional_damage_rule message_elements = [] message_elements << command message_elements << dices.join(',') - message_elements << "クリティカル #{critical_hit_count}" if critical_hit_count > 0 - message_elements << "ヒット数 #{hit_count}" if hit_count - message_elements << "ダメージ #{damage}" if damage + message_elements << translate("Revulture.critical", count: critical_hit_count) if critical_hit_count > 0 + message_elements << translate("Revulture.hit_count", count: hit_count) if hit_count + message_elements << translate("Revulture.damage", count: damage) if damage Result.new(message_elements.join(' > ')).tap do |r| r.condition = hit_count > 0 if hit_count diff --git a/lib/bcdice/game_system/Revulture_Korean.rb b/lib/bcdice/game_system/Revulture_Korean.rb index 5858eac89..916f885ab 100644 --- a/lib/bcdice/game_system/Revulture_Korean.rb +++ b/lib/bcdice/game_system/Revulture_Korean.rb @@ -28,7 +28,7 @@ class Revulture_Korean < Revulture □공격 판정 목표값&추가 대미지 포함( xAT<=y[>=a:+b], xATK<=y[>=a:+b], xATTACK<=y[z] ) x: 주사위 수(덧셈 + 과 나눗셈 / 사용 가능) y: 목표값( 1 이상 6 이하. 덧셈 + 사용 가능) - z: 추가 대미지 규칙(자세한 내용은 후술)(※여러 개를 동시에 지정 가능) + z: 추가 대미지 규칙(자세한 내용은 아래 참고)(※여러 개를 동시에 사용 가능) ▽추가 대미지 규칙 [a:+b] a: 히트 수가 a 라면 @@ -36,89 +36,15 @@ class Revulture_Korean < Revulture  >=a (히트 수가 a 이상) b: 대미지를 b 점 추가 - 예시) 3AT<=4[>=2:+3] #ルールブックp056「グレングラントAR」 - 예시) 2AT<=4[=1:+5][>=2:+8] #ルールブックp067「ファーボル・ドラゴンブレス」 + 예시) 3AT<=4[>=2:+3] #룰 북 p056「그레인그랜트 AR(グレングラントAR)」 + 예시) 2AT<=4[=1:+5][>=2:+8] #룰 북 p067「파보르 드래곤 브레스(ファーボル・ドラゴンブレス)」 HELP - ATTACK_ROLL_REG = %r{^(\d+([+/]\d+)*)?AT(TACK|K)?(<=([1-6](\+\d)*))?((\[>?=\d+:\+\d+\])+)?}i.freeze - register_prefix('\d+([+\/]\d+)*AT') + register_prefix_from_super_class() - def eval_game_system_specific_command(command) - if (m = ATTACK_ROLL_REG.match(command)) - roll_attack(m[1], m[5], m[7]) - end - end - - private - - def roll_attack(dice_count_expression, border_expression, additional_damage_rules) - dice_count = Arithmetic.eval(dice_count_expression, RoundType::FLOOR) - border = Arithmetic.eval(border_expression, RoundType::FLOOR).clamp(1, 6) if border_expression - - command = make_command_text(dice_count, border, additional_damage_rules) - - if dice_count <= 0 - return "#{command} > 주사위가 0개 입니다." - elsif border.nil? && additional_damage_rules - return "#{command} > 목표값이 지정되지 않아 추가 대미지를 계산할 수 없습니다." - end - - dices = @randomizer.roll_barabara(dice_count, 6).sort - - critical_hit_count = dices.count(1) - hit_count = dices.count { |dice| dice <= border } + critical_hit_count if border - damage = calc_damage(hit_count, additional_damage_rules) - - message_elements = [] - message_elements << command - message_elements << dices.join(',') - message_elements << "크리티컬 #{critical_hit_count}" if critical_hit_count > 0 - message_elements << "히트 수 #{hit_count}" if hit_count - message_elements << "대미지 #{damage}" if damage - - Result.new(message_elements.join(' > ')).tap do |r| - r.condition = hit_count > 0 if hit_count - r.critical = critical_hit_count > 0 - end - end - - def make_command_text(dice_count, border, additional_damage_rules) - command = "#{dice_count}attack" - command += "<=#{border}" if border - command += additional_damage_rules if additional_damage_rules - - "(#{command})" - end - - def calc_damage(hit_count, additional_damage_rules) - return nil unless additional_damage_rules - - damage = hit_count - parse_additional_damage_rules(additional_damage_rules).each do |rule| - if rule[:condition].call(hit_count) - damage += rule[:additinal_damage] - end - end - - damage - end - - def parse_additional_damage_rules(source) - source.scan(/\[(>?=)(\d+):\+(\d+)\]/).map do |matched| - { - condition: make_additional_damage_condition(matched[0], matched[1].to_i), - additinal_damage: matched[2].to_i, - } - end - end - - def make_additional_damage_condition(comparer, comparing_target) - case comparer - when '=' - lambda { |hit_count| hit_count == comparing_target } - when '>=' - lambda { |hit_count| hit_count >= comparing_target } - end + def initialize(command) + super(command) + @locale = :ko_kr end end end From a3f4ab1c61a2abdcb0e33a0a5b56630f7c21e0c0 Mon Sep 17 00:00:00 2001 From: MY4k Date: Fri, 27 Feb 2026 21:15:27 +0900 Subject: [PATCH 03/11] =?UTF-8?q?=E6=9C=B1=E3=81=AE=E5=AD=A4=E5=A1=94?= =?UTF-8?q?=E3=81=AE=E3=82=A8=E3=82=A2=E3=82=B2=E3=83=88=E3=83=A9=E3=83=A0?= =?UTF-8?q?:=E9=9F=93=E5=9B=BD=E8=AA=9E=E5=AF=BE=E5=BF=9C=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20&=20i18n=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/Airgetlamh/ja_jp.yml | 5 + i18n/Airgetlamh/ko_kr.yml | 5 + lib/bcdice/game_system.rb | 1 + lib/bcdice/game_system/Airgetlamh.rb | 12 +- lib/bcdice/game_system/Airgetlamh_Korean.rb | 53 +++ test/data/Airgetlamh_Korean.toml | 353 ++++++++++++++++++++ 6 files changed, 423 insertions(+), 6 deletions(-) create mode 100644 i18n/Airgetlamh/ja_jp.yml create mode 100644 i18n/Airgetlamh/ko_kr.yml create mode 100644 lib/bcdice/game_system/Airgetlamh_Korean.rb create mode 100644 test/data/Airgetlamh_Korean.toml diff --git a/i18n/Airgetlamh/ja_jp.yml b/i18n/Airgetlamh/ja_jp.yml new file mode 100644 index 000000000..6a5bf1351 --- /dev/null +++ b/i18n/Airgetlamh/ja_jp.yml @@ -0,0 +1,5 @@ +ja_jp: + Airgetlamh: + damage: "%dダメージ" + success_count: "成功数:%d" + critical: "%dクリティカル" \ No newline at end of file diff --git a/i18n/Airgetlamh/ko_kr.yml b/i18n/Airgetlamh/ko_kr.yml new file mode 100644 index 000000000..ddf5e5ffa --- /dev/null +++ b/i18n/Airgetlamh/ko_kr.yml @@ -0,0 +1,5 @@ +ko_kr: + Airgetlamh: + damage: "%d 대미지" + success_count: "성공 수 : %d" + critical: "%d 크리티컬" \ No newline at end of file diff --git a/lib/bcdice/game_system.rb b/lib/bcdice/game_system.rb index 7bfaa1c16..044195d7c 100644 --- a/lib/bcdice/game_system.rb +++ b/lib/bcdice/game_system.rb @@ -6,6 +6,7 @@ require "bcdice/game_system/Ainecadette" require "bcdice/game_system/Aionia" require "bcdice/game_system/Airgetlamh" +require "bcdice/game_system/Airgetlamh_Korean" require "bcdice/game_system/AlchemiaStruggle" require "bcdice/game_system/Alsetto" require "bcdice/game_system/Alshard" diff --git a/lib/bcdice/game_system/Airgetlamh.rb b/lib/bcdice/game_system/Airgetlamh.rb index 489ce684a..fb18f50ab 100644 --- a/lib/bcdice/game_system/Airgetlamh.rb +++ b/lib/bcdice/game_system/Airgetlamh.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "bcdice/base" + module BCDice module GameSystem class Airgetlamh < Base @@ -41,9 +43,7 @@ class Airgetlamh < Base ・15AAx4c0 → 15d10で目標値6、威力4、クリティカル無しの命中判定。 MESSAGETEXT - register_prefix( - '\d*A[AL]' - ) + register_prefix('\d*A[AL]') def initialize(command) super(command) @@ -126,12 +126,12 @@ def check_roll(command) result += "(#{dice_count}D10\<\=#{target}) > #{text} > Hits:#{total_success_count}*#{damage}" result += " + Trigger:#{total_critical_count}*#{critical_trigger}" if critical_trigger > 0 - result += " > #{total_damage}ダメージ" + result += " > #{translate('Airgetlamh.damage', count: total_damage)}" else - result += "(#{dice_count}D10\<\=#{target}) > #{text} > 成功数:#{total_success_count}" + result += "(#{dice_count}D10\<\=#{target}) > #{text} > #{translate('Airgetlamh.success_count', count: total_success_count)}" end - result += " / #{total_critical_count}クリティカル" if total_critical_count > 0 + result += " / #{translate('Airgetlamh.critical', count: total_critical_count)}" if total_critical_count > 0 return result end diff --git a/lib/bcdice/game_system/Airgetlamh_Korean.rb b/lib/bcdice/game_system/Airgetlamh_Korean.rb new file mode 100644 index 000000000..790b7d785 --- /dev/null +++ b/lib/bcdice/game_system/Airgetlamh_Korean.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +require "bcdice/game_system/Airgetlamh" + +module BCDice + module GameSystem + class Airgetlamh_Korean < Airgetlamh + # ゲームシステムの識別子 + ID = 'Airgetlamh:Korean' + + # ゲームシステム名 + NAME = '붉은 고탑의 에어게트람' + + # ゲームシステム名の読みがな + SORT_KEY = '国際化:Korean:붉은 고탑의 에어게트람' + + HELP_MESSAGE = <<~MESSAGETEXT + 【Reg2.0『THE ANSWERER』~】 + ・조사 판정(성공 수 표시):[n]AA[m] + ・명중 판정(대미지 표시):[n]AA[m]*p[+t][Cx] + 【~Reg1.1『승화(昇華)』】 + ・조사 판정(성공 수 표시):[n]AL[m] + ・명중 판정(대미지 표시):[n]AL[m]*p + ---------------------------------------- + []안의 커맨드는 생략 가능. + + 「n」으로 주사위 수(공격 횟수)지정. 생략 시「2」. + 「m」으로 목표값 지정. 생략 시「6」. + 「p」으로 위력 지정.「*」는「x」로 대체 가능. + 「+t」으로 크리티컬 트리거 지정. 생략 가능. + 「Cx」으로 크리티컬 값 지정. 생략 시「1」, 최대값「3」,「0」은 크리티컬 없음. + + 공격력 지정으로 명중 판정이 되며, 성공 수가 아닌 대미지를 결과로 표시합니다. + 크리티컬 히트 수만큼 자동으로 추가 굴림 처리를 합니다. + (AL 커맨드에서는 크리티컬 처리를 하지 않습니다) + + 【사용 예시】 + ・AL → 2d10으로 목표값 6의 조사 판정. + ・5AA7*12 → 5d10으로 목표값 7, 위력 12의 명중 판정. + ・AA7x28+5 → 2d10으로 목표값 7, 위력 28, 크리티컬 트리거 5의 명중 판정. + ・9aa5*10C2 → 9d10으로 목표값 5, 위력 10, 크리티컬 값 2의 명중 판정. + ・15AAx4c0 → 15d10으로 목표값 6, 위력 4, 크리티컬 없음의 명중 판정. + MESSAGETEXT + + register_prefix_from_super_class() + + def initialize(command) + super(command) + @locale = :ko_kr + end + end + end +end diff --git a/test/data/Airgetlamh_Korean.toml b/test/data/Airgetlamh_Korean.toml new file mode 100644 index 000000000..9d4bc6ad0 --- /dev/null +++ b/test/data/Airgetlamh_Korean.toml @@ -0,0 +1,353 @@ +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "AL" +output = "(2D10<=6) > 0[10,10] > 성공 수 : 0" +rands = [ + { sides = 10, value = 10 }, + { sides = 10, value = 10 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "AL" +output = "(2D10<=6) > 2[1,1] > 성공 수 : 2" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "3AL7*5" +output = "(3D10<=7) > 0[10,10,10] > Hits:0*5 > 0 대미지" +rands = [ + { sides = 10, value = 10 }, + { sides = 10, value = 10 }, + { sides = 10, value = 10 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "3AL7*5" +output = "(3D10<=7) > 3[1,1,1] > Hits:3*5 > 15 대미지" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "3AL7*5" +output = "(3D10<=7) > 2[4,6,9] > Hits:2*5 > 10 대미지" +rands = [ + { sides = 10, value = 4 }, + { sides = 10, value = 6 }, + { sides = 10, value = 9 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "3AL7*5" +output = "(3D10<=7) > 2[1,3,10] > Hits:2*5 > 10 대미지" +rands = [ + { sides = 10, value = 10 }, + { sides = 10, value = 1 }, + { sides = 10, value = 3 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "10AL10x10" +output = "(10D10<=10) > 10[1,3,3,3,3,3,3,3,10,10] > Hits:10*10 > 100 대미지" +rands = [ + { sides = 10, value = 10 }, + { sides = 10, value = 1 }, + { sides = 10, value = 10 }, + { sides = 10, value = 3 }, + { sides = 10, value = 3 }, + { sides = 10, value = 3 }, + { sides = 10, value = 3 }, + { sides = 10, value = 3 }, + { sides = 10, value = 3 }, + { sides = 10, value = 3 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "AA" +output = "(2D10<=6) > 0[10,10] > 성공 수 : 0" +rands = [ + { sides = 10, value = 10 }, + { sides = 10, value = 10 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "AA" +output = "(2D10<=6) > 2[1,1]+1[6,10] > 성공 수 : 3 / 2 크리티컬" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, + { sides = 10, value = 6 }, + { sides = 10, value = 10 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "6AA3" +output = "(6D10<=3) > 0[10,10,10,10,10,10] > 성공 수 : 0" +rands = [ + { sides = 10, value = 10 }, + { sides = 10, value = 10 }, + { sides = 10, value = 10 }, + { sides = 10, value = 10 }, + { sides = 10, value = 10 }, + { sides = 10, value = 10 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "6AA3" +output = "(6D10<=3) > 2[2,3,4,5,6,6] > 성공 수 : 2" +rands = [ + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "6AA3" +output = "(6D10<=3) > 3[1,2,3,4,5,6]+0[6] > 성공 수 : 3 / 1 크리티컬" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "6AA3" +output = "(6D10<=3) > 3[1,1,3,4,5,6]+1[3,6] > 성공 수 : 4 / 2 크리티컬" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 6 }, + { sides = 10, value = 3 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "6AA3" +output = "(6D10<=3) > 3[1,1,3,4,5,6]+1[1,6]+1[3] > 성공 수 : 5 / 3 크리티컬" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 6 }, + { sides = 10, value = 1 }, + { sides = 10, value = 6 }, + { sides = 10, value = 3 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "6AA4C0" +output = "(6D10<=4) > 4[1,2,3,4,5,6] > 성공 수 : 4" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "6AA4c2" +output = "(6D10<=4) > 4[1,2,3,4,5,6]+1[3,6] > 성공 수 : 5 / 2 크리티컬" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 6 }, + { sides = 10, value = 3 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "4AA3*5" +output = "(4D10<=3) > 0[6,6,6,6] > Hits:0*5 > 0 대미지" +rands = [ + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "4AA3x5" +output = "(4D10<=3) > 0[6,6,6,6] > Hits:0*5 > 0 대미지" +rands = [ + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "4AA3X5" +output = "(4D10<=3) > 0[6,6,6,6] > Hits:0*5 > 0 대미지" +rands = [ + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "4aa3*5" +output = "(4D10<=3) > 2[2,3,4,5] > Hits:2*5 > 10 대미지" +rands = [ + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "4Aa3*5" +output = "(4D10<=3) > 2[1,1,6,6]+1[3,6] > Hits:3*5 > 15 대미지 / 2 크리티컬" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 3 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "5aA4*10" +output = "(5D10<=4) > 0[6,6,6,6,6] > Hits:0*10 > 0 대미지" +rands = [ + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "5AA4x10" +output = "(5D10<=4) > 3[2,3,4,5,6] > Hits:3*10 > 30 대미지" +rands = [ + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "5AA4X10" +output = "(5D10<=4) > 4[1,2,3,4,5]+0[6] > Hits:4*10 > 40 대미지 / 1 크리티컬" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "5AA4*10" +output = "(5D10<=4) > 3[1,1,1,6,6]+2[1,1,6]+1[4,6] > Hits:6*10 > 60 대미지 / 5 크리티컬" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 1 }, + { sides = 10, value = 1 }, + { sides = 10, value = 6 }, + { sides = 10, value = 4 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "5aa3*5+10" +output = "(5D10<=3) > 0[6,6,6,6,6] > Hits:0*5 + Trigger:0*10 > 0 대미지" +rands = [ + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "5aa3*5+10" +output = "(5D10<=3) > 2[2,3,4,5,6] > Hits:2*5 + Trigger:0*10 > 10 대미지" +rands = [ + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 6 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "5aa3*5+10" +output = "(5D10<=3) > 3[1,2,3,4,5]+1[3] > Hits:4*5 + Trigger:1*10 > 30 대미지 / 1 크리티컬" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, + { sides = 10, value = 3 }, +] + +[[ test ]] +game_system = "Airgetlamh:Korean" +input = "5aa3*5+10c0" +output = "(5D10<=3) > 3[1,2,3,4,5] > Hits:3*5 + Trigger:0*10 > 15 대미지" +rands = [ + { sides = 10, value = 1 }, + { sides = 10, value = 2 }, + { sides = 10, value = 3 }, + { sides = 10, value = 4 }, + { sides = 10, value = 5 }, +] From 2ca65de09dc6a93303dc28ba8987f68089db890f Mon Sep 17 00:00:00 2001 From: MY4k Date: Fri, 27 Feb 2026 23:28:21 +0900 Subject: [PATCH 04/11] =?UTF-8?q?DnD5:=E3=83=9C=E3=83=BC=E3=83=8A=E3=82=B9?= =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=B9(B)=E3=81=AE=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E3=81=A8=E4=BD=BF=E7=94=A8=E4=BE=8B=E3=82=92HELP=5FMESSAGE?= =?UTF-8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../game_system/DungeonsAndDragons5_Korean.rb | 10 +- test/data/DungeonsAndDragons5_Korean.toml | 1256 ++++++++++------- 2 files changed, 732 insertions(+), 534 deletions(-) diff --git a/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb b/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb index 489f3942e..4e1b391e3 100644 --- a/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb +++ b/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb @@ -21,12 +21,18 @@ class DungeonsAndDragons5_Korean < DungeonsAndDragons5  c: 크리티컬 수치 (생략 가능)  t: 목표 AC (>= 포함, 생략 가능)  y: 유리(A), 불리(D) (생략 가능) -  펌블/실패/성공/크리티컬을 자동으로 판정합니다. +  B: 브레스나 가이던스 등의 보너스 (생략 가능) +  ※보충 설명: B만 입력하면 +1d4를, B[1D4+1D8] 와 같이 입력하면 []안의 주사위를 추가로 굴립니다. + + +  펌블/실패/성공/크리티컬을 자동으로 판정합니다.  예시)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   AT@19 AT+5@18 AT-2@19>=15 + ・능력 판정 AR[x][>=t][y] -  명중 굴림과 동일. 실패/성공을 자동 판정합니다. +  명중 굴림과 동일. 성공/실패 결과를 자동 판정합니다.  예시)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 + ・대형 무기 전투술 대미지 계산(베이직 룰북 32p) 2HnDx[m]  n: 주사위 개수  x: 주사위 면수(1d6의 6, 1d8의 8 등) diff --git a/test/data/DungeonsAndDragons5_Korean.toml b/test/data/DungeonsAndDragons5_Korean.toml index 675dd3e61..1d81ac377 100644 --- a/test/data/DungeonsAndDragons5_Korean.toml +++ b/test/data/DungeonsAndDragons5_Korean.toml @@ -1,532 +1,724 @@ -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT 명령어만 표시 확인" -output = "(AT) > 3" -rands = [ - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT 크리티컬" -output = "(AT) > 20 > 크리티컬" -critical = true -success = true -rands = [ - { sides = 20, value = 20 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT@19 크리티컬" -output = "(AT@19) > 19 > 크리티컬" -critical = true -success = true -rands = [ - { sides = 20, value = 19 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT@18 크리티컬" -output = "(AT@18) > 18 > 크리티컬" -critical = true -success = true -rands = [ - { sides = 20, value = 18 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT@18 크리티컬" -output = "(AT@18) > 19 > 크리티컬" -critical = true -success = true -rands = [ - { sides = 20, value = 19 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT 펌블" -output = "(AT) > 1 > 펌블" -fumble = true -failure = true -rands = [ - { sides = 20, value = 1 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT>=10 실패 표시 확인" -output = "(AT>=10) > 3 > 실패" -failure = true -rands = [ - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT>=10 성공(동일 값) 표시 확인" -output = "(AT>=10) > 10 > 성공" -success = true -rands = [ - { sides = 20, value = 10 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT>=10 성공 표시 확인" -output = "(AT>=10) > 19 > 성공" -success = true -rands = [ - { sides = 20, value = 19 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT>=10 크리티컬 표시 확인" -output = "(AT>=10) > 20 > 크리티컬" -success = true -critical = true -rands = [ - { sides = 20, value = 20 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT@18>=10 크리티컬 표시 확인" -output = "(AT@18>=10) > 18 > 크리티컬" -success = true -critical = true -rands = [ - { sides = 20, value = 18 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT>=10 펌블 표시 확인" -output = "(AT>=10) > 1 > 펌블" -failure = true -fumble = true -rands = [ - { sides = 20, value = 1 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT>=18A 유리 표시 확인" -output = "(AT>=18A) > 3[1,3] > 3 > 실패" -failure = true -rands = [ - { sides = 20, value = 1 }, - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT>=18A" -output = "(AT>=18A) > 18[18,3] > 18 > 성공" -success = true -rands = [ - { sides = 20, value = 18 }, - { sides = 20, value = 3 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT>=16D 불리 표시 확인" -output = "(AT>=16D) > 3[3,6] > 3 > 실패" -failure = true -rands = [ - { sides = 20, value = 3 }, - { sides = 20, value = 6 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT>=16D" -output = "(AT>=16D) > 3[18,3] > 3 > 실패" -failure = true -rands = [ - { sides = 20, value = 18 }, - { sides = 20, value = 3 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT+5>=10 +수정 표시 확인" -output = "(AT+5>=10) > 19+5 > 24 > 성공" -success = true -rands = [ - { sides = 20, value = 19 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT-5>=10 -수정 표시 확인" -output = "(AT-5>=10) > 19-5 > 14 > 성공" -success = true -rands = [ - { sides = 20, value = 19 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT+3>=10 크리티컬 표시 확인" -output = "(AT+3>=10) > 20+3 > 23 > 크리티컬" -success = true -critical = true -rands = [ - { sides = 20, value = 20 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT+3@18>=10 크리티컬 표시 확인" -output = "(AT+3@18>=10) > 18+3 > 21 > 크리티컬" -success = true -critical = true -rands = [ - { sides = 20, value = 18 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT-3>=10 크리티컬 표시 확인" -output = "(AT-3>=10) > 20-3 > 17 > 크리티컬" -success = true -critical = true -rands = [ - { sides = 20, value = 20 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT-3@18>=10 크리티컬 표시 확인" -output = "(AT-3@18>=10) > 18-3 > 15 > 크리티컬" -success = true -critical = true -rands = [ - { sides = 20, value = 18 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT+3>=10 펌블 표시 확인" -output = "(AT+3>=10) > 1+3 > 4 > 펌블" -failure = true -fumble = true -rands = [ - { sides = 20, value = 1 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT-3>=10 펌블 표시 확인" -output = "(AT-3>=10) > 1-3 > -2 > 펌블" -failure = true -fumble = true -rands = [ - { sides = 20, value = 1 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "ATA 유리 표시 확인" -output = "(ATA) > 3[1,3] > 3" -rands = [ - { sides = 20, value = 1 }, - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT+3>=18A 유리 표시 확인" -output = "(AT+3>=18A) > 3[1,3]+3 > 6 > 실패" -failure = true -rands = [ - { sides = 20, value = 1 }, - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT-3>=14A" -output = "(AT-3>=14A) > 18[18,3]-3 > 15 > 성공" -success = true -rands = [ - { sides = 20, value = 18 }, - { sides = 20, value = 3 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "ATD 불리 표시 확인" -output = "(ATD) > 3[3,7] > 3" -rands = [ - { sides = 20, value = 3 }, - { sides = 20, value = 7 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT+3>=15D 불리 표시 확인" -output = "(AT+3>=15D) > 3[3,7]+3 > 6 > 실패" -failure = true -rands = [ - { sides = 20, value = 3 }, - { sides = 20, value = 7 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AT-3>=15D" -output = "(AT-3>=15D) > 3[18,3]-3 > 0 > 실패" -failure = true -rands = [ - { sides = 20, value = 18 }, - { sides = 20, value = 3 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR 명령어만 표시 확인" -output = "(AR) > 3" -rands = [ - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR 크리티컬이 나오지 않는 것을 확인" -output = "(AR) > 20" -rands = [ - { sides = 20, value = 20 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR 펌블이 나오지 않는 것을 확인" -output = "(AR) > 1" -rands = [ - { sides = 20, value = 1 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR>=10 실패 표시 확인" -output = "(AR>=10) > 3 > 실패" -failure = true -rands = [ - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR>=10 성공(동일 값) 표시 확인" -output = "(AR>=10) > 10 > 성공" -success = true -rands = [ - { sides = 20, value = 10 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR>=10 성공 표시 확인" -output = "(AR>=10) > 19 > 성공" -success = true -rands = [ - { sides = 20, value = 19 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR>=18A 유리 표시 확인" -output = "(AR>=18A) > 3[1,3] > 3 > 실패" -failure = true -rands = [ - { sides = 20, value = 1 }, - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR>=18A" -output = "(AR>=18A) > 18[18,3] > 18 > 성공" -success = true -rands = [ - { sides = 20, value = 18 }, - { sides = 20, value = 3 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR>=16D 불리 표시 확인" -output = "(AR>=16D) > 3[3,6] > 3 > 실패" -failure = true -rands = [ - { sides = 20, value = 3 }, - { sides = 20, value = 6 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR>=16D" -output = "(AR>=16D) > 3[18,3] > 3 > 실패" -failure = true -rands = [ - { sides = 20, value = 18 }, - { sides = 20, value = 3 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR+5>=10 +수정 표시 확인" -output = "(AR+5>=10) > 19+5 > 24 > 성공" -success = true -rands = [ - { sides = 20, value = 19 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR-5>=10 -수정 표시 확인" -output = "(AR-5>=10) > 19-5 > 14 > 성공" -success = true -rands = [ - { sides = 20, value = 19 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "ARA 유리 표시 확인" -output = "(ARA) > 3[1,3] > 3" -rands = [ - { sides = 20, value = 1 }, - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR+3>=18A 유리 표시 확인" -output = "(AR+3>=18A) > 3[1,3]+3 > 6 > 실패" -failure = true -rands = [ - { sides = 20, value = 1 }, - { sides = 20, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR-3>=14A" -output = "(AR-3>=14A) > 18[18,3]-3 > 15 > 성공" -success = true -rands = [ - { sides = 20, value = 18 }, - { sides = 20, value = 3 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "ARD 불리 표시 확인" -output = "(ARD) > 3[3,7] > 3" -rands = [ - { sides = 20, value = 3 }, - { sides = 20, value = 7 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR+3>=15D 불리 표시 확인" -output = "(AR+3>=15D) > 3[3,7]+3 > 6 > 실패" -failure = true -rands = [ - { sides = 20, value = 3 }, - { sides = 20, value = 7 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "AR-3>=15D" -output = "(AR-3>=15D) > 3[18,3]-3 > 0 > 실패" -failure = true -rands = [ - { sides = 20, value = 18 }, - { sides = 20, value = 3 }, -] - - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "2H3D6 대형 무기 전투술 대미지, 재굴림 없음, 수정치 없음" -output = "(2H3D6) > [5,4,3] > 12" -rands = [ - { sides = 6, value = 5 }, - { sides = 6, value = 4 }, - { sides = 6, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "2H3D6+3 재굴림 없음, +수정" -output = "(2H3D6+3) > [3,4,5]+3 > 15" -rands = [ - { sides = 6, value = 3 }, - { sides = 6, value = 4 }, - { sides = 6, value = 5 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "2H3D6-5 재굴림 없음, -수정" -output = "(2H3D6-5) > [5,4,3]-5 > 7" -rands = [ - { sides = 6, value = 5 }, - { sides = 6, value = 4 }, - { sides = 6, value = 3 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "2H3D6 재굴림 있음, 수정 없음" -output = "(2H3D6) > [5,4,2] > [5,4][4] > 13" -rands = [ - { sides = 6, value = 5 }, - { sides = 6, value = 4 }, - { sides = 6, value = 2 }, - { sides = 6, value = 4 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "2H3D6+5 재굴림 있음, +수정" -output = "(2H3D6+5) > [5,2,4]+5 > [5,4][4]+5 > 18" -rands = [ - { sides = 6, value = 5 }, - { sides = 6, value = 2 }, - { sides = 6, value = 4 }, - { sides = 6, value = 4 }, -] - -[[ test ]] -game_system = "DungeonsAndDragons5:Korean" -input = "2H3D6-3 재굴림 있음, -수정" -output = "(2H3D6-3) > [5,4,2]-3 > [5,4][6]-3 > 12" -rands = [ - { sides = 6, value = 5 }, - { sides = 6, value = 4 }, - { sides = 6, value = 2 }, - { sides = 6, value = 6 }, -] - +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT 명령어만 표시 확인" +output = "(AT) > 3" +rands = [ + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT 크리티컬" +output = "(AT) > 20 > 크리티컬" +critical = true +success = true +rands = [ + { sides = 20, value = 20 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT@19 크리티컬" +output = "(AT@19) > 19 > 크리티컬" +critical = true +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT@18 크리티컬" +output = "(AT@18) > 18 > 크리티컬" +critical = true +success = true +rands = [ + { sides = 20, value = 18 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT@18 크리티컬" +output = "(AT@18) > 19 > 크리티컬" +critical = true +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT 펌블" +output = "(AT) > 1 > 펌블" +fumble = true +failure = true +rands = [ + { sides = 20, value = 1 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+ 가감산 기호만 있고 숫자 없는 잘못된 입력 처리 확인" +output = "" +rands = [ +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT>=10 실패 표시 확인" +output = "(AT>=10) > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT>=10 성공(동일 값) 표시 확인" +output = "(AT>=10) > 10 > 성공" +success = true +rands = [ + { sides = 20, value = 10 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT>=10 성공 표시 확인" +output = "(AT>=10) > 19 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT>=10 크리티컬 표시 확인" +output = "(AT>=10) > 20 > 크리티컬" +success = true +critical = true +rands = [ + { sides = 20, value = 20 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT@18>=10 크리티컬 표시 확인" +output = "(AT@18>=10) > 18 > 크리티컬" +success = true +critical = true +rands = [ + { sides = 20, value = 18 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT>=10 펌블 표시 확인" +output = "(AT>=10) > 1 > 펌블" +failure = true +fumble = true +rands = [ + { sides = 20, value = 1 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT>=18A 유리 표시 확인" +output = "(AT>=18A) > 3[1,3] > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 1 }, + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT>=18A" +output = "(AT>=18A) > 18[18,3] > 18 > 성공" +success = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT>=16D 불리 표시 확인" +output = "(AT>=16D) > 3[3,6] > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 3 }, + { sides = 20, value = 6 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT>=16D" +output = "(AT>=16D) > 3[18,3] > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+5>=10 +수정 표시 확인" +output = "(AT+5>=10) > 19+5 > 24 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT5>=10 +수정 시 + 없는 표시 확인" +output = "(AT+5>=10) > 19+5 > 24 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT-5>=10 -수정 표시 확인" +output = "(AT-5>=10) > 19-5 > 14 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+2+3>=10 가감산 수정 표시 확인" +output = "(AT+5>=10) > 19+5 > 24 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+7-2>=10 가감산 수정 표시 확인" +output = "(AT+5>=10) > 19+5 > 24 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+3>=10 크리티컬 표시 확인" +output = "(AT+3>=10) > 20+3 > 23 > 크리티컬" +success = true +critical = true +rands = [ + { sides = 20, value = 20 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+3@18>=10 크리티컬 표시 확인" +output = "(AT+3@18>=10) > 18+3 > 21 > 크리티컬" +success = true +critical = true +rands = [ + { sides = 20, value = 18 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT-3>=10 크리티컬 표시 확인" +output = "(AT-3>=10) > 20-3 > 17 > 크리티컬" +success = true +critical = true +rands = [ + { sides = 20, value = 20 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT-3@18>=10 크리티컬 표시 확인" +output = "(AT-3@18>=10) > 18-3 > 15 > 크리티컬" +success = true +critical = true +rands = [ + { sides = 20, value = 18 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+3>=10 펌블 표시 확인" +output = "(AT+3>=10) > 1+3 > 4 > 펌블" +failure = true +fumble = true +rands = [ + { sides = 20, value = 1 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT-3>=10 펌블 표시 확인" +output = "(AT-3>=10) > 1-3 > -2 > 펌블" +failure = true +fumble = true +rands = [ + { sides = 20, value = 1 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "ATA 유리 표시 확인" +output = "(ATA) > 3[1,3] > 3" +rands = [ + { sides = 20, value = 1 }, + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+3>=18A 유리 표시 확인" +output = "(AT+3>=18A) > 3[1,3]+3 > 6 > 실패" +failure = true +rands = [ + { sides = 20, value = 1 }, + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT-3>=14A" +output = "(AT-3>=14A) > 18[18,3]-3 > 15 > 성공" +success = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "ATD 불리 표시 확인" +output = "(ATD) > 3[3,7] > 3" +rands = [ + { sides = 20, value = 3 }, + { sides = 20, value = 7 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+3>=15D 불리 표시 확인" +output = "(AT+3>=15D) > 3[3,7]+3 > 6 > 실패" +failure = true +rands = [ + { sides = 20, value = 3 }, + { sides = 20, value = 7 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT-3>=15D" +output = "(AT-3>=15D) > 3[18,3]-3 > 0 > 실패" +failure = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "ATB 보너스 표시 확인" +output = "(ATB) > 2+3 > 5" +rands = [ + { sides = 20, value = 2 }, + { sides = 4, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT+3>=18B 보너스 표시 확인" +output = "(AT+3>=18B) > 2+3+3 > 8 > 실패" +failure = true +rands = [ + { sides = 20, value = 2 }, + { sides = 4, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT-3>=14B" +output = "(AT-3>=14B) > 18-3+3 > 18 > 성공" +success = true +rands = [ + { sides = 20, value = 18 }, + { sides = 4, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT-3>=15DB" +output = "(AT-3>=15DB) > 3[18,3]-3+3 > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, + { sides = 4, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AT-3>=15DB[1D4+1D6]" +output = "(AT-3>=15DB[1D4+1D6]) > 3[18,3]-3+7[3,4] > 7 > 실패" +failure = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, + { sides = 4, value = 3 }, + { sides = 6, value = 4 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR 명령어만 표시 확인" +output = "(AR) > 3" +rands = [ + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR 크리티컬이 나오지 않는 것을 확인" +output = "(AR) > 20" +rands = [ + { sides = 20, value = 20 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR 펌블이 나오지 않는 것을 확인" +output = "(AR) > 1" +rands = [ + { sides = 20, value = 1 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR>=10 실패 표시 확인" +output = "(AR>=10) > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR>=10 성공(동일 값) 표시 확인" +output = "(AR>=10) > 10 > 성공" +success = true +rands = [ + { sides = 20, value = 10 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR>=10 성공 표시 확인" +output = "(AR>=10) > 19 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR>=18A 유리 표시 확인" +output = "(AR>=18A) > 3[1,3] > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 1 }, + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR>=18A" +output = "(AR>=18A) > 18[18,3] > 18 > 성공" +success = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR>=16D 불리 표시 확인" +output = "(AR>=16D) > 3[3,6] > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 3 }, + { sides = 20, value = 6 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR>=16D" +output = "(AR>=16D) > 3[18,3] > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR+5>=10 +수정 표시 확인" +output = "(AR+5>=10) > 19+5 > 24 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR-5>=10 -수정 표시 확인" +output = "(AR-5>=10) > 19-5 > 14 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR+>=10 +수정 잘못된 입력 비표시 확인" +output = "" +rands = [ +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR5>=10 +수정 시 + 없는 표시 허용 확인" +output = "(AR+5>=10) > 19+5 > 24 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR+2+3>=10 가감산 수정 표시 확인" +output = "(AR+5>=10) > 19+5 > 24 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR+5-10>=10 가감산 수정 표시 확인" +output = "(AR-5>=10) > 19-5 > 14 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "ARA 유리 표시 확인" +output = "(ARA) > 3[1,3] > 3" +rands = [ + { sides = 20, value = 1 }, + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR+3>=18A 유리 표시 확인" +output = "(AR+3>=18A) > 3[1,3]+3 > 6 > 실패" +failure = true +rands = [ + { sides = 20, value = 1 }, + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR-3>=14A" +output = "(AR-3>=14A) > 18[18,3]-3 > 15 > 성공" +success = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "ARD 불리 표시 확인" +output = "(ARD) > 3[3,7] > 3" +rands = [ + { sides = 20, value = 3 }, + { sides = 20, value = 7 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR+3>=15D 불리 표시 확인" +output = "(AR+3>=15D) > 3[3,7]+3 > 6 > 실패" +failure = true +rands = [ + { sides = 20, value = 3 }, + { sides = 20, value = 7 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR-3>=15D" +output = "(AR-3>=15D) > 3[18,3]-3 > 0 > 실패" +failure = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "ARB 보너스 표시 확인" +output = "(ARB) > 3+3 > 6" +rands = [ + { sides = 20, value = 3 }, + { sides = 4, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR>=10B 실패 표시 확인" +output = "(AR>=10B) > 3+3 > 6 > 실패" +failure = true +rands = [ + { sides = 20, value = 3 }, + { sides = 4, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR>=10B 성공 표시 확인" +output = "(AR>=10B) > 19+3 > 22 > 성공" +success = true +rands = [ + { sides = 20, value = 19 }, + { sides = 4, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR-3>=15DB" +output = "(AR-3>=15DB) > 3[18,3]-3+3 > 3 > 실패" +failure = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, + { sides = 4, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "AR-3>=15DB[1D4+1D6]" +output = "(AR-3>=15DB[1D4+1D6]) > 3[18,3]-3+7[3,4] > 7 > 실패" +failure = true +rands = [ + { sides = 20, value = 18 }, + { sides = 20, value = 3 }, + { sides = 4, value = 3 }, + { sides = 6, value = 4 }, +] + + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "2H3D6 대형 무기 전투술 대미지, 재굴림 없음, 수정치 없음" +output = "(2H3D6) > [5,4,3] > 12" +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "2H3D6+3 재굴림 없음, +수정" +output = "(2H3D6+3) > [3,4,5]+3 > 15" +rands = [ + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "2H3D6-5 재굴림 없음, -수정" +output = "(2H3D6-5) > [5,4,3]-5 > 7" +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "2H3D6+1+2 재굴림 없음, 가감산 수정" +output = "(2H3D6+3) > [3,4,5]+3 > 15" +rands = [ + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "2H3D6-10+5 재굴림 없음, 가감산 수정" +output = "(2H3D6-5) > [5,4,3]-5 > 7" +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "2H3D6 재굴림 있음, 수정 없음" +output = "(2H3D6) > [5,4,2] > [5,4][4] > 13" +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "2H3D6+5 재굴림 있음, +수정" +output = "(2H3D6+5) > [5,2,4]+5 > [5,4][4]+5 > 18" +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "DungeonsAndDragons5:Korean" +input = "2H3D6-3 재굴림 있음, -수정" +output = "(2H3D6-3) > [5,4,2]-3 > [5,4][6]-3 > 12" +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, +] \ No newline at end of file From f7776b55c927e82bbc41eacec6ce95181dfb9f7c Mon Sep 17 00:00:00 2001 From: MY4k Date: Sun, 1 Mar 2026 02:37:04 +0900 Subject: [PATCH 05/11] =?UTF-8?q?YearZeroEngine:=E9=9F=93=E5=9B=BD?= =?UTF-8?q?=E8=AA=9E=E5=AF=BE=E5=BF=9C=E3=82=92=E8=BF=BD=E5=8A=A0=20&=20i1?= =?UTF-8?q?8n=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/YearZeroEngine/ja_jp.yml | 12 + i18n/YearZeroEngine/ko_kr.yml | 12 + lib/bcdice/game_system.rb | 1 + lib/bcdice/game_system/YearZeroEngine.rb | 14 +- .../game_system/YearZeroEngine_Korean.rb | 46 + test/data/YearZeroEngine_Korean.toml | 1178 +++++++++++++++++ 6 files changed, 1256 insertions(+), 7 deletions(-) create mode 100644 i18n/YearZeroEngine/ja_jp.yml create mode 100644 i18n/YearZeroEngine/ko_kr.yml create mode 100644 lib/bcdice/game_system/YearZeroEngine_Korean.rb create mode 100644 test/data/YearZeroEngine_Korean.toml diff --git a/i18n/YearZeroEngine/ja_jp.yml b/i18n/YearZeroEngine/ja_jp.yml new file mode 100644 index 000000000..f6399367f --- /dev/null +++ b/i18n/YearZeroEngine/ja_jp.yml @@ -0,0 +1,12 @@ +ja_jp: + YearZeroEngine: + success_count: "成功数" + difficulty: "難易度" + success_msg: "判定成功!" + failure_msg: "判定失敗!" + roll_one: "出目1" + ability: "能力" + skill: "技能" + item: "アイテム" + pushable: "プッシュ可能" + dice: "ダイス" \ No newline at end of file diff --git a/i18n/YearZeroEngine/ko_kr.yml b/i18n/YearZeroEngine/ko_kr.yml new file mode 100644 index 000000000..301add6f0 --- /dev/null +++ b/i18n/YearZeroEngine/ko_kr.yml @@ -0,0 +1,12 @@ +ko_kr: + YearZeroEngine: + success_count: "성공 수" + difficulty: "난이도" + success_msg: "판정 성공!" + failure_msg: "판정 실패!" + roll_one: "주사위 눈 1" + ability: "능력" + skill: "기능" + item: "아이템" + pushable: "푸시 가능" + dice: "주사위" \ No newline at end of file diff --git a/lib/bcdice/game_system.rb b/lib/bcdice/game_system.rb index 7bfaa1c16..fcaeaec2c 100644 --- a/lib/bcdice/game_system.rb +++ b/lib/bcdice/game_system.rb @@ -303,6 +303,7 @@ require "bcdice/game_system/YankeeMustDie" require "bcdice/game_system/YankeeYogSothoth" require "bcdice/game_system/YearZeroEngine" +require "bcdice/game_system/YearZeroEngine_Korean" require "bcdice/game_system/Yggdrasill" require "bcdice/game_system/Yotabana" require "bcdice/game_system/YuMyoKishi" diff --git a/lib/bcdice/game_system/YearZeroEngine.rb b/lib/bcdice/game_system/YearZeroEngine.rb index 35ec553c8..c204c2a37 100644 --- a/lib/bcdice/game_system/YearZeroEngine.rb +++ b/lib/bcdice/game_system/YearZeroEngine.rb @@ -196,26 +196,26 @@ def resolute_push_action(command) end def make_result_with_yze(dice_count_text, dice_text) - result_text = "#{dice_count_text} > #{dice_text} 成功数:#{@total_success_dice}" + result_text = "#{dice_count_text} > #{dice_text} #{translate('YearZeroEngine.success_count')}:#{@total_success_dice}" if @difficulty > 0 if @total_success_dice >= @difficulty - return Result.success("#{result_text} 難易度=#{@difficulty}:判定成功!") + return Result.success("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.success_msg')}") else - return Result.failure("#{result_text} 難易度=#{@difficulty}:判定失敗!") + return Result.failure("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.failure_msg')}") end end return result_text end def make_result_with_myz(dice_count_text, dice_text) - result_text = "#{dice_count_text} > #{dice_text} 成功数:#{@total_success_dice}" - atter_text = "\n出目1:[能力:#{@base_botch_dice},技能:#{@skill_botch_dice},アイテム:#{@gear_botch_dice}) プッシュ可能=#{@push_dice}ダイス" + result_text = "#{dice_count_text} > #{dice_text} #{translate('YearZeroEngine.success_count')}:#{@total_success_dice}" + atter_text = "\n#{translate('YearZeroEngine.roll_one')}:[#{translate('YearZeroEngine.ability')}:#{@base_botch_dice},#{translate('YearZeroEngine.skill')}:#{@skill_botch_dice},#{translate('YearZeroEngine.item')}:#{@gear_botch_dice}) #{translate('YearZeroEngine.pushable')}=#{@push_dice}#{translate('YearZeroEngine.dice')}" if @difficulty > 0 if @total_success_dice >= @difficulty - return Result.success("#{result_text} 難易度=#{@difficulty}:判定成功!#{atter_text}") + return Result.success("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.success_msg')}#{atter_text}") else - return Result.failure("#{result_text} 難易度=#{@difficulty}:判定失敗!#{atter_text}") + return Result.failure("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.failure_msg')}#{atter_text}") end end diff --git a/lib/bcdice/game_system/YearZeroEngine_Korean.rb b/lib/bcdice/game_system/YearZeroEngine_Korean.rb new file mode 100644 index 000000000..0504b148d --- /dev/null +++ b/lib/bcdice/game_system/YearZeroEngine_Korean.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require 'bcdice/game_system/YearZeroEngine' + +module BCDice + module GameSystem + class YearZeroEngine_Korean < YearZeroEngine + # ゲームシステムの識別 + ID = 'YearZeroEngine:Korean' + + # ゲームシステム名 + NAME = '이어 제로 엔진(Year Zero Engine)' + + # ゲームシステム名の読みがな + SORT_KEY = '国際化:Korean:이어 제로 엔진(Year Zero Engine)' + + # ダイスボットの使い方 + HELP_MESSAGE = <<~INFO_MESSAGE_TEXT + ・다이스 풀 판정 커맨드(nYZEx+x+x+m) + (난이도)YZE(능력 주사위 수)+(기능 주사위 수)+(아이템 주사위 수)+(수정치) # (6만 셈함) + (난이도)YZE(능력 주사위 수)+(기능 주사위 수)+(아이템 주사위 수)-(수정치) # (6만 셈함) + + ・다이스 풀 판정 커맨드(nMYZx+x+x) + (난이도)MYZ(능력 주사위 수)+(기능 주사위 수)+(아이템 주사위 수) # (1과 6을 세어 푸시 가능 수 표시) + (난이도)MYZ(능력 주사위 수)-(기능 주사위 수)+(아이템 주사위 수) # (1과 6을 세어 푸시 가능 수 표시, 기능 마이너스 지정) + + ※ 난이도, 기능 주사위 수, 아이템 주사위 수는 생략 가능 + + ・스텝 다이스 판정 커맨드(nYZSx+x+m+f) + (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)+(수정치) # (1, 6을 세어 푸시 가능 수 표시) + (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)-(수정치) # (1, 6을 세어 푸시 가능 수 표시) + (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)+(수정치)A # (1, 6을 세어 푸시 가능 수 표시, 유리) + (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)-(수정치)A # (1, 6을 세어 푸시 가능 수 표시, 유리) + (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)+(수정치)D # (1, 6을 세어 푸시 가능 수 표시, 불리) + (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)-(수정치)D # (1, 6을 세어 푸시 가능 수 표시, 불리) + INFO_MESSAGE_TEXT + + register_prefix_from_super_class() + + def initialize(command) + super(command) + @locale = :ko_kr + end + end + end +end diff --git a/test/data/YearZeroEngine_Korean.toml b/test/data/YearZeroEngine_Korean.toml new file mode 100644 index 000000000..04eae4c45 --- /dev/null +++ b/test/data/YearZeroEngine_Korean.toml @@ -0,0 +1,1178 @@ +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3" +output = "(3D6) > [2,5,3] 성공 수:0" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3" +output = "(3D6) > [2,6,1] 성공 수:1" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3" +output = "(3D6) > [6,6,6] 성공 수:3" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3" +output = "(3D6)+(3D6) > [2,5,3]+[1,4,1] 성공 수:0" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3" +output = "(3D6)+(3D6) > [2,6,3]+[1,6,1] 성공 수:2" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3" +output = "(3D6)+(3D6) > [6,6,6]+[6,6,6] 성공 수:6" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3+3" +output = "(3D6)+(3D6)+(3D6) > [2,5,3]+[1,4,1]+[3,1,4] 성공 수:0" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3+3" +output = "(3D6)+(3D6)+(3D6) > [2,5,6]+[1,4,6]+[3,1,6] 성공 수:3" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3+3" +output = "(3D6)+(3D6)+(3D6) > [6,6,6]+[6,6,6]+[6,6,6] 성공 수:9" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+2+1" +output = "(3D6)+(2D6)+(1D6) > [2,5,3]+[1,4]+[3] 성공 수:0" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+2+1" +output = "(3D6)+(2D6)+(1D6) > [2,5,6]+[4,6]+[6] 성공 수:3" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+2+1" +output = "(3D6)+(2D6)+(1D6) > [6,6,6]+[6,6]+[6] 성공 수:6" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE1+2+3" +output = "(1D6)+(2D6)+(3D6) > [2]+[4,6]+[6,1,5] 성공 수:2" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3+3+1 #修正+1" +output = "(3D6)+(4D6)+(3D6) > [2,5,6]+[1,4,6,5]+[3,1,6] 성공 수:3" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3+3-1 #修正-1" +output = "(3D6)+(2D6)+(3D6) > [2,5,6]+[1,6]+[3,1,6] 성공 수:3" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3+3-8 #修正順の確認1" +output = "(1D6)+(0D6)+(0D6) > [2]+[]+[] 성공 수:0" +rands = [ + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZE3+3+3-5 #修正順の確認2" +output = "(3D6)+(0D6)+(1D6) > [2,5,6]+[]+[1] 성공 수:1" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "SYZE3" +output = "(3D6) > [2,5,3] 성공 수:0" +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "SYZE3+3" +output = "(3D6)+(3D6) > [2,5,3]+[1,4,1] 성공 수:0" +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "SYZE1+2+3" +output = "(1D6)+(2D6)+(3D6) > [2]+[4,6]+[6,1,5] 성공 수:2" +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3" +output = "(3D6) > [2,5,3] 성공 수:0 난이도=2:판정 실패!" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3" +output = "(3D6) > [2,6,1] 성공 수:1 난이도=2:판정 실패!" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3" +output = "(3D6) > [6,6,6] 성공 수:3 난이도=2:판정 성공!" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3+3" +output = "(3D6)+(3D6) > [2,5,3]+[1,4,1] 성공 수:0 난이도=2:판정 실패!" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3+3" +output = "(3D6)+(3D6) > [2,6,3]+[1,6,1] 성공 수:2 난이도=2:판정 성공!" +success = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3+3" +output = "(3D6)+(3D6) > [6,6,6]+[6,6,6] 성공 수:6 난이도=2:판정 성공!" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3+3+3" +output = "(3D6)+(3D6)+(3D6) > [2,5,3]+[1,4,1]+[3,1,4] 성공 수:0 난이도=2:판정 실패!" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3+3+3" +output = "(3D6)+(3D6)+(3D6) > [2,5,6]+[1,4,6]+[3,1,6] 성공 수:3 난이도=2:판정 성공!" +success = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3+3+3" +output = "(3D6)+(3D6)+(3D6) > [6,6,6]+[6,6,6]+[6,6,6] 성공 수:9 난이도=2:판정 성공!" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3+2+1" +output = "(3D6)+(2D6)+(1D6) > [2,5,3]+[1,4]+[3] 성공 수:0 난이도=2:판정 실패!" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3+2+1" +output = "(3D6)+(2D6)+(1D6) > [2,5,6]+[4,6]+[6] 성공 수:3 난이도=2:판정 성공!" +success = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE3+2+1" +output = "(3D6)+(2D6)+(1D6) > [6,6,6]+[6,6]+[6] 성공 수:6 난이도=2:판정 성공!" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2YZE1+2+3" +output = "(1D6)+(2D6)+(3D6) > [2]+[4,6]+[6,1,5] 성공 수:2 난이도=2:판정 성공!" +success = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "S2YZE3" +output = "(3D6) > [2,5,3] 성공 수:0 난이도=2:판정 실패!" +failure = true +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "S2YZE3+3" +output = "(3D6)+(3D6) > [2,5,3]+[1,4,1] 성공 수:0 난이도=2:판정 실패!" +failure = true +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "S2YZE1+2+3" +output = "(1D6)+(2D6)+(3D6) > [2]+[4,6]+[6,1,5] 성공 수:2 난이도=2:판정 성공!" +success = true +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3" +output = "(3D6) > [2,5,3] 성공 수:0\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=3주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3" +output = "(3D6) > [2,6,1] 성공 수:1\n주사위 눈 1:[능력:1,기능:0,아이템:0) 푸시 가능=1주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3" +output = "(3D6) > [6,6,6] 성공 수:3\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3+3" +output = "(3D6)+(3D6) > [2,5,3]+[1,4,1] 성공 수:0\n주사위 눈 1:[능력:0,기능:2,아이템:0) 푸시 가능=6주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3+3" +output = "(3D6)+(3D6) > [2,6,3]+[1,6,1] 성공 수:2\n주사위 눈 1:[능력:0,기능:2,아이템:0) 푸시 가능=4주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3+3" +output = "(3D6)+(3D6) > [6,6,6]+[6,6,6] 성공 수:6\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3+3+3" +output = "(3D6)+(3D6)+(3D6) > [2,5,3]+[1,4,1]+[3,1,4] 성공 수:0\n주사위 눈 1:[능력:0,기능:2,아이템:1) 푸시 가능=8주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3+3+3" +output = "(3D6)+(3D6)+(3D6) > [2,5,6]+[1,4,6]+[3,1,6] 성공 수:3\n주사위 눈 1:[능력:0,기능:1,아이템:1) 푸시 가능=5주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3+3+3" +output = "(3D6)+(3D6)+(3D6) > [6,6,6]+[6,6,6]+[6,6,6] 성공 수:9\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3+2+1" +output = "(3D6)+(2D6)+(1D6) > [2,5,3]+[1,4]+[3] 성공 수:0\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=6주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3+2+1" +output = "(3D6)+(2D6)+(1D6) > [2,5,6]+[4,6]+[6] 성공 수:3\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=3주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3+2+1" +output = "(3D6)+(2D6)+(1D6) > [6,6,6]+[6,6]+[6] 성공 수:6\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ1+2+3" +output = "(1D6)+(2D6)+(3D6) > [2]+[4,6]+[6,1,5] 성공 수:2\n주사위 눈 1:[능력:0,기능:0,아이템:1) 푸시 가능=3주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "SMYZ3" +output = "(3D6) > [2,5,3] 성공 수:0\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=3주사위" +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "SMYZ3+3" +output = "(3D6)+(3D6) > [2,5,3]+[1,4,1] 성공 수:0\n주사위 눈 1:[능력:0,기능:2,아이템:0) 푸시 가능=6주사위" +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "SMYZ1+2+3" +output = "(1D6)+(2D6)+(3D6) > [2]+[4,6]+[6,1,5] 성공 수:2\n주사위 눈 1:[능력:0,기능:0,아이템:1) 푸시 가능=3주사위" +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3" +output = "(3D6) > [2,5,3] 성공 수:0 난이도=2:판정 실패!\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=3주사위" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3" +output = "(3D6) > [2,6,1] 성공 수:1 난이도=2:판정 실패!\n주사위 눈 1:[능력:1,기능:0,아이템:0) 푸시 가능=1주사위" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3" +output = "(3D6) > [6,6,6] 성공 수:3 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+3" +output = "(3D6)+(3D6) > [2,5,3]+[1,4,1] 성공 수:0 난이도=2:판정 실패!\n주사위 눈 1:[능력:0,기능:2,아이템:0) 푸시 가능=6주사위" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+3" +output = "(3D6)+(3D6) > [2,6,3]+[1,6,1] 성공 수:2 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:2,아이템:0) 푸시 가능=4주사위" +success = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+3" +output = "(3D6)+(3D6) > [6,6,6]+[6,6,6] 성공 수:6 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+3+3" +output = "(3D6)+(3D6)+(3D6) > [2,5,3]+[1,4,1]+[3,1,4] 성공 수:0 난이도=2:판정 실패!\n주사위 눈 1:[능력:0,기능:2,아이템:1) 푸시 가능=8주사위" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+3+3" +output = "(3D6)+(3D6)+(3D6) > [2,5,6]+[1,4,6]+[3,1,6] 성공 수:3 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:1,아이템:1) 푸시 가능=5주사위" +success = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+3+3" +output = "(3D6)+(3D6)+(3D6) > [6,6,6]+[6,6,6]+[6,6,6] 성공 수:9 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+2+1" +output = "(3D6)+(2D6)+(1D6) > [2,5,3]+[1,4]+[3] 성공 수:0 난이도=2:판정 실패!\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=6주사위" +failure = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+2+1" +output = "(3D6)+(2D6)+(1D6) > [2,5,6]+[4,6]+[6] 성공 수:3 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=3주사위" +success = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+2+1" +output = "(3D6)+(2D6)+(1D6) > [6,6,6]+[6,6]+[6] 성공 수:6 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ1+2+3" +output = "(1D6)+(2D6)+(3D6) > [2]+[4,6]+[6,1,5] 성공 수:2 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:0,아이템:1) 푸시 가능=3주사위" +success = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "S2MYZ3" +output = "(3D6) > [2,5,3] 성공 수:0 난이도=2:판정 실패!\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=3주사위" +failure = true +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "S2MYZ3+3" +output = "(3D6)+(3D6) > [2,5,3]+[1,4,1] 성공 수:0 난이도=2:판정 실패!\n주사위 눈 1:[능력:0,기능:2,아이템:0) 푸시 가능=6주사위" +failure = true +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "S2MYZ1+2+3" +output = "(1D6)+(2D6)+(3D6) > [2]+[4,6]+[6,1,5] 성공 수:2 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:0,아이템:1) 푸시 가능=3주사위" +success = true +secret = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3+3+3" +output = "(3D6)+(3D6)+(3D6) > [1,6,3]+[1,4,1]+[3,1,4] 성공 수:1 난이도=2:판정 실패!\n주사위 눈 1:[능력:1,기능:2,아이템:1) 푸시 가능=6주사위" +failure = true +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3-3+3" +output = "(3D6)-(3D6)+(3D6) > [1,6,3]-[1,6,1]+[3,1,4] 성공 수:0 난이도=2:판정 실패!\n주사위 눈 1:[능력:1,기능:2,아이템:1) 푸시 가능=5주사위" +failure = true +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3-3+3" +output = "(3D6)-(3D6)+(3D6) > [1,6,3]-[1,6,6]+[3,1,4] 성공 수:-1 난이도=2:판정 실패!\n주사위 눈 1:[능력:1,기능:1,아이템:1) 푸시 가능=4주사위" +failure = true +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3-3+3" +output = "(3D6)-(3D6)+(3D6) > [1,6,6]-[1,6,2]+[6,1,4] 성공 수:2 난이도=2:판정 성공!\n주사위 눈 1:[능력:1,기능:1,아이템:1) 푸시 가능=3주사위" +success = true +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3-3" +output = "(3D6)-(3D6) > [1,6,6]-[1,6,2] 성공 수:1 난이도=2:판정 실패!\n주사위 눈 1:[능력:1,기능:1,아이템:0) 푸시 가능=2주사위" +failure = true +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "2MYZ3-3" +output = "(3D6)-(3D6) > [6,6,6]-[1,6,2] 성공 수:2 난이도=2:판정 성공!\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=2주사위" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 2 }, +] +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3-3+3" +output = "(3D6)-(3D6)+(3D6) > [1,6,3]-[1,6,6]+[3,1,4] 성공 수:-1\n주사위 눈 1:[능력:1,기능:1,아이템:1) 푸시 가능=4주사위" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3-3+3" +output = "(3D6)-(3D6)+(3D6) > [1,6,6]-[1,6,2]+[6,1,4] 성공 수:2\n주사위 눈 1:[능력:1,기능:1,아이템:1) 푸시 가능=3주사위" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 2 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3-3" +output = "(3D6)-(3D6) > [1,6,6]-[1,6,2] 성공 수:1\n주사위 눈 1:[능력:1,기능:1,아이템:0) 푸시 가능=2주사위" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "MYZ3-3" +output = "(3D6)-(3D6) > [6,6,6]-[1,6,2] 성공 수:2\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=2주사위" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 6 }, + { sides = 6, value = 2 }, +] + + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS6 #最小コマンド" +output = "(1D6) > [2] 성공 수:0\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=1주사위" +rands = [ + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS6+6 #Botch" +output = "(1D6)+(1D6) > [2]+[1] 성공 수:0\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=1주사위" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS6+6 #成功" +output = "(1D6)+(1D6) > [6]+[1] 성공 수:1\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS6+10 #2成功" +output = "(1D6)+(1D10) > [5]+[10] 성공 수:2\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=1주사위" +rands = [ + { sides = 6, value = 5 }, + { sides = 10, value = 10 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS6+6+1 #+1修正" +output = "(1D6)+(1D8) > [6]+[1] 성공 수:1\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 6, value = 6 }, + { sides = 8, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS6+6-1 #-1修正" +output = "(1D6) > [6] 성공 수:1\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "1YZS6+6 #난이도付き成功" +output = "(1D6)+(1D6) > [6]+[1] 성공 수:1 난이도=1:판정 성공!\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=0주사위" +success = true +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "1YZS6+6 #난이도付き失敗" +output = "(1D6)+(1D6) > [5]+[1] 성공 수:0 난이도=1:판정 실패!\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=1주사위" +failure = true +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS6+8A #有利" +output = "(2D6)+(1D8) > [6,1]+[6] 성공 수:2\n주사위 눈 1:[능력:1,기능:0,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 8, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS8+6A #有利" +output = "(1D8)+(2D6) > [7]+[6,1] 성공 수:2\n주사위 눈 1:[능력:0,기능:1,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 8, value = 7 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS6+8D #不利" +output = "(1D8) > [6] 성공 수:1\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 8, value = 6 }, +] + +[[ test ]] +game_system = "YearZeroEngine:Korean" +input = "YZS8+6D #不利" +output = "(1D8) > [6] 성공 수:1\n주사위 눈 1:[능력:0,기능:0,아이템:0) 푸시 가능=0주사위" +rands = [ + { sides = 8, value = 6 }, +] + From acd2a0045b83b9a240ae182f4fa36454781c3520 Mon Sep 17 00:00:00 2001 From: MY4k Date: Mon, 2 Mar 2026 13:03:02 +0900 Subject: [PATCH 06/11] =?UTF-8?q?=E7=9E=B3=E9=80=B8=E3=82=89=E3=81=95?= =?UTF-8?q?=E3=81=AC=E3=82=A4=E3=83=AA=E3=82=B9=E3=83=99=E3=82=A4=E3=83=B3?= =?UTF-8?q?:=E9=9F=93=E5=9B=BD=E8=AA=9E=E5=AF=BE=E5=BF=9C=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20&=20i18n=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/Irisbane/ja_jp.yml | 24 ++ i18n/Irisbane/ko_kr.yml | 24 ++ lib/bcdice/game_system.rb | 1 + lib/bcdice/game_system/Irisbane.rb | 54 ++- lib/bcdice/game_system/Irisbane_Korean.rb | 52 +++ test/data/Irisbane_Korean.toml | 450 ++++++++++++++++++++++ 6 files changed, 575 insertions(+), 30 deletions(-) create mode 100644 i18n/Irisbane/ja_jp.yml create mode 100644 i18n/Irisbane/ko_kr.yml create mode 100644 lib/bcdice/game_system/Irisbane_Korean.rb create mode 100644 test/data/Irisbane_Korean.toml diff --git a/i18n/Irisbane/ja_jp.yml b/i18n/Irisbane/ja_jp.yml new file mode 100644 index 000000000..0a72f6c65 --- /dev/null +++ b/i18n/Irisbane/ja_jp.yml @@ -0,0 +1,24 @@ +ja_jp: + Irisbane: + zero_dice_count: "判定数が 0 です" + success_dice_count: "成功ダイス数 %{count}" + attack_power: "× 攻撃力 %{power}" + damage: "ダメージ %{damage}" + damage_with_mod: "ダメージ %{damage}%{operator}%{mod_value}" + + SceneSituation: + name: "シチュエーション" + "1_3": + - "【日常】何一つ変わることの無い日々の一幕。移ろい易い世界では、それはとても大切である。" + - "【準備】何かを為すための用意をする一幕。情報収集、買物遠征、やるべきことは一杯だ。" + - "【趣味】自分の時間を、有効活用している一幕。必要に追われていない分、心は軽く晴れやかだ。" + - "【喫茶】一息入れ、嗜好品を嗜む時の一幕。穏やかな空気は、だが、往々にして変わりやすい。" + - "【鍛錬】体を鍛え、心を養う修練の一幕。己さえ良ければ、その方法も何だって良い。" + - "【職務】役割の元、仕事に精を出す時の一幕。目的が何であれ、為すべきことに変わりはない。" + "4_6": + - "【移動】何処かから何処かへと向かう一幕。進んでいるなら、手段も目的地も関係あるまい。" + - "【墓前】故人が眠る場所へと赴く一幕。共に眠ることだけは無いように。" + - "【操作】何かを操り、望みを果たしている一幕。運転にせよ何にせよ、脇見には注意が必要だ。" + - "【食事】何かを糧とし、己の力を蓄える一幕。行動すれば消耗する。腹が減っては何とやらだ。" + - "【休息】日々の合間の、憩いの一幕。「何もしない」というのも、立派な行いである。" + - "【夢幻】現実に存在しない何かへと耽る一幕。時間帯に関わらず、何時かは必ず覚めるだろう。" \ No newline at end of file diff --git a/i18n/Irisbane/ko_kr.yml b/i18n/Irisbane/ko_kr.yml new file mode 100644 index 000000000..1898aec09 --- /dev/null +++ b/i18n/Irisbane/ko_kr.yml @@ -0,0 +1,24 @@ +ko_kr: + Irisbane: + zero_dice_count: "판정 수가 0입니다" + success_dice_count: "성공 주사위 수 %{count}" + attack_power: "× 공격력 %{power}" + damage: "대미지 %{damage}" + damage_with_mod: "대미지 %{damage}%{operator}%{mod_value}" + + SceneSituation: + name: "시추에이션" + "1_3": + - "【일상】아무것도 변하지 않는 일상의 한 장면. 변화하기 쉬운 세계에서는 그것이 매우 소중하다." + - "【준비】무언가를 하기 위한 채비를 하는 한 장면. 정보 수집, 쇼핑 원정, 해야 할 일은 가득하다." + - "【취미】자신의 시간을 유효하게 활용하는 한 장면. 쫓기지 않는 만큼 마음이 가볍고 상쾌하다." + - "【카페】한숨 돌리며 기호품을 즐기는 한 장면. 온화한 공기는 그러나 왕왕 변하기 쉽다." + - "【단련】몸을 단련하고 마음을 기르는 수련의 한 장면. 자신만 괜찮다면 그 방법도 무엇이든 좋다." + - "【직무】역할에 따라 일에 힘쓰는 한 장면. 목적이 무엇이든 해야 할 일에는 변함이 없다." + "4_6": + - "【이동】어딘가에서 어딘가로 향하는 한 장면. 나아가고 있다면 수단도 목적지도 상관없다." + - "【묘전】고인이 잠든 장소를 찾는 한 장면. 함께 잠드는 일만은 없도록." + - "【조작】무언가를 다루며 소원을 이루는 한 장면. 운전이든 무엇이든 딴 곳을 보는 것은 주의가 필요하다." + - "【식사】무언가를 양식으로 삼아 자신의 힘을 비축하는 한 장면. 행동하면 소모된다. 배고프면 아무것도 안 된다." + - "【휴식】나날의 틈새, 쉬어 가는 한 장면. '아무것도 하지 않는다'는 것도 훌륭한 행동이다." + - "【몽환】현실에 존재하지 않는 무언가에 빠지는 한 장면. 시간대에 상관없이 언젠가는 반드시 깨어날 것이다." \ No newline at end of file diff --git a/lib/bcdice/game_system.rb b/lib/bcdice/game_system.rb index 7bfaa1c16..622544a65 100644 --- a/lib/bcdice/game_system.rb +++ b/lib/bcdice/game_system.rb @@ -135,6 +135,7 @@ require "bcdice/game_system/Insane_Korean" require "bcdice/game_system/InvisibleLiar" require "bcdice/game_system/Irisbane" +require "bcdice/game_system/Irisbane_Korean" require "bcdice/game_system/IthaWenUa" require "bcdice/game_system/JamesBond" require "bcdice/game_system/JekyllAndHyde" diff --git a/lib/bcdice/game_system/Irisbane.rb b/lib/bcdice/game_system/Irisbane.rb index 1d7baf134..25a940b2d 100644 --- a/lib/bcdice/game_system/Irisbane.rb +++ b/lib/bcdice/game_system/Irisbane.rb @@ -53,7 +53,7 @@ def eval_game_system_specific_command(command) if (m = ATTACK_ROLL_REG.match(command)) roll_attack(m[2], m[3], m[4], m[6], m[7]) else - roll_tables(command, TABLES) + roll_tables(command, self.class::TABLES) end end @@ -73,7 +73,7 @@ def roll_attack(power_expression, dice_count_expression, border_expression, modi command = make_command_text(power, dice_count, border, modification_operator, modification_value) if dice_count <= 0 - return "#{command} > 判定数が 0 です" + return "#{command} > #{translate('Irisbane.zero_dice_count')}" end dices = @randomizer.roll_barabara(dice_count, 6).sort @@ -84,17 +84,17 @@ def roll_attack(power_expression, dice_count_expression, border_expression, modi message_elements = [] message_elements << command message_elements << dices.join(',') - message_elements << "成功ダイス数 #{success_dice_count}" - message_elements << "× 攻撃力 #{power}" if success_dice_count > 0 + message_elements << translate('Irisbane.success_dice_count', count: success_dice_count) + message_elements << translate('Irisbane.attack_power', power: power) if success_dice_count > 0 if success_dice_count > 0 if modification_operator && modification_value - message_elements << "ダメージ #{damage}#{modification_operator}#{modification_value}" + message_elements << translate('Irisbane.damage_with_mod', damage: damage, operator: modification_operator, mod_value: modification_value) damage = parse_operator(modification_operator).call(damage, modification_value) damage = 0 if damage < 0 message_elements << damage.to_s else - message_elements << "ダメージ #{damage}" + message_elements << translate('Irisbane.damage', damage: damage) end end @@ -119,30 +119,24 @@ def parse_operator(operator) end end - TABLES = { - "SceneSituation" => DiceTable::D66LeftRangeTable.new( - "シチュエーション", - BCDice::D66SortType::NO_SORT, - [ - [1..3, [ - "【日常】何一つ変わることの無い日々の一幕。移ろい易い世界では、それはとても大切である。", - "【準備】何かを為すための用意をする一幕。情報収集、買物遠征、やるべきことは一杯だ。", - "【趣味】自分の時間を、有効活用している一幕。必要に追われていない分、心は軽く晴れやかだ。", - "【喫茶】一息入れ、嗜好品を嗜む時の一幕。穏やかな空気は、だが、往々にして変わりやすい。", - "【鍛錬】体を鍛え、心を養う修練の一幕。己さえ良ければ、その方法も何だって良い。", - "【職務】役割の元、仕事に精を出す時の一幕。目的が何であれ、為すべきことに変わりはない。", - ]], - [4..6, [ - "【移動】何処かから何処かへと向かう一幕。進んでいるなら、手段も目的地も関係あるまい。", - "【墓前】故人が眠る場所へと赴く一幕。共に眠ることだけは無いように。", - "【操作】何かを操り、望みを果たしている一幕。運転にせよ何にせよ、脇見には注意が必要だ。", - "【食事】何かを糧とし、己の力を蓄える一幕。行動すれば消耗する。腹が減っては何とやらだ。", - "【休息】日々の合間の、憩いの一幕。“何もしない”というのも、立派な行いである。", - "【夢幻】現実に存在しない何かへと耽る一幕。時間帯に関わらず、何時かは必ず覚めるだろう。", - ]], - ] - ), - }.transform_keys(&:upcase).freeze + class << self + private + + def translate_tables(locale) + { + "SCENESITUATION" => DiceTable::D66LeftRangeTable.new( + I18n.t('Irisbane.SceneSituation.name', locale: locale), + BCDice::D66SortType::NO_SORT, + [ + [1..3, I18n.t('Irisbane.SceneSituation.1_3', locale: locale)], + [4..6, I18n.t('Irisbane.SceneSituation.4_6', locale: locale)], + ] + ), + } + end + end + + TABLES = translate_tables(:ja_jp).freeze ALIAS = { "SSi" => "SceneSituation", diff --git a/lib/bcdice/game_system/Irisbane_Korean.rb b/lib/bcdice/game_system/Irisbane_Korean.rb new file mode 100644 index 000000000..60bdf1d7b --- /dev/null +++ b/lib/bcdice/game_system/Irisbane_Korean.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'bcdice/game_system/Irisbane' + +module BCDice + module GameSystem + class Irisbane_Korean < Irisbane + # ゲームシステムの識別子 + ID = 'Irisbane:Korean' + + # ゲームシステム名 + NAME = '눈 돌리지 않는 이리스베인' + + # ゲームシステム名の読みがな + SORT_KEY = '国際化:Korean:눈 돌리지 않는 이리스베인' + + # ダイスボットの使い方 + HELP_MESSAGE = <<~HELP + ■공격 판정( ATTACKx@y<=z ) + x: 공격력 + y: 판정 수 + z: 목표값 + (※ ATTACK 은 ATK 또는 AT 로 줄여 쓸 수 있습니다) + 예) ATTACK2@3<=5 + 예) ATK10@2<=4 + 예) AT8@3<=2 + + 위 x y z 에는 각각 사칙연산을 지정할 수 있습니다. + 예) ATTACK2+7@3*2<=5-1 + + □공격 판정의 데미지 증감( ATTACKx@y<=z[+a] ATTACKx@y<=z[-a]) + 말미에 [+a] 또는 [-a] 를 지정하면 최종 데미지를 증감할 수 있습니다. + a: 증감량 + 예) ATTACK2@3<=5[+10] + 예) ATK10@2<=4[-8] + 예) AT8@3<=2[-8+5] + + ■시추에이션(p115) + SceneSituation, SSi + HELP + + def initialize(command) + super(command) + @locale = :ko_kr + end + + TABLES = translate_tables(:ko_kr).freeze + + register_prefix_from_super_class() + end + end +end diff --git a/test/data/Irisbane_Korean.toml b/test/data/Irisbane_Korean.toml new file mode 100644 index 000000000..314dbbacb --- /dev/null +++ b/test/data/Irisbane_Korean.toml @@ -0,0 +1,450 @@ +[[ test ]] +game_system = "Irisbane:Korean" +input = "3b6" +output = "(3B6) > 3,5,6" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "C(5/2)" +output = "c(5/2) > 3" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=5" +output = "(ATTACK2@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 2 > 대미지 6" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATK10@2<=4" +output = "(ATTACK10@2<=4) > 3,4 > 성공 주사위 수 2 > × 공격력 10 > 대미지 20" +rands = [ + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT8@3<=2" +output = "(ATTACK8@3<=2) > 3,4,6 > 성공 주사위 수 0" +rands = [ + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, + { sides = 6, value = 6 }, +] +failure = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK0@4<=5" +output = "(ATTACK0@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 0 > 대미지 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@0<=5" +output = "(ATTACK2@0<=5) > 판정 수가 0입니다" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=0" +output = "(ATTACK2@4<=1) > 1,3,4,6 > 성공 주사위 수 1 > × 공격력 2 > 대미지 2" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=7" +output = "(ATTACK2@4<=6) > 1,3,4,6 > 성공 주사위 수 4 > × 공격력 2 > 대미지 8" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2+7@4<=5" +output = "(ATTACK9@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2-1@4<=5" +output = "(ATTACK1@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 1 > 대미지 3" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2-2@4<=5" +output = "(ATTACK0@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 0 > 대미지 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2-3@4<=5" +output = "(ATTACK0@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 0 > 대미지 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT(2+3)*2@4<=5" +output = "(ATTACK10@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 10 > 대미지 30" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT(2+3/2@4<=5" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT(2+3)/2@4<=5" +output = "(ATTACK3@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 3 > 대미지 9" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT(2+3/2@4<=5" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4-1<=5" +output = "(ATTACK2@3<=5) > 3,4,6 > 성공 주사위 수 2 > × 공격력 2 > 대미지 4" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT6@5/2<=5" +output = "(ATTACK6@3<=5) > 1,3,6 > 성공 주사위 수 2 > × 공격력 6 > 대미지 12" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4*2<=5" +output = "(ATTACK2@8<=5) > 1,1,2,3,4,5,5,6 > 성공 주사위 수 7 > × 공격력 2 > 대미지 14" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 5 }, + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@(2*3)+2<=5" +output = "(ATTACK2@8<=5) > 1,1,2,3,4,5,5,6 > 성공 주사위 수 7 > × 공격력 2 > 대미지 14" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 5 }, + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@(2*3+2<=5" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4+1" +output = "(ATTACK2@4<=5) > 3,4,5,6 > 성공 주사위 수 3 > × 공격력 2 > 대미지 6" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4+3" +output = "(ATTACK2@4<=6) > 3,4,5,6 > 성공 주사위 수 4 > × 공격력 2 > 대미지 8" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4-1" +output = "(ATTACK2@4<=3) > 3,4,5,6 > 성공 주사위 수 1 > × 공격력 2 > 대미지 2" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4-2" +output = "(ATTACK2@4<=2) > 3,4,5,6 > 성공 주사위 수 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +failure = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4-5" +output = "(ATTACK2@4<=1) > 3,4,5,6 > 성공 주사위 수 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +failure = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4-" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1" +output = "(ATTACK9@6<=4) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=5[+10]" +output = "(ATTACK2@4<=5[+10]) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 2 > 대미지 6+10 > 16" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=2[+10]" +output = "(ATTACK2@4<=2[+10]) > 3,4,5,6 > 성공 주사위 수 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +failure = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=2[+10-]" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[+5]" +output = "(ATTACK9@6<=4[+5]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27+5 > 32" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[+5+7*2-1]" +output = "(ATTACK9@6<=4[+18]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27+18 > 45" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[-8]" +output = "(ATTACK9@6<=4[-8]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27-8 > 19" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[-27]" +output = "(ATTACK9@6<=4[-27]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27-27 > 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[-28]" +output = "(ATTACK9@6<=4[-28]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27-28 > 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "SceneSituation" +output = "시추에이션(11) > 【일상】아무것도 변하지 않는 일상의 한 장면. 변화하기 쉬운 세계에서는 그것이 매우 소중하다." +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "SCENESITUATION" +output = "시추에이션(14) > 【카페】한숨 돌리며 기호품을 즐기는 한 장면. 온화한 공기는 그러나 왕왕 변하기 쉽다." +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "SSi" +output = "시추에이션(32) > 【준비】무언가를 하기 위한 채비를 하는 한 장면. 정보 수집, 쇼핑 원정, 해야 할 일은 가득하다." +rands = [ + { sides = 6, value = 3 }, + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "SSI" +output = "시추에이션(54) > 【식사】무언가를 양식으로 삼아 자신의 힘을 비축하는 한 장면. 행동하면 소모된다. 배고프면 아무것도 안 된다." +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] \ No newline at end of file From dc24e1a2c46c6d23bc6d053adfb2f0f7779cac47 Mon Sep 17 00:00:00 2001 From: "MYAK(kkuru)" <153376095+MY4k@users.noreply.github.com> Date: Thu, 26 Mar 2026 21:26:45 +0900 Subject: [PATCH 07/11] =?UTF-8?q?[Bloodorium]=E9=9F=93=E5=9B=BD=E8=AA=9E?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=82=92=E8=BF=BD=E5=8A=A0=20&=20i18n?= =?UTF-8?q?=E5=8C=96=20(#842)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 韓国語対応を追加 & i18n化 * Fix RuboCop --- i18n/Bloodorium/ja_jp.yml | 3 + i18n/Bloodorium/ko_kr.yml | 3 + lib/bcdice/game_system.rb | 1 + lib/bcdice/game_system/Bloodorium.rb | 2 +- lib/bcdice/game_system/Bloodorium_Korean.rb | 34 ++++++ test/data/Bloodorium_Korean.toml | 110 ++++++++++++++++++++ 6 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 i18n/Bloodorium/ja_jp.yml create mode 100644 i18n/Bloodorium/ko_kr.yml create mode 100644 lib/bcdice/game_system/Bloodorium_Korean.rb create mode 100644 test/data/Bloodorium_Korean.toml diff --git a/i18n/Bloodorium/ja_jp.yml b/i18n/Bloodorium/ja_jp.yml new file mode 100644 index 000000000..08af3a585 --- /dev/null +++ b/i18n/Bloodorium/ja_jp.yml @@ -0,0 +1,3 @@ +ja_jp: + Bloodorium: + triumph: "《トライアンフ》(*%{triumph})" \ No newline at end of file diff --git a/i18n/Bloodorium/ko_kr.yml b/i18n/Bloodorium/ko_kr.yml new file mode 100644 index 000000000..38722b1a7 --- /dev/null +++ b/i18n/Bloodorium/ko_kr.yml @@ -0,0 +1,3 @@ +ko_kr: + Bloodorium: + triumph: "《트라이엄프》(*%{triumph})" diff --git a/lib/bcdice/game_system.rb b/lib/bcdice/game_system.rb index aa93fcb45..facf4fab8 100644 --- a/lib/bcdice/game_system.rb +++ b/lib/bcdice/game_system.rb @@ -40,6 +40,7 @@ require "bcdice/game_system/BloodCrusade" require "bcdice/game_system/BloodMoon" require "bcdice/game_system/Bloodorium" +require "bcdice/game_system/Bloodorium_Korean" require "bcdice/game_system/CardRanker" require "bcdice/game_system/CastleInGray" require "bcdice/game_system/ChaosFlare" diff --git a/lib/bcdice/game_system/Bloodorium.rb b/lib/bcdice/game_system/Bloodorium.rb index 17a8f437c..db78c0143 100644 --- a/lib/bcdice/game_system/Bloodorium.rb +++ b/lib/bcdice/game_system/Bloodorium.rb @@ -47,7 +47,7 @@ def dicecheck(command) sequence = [ "(#{parsed})", "[#{dice_list.join(',')}]#{Format.modifier(parsed.modify_number)}", - ("《トライアンフ》(*#{triumph})" if triumph > 1), + (translate('Bloodorium.triumph', triumph: triumph) if triumph > 1), (total_expr(dice_value, triumph, parsed.modify_number) if total != dice_value), total, ].compact diff --git a/lib/bcdice/game_system/Bloodorium_Korean.rb b/lib/bcdice/game_system/Bloodorium_Korean.rb new file mode 100644 index 000000000..4a586fbd1 --- /dev/null +++ b/lib/bcdice/game_system/Bloodorium_Korean.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require 'bcdice/game_system/Bloodorium' + +module BCDice + module GameSystem + class Bloodorium_Korean < Bloodorium + # ゲームシステムの識別子 + ID = 'Bloodorium:Korean' + + # ゲームシステム名 + NAME = '블러도리움' + + # ゲームシステム名の読みがな + SORT_KEY = '国際化:Korean:블러도리움' + + # ダイスボットの使い方 + HELP_MESSAGE = <<~INFO_MESSAGE_TEXT + ・주사위 체크 xDC+y +  【주사위 체크】를 실행한다.《트라이엄프》를 결과에 자동 반영한다. +  x: 주사위 수 +  y: 결과에 대한 수정값 (생략 가능) + INFO_MESSAGE_TEXT + + register_prefix_from_super_class() + + def initialize(command) + super(command) + + @locale = :ko_kr + end + end + end +end diff --git a/test/data/Bloodorium_Korean.toml b/test/data/Bloodorium_Korean.toml new file mode 100644 index 000000000..66d0588ad --- /dev/null +++ b/test/data/Bloodorium_Korean.toml @@ -0,0 +1,110 @@ +[[ test ]] +game_system = "Bloodorium:Korean" +input = "4DC" +output = "(4DC) > [1,2,3,4] > 4" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "Bloodorium:Korean" +input = "3DC" +output = "(3DC) > [3,4,5] > 5" +rands = [ + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "Bloodorium:Korean" +input = "4DC" +output = "(4DC) > [1,2,2,4] > 《트라이엄프》(*2) > 4*2 > 8" +critical = true +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "Bloodorium:Korean" +input = "5DC" +output = "(5DC) > [2,2,5,5,5] > 《트라이엄프》(*3) > 5*3 > 15" +critical = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 5 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "Bloodorium:Korean" +input = "4DC+1" +output = "(4DC+1) > [1,2,3,4]+1 > 4+1 > 5" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "Bloodorium:Korean" +input = "4DC+1+2" +output = "(4DC+3) > [1,2,3,4]+3 > 4+3 > 7" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "Bloodorium:Korean" +input = "5DC+1" +output = "(5DC+1) > [2,2,5,5,5]+1 > 《트라이엄프》(*3) > 5*3+1 > 16" +critical = true +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "Bloodorium:Korean" +input = "10DC" +output = "(10DC) > [1,1,2,2,3,3,4,4,5,6] > 《트라이엄프》(*2) > 6*2 > 12" +critical = true +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "Bloodorium:Korean" +input = "DC" +output = "" +rands = [] + +[[ test ]] +game_system = "Bloodorium:Korean" +input = "DC+1" +output = "" +rands = [] From 4ee3e86b52a8e4877924cdb20c4312e9bf9ada6c Mon Sep 17 00:00:00 2001 From: "MYAK(kkuru)" <153376095+MY4k@users.noreply.github.com> Date: Thu, 26 Mar 2026 21:55:16 +0900 Subject: [PATCH 08/11] =?UTF-8?q?[Ventangle]i18n=E5=8C=96=20(#844)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Ventangle:i18n化 * 誤った変数名を修正 --- i18n/Ventangle/ja_jp.yml | 4 + i18n/Ventangle/ko_kr.yml | 4 + lib/bcdice/game_system/Ventangle.rb | 15 ++-- lib/bcdice/game_system/Ventangle_Korean.rb | 100 ++------------------- 4 files changed, 21 insertions(+), 102 deletions(-) create mode 100644 i18n/Ventangle/ja_jp.yml create mode 100644 i18n/Ventangle/ko_kr.yml diff --git a/i18n/Ventangle/ja_jp.yml b/i18n/Ventangle/ja_jp.yml new file mode 100644 index 000000000..8a17a5ae0 --- /dev/null +++ b/i18n/Ventangle/ja_jp.yml @@ -0,0 +1,4 @@ +ja_jp: + Ventangle: + special: スペシャル + level_gap: "ギャップボーナス(%d)" \ No newline at end of file diff --git a/i18n/Ventangle/ko_kr.yml b/i18n/Ventangle/ko_kr.yml new file mode 100644 index 000000000..4391249d2 --- /dev/null +++ b/i18n/Ventangle/ko_kr.yml @@ -0,0 +1,4 @@ +ko_kr: + Ventangle: + special: 스페셜 + level_gap: "갭 보너스(%d)" \ No newline at end of file diff --git a/lib/bcdice/game_system/Ventangle.rb b/lib/bcdice/game_system/Ventangle.rb index 1f1ecee75..6ccae18a7 100644 --- a/lib/bcdice/game_system/Ventangle.rb +++ b/lib/bcdice/game_system/Ventangle.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'bcdice/base' +require "bcdice/format" module BCDice module GameSystem @@ -88,9 +89,9 @@ def eval_game_system_specific_command(command) "#{dice_total}#{Format.modifier(cmd.modify_number)}" end - level_gap_str = + gap_bonus_str = if cmd.target_number && cmd.dollar && result.success? && (gap = total - cmd.target_number) >= cmd.dollar - "ギャップボーナス(#{gap})" + translate("Ventangle.level_gap", gap: gap) end sequence = [ @@ -100,7 +101,7 @@ def eval_game_system_specific_command(command) modifier_str, total.to_s, result.text, - level_gap_str, + gap_bonus_str, ].compact result.text = sequence.join(" > ") @@ -113,16 +114,16 @@ def compare(dice_total, total, cmd) fumble = cmd.fumble || DEFAULT_FUMBLE_VALUE if dice_total <= fumble - return Result.fumble('ファンブル') + return Result.fumble(translate("fumble")) elsif dice_total >= special - return Result.critical('スペシャル') + return Result.critical(translate("Ventangle.special")) end if cmd.target_number if total.send(cmd.cmp_op, cmd.target_number) - return Result.success('成功') + return Result.success(translate("success")) else - return Result.failure('失敗') + return Result.failure(translate("failure")) end else return Result.new(nil) diff --git a/lib/bcdice/game_system/Ventangle_Korean.rb b/lib/bcdice/game_system/Ventangle_Korean.rb index a3fafa87b..78a8e333a 100644 --- a/lib/bcdice/game_system/Ventangle_Korean.rb +++ b/lib/bcdice/game_system/Ventangle_Korean.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'bcdice/base' require 'bcdice/game_system/Ventangle' module BCDice @@ -21,7 +20,7 @@ class Ventangle_Korean < Ventangle 예시: VT 기본 스페셜치, 펌블치로 판정 - VT@10#3 스페셜치 10、펌블치 3으로 판정 + VT@10#3 스페셜치 10, 펌블치 3으로 판정 VT3@10#3 어드밴티지 1점을 사용해 스페셜치 10, 펌블치 3 판정을 주사위 3개로 판정 VT>=5 기본 스페셜치, 펌블치로 목표치 5 판정 @@ -31,100 +30,11 @@ class Ventangle_Korean < Ventangle VT3@10#3$4>=5 어드밴티지 1점을 사용해 스페셜치 10, 펌블치 3, 목표치 5 판정을 주사위 3개로 판정. 이때 달성치가 목표치보다 4이상 큰 경우, 갭 보너스를 표시 MESSAGETEXT - # 既定のスペシャル値 - DEFAULT_SPECIAL_VALUE = 12 - # 既定のファンブル値 - DEFAULT_FUMBLE_VALUE = 2 - # 規定のダイス個数 - DEFAULT_DICE_NUM = 2 + register_prefix_from_super_class() - # ダイスボットで使用するコマンドを配列で列挙する - register_prefix('VT') - - def eval_game_system_specific_command(command) - debug("eval_game_system_specific_command Begin") - - parser = Command::Parser.new('VT', round_type: round_type) - .enable_critical - .enable_fumble - .enable_dollar - .enable_suffix_number - .restrict_cmp_op_to(nil, :>=) - cmd = parser.parse(command) - - unless cmd - return nil - end - - dice_num = cmd.suffix_number || DEFAULT_DICE_NUM - if dice_num < DEFAULT_DICE_NUM - return nil - end - - dice_list = @randomizer.roll_barabara(dice_num, 6) - if dice_num > 2 - # 出目の順序を保存して上位2つの出目を取得 - j = 0 # 安定ソートのために利用 cf. https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/sort_by.html - using_list = dice_list.map.with_index { |x, i| {index: i, value: x} } - .sort_by { |x| [x[:value], j += 1] }.reverse.take(2) - .sort_by { |x| x[:index] }.map { |x| x[:value] } - else - using_list = dice_list - end - dice_total = using_list.sum - total = dice_total + cmd.modify_number - - result = compare(dice_total, total, cmd) - - advantage_str = - if dice_num > 2 - using_list.to_s - end - - modifier_str = - if cmd.modify_number > 0 - "#{dice_total}#{Format.modifier(cmd.modify_number)}" - end - - level_gap_str = - if cmd.target_number && cmd.dollar && result.success? && (gap = total - cmd.target_number) >= cmd.dollar - "갭 보너스(#{gap})" - end - - sequence = [ - cmd.to_s, - dice_list.to_s, - advantage_str, - modifier_str, - total.to_s, - result.text, - level_gap_str, - ].compact - - result.text = sequence.join(" > ") - - return result - end - - def compare(dice_total, total, cmd) - special = cmd.critical || DEFAULT_SPECIAL_VALUE - fumble = cmd.fumble || DEFAULT_FUMBLE_VALUE - - if dice_total <= fumble - return Result.fumble('펌블') - elsif dice_total >= special - return Result.critical('스페셜') - end - - if cmd.target_number - if total.send(cmd.cmp_op, cmd.target_number) - return Result.success('성공') - else - return Result.failure('실패') - end - else - return Result.new(nil) - end + def initialize(command) + super(command) + @locale = :ko_kr end end end From 3af5cde2200d8d96a5e1f85e8a34bb0a65ff3e20 Mon Sep 17 00:00:00 2001 From: "MYAK(kkuru)" <153376095+MY4k@users.noreply.github.com> Date: Thu, 26 Mar 2026 22:06:33 +0900 Subject: [PATCH 09/11] =?UTF-8?q?[MagicPunk]i18n=E5=8C=96=20(#846)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * MagicPunk:i18n化 * コメントを復元 * Fix RuboCop offenses * MagicPunkをアルファベット順の正しい位置に移動 --- i18n/MagicPunk/ja_jp.yml | 5 ++ i18n/MagicPunk/ko_kr.yml | 5 ++ lib/bcdice/game_system.rb | 4 +- lib/bcdice/game_system/MagicPunk.rb | 13 ++--- lib/bcdice/game_system/MagicPunk_Korean.rb | 65 +++------------------- 5 files changed, 25 insertions(+), 67 deletions(-) create mode 100644 i18n/MagicPunk/ja_jp.yml create mode 100644 i18n/MagicPunk/ko_kr.yml diff --git a/i18n/MagicPunk/ja_jp.yml b/i18n/MagicPunk/ja_jp.yml new file mode 100644 index 000000000..648cf7a7e --- /dev/null +++ b/i18n/MagicPunk/ja_jp.yml @@ -0,0 +1,5 @@ +ja_jp: + MagicPunk: + bad_beat: "失敗(BB)" + jackpot: "成功(JP)" + success: "成功(%d)" \ No newline at end of file diff --git a/i18n/MagicPunk/ko_kr.yml b/i18n/MagicPunk/ko_kr.yml new file mode 100644 index 000000000..0e11ef802 --- /dev/null +++ b/i18n/MagicPunk/ko_kr.yml @@ -0,0 +1,5 @@ +ko_kr: + MagicPunk: + bad_beat: "실패(BB)" + jackpot: "성공(JP)" + success: "성공(%d)" \ No newline at end of file diff --git a/lib/bcdice/game_system.rb b/lib/bcdice/game_system.rb index facf4fab8..0687e651f 100644 --- a/lib/bcdice/game_system.rb +++ b/lib/bcdice/game_system.rb @@ -168,6 +168,8 @@ require "bcdice/game_system/MagicaLogia" require "bcdice/game_system/MagicaLogia_Korean" require "bcdice/game_system/MagicaLogia_SimplifiedChinese" +require "bcdice/game_system/MagicPunk" +require "bcdice/game_system/MagicPunk_Korean" require "bcdice/game_system/Magius" require "bcdice/game_system/Magius_3rdNewTokyoCity" require "bcdice/game_system/MamonoScramble" @@ -315,5 +317,3 @@ require "bcdice/game_system/FinalFantasyXIV_English" require "bcdice/game_system/Garactier" require "bcdice/game_system/WoW" -require "bcdice/game_system/MagicPunk" -require "bcdice/game_system/MagicPunk_Korean" diff --git a/lib/bcdice/game_system/MagicPunk.rb b/lib/bcdice/game_system/MagicPunk.rb index c8050a177..e9b9d294c 100644 --- a/lib/bcdice/game_system/MagicPunk.rb +++ b/lib/bcdice/game_system/MagicPunk.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "bcdice/base" + module BCDice module GameSystem class MagicPunk < Base @@ -41,15 +43,12 @@ def roll_mp(command) spec = m[2].to_i opt1 = m[3] arg1 = m[4].to_i - # ダイス数0モードフラグ is_zero = dices == 0 # チャレンジ値 challenge = opt1 == "C" ? arg1 : 0 - # ダイスロール dice_list = @randomizer.roll_barabara(is_zero ? 2 : dices, 20) - # 通常は1つ成功なら成功、0ダイス時はすべて成功したとき成功 check_method = is_zero ? :all? : :any? # 通常はすべて失敗なら失敗、0ダイス時は1つ失敗したら失敗 @@ -62,16 +61,16 @@ def roll_mp(command) result = if is_bb # 自動失敗優先 is_jp = false check = false - "失敗(BB)" + translate("MagicPunk.bad_beat") elsif is_jp check = true - "成功(JP)" + translate("MagicPunk.jackpot") elsif check value_method = is_zero ? :min : :max value = dice_list.select { |d| d <= spec }.public_send(value_method) - "成功(#{value})" + translate("MagicPunk.success", value: value) else - "失敗" + translate("failure") end return Result.new.tap do |r| diff --git a/lib/bcdice/game_system/MagicPunk_Korean.rb b/lib/bcdice/game_system/MagicPunk_Korean.rb index bcd3ceb10..cc10286f5 100644 --- a/lib/bcdice/game_system/MagicPunk_Korean.rb +++ b/lib/bcdice/game_system/MagicPunk_Korean.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'bcdice/game_system/MagicPunk' +require "bcdice/game_system/MagicPunk" module BCDice module GameSystem @@ -23,67 +23,16 @@ class MagicPunk_Korean < MagicPunk ■ 챌린지 판정 (nMPmCx) 통상 판정에 더해, 챌린지 값 x 이상의 눈이 필요. - ■ 다이스 수 0개 (0MPmCx) - 수정치 등으로 다이스 수가 0개가 된 경우 2d20을 굴림. + ■ 주사위 수 0개 (0MPmCx) + 수정치 등으로 주사위 수가 0개가 된 경우 2d20을 굴림. 두 개의 눈 중 더 나쁜 쪽의 결과를 적용. TEXT - register_prefix('^\d*MP\d+') + register_prefix_from_super_class() - def eval_game_system_specific_command(command) - return roll_mp(command) - end - - private - - def roll_mp(command) - m = /^(\d*)MP(\d+)(C?)(\d*)$/.match(command) - return nil unless m - - # 構文解析 - dices = m[1].empty? ? 1 : m[1].to_i - spec = m[2].to_i - opt1 = m[3] - arg1 = m[4].to_i - - # ダイス数0モードフラグ - is_zero = dices == 0 - # チャレンジ値 - challenge = opt1 == "C" ? arg1 : 0 - - # ダイスロール - dice_list = @randomizer.roll_barabara(is_zero ? 2 : dices, 20) - - # 通常は1つ成功なら成功、0ダイス時はすべて成功したとき成功 - check_method = is_zero ? :all? : :any? - # 通常はすべて失敗なら失敗、0ダイス時は1つ失敗したら失敗 - fail_method = is_zero ? :any? : :all? - - check = dice_list.public_send(check_method) { |d| d <= spec && challenge <= d } # 通常判定 - is_jp = dice_list.public_send(check_method) { |d| d == spec } # ジャックポット判定 - is_bb = dice_list.public_send(fail_method) { |d| d == 1 } # バッドビート判定 - - result = if is_bb # 自動失敗優先 - is_jp = false - check = false - "실패(BB)" - elsif is_jp - check = true - "성공(JP)" - elsif check - value_method = is_zero ? :min : :max - value = dice_list.select { |d| d <= spec }.public_send(value_method) - "성공(#{value})" - else - "실패" - end - - return Result.new.tap do |r| - r.fumble = is_bb - r.critical = is_jp - r.condition = check - r.text = "(#{dices}MP#{spec}C#{challenge}) > [#{dice_list.join(',')}] > #{result}" - end + def initialize(command) + super(command) + @locale = :ko_kr end end end From e78612fe9ceaa984b8fd84ccb3e19a31eba635f1 Mon Sep 17 00:00:00 2001 From: MY4k Date: Sat, 28 Feb 2026 01:23:24 +0900 Subject: [PATCH 10/11] =?UTF-8?q?Ryutama:=E3=83=AA=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .rubocop_todo.yml | 2 - lib/bcdice/game_system/Ryutama.rb | 92 +++++++++++++++---------------- 2 files changed, 46 insertions(+), 48 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index b30ad5c51..da6bc2bb4 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -139,7 +139,6 @@ Naming/MethodName: - 'lib/bcdice/game_system/Postman.rb' - 'lib/bcdice/game_system/Raisondetre.rb' - 'lib/bcdice/game_system/RecordOfSteam.rb' - - 'lib/bcdice/game_system/Ryutama.rb' - 'lib/bcdice/game_system/Satasupe.rb' - 'lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb' - 'lib/bcdice/game_system/ShinkuuGakuen.rb' @@ -258,7 +257,6 @@ Naming/VariableName: - 'lib/bcdice/game_system/Raisondetre.rb' - 'lib/bcdice/game_system/RecordOfSteam.rb' - 'lib/bcdice/game_system/RokumonSekai2.rb' - - 'lib/bcdice/game_system/Ryutama.rb' - 'lib/bcdice/game_system/Satasupe.rb' - 'lib/bcdice/game_system/ShadowRun4.rb' - 'lib/bcdice/game_system/ShadowRun5.rb' diff --git a/lib/bcdice/game_system/Ryutama.rb b/lib/bcdice/game_system/Ryutama.rb index f31ce4a67..358613803 100644 --- a/lib/bcdice/game_system/Ryutama.rb +++ b/lib/bcdice/game_system/Ryutama.rb @@ -25,7 +25,7 @@ class Ryutama < Base def initialize(command) super(command) - @validDiceTypes = [20, 12, 10, 8, 6, 4, 2] + @valid_dice_types = [20, 12, 10, 8, 6, 4, 2] end def eval_game_system_specific_command(command) @@ -39,84 +39,84 @@ def eval_game_system_specific_command(command) dice1 = Regexp.last_match(1).to_i dice2 = Regexp.last_match(3).to_i - modifyString = Regexp.last_match(4) + modify_string = Regexp.last_match(4) difficulty = Regexp.last_match(6) - dice1, dice2 = getDiceType(dice1, dice2) + dice1, dice2 = get_dice_type(dice1, dice2) if dice1 == 0 return '' end - modifyString ||= '' - modify = ArithmeticEvaluator.eval(modifyString) - difficulty = getDiffculty(difficulty) + modify_string ||= '' + modify = ArithmeticEvaluator.eval(modify_string) + difficulty = get_difficulty(difficulty) - value1 = getRollValue(dice1) - value2 = getRollValue(dice2) + value1 = get_roll_value(dice1) + value2 = get_roll_value(dice2) total = value1 + value2 + modify - result = getResultText(value1, value2, dice1, dice2, difficulty, total) + result = get_result_text(value1, value2, dice1, dice2, difficulty, total) unless result.empty? result = " > #{result}" end - value1Text = "#{value1}(#{dice1})" - value2Text = (value2 == 0 ? "" : "+#{value2}(#{dice2})") - modifyText = getModifyString(modify) + value1_text = "#{value1}(#{dice1})" + value2_text = (value2 == 0 ? "" : "+#{value2}(#{dice2})") + modify_text = get_modify_string(modify) - baseText = getBaseText(dice1, dice2, modify, difficulty) - output = "(#{baseText}) > #{value1Text}#{value2Text}#{modifyText} > #{total}#{result}" + base_text = get_base_text(dice1, dice2, modify, difficulty) + output = "(#{base_text}) > #{value1_text}#{value2_text}#{modify_text} > #{total}#{result}" return output end - def getDiceType(dice1, dice2) - debug('getDiceType begin') + def get_dice_type(dice1, dice2) + debug('get_dice_type begin') if dice2 != 0 - if isValidDiceOne(dice1) + if valid_dice_one?(dice1) return dice1, dice2 else return 0, 0 end end - if isValidDice(dice1, dice2) + if valid_dice?(dice1, dice2) return dice1, dice2 end - diceBase = dice1 + dice_base = dice1 - dice1 = diceBase / 10 - dice2 = diceBase % 10 + dice1 = dice_base / 10 + dice2 = dice_base % 10 - if isValidDice(dice1, dice2) + if valid_dice?(dice1, dice2) return dice1, dice2 end - dice1 = diceBase / 100 - dice2 = diceBase % 100 + dice1 = dice_base / 100 + dice2 = dice_base % 100 - if isValidDice(dice1, dice2) + if valid_dice?(dice1, dice2) return dice1, dice2 end - if isValidDiceOne(diceBase) - return diceBase, 0 + if valid_dice_one?(dice_base) + return dice_base, 0 end return 0, 0 end - def isValidDice(dice1, dice2) - return isValidDiceOne(dice1) && - isValidDiceOne(dice2) + def valid_dice?(dice1, dice2) + return valid_dice_one?(dice1) && + valid_dice_one?(dice2) end - def isValidDiceOne(dice) - @validDiceTypes.include?(dice) + def valid_dice_one?(dice) + @valid_dice_types.include?(dice) end - def getDiffculty(difficulty) + def get_difficulty(difficulty) unless difficulty.nil? difficulty = difficulty.to_i end @@ -124,19 +124,19 @@ def getDiffculty(difficulty) return difficulty end - def getRollValue(dice) + def get_roll_value(dice) return 0 if dice == 0 value = @randomizer.roll_once(dice) return value end - def getResultText(value1, value2, dice1, dice2, difficulty, total) - if isFamble(value1, value2) + def get_result_text(value1, value2, dice1, dice2, difficulty, total) + if famble?(value1, value2) return "1ゾロ【1ゾロポイント+1】" end - if isCritical(value1, value2, dice1, dice2) + if critical?(value1, value2, dice1, dice2) return "クリティカル成功" end @@ -151,11 +151,11 @@ def getResultText(value1, value2, dice1, dice2, difficulty, total) return "失敗" end - def isFamble(value1, value2) + def famble?(value1, value2) return (value1 == 1) && (value2 == 1) end - def isCritical(value1, value2, dice1, dice2) + def critical?(value1, value2, dice1, dice2) return false if value2 == 0 if (value1 == 6) && (value2 == 6) @@ -169,23 +169,23 @@ def isCritical(value1, value2, dice1, dice2) return false end - def getBaseText(dice1, dice2, modify, difficulty) - baseText = "R#{dice1}" + def get_base_text(dice1, dice2, modify, difficulty) + base_text = "R#{dice1}" if dice2 != 0 - baseText += ",#{dice2}" + base_text += ",#{dice2}" end - baseText += getModifyString(modify) + base_text += get_modify_string(modify) unless difficulty.nil? - baseText += ">=#{difficulty}" + base_text += ">=#{difficulty}" end - return baseText + return base_text end - def getModifyString(modify) + def get_modify_string(modify) if modify > 0 return "+" + modify.to_s elsif modify < 0 From ce7c422e039e90ecb9b90d4c49148320fd7750c9 Mon Sep 17 00:00:00 2001 From: MY4k Date: Mon, 2 Mar 2026 13:03:02 +0900 Subject: [PATCH 11/11] =?UTF-8?q?=E7=9E=B3=E9=80=B8=E3=82=89=E3=81=95?= =?UTF-8?q?=E3=81=AC=E3=82=A4=E3=83=AA=E3=82=B9=E3=83=99=E3=82=A4=E3=83=B3?= =?UTF-8?q?:=E9=9F=93=E5=9B=BD=E8=AA=9E=E5=AF=BE=E5=BF=9C=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20&=20i18n=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/Irisbane/ja_jp.yml | 24 ++ i18n/Irisbane/ko_kr.yml | 24 ++ lib/bcdice/game_system.rb | 1 + lib/bcdice/game_system/Irisbane.rb | 54 ++- lib/bcdice/game_system/Irisbane_Korean.rb | 52 +++ test/data/Irisbane_Korean.toml | 450 ++++++++++++++++++++++ 6 files changed, 575 insertions(+), 30 deletions(-) create mode 100644 i18n/Irisbane/ja_jp.yml create mode 100644 i18n/Irisbane/ko_kr.yml create mode 100644 lib/bcdice/game_system/Irisbane_Korean.rb create mode 100644 test/data/Irisbane_Korean.toml diff --git a/i18n/Irisbane/ja_jp.yml b/i18n/Irisbane/ja_jp.yml new file mode 100644 index 000000000..0a72f6c65 --- /dev/null +++ b/i18n/Irisbane/ja_jp.yml @@ -0,0 +1,24 @@ +ja_jp: + Irisbane: + zero_dice_count: "判定数が 0 です" + success_dice_count: "成功ダイス数 %{count}" + attack_power: "× 攻撃力 %{power}" + damage: "ダメージ %{damage}" + damage_with_mod: "ダメージ %{damage}%{operator}%{mod_value}" + + SceneSituation: + name: "シチュエーション" + "1_3": + - "【日常】何一つ変わることの無い日々の一幕。移ろい易い世界では、それはとても大切である。" + - "【準備】何かを為すための用意をする一幕。情報収集、買物遠征、やるべきことは一杯だ。" + - "【趣味】自分の時間を、有効活用している一幕。必要に追われていない分、心は軽く晴れやかだ。" + - "【喫茶】一息入れ、嗜好品を嗜む時の一幕。穏やかな空気は、だが、往々にして変わりやすい。" + - "【鍛錬】体を鍛え、心を養う修練の一幕。己さえ良ければ、その方法も何だって良い。" + - "【職務】役割の元、仕事に精を出す時の一幕。目的が何であれ、為すべきことに変わりはない。" + "4_6": + - "【移動】何処かから何処かへと向かう一幕。進んでいるなら、手段も目的地も関係あるまい。" + - "【墓前】故人が眠る場所へと赴く一幕。共に眠ることだけは無いように。" + - "【操作】何かを操り、望みを果たしている一幕。運転にせよ何にせよ、脇見には注意が必要だ。" + - "【食事】何かを糧とし、己の力を蓄える一幕。行動すれば消耗する。腹が減っては何とやらだ。" + - "【休息】日々の合間の、憩いの一幕。「何もしない」というのも、立派な行いである。" + - "【夢幻】現実に存在しない何かへと耽る一幕。時間帯に関わらず、何時かは必ず覚めるだろう。" \ No newline at end of file diff --git a/i18n/Irisbane/ko_kr.yml b/i18n/Irisbane/ko_kr.yml new file mode 100644 index 000000000..1898aec09 --- /dev/null +++ b/i18n/Irisbane/ko_kr.yml @@ -0,0 +1,24 @@ +ko_kr: + Irisbane: + zero_dice_count: "판정 수가 0입니다" + success_dice_count: "성공 주사위 수 %{count}" + attack_power: "× 공격력 %{power}" + damage: "대미지 %{damage}" + damage_with_mod: "대미지 %{damage}%{operator}%{mod_value}" + + SceneSituation: + name: "시추에이션" + "1_3": + - "【일상】아무것도 변하지 않는 일상의 한 장면. 변화하기 쉬운 세계에서는 그것이 매우 소중하다." + - "【준비】무언가를 하기 위한 채비를 하는 한 장면. 정보 수집, 쇼핑 원정, 해야 할 일은 가득하다." + - "【취미】자신의 시간을 유효하게 활용하는 한 장면. 쫓기지 않는 만큼 마음이 가볍고 상쾌하다." + - "【카페】한숨 돌리며 기호품을 즐기는 한 장면. 온화한 공기는 그러나 왕왕 변하기 쉽다." + - "【단련】몸을 단련하고 마음을 기르는 수련의 한 장면. 자신만 괜찮다면 그 방법도 무엇이든 좋다." + - "【직무】역할에 따라 일에 힘쓰는 한 장면. 목적이 무엇이든 해야 할 일에는 변함이 없다." + "4_6": + - "【이동】어딘가에서 어딘가로 향하는 한 장면. 나아가고 있다면 수단도 목적지도 상관없다." + - "【묘전】고인이 잠든 장소를 찾는 한 장면. 함께 잠드는 일만은 없도록." + - "【조작】무언가를 다루며 소원을 이루는 한 장면. 운전이든 무엇이든 딴 곳을 보는 것은 주의가 필요하다." + - "【식사】무언가를 양식으로 삼아 자신의 힘을 비축하는 한 장면. 행동하면 소모된다. 배고프면 아무것도 안 된다." + - "【휴식】나날의 틈새, 쉬어 가는 한 장면. '아무것도 하지 않는다'는 것도 훌륭한 행동이다." + - "【몽환】현실에 존재하지 않는 무언가에 빠지는 한 장면. 시간대에 상관없이 언젠가는 반드시 깨어날 것이다." \ No newline at end of file diff --git a/lib/bcdice/game_system.rb b/lib/bcdice/game_system.rb index a854d6138..eaf139086 100644 --- a/lib/bcdice/game_system.rb +++ b/lib/bcdice/game_system.rb @@ -138,6 +138,7 @@ require "bcdice/game_system/Insane_Korean" require "bcdice/game_system/InvisibleLiar" require "bcdice/game_system/Irisbane" +require "bcdice/game_system/Irisbane_Korean" require "bcdice/game_system/IthaWenUa" require "bcdice/game_system/JamesBond" require "bcdice/game_system/JekyllAndHyde" diff --git a/lib/bcdice/game_system/Irisbane.rb b/lib/bcdice/game_system/Irisbane.rb index 1d7baf134..25a940b2d 100644 --- a/lib/bcdice/game_system/Irisbane.rb +++ b/lib/bcdice/game_system/Irisbane.rb @@ -53,7 +53,7 @@ def eval_game_system_specific_command(command) if (m = ATTACK_ROLL_REG.match(command)) roll_attack(m[2], m[3], m[4], m[6], m[7]) else - roll_tables(command, TABLES) + roll_tables(command, self.class::TABLES) end end @@ -73,7 +73,7 @@ def roll_attack(power_expression, dice_count_expression, border_expression, modi command = make_command_text(power, dice_count, border, modification_operator, modification_value) if dice_count <= 0 - return "#{command} > 判定数が 0 です" + return "#{command} > #{translate('Irisbane.zero_dice_count')}" end dices = @randomizer.roll_barabara(dice_count, 6).sort @@ -84,17 +84,17 @@ def roll_attack(power_expression, dice_count_expression, border_expression, modi message_elements = [] message_elements << command message_elements << dices.join(',') - message_elements << "成功ダイス数 #{success_dice_count}" - message_elements << "× 攻撃力 #{power}" if success_dice_count > 0 + message_elements << translate('Irisbane.success_dice_count', count: success_dice_count) + message_elements << translate('Irisbane.attack_power', power: power) if success_dice_count > 0 if success_dice_count > 0 if modification_operator && modification_value - message_elements << "ダメージ #{damage}#{modification_operator}#{modification_value}" + message_elements << translate('Irisbane.damage_with_mod', damage: damage, operator: modification_operator, mod_value: modification_value) damage = parse_operator(modification_operator).call(damage, modification_value) damage = 0 if damage < 0 message_elements << damage.to_s else - message_elements << "ダメージ #{damage}" + message_elements << translate('Irisbane.damage', damage: damage) end end @@ -119,30 +119,24 @@ def parse_operator(operator) end end - TABLES = { - "SceneSituation" => DiceTable::D66LeftRangeTable.new( - "シチュエーション", - BCDice::D66SortType::NO_SORT, - [ - [1..3, [ - "【日常】何一つ変わることの無い日々の一幕。移ろい易い世界では、それはとても大切である。", - "【準備】何かを為すための用意をする一幕。情報収集、買物遠征、やるべきことは一杯だ。", - "【趣味】自分の時間を、有効活用している一幕。必要に追われていない分、心は軽く晴れやかだ。", - "【喫茶】一息入れ、嗜好品を嗜む時の一幕。穏やかな空気は、だが、往々にして変わりやすい。", - "【鍛錬】体を鍛え、心を養う修練の一幕。己さえ良ければ、その方法も何だって良い。", - "【職務】役割の元、仕事に精を出す時の一幕。目的が何であれ、為すべきことに変わりはない。", - ]], - [4..6, [ - "【移動】何処かから何処かへと向かう一幕。進んでいるなら、手段も目的地も関係あるまい。", - "【墓前】故人が眠る場所へと赴く一幕。共に眠ることだけは無いように。", - "【操作】何かを操り、望みを果たしている一幕。運転にせよ何にせよ、脇見には注意が必要だ。", - "【食事】何かを糧とし、己の力を蓄える一幕。行動すれば消耗する。腹が減っては何とやらだ。", - "【休息】日々の合間の、憩いの一幕。“何もしない”というのも、立派な行いである。", - "【夢幻】現実に存在しない何かへと耽る一幕。時間帯に関わらず、何時かは必ず覚めるだろう。", - ]], - ] - ), - }.transform_keys(&:upcase).freeze + class << self + private + + def translate_tables(locale) + { + "SCENESITUATION" => DiceTable::D66LeftRangeTable.new( + I18n.t('Irisbane.SceneSituation.name', locale: locale), + BCDice::D66SortType::NO_SORT, + [ + [1..3, I18n.t('Irisbane.SceneSituation.1_3', locale: locale)], + [4..6, I18n.t('Irisbane.SceneSituation.4_6', locale: locale)], + ] + ), + } + end + end + + TABLES = translate_tables(:ja_jp).freeze ALIAS = { "SSi" => "SceneSituation", diff --git a/lib/bcdice/game_system/Irisbane_Korean.rb b/lib/bcdice/game_system/Irisbane_Korean.rb new file mode 100644 index 000000000..60bdf1d7b --- /dev/null +++ b/lib/bcdice/game_system/Irisbane_Korean.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'bcdice/game_system/Irisbane' + +module BCDice + module GameSystem + class Irisbane_Korean < Irisbane + # ゲームシステムの識別子 + ID = 'Irisbane:Korean' + + # ゲームシステム名 + NAME = '눈 돌리지 않는 이리스베인' + + # ゲームシステム名の読みがな + SORT_KEY = '国際化:Korean:눈 돌리지 않는 이리스베인' + + # ダイスボットの使い方 + HELP_MESSAGE = <<~HELP + ■공격 판정( ATTACKx@y<=z ) + x: 공격력 + y: 판정 수 + z: 목표값 + (※ ATTACK 은 ATK 또는 AT 로 줄여 쓸 수 있습니다) + 예) ATTACK2@3<=5 + 예) ATK10@2<=4 + 예) AT8@3<=2 + + 위 x y z 에는 각각 사칙연산을 지정할 수 있습니다. + 예) ATTACK2+7@3*2<=5-1 + + □공격 판정의 데미지 증감( ATTACKx@y<=z[+a] ATTACKx@y<=z[-a]) + 말미에 [+a] 또는 [-a] 를 지정하면 최종 데미지를 증감할 수 있습니다. + a: 증감량 + 예) ATTACK2@3<=5[+10] + 예) ATK10@2<=4[-8] + 예) AT8@3<=2[-8+5] + + ■시추에이션(p115) + SceneSituation, SSi + HELP + + def initialize(command) + super(command) + @locale = :ko_kr + end + + TABLES = translate_tables(:ko_kr).freeze + + register_prefix_from_super_class() + end + end +end diff --git a/test/data/Irisbane_Korean.toml b/test/data/Irisbane_Korean.toml new file mode 100644 index 000000000..314dbbacb --- /dev/null +++ b/test/data/Irisbane_Korean.toml @@ -0,0 +1,450 @@ +[[ test ]] +game_system = "Irisbane:Korean" +input = "3b6" +output = "(3B6) > 3,5,6" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "C(5/2)" +output = "c(5/2) > 3" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=5" +output = "(ATTACK2@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 2 > 대미지 6" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATK10@2<=4" +output = "(ATTACK10@2<=4) > 3,4 > 성공 주사위 수 2 > × 공격력 10 > 대미지 20" +rands = [ + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT8@3<=2" +output = "(ATTACK8@3<=2) > 3,4,6 > 성공 주사위 수 0" +rands = [ + { sides = 6, value = 4 }, + { sides = 6, value = 3 }, + { sides = 6, value = 6 }, +] +failure = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK0@4<=5" +output = "(ATTACK0@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 0 > 대미지 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@0<=5" +output = "(ATTACK2@0<=5) > 판정 수가 0입니다" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=0" +output = "(ATTACK2@4<=1) > 1,3,4,6 > 성공 주사위 수 1 > × 공격력 2 > 대미지 2" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=7" +output = "(ATTACK2@4<=6) > 1,3,4,6 > 성공 주사위 수 4 > × 공격력 2 > 대미지 8" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2+7@4<=5" +output = "(ATTACK9@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2-1@4<=5" +output = "(ATTACK1@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 1 > 대미지 3" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2-2@4<=5" +output = "(ATTACK0@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 0 > 대미지 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2-3@4<=5" +output = "(ATTACK0@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 0 > 대미지 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT(2+3)*2@4<=5" +output = "(ATTACK10@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 10 > 대미지 30" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT(2+3/2@4<=5" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT(2+3)/2@4<=5" +output = "(ATTACK3@4<=5) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 3 > 대미지 9" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT(2+3/2@4<=5" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4-1<=5" +output = "(ATTACK2@3<=5) > 3,4,6 > 성공 주사위 수 2 > × 공격력 2 > 대미지 4" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT6@5/2<=5" +output = "(ATTACK6@3<=5) > 1,3,6 > 성공 주사위 수 2 > × 공격력 6 > 대미지 12" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4*2<=5" +output = "(ATTACK2@8<=5) > 1,1,2,3,4,5,5,6 > 성공 주사위 수 7 > × 공격력 2 > 대미지 14" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 5 }, + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@(2*3)+2<=5" +output = "(ATTACK2@8<=5) > 1,1,2,3,4,5,5,6 > 성공 주사위 수 7 > × 공격력 2 > 대미지 14" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, + { sides = 6, value = 5 }, + { sides = 6, value = 5 }, + { sides = 6, value = 1 }, + { sides = 6, value = 2 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@(2*3+2<=5" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4+1" +output = "(ATTACK2@4<=5) > 3,4,5,6 > 성공 주사위 수 3 > × 공격력 2 > 대미지 6" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4+3" +output = "(ATTACK2@4<=6) > 3,4,5,6 > 성공 주사위 수 4 > × 공격력 2 > 대미지 8" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4-1" +output = "(ATTACK2@4<=3) > 3,4,5,6 > 성공 주사위 수 1 > × 공격력 2 > 대미지 2" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4-2" +output = "(ATTACK2@4<=2) > 3,4,5,6 > 성공 주사위 수 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +failure = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4-5" +output = "(ATTACK2@4<=1) > 3,4,5,6 > 성공 주사위 수 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] +failure = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "AT2@4<=4-" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1" +output = "(ATTACK9@6<=4) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=5[+10]" +output = "(ATTACK2@4<=5[+10]) > 1,3,4,6 > 성공 주사위 수 3 > × 공격력 2 > 대미지 6+10 > 16" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 1 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=2[+10]" +output = "(ATTACK2@4<=2[+10]) > 3,4,5,6 > 성공 주사위 수 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] +failure = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2@4<=2[+10-]" +output = "" +rands = [] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[+5]" +output = "(ATTACK9@6<=4[+5]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27+5 > 32" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[+5+7*2-1]" +output = "(ATTACK9@6<=4[+18]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27+18 > 45" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[-8]" +output = "(ATTACK9@6<=4[-8]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27-8 > 19" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[-27]" +output = "(ATTACK9@6<=4[-27]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27-27 > 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "ATTACK2+7@3*2<=5-1[-28]" +output = "(ATTACK9@6<=4[-28]) > 1,3,4,5,5,6 > 성공 주사위 수 3 > × 공격력 9 > 대미지 27-28 > 0" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, +] +success = true + +[[ test ]] +game_system = "Irisbane:Korean" +input = "SceneSituation" +output = "시추에이션(11) > 【일상】아무것도 변하지 않는 일상의 한 장면. 변화하기 쉬운 세계에서는 그것이 매우 소중하다." +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 1 }, +] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "SCENESITUATION" +output = "시추에이션(14) > 【카페】한숨 돌리며 기호품을 즐기는 한 장면. 온화한 공기는 그러나 왕왕 변하기 쉽다." +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "SSi" +output = "시추에이션(32) > 【준비】무언가를 하기 위한 채비를 하는 한 장면. 정보 수집, 쇼핑 원정, 해야 할 일은 가득하다." +rands = [ + { sides = 6, value = 3 }, + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "Irisbane:Korean" +input = "SSI" +output = "시추에이션(54) > 【식사】무언가를 양식으로 삼아 자신의 힘을 비축하는 한 장면. 행동하면 소모된다. 배고프면 아무것도 안 된다." +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] \ No newline at end of file